dedalus-mcp-python
极简 MCP 框架,137KB 体积、环境注册模型、完整 DPoP 认证支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
极简 MCP 框架,137KB 体积、环境注册模型、完整 DPoP 认证支持
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下:你的 AI 助手正在帮你写代码,突然它需要查一个内部数据库。你有两种选择——要么把数据库连接信息硬编码塞给模型(危险),要么让它通过一个标准协议"召唤"一个工具来查询(安全且可控)。Model Context Protocol(MCP)正是为此而生:它是 AI 模型与外部工具之间的"USB-C 接口"——一个让任何 AI 模型能以标准方式调用任何工具的协议。
Dedalus MCP 是专门为 Python 开发者打造的 MCP 框架,由 Y Combinator S25 支持的 Dedalus Labs 开发。相比竞品 FastMCP 的 8.2 MB,它只有 137 KB,体积缩小 60 倍,专注于"把 MCP 协议做正确"而非"把功能做多"。
Dedalus Labs 成立于 2025 年,创始团队对 MCP 协议有极深的理解。他们观察到市面上的 MCP 框架存在两个极端:要么过于庞大(FastMCP 8MB+,捆绑了太多非核心功能),要么对协议本身缺乏足够的尊重(很多实现对协议变更的追踪是模糊的)。
Dedalus Labs 的核心观点是:MCP 不是普通的 HTTP 服务——它有精确的协议版本语义,每个字段的增加和删除都有明确的时间戳和行为含义。 Dedalus MCP 对每个协议特性都标注了对应的 MCP 规范条款,让开发者能追溯到"这条行为是由规范的哪个版本哪个条款规定的"。
MCP 的核心价值在于让 AI 模型能调用你定义的函数。Dedalus MCP 的 @tool 装饰器可以注册同步函数和异步函数:
from dedalus_mcp import MCPServer, tool
@tool(description="查询用户余额")
async def get_balance(user_id: str) -> dict:
return {"user_id": user_id, "balance": 1000.0}
server = MCPServer("payment-server")
server.collect(get_balance)
装饰器只附加元数据,注册动作由 server.collect() 完成,这意味着同一个函数可以注册到多个不同的 MCP Server 实例上,这在测试和微服务架构中极为有用。FastMCP 的 @mcp.tool 则在装饰时直接绑定到单一服务器实例,无法复用。
MCP 协议仍在活跃演进,不同版本之间存在实质性的行为差异。Dedalus MCP 实现了 Version Profile 模式:
ProtocolVersion 对象精确表示版本(如 2025-03-26)current_profile() 告诉你客户端实际协商到了哪个版本这意味着当 MCP 发布破坏性变更时,Dedalus MCP 的测试能精确捕获结构漂移。FastMCP 则完全隐藏了版本信息——你无法知道自己的 handler 实际服务的是哪个协议版本。
在生产环境中,你不会让任何 AI 模型随意调用你的工具。Dedalus MCP 支持 DPoP(RFC 9449) 认证机制:
from cryptography.hazmat.primitives.asymmetric import ec
from dedalus_mcp.client import MCPClient, DPoPAuth
dpop_key = ec.generate_private_key(ec.SECP256R1())
auth = DPoPAuth(access_token="eyJ...", dpop_key=dpop_key)
client = await MCPClient.connect("https://mcp.example.com/mcp", auth=auth)
DPoT 令牌将认证绑定到特定的公钥,防止令牌被盗用后被其他方使用。
MCP 不仅能调用工具,还能暴露数据资源和可复用的提示词模板:
from dedalus_mcp import resource, resource_template
@resource("config://app/settings", mime_type="application/json")
def settings() -> dict:
return {"theme": "dark"}
@resource_template("file://logs/{date}/{level}")
def logs(date: str, level: str) -> str:
return f"Logs for {date} at {level}"
from dedalus_mcp import get_context
@tool(description="批量处理数据")
async def process_batch(items: list[str]) -> dict:
ctx = get_context()
async with ctx.progress(total=len(items)) as tracker:
for item in items:
await work(item)
await tracker.advance(1, message=f"Processed {item}")
return {"count": len(items)}
src/dedalus_mcp/
├── server/ # 服务端核心
│ ├── core.py # MCPServer 主类
│ ├── transports/ # 传输层(ASGI、Streamable HTTP)
│ ├── auth/ # 授权配置
│ └── authorization.py
├── client/ # 客户端实现
│ ├── core.py # MCPClient 主类
│ ├── transports.py
│ └── auth/ # DPoPAuth、BearerAuth
├── auth/ # 共享认证原语
├── tool.py # @tool 装饰器 + schema 推断
├── versioning.py # 协议版本管理
├── progress.py # 进度追踪上下文
└── context.py # 异步上下文辅助工具
依赖分析:
pydantic>=2.12.0:JSON Schema 生成与验证mcp>=1.25.0:MCP 官方 SDK 的底层协议实现pyjwt[crypto]>=2.10.1:DPoP 令牌签名typing_extensions>=4.0.0:类型系统扩展uvloop:Unix 平台下事件循环 2-4x 加速传输协议: Streamable HTTP(MCPServer 默认监听 :8000)+ ASGI 支持
适合你吗?
| 维度 | Dedalus MCP | FastMCP |
|---|---|---|
| 体积 | 137 KB | 8.2 MB |
| 协议版本透明度 | ✅ 每个字段可追溯 | ❌ 隐藏 |
| 同一函数多服务器注册 | ✅ | ❌ |
| DPoP 认证 | ✅ | ❌ |
| 捆绑 CLI 工具 | ❌ | ✅ |
| OpenAPI 集成 | ❌ | ✅ |
推荐使用 Dedalus MCP 的场景:
不适合的场景:
MCP 协议正快速成为 AI Agent 工具调用的事实标准。Anthropic 的 Claude Desktop、OpenAI 的 ChatGPT 等主流 AI 产品都在积极采用 MCP。Dedalus MCP 的出现填补了一个关键空白:在"简单但协议处理不严谨"(FastMCP)和"企业级但复杂"之间,提供了一个轻量、正确、开发者友好的选择。
随着 MCP 协议版本的快速迭代(目前已有多个版本存在行为差异),协议版本管理能力将成为 MCP 框架的核心竞争力。在这一点上,Dedalus MCP 的设计理念领先于竞品。
总结:如果你在构建 AI Agent 工具生态,需要一个体积小、协议正确、版本可控的 MCP 框架,Dedalus MCP 是目前最值得关注的选项。