
1. 为什么要在 Sealos DevBox 里跑 MCP ServerMCP 全称 Model Context Protocol是 Anthropic 推出的开放协议核心目标只有一个让 AI Agent 调用外部工具这件事从「每家自己写适配」变成「一次实现、到处复用」。你可以把它理解成 AI 世界的 USB 接口——工具端实现一次 MCP Server客户端实现一次 MCP Client两边就能对接。以前是 N 个 AI 应用 × M 个工具 N×M 套集成代码现在是 NM。那为什么要把 MCP Server 放在 Sealos DevBox 里跑而不是直接在本机起一个进程我自己的体会是三点。第一隔离。AI Agent 调工具是会「动手」的创建数据库、拉日志、查 Pod 状态这些操作放在本地环境里一旦参数写错就是灾难。DevBox 给你一个云端沙箱搞崩了重建就行。第二环境一致性。MCP Server 往往依赖特定运行时Node、Python、Go本地版本五花八门DevBox 里镜像固定团队里每个人连上来的行为都一样。第三常驻。本地进程关掉笔记本就没了DevBox 里的服务可以一直挂着Cursor 随时连随时用。这篇要解决的具体问题是在 Sealos DevBox 环境中搭建一个 MCP Server让 Cursor 里的 AI Agent 通过标准协议调用外部工具并且给出可复制的配置片段、Cursor 侧连接参数以及一次完整的工具调用验证步骤。适合谁看已经在用 Cursor 写代码、想让 Agent 真正「长出手」去操作外部资源的开发者以及团队里想统一 AI 工具接入方式的技术负责人。需要提前说清楚一个边界MCP Server 本身不替代编辑器它只是给 Agent 提供工具能力。Cursor 负责推理和编排MCP Server 负责执行。两者通过标准协议通信各司其职。整个链路是这样的DevBox 里跑一个 MCP Server 进程监听某个端口本地用 stdio远程用 SSE/HTTPCursor 侧配置这个 Server 的地址和启动方式Agent 在对话中识别到需要调用工具时通过协议发起请求Server 执行后返回结构化结果。下面按这个顺序一步步来。2. TaoToken 前置给 Agent 准备一个稳定的模型入口在动手配 MCP 之前有个容易被忽略但很关键的前置Cursor 里的 Agent 得有模型可用而且这个模型入口要稳定、可编程。我试过直接用默认配置结果在长会话里频繁遇到限流和超时Agent 调用工具调到一半断了排查半天以为是 MCP 的问题其实是模型侧不稳。这里我用 TaoToken 作为模型接入层。它的定位是给开发者和 AI 应用提供统一的模型调用入口支持对话、编码等场景对 Cursor 这类工具来说你只需要拿到一个 Base URL、一个 API Key、一个 Model ID就能接上。官网是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 端点是 https://taotoken.net/api 。拿 Key 的路径很直接进控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 在 API Keys 页面创建一个新 Key复制出来保存好。这个 Key 后面要填到 Cursor 的配置里注意别提交到 Git 仓库。模型选择上如果你主要是做 Agent 编排和工具调用建议选支持 function calling / tool use 的模型否则 MCP 的工具描述传过去模型也识别不了。具体哪个模型支持可以在模型对话页面 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 里先手动试一下发一条带工具描述的请求看返回里有没有 tool_calls 字段。如果你打算长期跑编码类 Agent比如让 Cursor 持续做重构、写测试、调 MCP 工具可以考虑 Coding Plan https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 它在长会话和连续调用场景下更省心。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有各客户端的配置示例配 Cursor 之前扫一眼能少踩坑。这一步的产出是三个值Base URLhttps://taotoken.net/api 、API Key控制台生成、Model ID你选定的模型名。把它们记下来下一节配置 Cursor 和 MCP Server 时都要用到。3. 可复制配置DevBox 内 MCP Server 与 Cursor 侧参数这一节是全文的核心给出可以直接抄的配置。分两部分DevBox 里的 MCP Server 配置和 Cursor 侧的连接配置。先说 DevBox 里的 MCP Server。我用 Node 写一个最小可用的 Server暴露一个工具叫get_pod_status作用是查询指定命名空间下的 Pod 状态。先建项目mkdir mcp-devbox-server cd mcp-devbox-server npm init -y npm install modelcontextprotocol/sdk zod然后写server.jsimport { McpServer } from modelcontextprotocol/sdk/server/mcp.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import { z } from zod; const server new McpServer({ name: devbox-tools, version: 1.0.0, }); server.tool( get_pod_status, 查询指定命名空间下的 Pod 运行状态, { namespace: z.string().describe(Kubernetes 命名空间), }, async ({ namespace }) { // 这里替换成你真实的查询逻辑示例返回结构化数据 const result { namespace, pods: [ { name: web-0, status: Running, restarts: 0 }, { name: db-0, status: Running, restarts: 1 }, ], }; return { content: [{ type: text, text: JSON.stringify(result) }], }; } ); const transport new StdioServerTransport(); await server.connect(transport);这个 Server 用 stdio 传输适合 Cursor 本地拉起。如果你想让 DevBox 里的 Server 被远程连接改成 SSE 传输并监听端口import { SSEServerTransport } from modelcontextprotocol/sdk/server/sse.js; import express from express; const app express(); let transport; app.get(/sse, async (req, res) { transport new SSEServerTransport(/messages, res); await server.connect(transport); }); app.post(/messages, async (req, res) { await transport.handlePostMessage(req, res); }); app.listen(3000, () console.log(MCP SSE server on :3000));DevBox 里记得把 3000 端口暴露出来否则 Cursor 连不上。接下来是 Cursor 侧的配置。Cursor 的 MCP 配置放在~/.cursor/mcp.json全局或项目根目录.cursor/mcp.json项目级。如果你用 stdio 方式配置长这样{ mcpServers: { devbox-tools: { command: node, args: [/root/mcp-devbox-server/server.js], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_MODEL: 你的ModelID } } } }如果你用 SSE 方式连 DevBox 里的远程 Server配置改成{ mcpServers: { devbox-tools: { url: http://你的DevBox地址:3000/sse, env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_MODEL: 你的ModelID } } } }注意这里的三件套必须齐全Base URL 指向 https://taotoken.net/api API Key 用控制台生成的Model ID 填你验证过支持工具调用的模型。少任何一个Agent 在调用工具时都可能报错。Cursor 侧还需要在设置里确认模型配置。打开 Cursor Settings → Models把 OpenAI API Key 填成你的 TaoToken KeyBase URL 覆盖成 https://taotoken.net/api 。这样 Cursor 的推理走 TaoTokenMCP 工具调用走 DevBox 里的 Server两条链路分开但协同。配置改完记得重启 CursorMCP 配置是启动时加载的热改不生效。重启后在 Cursor 的 MCP 面板里应该能看到devbox-tools这个 Server 处于 connected 状态并且列出了get_pod_status这个工具。4. 验证请求一次完整的工具调用配置写完不算完得实际跑一次工具调用确认整条链路通了。这一步我建议在 Cursor 的 Chat 里用 Agent 模式操作。打开 Cursor切到 Agent 模式Composer 或 Chat 里的 Agent输入这样一句话帮我查一下 default 命名空间下所有 Pod 的状态正常情况下Agent 会识别到需要调用工具界面上会出现一个工具调用的确认提示显示它要调用get_pod_status参数是{namespace: default}。你点允许Server 执行后返回结构化 JSONAgent 再把结果整理成自然语言回复你。如果这一步成功你会看到类似这样的返回{ namespace: default, pods: [ { name: web-0, status: Running, restarts: 0 }, { name: db-0, status: Running, restarts: 1 } ] }Agent 会告诉你default 命名空间下有两个 Podweb-0 和 db-0 都在 Running其中 db-0 重启过 1 次。想更直接地验证 Server 本身可以绕过 Cursor用 MCP Inspector 手动测npx modelcontextprotocol/inspector node /root/mcp-devbox-server/server.js它会起一个本地 Web UI你在里面能看到 Server 注册的所有工具手动填参数调用看返回。这一步能帮你区分问题出在 Server 还是 Cursor 配置上。再进一步如果你想让 Agent 连续调用多个工具比如先查 Pod 再拉日志可以在 Server 里再加一个get_pod_logs工具然后在 Cursor 里说「查一下 db-0 的状态如果有重启就拉最近 50 行日志」。Agent 会自动编排两次工具调用。这就是 MCP 的价值——工具是标准化的Agent 可以自由组合。验证通过后你可以把这个 Server 常驻在 DevBox 里团队其他人配好 Cursor 就能直接用同一套工具不用各自在本机搭环境。5. 常见报错排查401、local proxy failed、reading choices、OAuth这一节列几个我在配置过程中真实撞到的报错以及定位思路。这些错误信息你大概率也会遇到提前知道怎么查能省很多时间。401 Unauthorized。这个最常见基本是 Key 的问题。先确认 Cursor 里填的 API Key 和 TaoToken 控制台生成的一致注意有没有多余空格。然后确认 Base URL 是不是 https://taotoken.net/api 少写/api或者写成别的路径都会 401。如果 Key 和 URL 都对还是 401去控制台看这个 Key 是不是被禁用或者额度用完了。MCP Server 侧如果也配了 Key同样检查一遍。local proxy failed。这个报错通常出现在 Cursor 尝试连接 MCP Server 时。如果是 stdio 方式检查command和args路径对不对Node 是不是在 PATH 里。如果是 SSE 方式检查 DevBox 的端口有没有暴露、防火墙有没有放行、地址写的是不是 DevBox 的公网地址。我踩过的坑是 DevBox 里 Server 监听了127.0.0.1而不是0.0.0.0导致外部连不上改成0.0.0.0就好了。reading choices 相关报错。这个一般出在模型返回结构不符合预期时比如模型不支持工具调用返回里没有choices字段或者结构不对。排查方向确认你选的 Model ID 支持 function calling在模型对话页面手动发一条带工具描述的请求看返回结构。如果模型不支持换一个支持的。OAuth 相关报错。有些 MCP Server 或客户端会走 OAuth 流程如果配置里混了 OAuth 和 API Key 两种认证方式容易冲突。确认你的配置里认证方式统一要么全用 API Key要么全走 OAuth。Cursor 连 TaoToken 用 API Key 就够了不需要额外配 OAuth。排查的通用思路是分层先确认模型链路通Cursor 能正常对话再确认 MCP Server 单独能跑用 Inspector 测最后确认两者能连上Cursor MCP 面板显示 connected。哪一层断了就查哪一层别一上来就怀疑最复杂的部分。6. 把工具接进来之后一些实用建议工具调通之后有几个实践上的点值得注意。工具描述要写清楚。MCP Server 里每个工具的description和参数的describe直接影响 Agent 能不能正确调用。描述模糊Agent 就会传错参数或者该调不调。我一般会把工具描述写成「做什么 什么时候用 参数含义」参数描述写清楚格式和取值范围。工具粒度别太细也别太粗。太细会导致 Agent 一次任务要调十几个工具容易断太粗会导致一个工具干太多事参数复杂到 Agent 填不对。一个工具对应一个明确的动作是比较好的平衡。DevBox 里的 Server 要做好日志。Agent 调用工具是黑盒出问题时你只能靠日志定位。在工具执行前后打日志记录入参和返回排查时非常有用。权限要收着给。MCP Server 能操作什么资源取决于你给它配了什么权限。别一上来就给集群管理员权限按需给。DevBox 的隔离性是一层保护但工具本身的权限边界还是要自己划。最后如果你想让 Agent 长期跑编码任务配合 Coding Plan 使用体验会更连贯长会话不容易断。接入文档里有一些进阶配置比如多 Server 并存、工具分组可以按需翻。整套跑下来我的感受是 MCP 确实把「AI 调工具」这件事标准化了而 DevBox 给了它一个安全的运行环境。两者结合Agent 才真正从「会聊天」变成「能干活」。