
CAMEL Agent 接入 MCP 生态用 MCPToolkit 将多 MCP 服务器工具接入智能体实战指南【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel本篇技术指南围绕 CAMEL 多智能体框架中的MCPModel Context Protocol客户端能力展开讲解如何通过配置文件声明 MCP 服务器、使用MCPToolkit统一管理连接、再把服务器工具直接挂载到ChatAgent上使用。读完本文你将掌握本地 stdio 服务器、云端 sse / streamable-http 服务器的完整接入流程理解MCPToolkit、MCPClient、MCPAgent三层实现的协作原理并能借助 ACI.dev 注册、PulseMCP 搜索快速扩展自己的 MCP 工具库。什么是「CAMEL Agent 作为 MCP 客户端」MCPModel Context Protocol为 LLM 应用定义了统一的「工具服务器」接入协议。在 CAMEL 中智能体既可以作为 MCP服务器对外暴露工具见 camel_toolkits_as_an_mcp_server.md也可以作为 MCP客户端去消费外部服务器提供的工具。本文聚焦后者让 CAMEL Agent 连接一个或多个 MCP 服务器把 GitHub、Gmail、Notion、ArXiv、文件系统等外部能力直接变成智能体可以调用的函数工具。整个接入过程只有三个步骤创建配置文件告诉 CAMEL 要连接哪些 MCP 服务器本地或远程每种服务器带一种传输方式使用MCPToolkit连接加载配置文件建立与服务器的连接在 CAMEL Agent 中启用工具把服务器工具列表传给ChatAgent使用。对应的核心实现分布在三个文件中工具聚合层 camel/toolkits/mcp_toolkit.pyMCPToolkit、连接层 camel/utils/mcp_client.pyMCPClient以及开箱即用的智能体封装 camel/agents/mcp_agent.pyMCPAgent。第一步配置 MCP 服务器配置文件采用 MCP 社区标准的 JSON 格式顶层为mcpServers字典每个键是服务器名值是该服务器的启动参数。CAMEL 支持在同一份配置中混合定义本地与远程服务器。本地服务器stdio 传输本地服务器通过commandargs启动子进程使用标准输入输出与客户端通信适合本机测试{ mcpServers: { time_server: { command: python, args: [time_server.py], transport: stdio } } }仓库自带的 examples/agents/mcp_agent/mcp_servers_config.json 就是一个可直接运行的本地示例它通过python examples/agents/mcp_agent/calculator_server.py启动一个计算器 MCP 服务器对应的服务器实现可参考 examples/agents/mcp_agent/calculator_server.py。远程服务器streamable-http / sse远程服务器通过 URL 暴露服务。以下是典型的云端服务以 Composio 的 Notion 集成服务为例配置用npx启动连接器并指定传输方式为streamable-httpAPI Key 通过env字段注入{ mcpServers: { composio-notion: { command: npx, args: [composio-corerc, mcp, https://mcp.composio.dev/notion/your-server-id, --client, camel], env: { COMPOSIO_API_KEY: your-api-key-here }, transport: streamable-http } } }ACI.dev 服务器可配置传输方式ACI.dev 的服务同样通过uvx启动--apps参数可以声明需要启用的应用集合如 BRAVE_SEARCH、GITHUB、ARXIVtransport字段在sse与streamable-http之间按需选择{ mcpServers: { aci_apps: { command: uvx, args: [ aci-mcp, apps-server, --appsBRAVE_SEARCH,GITHUB,ARXIV, --linked-account-owner-id, your_linked_acc_owner_id ], env: { ACI_API_KEY: your_aci_api_key }, transport: sse } } }提示ACI.dev 同时支持sse与streamable-http选择哪种取决于你的 Agent/服务器支持情况。配置字段的完整取值从 camel/utils/mcp_client.py 中ServerConfig的定义可以梳理出每个字段的含义与默认值字段类型默认值说明commandstr无本地服务器的启动命令与url二选一同时提供会报错argslist[str]无传给command的参数envdict无注入子进程的环境变量务必用它存放 API Keycwdstr/Path无子进程工作目录urlstr无远程服务器地址http/https/ws/wssheadersdict无请求头可携带Authorization: Bearer ...等鉴权信息用于受保护端点timeoutfloat30.0连接/读写超时秒encodingstrutf-8stdio 子进程的编解码sse_read_timeoutfloat300.0SSE 读取超时5 分钟terminate_on_closeboolTrue关闭时是否终止底层连接transport/typestr自动检测显式指定传输方式stdio、sse、streamable_http、websocketprefer_sseboolFalse旧版参数已弃用URL 场景下优先 SSE配置解析由MCPToolkit._load_clients_from_config/_load_clients_from_dict完成读取 JSON 后遍历mcpServers为每个服务器生成一个MCPClient实例如果某个服务器配置非法会抛出带服务器名的ValueError帮助定位问题见 camel/toolkits/mcp_toolkit.py 第 696-759 行。第二步用 MCPToolkit 连接并构建 Agent配置文件就绪后用MCPToolkit建立连接再通过get_tools()取出所有服务器工具并传入ChatAgentimport asyncio from camel.agents import ChatAgent from camel.models import ModelFactory from camel.toolkits import MCPToolkit from camel.types import ModelPlatformType, ModelType model ModelFactory.create( model_platformModelPlatformType.OPENAI, model_typeModelType.GPT_4O, ) async def main(): async with MCPToolkit(config_pathconfig/time.json) as toolkit: agent ChatAgent(modelmodel, toolstoolkit.get_tools()) response await agent.astep(What time is it now?) print(response.msgs[0].content) asyncio.run(main())注意MCPToolkit需要作为异步上下文管理器使用async with这样在退出代码块时会自动断开所有服务器连接。连接生命周期的三种管理方式从 camel/toolkits/mcp_toolkit.py 的类文档可以看到除了推荐的async with写法外还有两种等价方式方式一异步上下文管理器推荐async with MCPToolkit(config_pathconfig.json) as toolkit: tools toolkit.get_tools() # 退出后自动 disconnect方式二工厂方法toolkit await MCPToolkit.create(config_pathconfig.json) tools toolkit.get_tools() await toolkit.disconnect() # 记得手动断开方式三显式 connect / disconnecttoolkit MCPToolkit(config_pathconfig.json) await toolkit.connect() tools toolkit.get_tools() await toolkit.disconnect()如果项目是同步代码也可以使用配套的同步入口MCPToolkit.create_sync()、connect_sync()、disconnect_sync()以及__enter__/__exit__with MCPToolkit(...) as toolkit:。MCPToolkit 核心参数MCPToolkit.__init__的完整参数含默认值如下参数默认值作用clientsNone直接传入MCPClient实例列表config_pathNone配置文件路径标准 MCP JSON 格式config_dictNone与配置文件等价的 Python 字典免去文件 IO适合程序化配置timeoutNone整体连接超时秒skip_failedTrue某个服务器连接失败时仅记录警告不拖垮整个 toolkitper_client_timeoutNone单个客户端独立超时默认取timeout否则 60.0max_retries2每个失败客户端的重试次数首次尝试之外的重试retry_delay3.0重试间隔秒三个配置来源clients、config_path、config_dict至少提供一个且可以叠加——同时提供时客户端会被合并。多个服务器采用并发连接并发度由环境变量MCP_CONNECT_CONCURRENCY控制默认 4避免大量 stdio 服务器首次启动时同时执行包构建而压垮系统。工具聚合与 Schema 严格化get_tools()会遍历所有已连接的客户端并聚合工具同时做两件事camel/toolkits/mcp_toolkit.py 第 910-978 行去重按函数名去重重复工具名会被跳过并记录警告Schema 严格化通过_ensure_strict_tool_schema将每个工具的 JSON Schema 转换为兼容 OpenAI strict mode 的格式——为 object 类型补充additionalProperties: false、将properties的所有键写入required、展开$ref、剔除default为None的字段等若 Schema 含 strict 模式不兼容特性如数组 items 中出现allOf、超大anyOf联合则自动降级为strict: false保证工具始终可用。此外还可以调用toolkit.call_tool(name, args)/call_tool_sync(name, args)直接在 toolkit 层按名字跨客户端查找并调用工具或用list_available_tools()查看每个客户端各提供了哪些工具。第三步添加更多工具与调试连接建立后可以按需扩展更多服务器本地验证阶段建议用简单的 stdio 服务器如仓库示例中的计算器服务器熟悉后再接入 ACI.dev、Composio 或npx生态的云端工具。三个实用建议传输方式选择本地测试用stdio云端工具用sse或streamable-httpAPI Key 安全密钥一律放在配置文件的env字段中绝不写进代码问题排查使用 MCP 官方调试工具 MCP Inspectornpx modelcontextprotocol/inspector单独验证服务器本身是否工作正常。尝试接入 GitHub、Notion、ArXiv 等服务器后可以直接看到 CAMEL Agent 使用新工具完成真实任务。传输方式深入自动检测与自动回退MCPClient支持四种传输协议stdio、sse、streamable_http、websocket。如果你不在配置中显式写transport/typeServerConfig.transport_type会自动推断提供了command→stdiourl以ws:///wss://开头 →websocketurl以http:///https://开头 → 默认streamable_http除非prefer_sseTrue。值得一提的容错设计camel/utils/mcp_client.py 第 302-359 行只有自动检测到 HTTP 的场景如果streamable_http连接失败或超时客户端会自动回退尝试sseMCP 2024 规范 / supergateway 兼容一旦你显式指定了type则严格按指定方式连接、不做回退保证行为可预期。连接期间的initialize()与list_tools()操作都施加了硬超时默认取配置timeout避免服务器挂起导致客户端无限阻塞。连接失败时错误信息也会被_simplify_connection_error翻译成可读性更强的提示例如命令启动失败 →Failed to start MCP server command .... The command may have exited unexpectedly.超时 →Connection timeout after Xs. The MCP server may be taking too long to respond.包不存在 →MCP server package not found. Check if ... is correct.MCPAgent注册中心与无函数调用模式如果不想手动组装MCPToolkitChatAgent可以直接使用MCPAgentcamel/agents/mcp_agent.py。它继承自ChatAgent自动完成「解析注册配置 → 构建 MCPToolkit → 连接 → 挂载工具」的全流程并支持async with agent:上下文管理。连接 ACI.dev 注册中心把 Agent 注册到 ACI.dev 等 MCP 注册中心后你的 Agent 可以被生态内其他客户端发现import os from camel.agents import MCPAgent from camel.models import ModelFactory from camel.types import ACIRegistryConfig, ModelPlatformType, ModelType aci_config ACIRegistryConfig( api_keyos.getenv(ACI_API_KEY), linked_account_owner_idos.getenv(ACI_LINKED_ACCOUNT_OWNER_ID), ) model ModelFactory.create( model_platformModelPlatformType.OPENAI, model_typeModelType.GPT_4O, ) agent MCPAgent( modelmodel, registry_configs[aci_config], )ACIRegistryConfig定义在 camel/types/mcp_registries.py 中其get_config()会生成uvx aci-mcp unified-server --linked-account-owner-id ...的启动配置API Key 优先取构造参数、缺省时回退读ACI_API_KEY环境变量Windows 平台会自动包装为cmd /c形式。同文件中还提供了SmitheryRegistryConfig基于npx smithery/clilatest run smithery/toolbox与通用的BaseMCPRegistryConfig三者都通过MCPRegistryType枚举区分。仓库示例 examples/agents/mcp_agent/mcp_agent_using_registry.py 展示了完整的调用方式。MCPAgent还支持local_config配置字典与local_config_path配置文件直接提供本地服务器配置以及add_registry()动态追加注册配置并自动重连。无函数调用function-calling的最小化模式如果你使用的模型不支持函数调用MCPAgent提供了function_calling_availableFalse的降级方案系统提示词引导模型输出固定格式的 JSON包含server_idx、tool_name、tool_args三个字段工具名和描述以纯文本拼进提示词astep()内部用 camel/parsers/mcp_tool_call_parser.py 的extract_tool_calls_from_text解析出工具调用、逐一执行再把结果回填给模型生成最终答复。完整的轻量示例见 examples/agents/mcp_agent/mcp_agent_without_function_calling.py适合不依赖高级工具调用的场景。用 PulseMCP 快速发现 MCP 服务器面对海量 MCP 服务器可以用PulseMCPSearchToolkitcamel/toolkits/pulse_mcp_search_toolkit.py在代码中直接搜索而不必手工猜测服务器清单from camel.toolkits import PulseMCPSearchToolkit search_toolkit PulseMCPSearchToolkit() results search_toolkit.search_mcp_servers(querySlack, top_k1) print(results)search_mcp_servers的核心参数query搜索词、top_k返回前 N 个默认 5、package_registry按包注册源过滤、count_per_page单页数量上限 5000、offset分页偏移。搜索结果按综合评分排序名称命中 5 分、描述命中 3 分、GitHub Star 数按千分之一加分无搜索词时则按 Star 数排序。搜索到的服务器信息可用于拼装MCPToolkit的配置实现「搜索 → 连接 → 使用」的闭环。常见问题与最佳实践从本地起步先用一个简单的 stdio 服务器如仓库的 calculator_server.py跑通全流程再切换到云端 sse / streamable-http 服务器排查问题最省力密钥安全API Key 只放配置文件的env字段永远不要硬编码在代码中调试工具服务器侧的问题优先用 MCP Inspectornpx modelcontextprotocol/inspector独立验证受保护端点远程服务器需要鉴权时在配置中通过headers字段携带Authorization等请求头失败容忍生产环境保持skip_failedTrue单个服务器异常不会让整个 Agent 不可用多个服务器并发连接可通过MCP_CONNECT_CONCURRENCY调节并发度。相关测试用例可参考 test/toolkits/test_mcp_toolkit.py 与 test/utils/test_mcp_client.py它们覆盖了配置解析、连接管理、工具聚合等核心行为也是理解各组件契约的补充材料。结语通过MCPToolkitChatAgent或开箱即用的MCPAgentCAMEL 智能体可以在数分钟内接入任意 MCP 生态工具本地 stdio 服务器适合快速验证sse/streamable-http打通云端服务ACI.dev 注册让 Agent 被生态发现PulseMCP 则解决了「工具从哪找」的问题。从配置文件声明、连接生命周期管理到工具 Schema 严格化这一整套实现都沉淀在 camel/toolkits/mcp_toolkit.py 与 camel/utils/mcp_client.py 中值得作为接入其他 MCP 客户端时的参考范式。【免费下载链接】camel CAMEL: The first and the best multi-agent framework. Finding the Scaling Law of Agents. https://www.camel-ai.org项目地址: https://gitcode.com/GitHub_Trending/ca/camel创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考