资讯动态

手把手写一个自己的 MCP 并接入 Cline:AI 助手从此“指哪打哪“

发布时间:2026/10/16 11:01:21 来源:尧图企业网站定制
手把手写一个自己的 MCP 并接入 ClineAI 助手从此指哪打哪【免费下载链接】clineAutonomous coding agent as an SDK, IDE extension, or CLI assistant.项目地址: https://gitcode.com/GitHub_Trending/cl/clineAI 编程助手在默认情况下只能使用内置的工具集读写文件、执行终端命令、浏览网页。但一旦你遇到读取天气接口查询公司内部数据库操作自研 CLI 工具这类需求通用模型就会暴露局限——要么不会用你的私有 API要么只能用自然语言猜着编。Model Context ProtocolMCP正是为解决这一堵点而生的开放协议它把外部能力封装成标准化的工具服务器让 Cline 这类 AI 助手通过统一的 JSON-RPC 通道发现并调用这些工具相当于给大模型装上了指哪打哪的精确抓手。本文将以 Cline 仓库的真实源码为线索带你先理解 MCP 在 Cline 中的接入方式再从零手写一个自定义 MCP Server最后接入 Cline 实测它完成一个原本做不到的任务。MCP 是什么以及 Cline 为什么需要它MCP 全称 Model Context Protocol核心思想非常朴素把工具从模型中解耦。模型不需要知道某个数据源的具体 API 怎么调它只需要知道 MCP Server 暴露了哪些工具tools/list、每个工具接收什么参数input schema、以及怎么调用tools/call。剩下的传输细节全部由 MCP 协议层完成。在 Cline 的源码中这一点体现得淋漓尽致。sdk/packages/core/src/extensions/mcp/types.ts中定义了三种受支持的传输方式export type McpServerTransportConfig | McpStdioTransportConfig // 本地进程type: stdiocommand args | McpSseTransportConfig // 远程type: sseurl headers | McpStreamableHttpTransportConfig // 远程推荐type: streamableHttpurl headersSTDIO通过标准输入输出与本机子进程通信延迟低、配置简单适合本地工具SSE / Streamable HTTP通过 HTTP 端点访问远程托管服务适合多客户端共享。对应地apps/vscode/src/shared/mcp.ts中定义了 Cline 视角下的 MCP 生态一个 McpServer 可以暴露tools工具、resources资源、resourceTemplates资源模板和prompts提示词模板。其中工具是最常用的一类——Cline 会把 MCP Server 暴露的每个工具注入为它自己的一个原生工具模型就可以在对话中直接调用。接入方式一在配置文件中声明Cline 统一使用cline_mcp_settings.json管理 MCP 服务器。IDE 扩展VS Code 等和 CLI 共用同一份配置文件默认位于~/.cline/data/settings/下也可以通过环境变量CLINE_MCP_SETTINGS_PATH覆盖路径见apps/vscode/src/hosts/vscode/mcp-settings-legacy-migration.ts中的getSharedMcpSettingsPath。以本地 STDIO 服务器为例配置长这样来自官方文档 docs/mcp/mcp-overview.mdx{ mcpServers: { my-tools: { command: node, args: [/path/to/my-server.js], env: { API_KEY: your_api_key }, disabled: false, autoApprove: [] } } }如果是远程服务器则改为{ mcpServers: { remote-tools: { type: streamableHttp, url: https://example.com/mcp, headers: { Authorization: Bearer your-token }, disabled: false, autoApprove: [] } } }注意type字段对于本地服务器没有type字段时默认按stdio处理对于远程服务器省略type会默认回退到旧版sse传输建议显式写type: streamableHttp。每个服务器还支持timeout字段单位是秒来自sdk/packages/shared/src/mcp.ts的契约默认 60 秒最小 1 秒、最大 3600 秒超出范围会被钳制而不是静默变成几小时——这个细节对排查超时问题很有帮助。在 IDE 中你可以直接点击 Cline 面板顶部的 MCP Servers 图标在 Configure 标签页里打开这份 JSON 手动编辑也可以走 Remote Servers 标签页填写 URL 和传输类型由界面生成配置。接入方式二用 CLI 命令一行安装如果你在用 Cline CLIapps/cli安装 MCP 服务器甚至不用手写 JSON。官方文档给出了两条非交互式命令cline mcp add files --yes -- npx -y modelcontextprotocol/server-filesystem . cline mcp add docs https://example.com/mcp --transport http --header Authorization: Bearer TOKEN --yes第一条命令通过--把后面的内容原样交给npx执行安装一个由 npm 包提供的本地 STDIO 服务器第二条则注册一个带认证头的远程服务器。--yes表示跳过交互向导直接写入配置。这条命令的完整实现位于apps/cli/src/commands/mcp.ts其核心逻辑在sdk/packages/core/src/services/mcp-install.ts中buildMcpInstallTransport负责解析传输类型和参数installMcpServer则调用updateMcpSettingsFileSync把新服务器合并进mcpServers字段。整个流程被封装得足够健壮——它会校验 URL 必须是 http/https、校验 header 格式、甚至会对形如token的未填占位符给出警告。不传--yes时cline mcp add会打开预填好的交互式向导引导你完成配置。从零手写一个 MCP Server理解了接入方式后我们开始写自己的 MCP Server。其实 MCP 协议本身并不神秘STDIO 传输的 MCP Server 就是一个通过 stdin 读取 JSON-RPC 请求、通过 stdout 返回 JSON-RPC 响应的普通进程。Cline 仓库的测试代码sdk/packages/core/src/extensions/mcp/client.test.ts里就内置了一个仅 40 多行的极简 MCP Server 参考实现堪称最好的教学模板。它逐行读取 stdin按换行符切分 JSON 消息只响应三类方法initialize、tools/list、tools/call。我们据此写一个天气查询服务器#!/usr/bin/env node // weather-mcp-server.js —— 一个手写的 MCP Server const fs require(node:fs); let buffer ; // 模拟天气数据源 const WEATHER { beijing: 晴25℃, shanghai: 多云28℃, shenzhen: 雷阵雨30℃, }; process.stdin.on(data, (chunk) { buffer chunk.toString(utf8); let idx; while ((idx buffer.indexOf(\n)) 0) { const line buffer.slice(0, idx).trim(); buffer buffer.slice(idx 1); if (!line) continue; let msg; try { msg JSON.parse(line); } catch { continue; } // 忽略通知类消息 if (msg.id undefined || !msg.method || msg.method.startsWith(notifications/)) continue; let result; if (msg.method initialize) { result { protocolVersion: 2024-11-05, capabilities: { tools: {} }, serverInfo: { name: weather-server, version: 1.0.0 }, }; } else if (msg.method tools/list) { result { tools: [{ name: get_weather, description: 查询指定城市的实时天气, inputSchema: { type: object, properties: { city: { type: string, description: 城市名如 beijing }, }, required: [city], }, }] }; } else if (msg.method tools/call) { const city msg.params?.arguments?.city; result { content: [{ type: text, text: WEATHER[city] ?? 未收录城市${city} }], }; } else { result {}; } process.stdout.write(JSON.stringify({ jsonrpc: 2.0, id: msg.id, result }) \n); } });几个关键点值得注意协议版本要对齐Cline 的 MCP 客户端固定使用协议版本2024-11-05定义在sdk/packages/core/src/extensions/mcp/client.ts的MCP_PROTOCOL_VERSION。你的initialize响应必须回传该版本握手才能成功。tools/list返回的inputSchema就是说明书Cline 会把这份 JSON Schema 注入给模型。schema 写得多清楚模型就能多准确地调用工具。tools/call的返回值采用content数组里面可以放文本type: text也可以放图片、音频、资源链接等结构化内容类型定义见apps/vscode/src/shared/mcp.ts的McpToolCallResponse。如果你不想手工维护 JSON-RPC 协议也可以使用官方 MCP SDKmodelcontextprotocol/sdk用McpServerStdioServerTransport几行代码完成同样的事情。理解上面的裸协议实现反而能让你在排错时更从容。接入 Cline 并实测把上面这个文件保存后在cline_mcp_settings.json的mcpServers中加入{ mcpServers: { weather: { command: node, args: [/path/to/weather-mcp-server.js] } } }保存配置后Cline 会自动尝试连接或手动重启服务器。此时在工具列表里会看到它暴露的get_weather工具。Cline 对 MCP 工具有一套统一的命名规则见sdk/packages/core/src/extensions/mcp/name-transform.ts默认格式为服务器名__工具名例如weather__get_weather。该实现还会把非法字符替换为下划线并为了兼容 OpenAI 系模型的函数名上限64 字符超长名称会用 SHA-1 哈希截断处理——所以你在日志里偶尔看到带_xxxxxxxx后缀的工具名不是 bug是命名保护。接下来向 Cline 提问帮我查一下深圳今天的天气。此时模型会从工具清单中识别出weather__get_weather及其参数要求调用该工具传入{ city: shenzhen }Cline 通过 STDIO 通道把tools/call请求发给你的服务器进程服务器返回雷阵雨30℃模型据此组织成自然语言回复。如果你的数据源换成公司内部 API、自研命令行工具或者数据库查询接口流程完全一样——这就是指哪打哪的本质模型不再需要学过你的私有系统只需要一份准确的工具清单。关于调用权限还有一个值得注意的细节MCP 工具的autoApprove配置决定了 Cline 在调用该工具时是否需要人工确认见apps/vscode/webview-ui/src/components/mcp/configuration/tabs/installed/server-row/McpToolRow.tsx中的开关逻辑。对只读、低风险的工具可以开启自动批准让 agent 全速执行对会写数据、执行系统操作的工具建议保留人工确认。官方文档docs/mcp/mcp-overview.mdx的 Security 章节也给出了同样的原则只安装可信的服务器、密钥走环境变量、autoApprove只开给安全工具。小结从协议层面看MCP 的设计并不复杂一次initialize握手、一次tools/list发现、若干次tools/call调用stdin/stdout 之间传递的是一行行 JSON-RPC 消息。但正是这套小而标准的协议把 AI 助手从只会用内置工具解放成了能力可无限扩展的智能体。通过 Cline 的三层支持——统一的cline_mcp_settings.json配置、CLI 的cline mcp add一键安装、以及运行时对tools/list/tools/call的完整封装——你不需要理解底层实现就能接入现成的 MCP 生态而一旦你掌握了手写 Server 的能力任何私有系统都能在一小时内变成 AI 助手的手和眼。下次再遇到Cline 做不到的任务不妨先想想是模型不会还是我还没给它装上对应的手。【免费下载链接】clineAutonomous coding agent as an SDK, IDE extension, or CLI assistant.项目地址: https://gitcode.com/GitHub_Trending/cl/cline创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑