MCP 工具接入
适用版本:4.0.8.1+
Agently 支持把 MCP Server 暴露的工具批量接入 Agent,并由模型按需调用。
1. 版本要求
v4.0.8.1 起,MCP 依赖要求为:
fastmcp >= 3
若你本地使用旧版本 fastmcp,建议先升级。
2. 基础接入(HTTP MCP)
python
import asyncio
from agently import Agently
agent = Agently.create_agent()
async def main():
await agent.use_mcp("http://localhost:8080/mcp")
result = await agent.input("请用工具计算 333 + 546").async_start()
print(result)
asyncio.run(main())use_mcp(...) 会完成:
- 拉取 MCP 工具列表
- 转换为 Agently 工具 schema
- 注册到当前 Agent 的工具集合
3. 本地脚本方式(stdio)
python
import asyncio
from pathlib import Path
from agently import Agently
agent = Agently.create_agent()
async def main():
mcp_script = Path("./cal_mcp_server.py").resolve()
await agent.use_mcp(str(mcp_script))
result = await agent.input("请用工具计算 21 * 34").async_start()
print(result)
asyncio.run(main())4. 与工具体系的关系
MCP 工具接入后,本质上与 register_tool 注册出的工具一致:
- 会参与
use_tools自动工具判断 - 调用日志会写入
extra.tool_logs - 可配合
runtime.show_tool_logs做观测
5. 常见问题
5.1 报错:无法导入 fastmcp
- 检查 Python 环境是否安装
fastmcp>=3 - 确认运行时与安装环境一致(venv/poetry)
5.2 MCP 工具已接入但模型不调用
建议:
- 优化工具描述与参数说明(让模型更容易判断)
- 提示词里显式要求“必要时调用工具”
- 先用简单问题验证链路,再逐步复杂化
5.3 工具调用失败但主流程继续
MCP 调用失败时,工具返回可能包含错误结构(例如 {"error": ...})。 建议在最终输出阶段做异常分支处理,避免把失败结果当成功数据使用。