1. 为什么我要把 MyMcp 私有化部署,而不是直接用在线 MCP 广场
在线 MCP 广场用起来确实方便,点几下就能拿到一个 SSE 地址,但真把它接到自己的项目里,问题会一个接一个冒出来。最典型的就是内网环境:公司内网的机器根本访问不了公网 SSE 地址,工具调用直接超时;其次是自定义能力,在线广场只给你现成的工具,你想改一个参数、加一段自己的业务逻辑,基本没门;再就是密钥和数据流向不可控,第三方工具的 Key 填在别人的平台上,心里总归不踏实。
MyMcp 这个开源项目就是冲着这些痛点来的。它是一个可以自己部署的 MCP 广场,技术栈是 Vite + Vue + TS,支持多用户、多租户,每个人都能定义、发布自己的 MCP 服务,发布后会生成独立的 SSE 地址。管理员能看到所有服务,普通用户只能看到公开的和他自己的服务。功能上覆盖了 MCP 分类管理、模板新建/复制/删除、服务详情 Markdown 展示、工具测试、代码在线编辑、密钥配置、服务发布、服务启停管理,还有大屏统计和租户/用户管理。
这篇文章要解决的核心问题不是「怎么把 MyMcp 跑起来」这么简单,而是跑起来之后,怎么把 MCP 服务的 endpoint 统一改到 TaoToken 的 API 通道上,让所有工具调用走同一个 Key、同一个入口。这样你既保留了私有化部署的灵活性,又不用为每个第三方工具单独维护一套鉴权。适合谁看:手里有内网服务器、想自建 MCP 广场的开发者;已经在用 Cherry Studio 或类似客户端、想接自定义 SSE 工具的人;以及想把 MCP 调用链路统一收口、方便做统计和排障的团队。
下面我会按「部署 → 配置 → 改 endpoint → 验证 → 排错」的顺序走一遍,命令和配置都能直接复制。
2. 部署 MyMcp 前,先把 TaoToken 的 Key 和通道准备好
MyMcp 本身是一个平台,它不生产模型能力,工具调用最终还是要落到某个 API 通道上。如果你希望所有 MCP 工具共享一套鉴权和计费,最省事的做法是先把 TaoToken 的 API Key 拿到手,后面在 MyMcp 的「秘钥配置」里统一填这个 Key。
TaoToken 的定位是一个统一的 API 通道,兼容常见的模型调用协议。你可以在官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 了解它的能力范围,然后进控制台创建 Key。具体路径是:登录后进入 console 页面,找到 API Keys 管理,新建一个 Key 并复制保存。这个 Key 后面会填到 MyMcp 的密钥配置里,也会用在 endpoint 的鉴权头上。
这里有个概念要提前说清楚,不然后面改 endpoint 会懵。MCP 服务对外暴露的是 SSE 地址,形如http://你的服务器:端口/sse/xxx,客户端(比如 Cherry Studio)连的是这个地址。但 MyMcp 内部真正去调用模型或第三方工具时,走的是另一条链路,也就是 Base URL + Key + Model ID 这三件套。我们要改的 endpoint,指的是 MyMcp 内部调用上游 API 时用的地址,把它指向 TaoToken 的 API 入口,而不是改 SSE 地址本身。
TaoToken 的 API 入口是 https://taotoken.net/api,注意这个地址不带 UTM 参数,直接作为 Base URL 使用。Model ID 根据你实际要调用的模型填,比如常见的对话模型或代码模型。Key 就是刚才在 console 里创建的那一串。
如果你还没决定用哪个模型,可以先到模型对话页面试一下,确认通道能通、模型能返回,再回到 MyMcp 里配置。这一步花不了几分钟,但能帮你排除掉「Key 本身有问题」这类低级错误。
另外提醒一句:MyMcp 的密钥配置是分服务的,每个 MCP 服务可以配自己的 Key。如果你想让所有服务共用同一个 TaoToken Key,那就在每个服务的密钥配置里填同一个值;如果不同服务要用不同模型,那就分别填。统一 Key 的好处是排障时只需要看一个地方,坏处是权限粒度粗。按你的实际场景选。
3. 可复制的 MyMcp 部署与 endpoint 改写配置
这一节是全文的核心,我会给出完整的部署命令、环境变量配置,以及把 endpoint 改到 TaoToken 的具体片段。路径和字段名尽量和项目实际结构保持一致,你照着改就行。
先拉代码、装依赖、起服务。MyMcp 是 Vite + Vue + TS 的前端项目,通常还会带一个后端服务来处理 SSE 和工具执行。假设你已经把仓库 clone 到本地:
git clone <MyMcp仓库地址> mymcp cd mymcp npm install前端启动:
npm run dev后端如果是 Node 服务,一般在server目录下,单独启动:
cd server npm install npm run start默认情况下,前端跑在 5173,后端跑在 3000 左右,具体看项目 README。部署到内网服务器时,建议用 pm2 或 systemd 托管后端进程,避免终端一关服务就断。
接下来是环境变量。MyMcp 的后端通常通过.env文件读取上游 API 配置。在server目录下新建或修改.env:
# 上游 API 基础地址,指向 TaoToken API_BASE_URL=https://taotoken.net/api # 统一 Key API_KEY=sk-你的TaoTokenKey # 默认模型 DEFAULT_MODEL=你的ModelID # 服务监听端口 PORT=3000 # SSE 对外地址前缀,内网部署时填内网 IP 或域名 SSE_BASE_URL=http://192.168.1.100:3000如果你用的是 JSON 配置而不是 env,结构类似这样,放在server/config/default.json:
{ "upstream": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "model": "你的ModelID" }, "server": { "port": 3000, "sseBaseUrl": "http://192.168.1.100:3000" } }关键点在于baseUrl这一项。MyMcp 默认可能指向某个公共 API 地址,你要把它改成https://taotoken.net/api。改完之后,所有 MCP 工具在执行时调用的上游通道就统一走 TaoToken 了。
然后是每个 MCP 服务的密钥配置。在 MyMcp 的 Web 界面里,进入某个服务的详情页,找到「秘钥配置」,把 TaoToken 的 Key 填进去。如果服务需要调用第三方工具(比如搜索、天气),第三方工具的 Key 也在这里配。发布服务时,如果配了 Key,系统会要求你确认,这是为了防止漏配导致调用失败。
发布之后,服务会生成独立的 SSE 地址,形如:
http://192.168.1.100:3000/sse/your-service-id这个地址就是给 Cherry Studio 或其他客户端用的。注意它和API_BASE_URL是两回事:SSE 地址是客户端连 MyMcp 的入口,API_BASE_URL是 MyMcp 连上游的出口。很多人第一次配会搞混,把 SSE 地址填成 TaoToken 的地址,结果客户端连不上。
如果你用的是 Claude Code 这类工具,配置方式类似,核心还是 Base URL + Key + Model ID 三件套。Base URL 填https://taotoken.net/api,Key 填 TaoToken 的 Key,Model ID 填你选的模型。Claude Code 的配置文件通常在~/.claude/settings.json或项目级的.claude/settings.json,把这三项写进去即可。具体字段名以你使用的版本为准,但逻辑不变。
Cline 或 MCP 客户端里配置时,如果支持自定义 Base URL,同样填 TaoToken 的 API 地址。有些客户端把 MCP 服务和模型 API 分开配,注意别填错位置。
4. 验证请求:从工具测试到 SSE 连通性检查
配置改完,别急着上生产,先做三层验证:上游通道通不通、MyMcp 内部调用通不通、客户端连 SSE 通不通。
第一层,验证 TaoToken 通道。直接用 curl 打一下 API:
curl -X POST https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "你的ModelID", "messages": [{"role": "user", "content": "ping"}] }'如果返回正常的 JSON,里面有choices字段,说明 Key 和通道都没问题。如果返回 401,说明 Key 错了或没带上;如果返回 404,检查 Base URL 是不是多写了或少写了路径。
第二层,在 MyMcp 界面里用「工具测试」。进入某个已发布服务的详情页,找到工具列表,点测试,看能不能正常返回结果。这一步走的是 MyMcp 后端 → TaoToken → 模型/工具的完整链路。如果这里失败,但第一层成功,那问题多半在 MyMcp 的配置读取上,检查.env有没有被正确加载,或者服务有没有重启。
第三层,用 Cherry Studio 连 SSE。在 Cherry Studio 里添加 MCP 服务,类型选 SSE,地址填http://192.168.1.100:3000/sse/your-service-id。保存后看能不能加载出工具列表。如果加载不出来,先在浏览器里直接访问这个 SSE 地址,看有没有返回事件流。浏览器能返回但客户端不行,多半是客户端配置问题;浏览器也不行,那就是 MyMcp 后端或网络问题。
实测下来,最容易出问题的是内网 IP 和端口。SSE 地址里的 IP 必须是客户端能访问到的地址,如果你在服务器上配的是127.0.0.1,那其他机器就连不上。改成内网实际 IP 或域名。
验证通过后,你可以在 MyMcp 的统计分析大屏里看到调用记录,确认请求确实走了 TaoToken 通道。这一步能帮你确认链路收口成功。
5. 常见报错排查:401、local proxy failed、reading choices、OAuth
这一节列几个我踩过的坑,对照着看能省不少时间。
401 Unauthorized。最常见的原因是 Key 没填对或没带上。检查三处:.env里的API_KEY、MyMcp 服务密钥配置里的 Key、以及客户端如果直连上游时的 Key。三处只要有一处是旧的或空的,就会 401。还有一种情况是 Key 有空格或换行,复制的时候带进去了,用echo -n检查一下。
local proxy failed。这个报错通常出现在客户端配置了本地代理,但代理进程没起来或端口不对。如果你在客户端里填了http://127.0.0.1:xxxx作为 Base URL,确认那个端口上确实有服务在监听。另外,内网环境如果走了公司代理,检查HTTP_PROXY/HTTPS_PROXY环境变量有没有干扰。
reading choices 报错。这个一般是上游返回的 JSON 结构不符合预期,客户端在解析choices字段时失败了。可能原因:Model ID 填错了,导致上游返回了错误信息而不是正常响应;或者 Base URL 路径不对,打到了错误的接口。先用第 4 节的 curl 命令确认上游返回结构正常,再检查 MyMcp 里的 Model ID 和 Base URL。
OAuth 相关报错。如果你用的是 Claude Code 或类似工具,它可能默认走 OAuth 流程。当你把 Base URL 改成 TaoToken 的 API 地址后,OAuth 流程可能不适用,需要在配置里显式指定用 API Key 鉴权,而不是 OAuth。检查配置文件里有没有authType之类的字段,改成apiKey或对应值。Codex 的auth.json里也是类似逻辑,确保填的是 Key 而不是 OAuth token。
还有一个容易忽略的点:MyMcp 发布服务时如果配了 Key,发布后 Key 是加密存储的,界面上看不到明文。如果你后来换了 TaoToken 的 Key,要重新进密钥配置里更新,否则服务还在用旧 Key,调用就会失败。
排障时建议按「上游 → MyMcp → 客户端」的顺序逐层排查,不要一上来就怀疑最外层。大部分问题都出在配置读取和地址填写上。
6. 把 MCP 调用链路收口到 TaoToken 之后
走到这里,你应该已经能在内网跑通 MyMcp,并且把 endpoint 统一改到了 TaoToken 的 API 通道。回头看一下这套组合的价值:MyMcp 解决了「自定义 MCP 服务 + 私有化部署 + 多用户管理」的问题,TaoToken 解决了「统一 Key + 统一入口 + 调用统计」的问题。两者结合,你既不用把数据交给在线广场,也不用为每个工具单独维护鉴权。
如果你后面要长期跑编码类 Agent,或者想让多个 MCP 服务共享额度,可以关注一下 Coding Plan 这类方案,它更适合高频、长期的调用场景。如果只是偶尔验证模型能力,用模型对话页面就够了。接入过程中遇到配置问题,优先查接入文档,里面通常有最新的字段说明。
最后给一个实用建议:把.env和config/default.json里的 Base URL、Key、Model ID 三项做成模板,换环境时只改这三项,其他不动。这样迁移到新服务器时,几分钟就能重新跑起来。MCP 服务的 SSE 地址也建议用域名而不是 IP,方便后面换机器时不用改客户端配置。