from dedalus_mcp import MCPServer, tool
@tool(description="两数相加")
def add(a: int, b: int) -> int:
return a + b
server = MCPServer("calculator")
server.collect(add)
if __name__ == "__main__":
import asyncio
asyncio.run(server.serve())
类型注解会自动转换为 JSON Schema。使用 collect() 注册工具。相同的模式同样适用于资源和 prompt。
服务器名称必须与你的 slug 匹配。 MCPServer("my-server") 中的 name 必须与你的部署 slug 和 ctx.dispatch() 调用保持一致。这样才能确保 OAuth 回调和请求路由正常工作。
集成模型上下文协议 (MCP) 非常简单。直接将服务器传递给 mcp_servers:
from dedalus_labs import AsyncDedalus, DedalusRunner
client = AsyncDedalus()
runner = DedalusRunner(client)
# 托管的 MCP 服务器(marketplace slug)
response = await runner.run(
input="Search for authentication docs",
model="anthropic/claude-sonnet-4-20250514",
mcp_servers=["your-org/your-server"],
)
# Local MCP server URL
response = await runner.run(
input="Search for authentication docs",
model="anthropic/claude-sonnet-4-20250514",
mcp_servers=["http://localhost:8000/mcp"],
)
就是这样。软件开发工具包(SDK)会负责处理连接、tool 发现和执行。
MCP 服务器暴露三种类型的能力:
| Primitive | Control | Description |
|---|
| Tools | Model | LLM 在推理过程中调用的函数。 |
| Resources | Model/User | LLM 可以读取用于获取上下文的数据。 |
| Prompts | User | 由用户选择并渲染的消息模板。 |
Tools(工具)由模型控制:LLM 决定何时调用它们。Prompts(prompts)由用户控制:用户选择要运行的 prompt。Resources(资源)则既可以由模型控制,也可以由用户控制。
| 能力 | 使用方式 |
|---|
| 进度 | 用于长时间运行任务的 ctx.progress() |
| 日志 | ctx.info(), ctx.debug() 等 |
| 取消 | ctx.cancelled 标志位 |