Skip to content
FunCoding

Search

Search docs, Skills and MCP

TypeScript SDK 的 MCP

连接外部服务或在应用进程内定义工具,并保持权限和结果格式明确。

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

TypeScript query 的 mcpServers 支持外部 stdio/SSE/HTTP 服务,也支持与 SDK 应用同进程的工具。Python v1 不提供同等 mcp_servers 选项,不能直接移植配置。

外部服务

以下配置启动一个已经准备好的本地 MCP 脚本;路径和环境值需按实际服务替换:

import { query } from '@qwen-code/sdk';

const result = query({
  prompt: 'Inspect the tools exposed by the local service.',
  options: {
    mcpServers: {
      local: {
        command: 'node',
        args: ['/absolute/path/mcp-server.js'],
        env: { PORT: '3000' },
      },
    },
  },
});

for await (const message of result) console.log(message);

其他传输使用相应 url、httpUrl 等字段,不能把 daemon 动态添加路由剥离 env/cwd 的规则套到此 SDK 配置;它们是不同入口。MCP 工具需要的执行批准仍遵循 Query 的权限设置。

在进程内定义工具

使用 tool(name, description, inputSchema, handler) 定义工具,inputSchema 是 ZodRawShape,handler 异步返回 MCP content blocks。

import { z } from 'zod';
import { tool, createSdkMcpServer } from '@qwen-code/sdk';

const add = tool(
  'calculate_sum',
  'Add two numbers',
  { a: z.number(), b: z.number() },
  async ({ a, b }) => ({
    content: [{ type: 'text', text: String(a + b) }],
  }),
);

const calculator = createSdkMcpServer({
  name: 'calculator',
  tools: [add],
});

const options = { mcpServers: { calculator } };

把 options 传给 query,并按应用批准策略处理调用。示例只定义并注册纯计算工具,不需要为了连接 MCP 就把整个查询改成 yolo。

工具名为 1–64 字符,以字母开头,其余为字母数字或下划线。createSdkMcpServer 需要唯一 name,version 默认 1.0.0,tools 为定义数组;返回对象可直接放入 mcpServers,内部包含 SDK server 实例。

结果和超时

handler 返回 CallToolResult,包含 content,失败可带 isError。文本块为 type: text 与 text;图片使用 base64 data 和 mimeType。其他内容块应按安装版本的 MCP 类型定义构造,不把类型展示片段当可直接运行的值表达式。

SDK 的 mcpRequest 默认 60000 毫秒,可通过 QueryOptions.timeout 改。进程内 handler 依然是应用代码,不因使用 MCP 自动得到文件、网络或执行沙箱;需要的权限范围由应用实现和 Qwen 调用策略共同决定。