跳转到内容

接入 MCP 服务器

Model Context Protocol,即 MCP,是一种让 Agent 安全、标准化地调用本地或远程的外部工具与数据源的开放协议。

通过安装 bub-mcp 插件,你可以将整个 MCP 生态中的工具无缝接入 Bub 应用。

stdio (子进程)HTTP / SSE (远程)用户 / 客户端Bub Agent 运行时bub-mcp 插件本地 MCP Server(如: filesystem / time)远程 MCP Server(如: 企业 API / 数据库)

开始前,请确保已安装 Bub 应用,且系统中已安装 uvx(用于免安装启动示例工具)。

  1. 安装插件并验证环境

    bub install bub-mcp@main
    bub hooks

    bub install 会从 bub-contrib 解析安装 bub-mcp。执行 bub hooks 检查插件是否已正确挂载:

    load_state: builtin, mcp
    provide_channels: builtin, mcp
    register_cli_commands: builtin, mcp
  2. 配置 MCP 服务器

    bub-mcp 会默认读取 ~/.bub/mcp.json(若定义了 BUB_HOME,则读取 $BUB_HOME/mcp.json)。这里以官方时间工具 mcp-server-time 为例:

    mkdir -p ~/.bub
    cat > ~/.bub/mcp.json <<'EOF'
    {
      "mcpServers": {
        "time": {
          "command": "uvx",
          "args": ["mcp-server-time"]
        }
      }
    }
    EOF

    填写说明:

    • 对于本地命令行服务(stdio),只需填写 command 和可选的 args / env。
    • 带有 command 的配置会自动采用 stdio 传输,无需显式声明 transport。
  3. 测试连接与工具发现

    运行 bub mcp list 检查配置是否生效:

    bub mcp list

    正常情况下,输出将显示连接就绪并列出发现的工具:

    🔌 MCP Tools
    - time
      Status: Connected
      Tools: mcp.time_get_current_time, mcp.time_convert_time

    注意:

    • 每个 MCP 工具都会以 mcp.<server>_<tool> 命名并注入 Bub。
    • 为了节约提示词 token,Bub 默认采用延迟加载策略(模型在需要时通过 tool.describe 获取详细模式)。如果希望完整模式直接进入系统提示词,可设置环境变量 BUB_MCP_DEFERRED_TOOLS=false。
  4. 在会话中调用工具

    MCP 工具由后台生命周期渠道 mcp.lifecycle 维持长连接。因此,请使用长连接模式运行:

    bub chat

    在交互界面中直接提问:

    现在 UTC 时间是多少?

    模型会自动推断并触发 mcp.time_get_current_time 工具完成应答。

在 ~/.bub/mcp.json 的 mcpServers 字典中可以追加多个服务。

如果工具作为微服务运行在远程服务器或本地容器中,使用 url 和 transport 进行配置:

{
  "mcpServers": {
    "weather": {
      "url": "https://weather.example.com/mcp",
      "transport": "http"
    },
    "internal_crm": {
      "url": "https://crm.corp.internal/mcp",
      "transport": "sse",
      "headers": {
        "Authorization": "Bearer YOUR_SECRET_TOKEN"
      }
    }
  }
}

对于有权限限制的本地工具,可通过 args 限制其操作目录范围:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp/bub-sandbox"]
    }
  }
}

除了直接编辑 JSON 文件,也可以直接使用 bub mcp 命令行工具快速注册或删除:

# 注册 stdio 本地工具
bub mcp add --transport stdio time -- uvx mcp-server-time
bub mcp add --transport stdio --env API_KEY=secret custom -- node ./my-server.js

# 注册远程 HTTP 或 SSE 服务(带认证 Header)
bub mcp add --transport http weather https://weather.example.com/mcp
bub mcp add --transport sse --header "Authorization: Bearer token" events https://events.example.com/mcp

# 移除指定服务
bub mcp remove time

Bub 同样支持标准的 Agent Plugins。两者中的 MCP 服务器分别拥有独立的生命周期渠道与工具命名空间,可以同时无缝运行:

来源 配置文件 运行渠道 工具名称前缀
全局 MCP ~/.bub/mcp.json mcp.lifecycle mcp.<server>_<tool>
Agent Plugin <plugin>/mcp.json agent-plugins.mcp mcp.<plugin>.<server>_<tool>
常见现象 可能原因 解决办法
bub hooks 中无 mcp 插件未装入当前运行的 Python 环境 运行 command -v bub,确认当前执行环境后重新执行 bub install bub-mcp@main。
bub mcp list 显示 Status: Disconnected 外部服务未启动或命令无法执行 独立在终端运行 uvx mcp-server-time 或用 curl 访问 url,确认其是否正常响应。
bub run "..." 中无法调用 MCP 工具 bub run 是单次执行任务,不启动后台生命周期渠道 长期运行请使用 bub chat 或 bub gateway;如需一次性调用,请在交互中使用 ,mcp.<tool>。
bub mcp add 保存时打印 CancelledError 进程提前退出,但配置通常已持久化 执行 bub mcp list 确认条目是否已写入 mcp.json。
提示 Permission denied 无法写入配置 ~/.bub/ 目录所有者权限不匹配 检查 ~/.bub 目录权限,或设置 BUB_HOME 指向当前用户拥有写权限的路径。