跳转至

MCP

MCP 让 Agent 使用外部服务提供的工具。你不需要在应用里重写工具函数,只需连接服务并选择要开放的工具。

启动一个示例服务

为了直接体验,仓库提供一个本地课程查询服务。在第一个终端运行:

python examples/tools/mcp_server.py
from fastmcp import FastMCP

mcp = FastMCP("course-demo")


@mcp.tool()
def get_course_info(course: str) -> str:
    """查询课程的时间和地点。可查询的课程名:Python 入门。"""
    if course == "Python 入门":
        return "周一 10:00,教学楼 A101"
    return "没有找到这门课程"


if __name__ == "__main__":
    mcp.run(transport="http", host="127.0.0.1", port=8000)

服务监听 http://127.0.0.1:8000/mcp。保持这个终端运行,在第二个终端配置模型环境变量。

让 Agent 调用远端工具

python examples/runtime/mcp.py
import asyncio
import os

import bumblehive
from bumblehive.protocols import MCPServerConfig


async def main() -> None:
    config = bumblehive.RuntimeArguments(
        model=os.environ["BUMBLEHIVE_MODEL"],
        api_key=os.environ["BUMBLEHIVE_API_KEY"],
        base_url=os.environ["BUMBLEHIVE_BASE_URL"],
        skill_names=[],
        mcp_servers=(MCPServerConfig(
            name="courses",
            url="http://127.0.0.1:8000/mcp",
            enabled_tools=["get_course_info"],
        ),),
        tool_names=["mcp_courses_get_course_info"],
    )
    async with bumblehive.from_config(config) as runtime:
        result = await runtime.run("请查询课程“Python 入门”的上课时间和地点。")
        print(result.error.message if result.error else result.final_content)


if __name__ == "__main__":
    asyncio.run(main())

模型应通过 MCP 查到“周一 10:00,教学楼 A101”。这里有两个名称:

  • enabled_tools=["get_course_info"] 选择从服务注册的工具。
  • tool_names=["mcp_courses_get_course_info"] 选择交给 Agent 的工具。名称由 mcp_服务名_工具名 组成。

换成自己的服务

修改 url、name 和工具名称。需要 HTTP 鉴权时,在 MCPServerConfig 中添加:

headers={"Authorization": f"Bearer {os.environ['MCP_TOKEN']}"}

enabled_tools=["*"] 可以注册服务的全部工具。连接在进入 Runtime 时建立,退出时关闭。

tool_timeout 控制 MCP 调用超时,默认 30 秒;它不是后台工具的“超时后继续等待结果”。

MCP 配置参考