原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

FastMCP - FastAPI MCP Framework & Runner

作者:Manas-maker版本 0.1.0i★ –i在你的电脑上运行
注册名称io.github.Manas-maker/fast-mcp

安装

概览

作者提供的说明(英文原文)

FastAPI-native Model Context Protocol framework and stdio runner.

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 其他

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

你需要

  • PyPI已安装 Python 的 uv(用于 uvx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 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 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "fast": {
      "command": "uvx",
      "args": [
        "mcp-fastapi"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "fast": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mcp-fastapi"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • FASTMCP_LOG_LEVEL env
    Log verbosity level (DEBUG, INFO, WARNING, ERROR)

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 Manas-maker 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“其他”中的其他服务器比较i

  • 星标数多于此分类中其他 32599 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 32599 个服务器的 55% 更新
  • 基础检查结果等于或优于此分类中其他 32599 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

FastMCP - FastAPI MCP Framework & Runner 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(0.1.0)于34天前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。

有什么可以替代它?

同一分类中有:Spec Driven Development, Remote Desktop Commander, Zendesk

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Spec Driven Development

作者:formulahendry

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

在你的电脑上运行★ 440MIT14个月前更新
安装

Remote Desktop Commander

作者:desktop-commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

在云端运行★ 211前天更新
安装

Zendesk

作者:pipeworx-io

Zendesk MCP Pack — tickets, users, organizations via OAuth.

电脑或云端今天更新
安装

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

fast-mcp

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).


Highlights

  • ⚡ Hybrid Dual-Citizen ASGI Mount: Mounts directly onto any existing FastAPI instance in-process over standard ASGI—zero external proxying, zero hanging subprocesses.
  • 🔌 Local stdio CLI Runner & Desktop AI Bridge: Run 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.
  • 🔍 Route Reflection: Opt-in tags (tags=["mcp"]) automatically convert FastAPI endpoints, Pydantic models, docstrings, path/query/body parameters into MCP tools.
  • 🛠️ Custom AI Tools (`@mcp.tool`): Define AI-tailored composite tools alongside reflected routes with automatic schema and docstring extraction.
  • 🔐 ASGI Scope Bridging: Client authorization headers (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 Progressive Tool Discovery: Protect agent context windows via progressive discovery (dynamic_discovery=True), the search_tools(query: str) meta-tool, and zero-dependency KeywordTagRouter.
  • 🛡️ Resilient Error Recovery & Minified JSON: Traps route 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.
  • 🖥️ Dual UI & In-Chat MCP Apps (SEP-1865): Embedded browser inspector at /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.

Installation

pip install mcp-fastapi

Or using uv:

uv add mcp-fastapi

Quickstart

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")

1. Existing FastAPI route reflected automatically via tags=["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)

2. Custom AI tool with native dependency injection

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"}

3. Mount MCP endpoints (/mcp/sse, /mcp/messages, /mcp/docs)

mcp.mount()

Run with standard ASGI servers:

uvicorn main:app --reload

Core Capabilities

1. Route Reflection

Routes tagged with tags=["mcp"] (configurable via route_tag) are automatically inspected upon mcp.mount():

  • Endpoint docstrings (Google, Sphinx, NumPy format) become tool descriptions and parameter docs.
  • Pydantic request models, query parameters, and path variables become MCP input schemas.
  • Untagged endpoints remain standard HTTP routes and are never leaked to LLMs.
@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

2. Custom AI Tools (@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)

Parameterized decorator

@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}

3. ASGI Scope Bridging & Native Auth

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.

4. Dynamic Progressive Tool Discovery

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", )

  • When active, tools/list exposes only baseline tools plus the search_tools(query: str) meta-tool.
  • Calling 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.
5. Resilient Error Interception & Custom Serializers
  • Exception Traps: HTTPException (400, 404, 422) and Pydantic validation errors return clean, concise messages with isError=True.
  • Minified Output: Responses serialize to compact minified JSON ({"id":1,"name":"widget"}) saving prompt tokens.
  • Custom Serializers: Format return types into tailored markdown or summaries:
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

6. Dual UI: Browser Inspector & In-Chat MCP Apps (SEP-1865)
Embedded Browser Inspector

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)).

In-Chat MCP Apps (SEP-1865)

Render rich interactive HTML/JS widgets directly in modern desktop AI clients (Claude Desktop, Cursor, VS Code):

# Built-in server inspector tool

Agent calling inspect() receives an interactive iframe pointed to ui://fast-mcp/inspector

Authoring custom in-chat widgets:

@mcp.app( name="dashboard", resource_uri="ui://store/dashboard", html="""

Store Live Metrics Active Users: 1,420

""" ) def live_dashboard() -> str: return ' '

7. Local stdio CLI Runner & Desktop AI Bridge

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.

Command-Line Usage
# Run stdio runner pointing to FastAPI app or FastMCP instance

fast-mcp stdio main:app

Or via Python module invocation

python -m fast_mcp stdio main:app

Target attribute defaults to 'app' or 'mcp' if omitted:

fast-mcp stdio main

The 'stdio' subcommand can also be omitted as default:

fast-mcp main:app

Claude Desktop Configuration (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"] } } }

Programmatic Stdio Runner

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))


Testing & Verification

fast-mcp exercises external behavior across the ASGI Protocol Seam using httpx.AsyncClient with ASGITransport:

# Run full test suite

pytest

Run tests with coverage

pytest --cov=fast_mcp --cov-report=term-missing


Specification & Architectural Documents


License

MIT

问 PopNx