Skip to content
FunCoding

Search

Search docs, Skills and MCP

SDK 中的 MCP

配置本地或远程 MCP、筛选工具,并理解会话禁用服务器的生效时机。

This page has not been translated into English yet. The original Chinese version is shown below.

SDK 可以为会话接入 MCP 工具。服务器既可以是 runtime 启动的本地进程,也可以是通过 HTTP 或 SSE 访问的远程服务。这里使用 SDK 的 mcpServers 配置,不直接套用云端代理仓库设置的必填字段规则。

配置本地与远程服务器

以下是创建会话的配置片段,假定 client 已初始化,本地 mcp-server.js 已由应用提供:

const session = await client.createSession({
  mcpServers: {
    "local-tools": {
      type: "local",
      command: "node",
      args: ["./mcp-server.js"],
      cwd: "./servers",
      env: { DEBUG: "true" },
      tools: ["*"],
      timeout: 30000,
    },
    github: {
      type: "http",
      url: "https://api.githubcopilot.com/mcp/",
      tools: ["*"],
    },
  },
});

远程服务需要认证时,通过 headers 提供相应请求头;上例只展示连接位置,不包含可用凭据。官方示例中的 Bearer ${TOKEN} 是示例字符串,本页不据此假定 SDK 会替应用读取或展开环境变量。

字段本地服务器远程服务器
typelocal 或 stdio,可省略,默认 local必填,http 或 sse
启动或地址command、args 必填url 必填
运行环境可选 env、cwd可选 headers
工具可选 tools可选 tools
超时可选 timeout,毫秒可选 timeout,毫秒

30000 是示例超时,不是本页确认的默认值。工具调用的权限响应另见工具交互事件,声明工具可见不等于所有操作都应自动批准。

用 tools 限定工具集合

tools: ["*"] 允许该服务器全部工具;指定名称数组只暴露列出的工具;tools: [] 不暴露任何工具。这里没有另一套 allow 或 disallow 字段。需要稳定集合时显式填写,不从字段可选推断省略后的默认行为。

工具名称筛选与关闭服务器不同:空工具数组表达工具不可用,不能替代下面的服务器禁用选项。

为单个会话禁用服务器

在创建或恢复请求上设置 disabledMcpServers,值是要禁用的服务器名称,必须精确匹配。例如 disabledMcpServers: ["github"] 针对名为 github 的配置生效。

  • 新建会话或冷恢复时,禁用的服务器不会启动,runtime 也不会发起它的认证。
  • 恢复仍驻留在 runtime 中的会话,不能用此选项撤销已经启动的服务器。
  • 设置只作用于本次创建或恢复的会话配置,不改全局 MCP 设置,也不删除服务器定义。

不同语言名称分别是 Node.js disabledMcpServers、Python disabled_mcp_servers、Go DisabledMCPServers、.NET DisabledMcpServers、Java setDisabledMcpServers(...)、Rust with_disabled_mcp_servers(...)。

排查没有工具或连接失败

先检查本地命令与参数能否启动服务器、进程是否立即退出,以及 stderr 中的错误;再检查 tools 是否意外为空或名称不匹配。远程连接检查 URL、服务运行情况和认证头。超时先区分服务慢与地址不可达,再考虑调整 timeout。

工具已出现但未被调用时,还要检查任务是否确实需要该工具。连接成功与模型选择工具是不同阶段;不要仅凭一次未调用就认定 MCP 配置无效。