Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者による説明(英語の原文)
FastAPI-native Model Context Protocol framework and stdio runner.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
FASTMCP_LOG_LEVEL必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"fast": {
"command": "uvx",
"args": [
"mcp-fastapi"
],
"env": {
"FASTMCP_LOG_LEVEL": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add fast --env FASTMCP_LOG_LEVEL=your-value -- uvx mcp-fastapi動かす前に、空欄の値を入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"fast": {
"command": "uvx",
"args": [
"mcp-fastapi"
],
"env": {
"FASTMCP_LOG_LEVEL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"fast": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-fastapi"
],
"env": {
"FASTMCP_LOG_LEVEL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
FASTMCP_LOG_LEVEL envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月7日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント Manas-maker で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
レジストリには必須のキーは載っていません。ただし、最初に使うときにサインインを求めるサーバーもあります。
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.1.0)がレジストリに届いたのは34 日前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにPython (uv)も必要です。
同じカテゴリには:Spec Driven Development, Remote Desktop Commander, Tools MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Web production tools for AI agents: contrast, JP text, WebP, JSON-LD, slugs, dates and 40+ more
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
FastAPI-native Model Context Protocol (MCP) framework with automatic route reflection, ASGI scope bridging, dynamic progressive tool discovery, resilient error recovery, and interactive in-chat MCP Apps (SEP-1865).
FastAPI instance in-process over standard ASGI—zero external proxying, zero hanging subprocesses.fast-mcp stdio main:app or python -m fast_mcp stdio main:app to connect desktop AI clients (Claude Desktop, Cursor) over standard I/O pipes with zero network setup.tags=["mcp"]) automatically convert FastAPI endpoints, Pydantic models, docstrings, path/query/body parameters into MCP tools.Authorization: Bearer , cookies, API keys) captured during the MCP handshake are bridged into an in-memory ASGI Request, natively resolving FastAPI's Depends() and Security() providers without code changes.dynamic_discovery=True), the search_tools(query: str) meta-tool, and zero-dependency KeywordTagRouter.HTTPException and Pydantic validation errors into informative CallToolResult(isError=True) responses so LLMs can self-correct without protocol failures. Output defaults to compact, token-conscious minified JSON with custom @mcp.serializer formatting hooks./mcp/docs plus native support for in-chat interactive iframes in desktop AI clients (Claude Desktop, Cursor, VS Code) via _meta.ui.resourceUri, the built-in inspect() tool, and the @mcp.app() decorator.pip install mcp-fastapi
Or using uv:
uv add mcp-fastapi
from fastapi import FastAPI, Depends, Header, HTTPException
from pydantic import BaseModel, Field from fast_mcp import FastMCP
app = FastAPI(title="Store API") mcp = FastMCP(app=app, name="store-mcp")
class Product(BaseModel): id: int name: str price: float
@app.get("/products/{product_id}", tags=["mcp"]) async def get_product(product_id: int) -> Product: """Fetch product details by ID.""" if product_id == 404: raise HTTPException(status_code=404, detail="Product not found") return Product(id=product_id, name="Smart Widget", price=29.99)
def verify_token(authorization: str = Header(...)) -> str: if not authorization.startswith("Bearer "): raise HTTPException(status_code=401, detail="Invalid token") return authorization.split(" ")[1]
@mcp.tool(name="order_status", description="Check customer order status") def check_order(order_id: str, user: str = Depends(verify_token)) -> dict: return {"order_id": order_id, "customer": user, "status": "Shipped"}
mcp.mount()
Run with standard ASGI servers:
uvicorn main:app --reload
Routes tagged with tags=["mcp"] (configurable via route_tag) are automatically inspected upon mcp.mount():
@app.post("/items/create", tags=["mcp"])
async def create_item(item: ItemModel) -> ItemModel: """Create a new catalog item.
Args: item: The catalog item specification. """ return item
@mcp.tool)Register AI-specialized tools that don't need dedicated REST endpoints:
# Bare decorator
@mcp.tool def calculate_quote(quantity: int, discount: float = 0.0) -> float: return quantity * 100.0 * (1.0 - discount)
@mcp.tool(name="inventory_lookup", description="Lookup stock levels", tags=["inventory"]) async def check_inventory(sku: str) -> dict: return {"sku": sku, "in_stock": True, "count": 42}
Incoming headers (Authorization: Bearer ..., cookies, API keys) from the MCP client's SSE handshake or message posts are captured into an active request context:
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
security = HTTPBearer()
@mcp.tool async def user_profile(creds: HTTPAuthorizationCredentials = Depends(security)) -> dict: token = creds.credentials return {"user": "alice", "token_verified": True}
If authorization fails or headers are omitted, fast-mcp unwraps the resulting HTTPException(401) into CallToolResult(is_error=True) so the agent receives an actionable authentication error rather than crashing the transport.
Prevent LLM context window bloat on large FastAPI applications with hundreds of endpoints:
mcp = FastMCP(
app=app, dynamic_discovery=True, # Or set dynamic_discovery_threshold=20 baseline_tools=["search_tools", "get_system_status"], baseline_tag="baseline", )
tools/list exposes only baseline tools plus the search_tools(query: str) meta-tool.search_tools(query="invoice") executes the pluggable ToolRouter (defaults to zero-dependency KeywordTagRouter with tokenized name/tag/description ranking) and returns matching tool definitions with full JSON schemas.HTTPException (400, 404, 422) and Pydantic validation errors return clean, concise messages with isError=True.{"id":1,"name":"widget"}) saving prompt tokens.class Report(BaseModel):
title: str metrics: dict[str, int]
@mcp.serializer(Report) def format_report(report: Report) -> str: md = f"### {report.title}\n" for k, v in report.metrics.items(): md += f"- {k}: {v}\n" return md
Open http://localhost:8000/mcp/docs in any browser to inspect registered tools, view schemas, and execute test invocations interactively without external Node.js CLIs. (Disable with FastMCP(app, enable_ui=False)).
Render rich interactive HTML/JS widgets directly in modern desktop AI clients (Claude Desktop, Cursor, VS Code):
# Built-in server inspector tool
inspect() receives an interactive iframe pointed to ui://fast-mcp/inspector@mcp.app( name="dashboard", resource_uri="ui://store/dashboard", html="""
Store Live Metrics Active Users: 1,420
""" ) def live_dashboard() -> str: return ' '
Connect desktop AI clients (Claude Desktop, Cursor) directly to your FastAPI backend or FastMCP instance over standard input/output (stdio) pipes with zero network setup, port conflicts, or external proxying.
# Run stdio runner pointing to FastAPI app or FastMCP instance
fast-mcp stdio main:app
python -m fast_mcp stdio main:app
fast-mcp stdio main
fast-mcp main:app
claude_desktop_config.json)Configure Claude Desktop to launch your FastMCP server directly:
{
"mcpServers": { "my-fast-mcp-app": { "command": "fast-mcp", "args": ["stdio", "main:app"] } } }
Or using uv to manage the virtual environment automatically:
{
"mcpServers": { "my-fast-mcp-app": { "command": "uv", "args": ["run", "fast-mcp", "stdio", "main:app"] } } }
You can also run stdio mode programmatically from Python:
import asyncio
from fast_mcp import FastMCP, run_stdio
mcp = FastMCP(name="my-stdio-server")
@mcp.tool() def add(a: int, b: int) -> int: return a + b
if name == "main": asyncio.run(run_stdio(mcp))
fast-mcp exercises external behavior across the ASGI Protocol Seam using httpx.AsyncClient with ASGITransport:
# Run full test suite
pytest
pytest --cov=fast_mcp --cov-report=term-missing
MIT