TypeScript SDK 的 MCP
连接外部服务或在应用进程内定义工具,并保持权限和结果格式明确。
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 调用策略共同决定。