
1. 为什么要在 TREK 里接 MCP 和 OAuthTREK 是一个自托管的协作规划平台能拖拽行程、实时同步、分摊账单、管理打包清单还能装成 PWA 离线用。它最特别的地方是把 AI 当成另一个客户端来处理内置的 MCP 服务器和人类用户走同一套 OAuth 2.1 授权流150 多个工具挂在 27 个细粒度 scope 下分属 13 个权限组。这意味着 Claude、Cursor 这类助手访问你的行程数据时权限边界和你授权给任何第三方应用是等价的而不是管理员级别的后门。问题也随之而来。当你同时用 Claude Code、Cursor、Cline 好几个工具每个都要单独配 Key、单独管额度、单独看用量很快就会乱。我试过把 TREK 的 MCP 通道接到 TaoToken 的统一 Key 上让所有 AI 工具走同一个入口配置一次到处能用。这篇就把 config.toml 和 settings.json 的骨架、OAuth 回调验证、连通性测试这几步拆开讲清楚适合已经在跑 TREK、又想统一管理 AI 工具 Key 的开发者。核心检索词先摆出来TREK 自托管协作规划平台的 MCP 接入、OAuth 2.1 授权回调、TaoToken 统一 Key 通道。适合谁已经用 Docker 部署了 TREK、手上有多个 AI 编码工具、希望把 Key 和额度收拢到一处的开发者。如果你还没部署 TREK先按官方文档把容器跑起来再回来看接入部分。2. TaoToken 前置准备拿 Key 和确认通道TaoToken 在这里扮演的角色是统一 Key 和 API 通道。TREK 的 MCP 服务器本身负责权限边界TaoToken 负责把模型调用这一层收口两者不冲突。你需要先拿到一个可用的 Key再确认接入地址。第一步打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册并登录。第二步进控制台创建 API Key地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。Key 只在创建时完整显示一次复制后先存到密码管理器里。第三步确认 API 基地址。TaoToken 的 API 入口是 https://taotoken.net/api 注意这个地址不带任何查询参数配置时直接填这个就行。如果你用的是 Claude Code 这类走 Anthropic 协议的工具接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 里面有协议差异说明。注意Key 不要写进会提交到 Git 的文件里。TREK 的 docker-compose 和 MCP 配置都建议用环境变量注入后面会给具体写法。这一步做完你手上应该有三样东西一个 API Key、一个 API 基地址、一份接入文档。接下来才是真正动配置文件。3. 可复制配置config.toml 与 settings.json 骨架TREK 的 MCP 接入分两层一层是 TREK 服务端自己的 MCP 服务器配置一层是你本地 AI 工具Claude Code、Cursor 等连接 MCP 的配置。TaoToken 的 Key 主要用在第二层也就是 AI 工具调用模型时走统一通道。先看 TREK 服务端的 config.toml 骨架。TREK 用 NestJS 构建MCP 服务器随主服务启动OAuth 相关配置通过环境变量或配置文件注入。下面这份是精简后的可复制版本# trek/config.toml [server] port 3000 app_url https://trek.example.com # OAuth 回调必须用这个域名 force_https true trust_proxy 1 [mcp] enabled true # MCP 服务器与人类用户共用 OAuth 2.1 授权流 oauth_authorization_endpoint /oauth/authorize oauth_token_endpoint /oauth/token oauth_scopes [ trip:read, trip:write, budget:read, budget:write, packing:read, packing:write, collab:read, collab:write ] rate_limit_per_user 300 # 每分钟请求数 max_concurrent_sessions 20 [addons] atlas true journey true vacay false airtrail false collab true这里的关键点是app_url必须和 OAuth 回调域名一致否则授权会失败。oauth_scopes按你实际要用的功能裁剪用不到的 scope 不要开权限边界越小越安全。Addon 开关会影响 MCP 暴露的工具列表关掉 Atlas 后对应工具自动消失这是实时收缩的。再看本地 AI 工具的 settings.json 骨架。以 Claude Code 为例它通过 MCP 配置连接 TREK同时模型调用走 TaoToken{ mcpServers: { trek: { url: https://trek.example.com/mcp, transport: http, oauth: { authorizationUrl: https://trek.example.com/oauth/authorize, tokenUrl: https://trek.example.com/oauth/token, scopes: [trip:read, trip:write, budget:read] } } }, env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: ${TAOTOKEN_API_KEY} } }ANTHROPIC_BASE_URL指向 TaoToken 的 API 入口ANTHROPIC_API_KEY用环境变量注入不要硬编码。这样 Claude Code 调模型走 TaoToken 统一通道访问 TREK 数据走 MCP 的 OAuth 授权两条链路各司其职。如果你用的是 Cursor配置位置在~/.cursor/mcp.json结构类似把mcpServers那段搬过去即可。Coding Plan 相关的长期编码场景可以参考 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 里的说明把额度规划好。4. 验证请求OAuth 回调与连通性测试配置写完不代表通了得一步步验证。先验证 OAuth 回调再验证 MCP 连通最后验证模型调用。OAuth 回调验证的第一步是确认回调地址可达。TREK 的 OAuth 授权流要求app_url指向的域名能公网访问且反向代理正确转发。用 curl 探一下授权端点curl -i https://trek.example.com/oauth/authorize?response_typecodeclient_idtestredirect_urihttps://trek.example.com/callbackscopetrip:read正常返回应该是 302 跳转到登录页或授权页而不是 404 或 500。如果返回 404检查反向代理有没有把/oauth/*路径转发到 TREK 容器。第二步在 AI 工具里触发一次 MCP 连接。以 Claude Code 为例启动后它会读取 settings.json尝试连接mcpServers.trek.url。首次连接会弹出浏览器授权页你登录 TREK 账号、勾选 scope、确认授权。授权成功后回调到redirect_uri工具拿到 token。第三步验证模型调用走 TaoToken。在 Claude Code 里发一条简单指令比如让它列出你 TREK 里最近的行程。如果返回了真实数据说明 MCP 链路通了如果报模型调用错误说明 TaoToken 的 Key 或基地址有问题。可以单独测一下 API 通道curl -X POST https://taotoken.net/api/v1/messages \ -H x-api-key: $TAOTOKEN_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-sonnet-4-20250514,max_tokens:64,messages:[{role:user,content:ping}]}返回里有content字段且不是报错就说明统一 Key 通道正常。这一步过了整个链路就打通了。提示OAuth token 有有效期过期后工具会重新触发授权。如果频繁掉授权检查 TREK 服务端的 token 过期时间和时钟同步。5. 本篇常见错排查接入过程中最容易踩的坑集中在反向代理、WebSocket 和密钥管理三块。下面按报错现象倒推原因。报错一OAuth 回调 404 或 redirect_uri mismatch。原因是app_url和实际访问域名不一致或者反向代理没转发/oauth/*。检查 TREK 的APP_URL环境变量确保和浏览器地址栏域名完全一致包括 https 和端口。报错二MCP 连接超时或 WebSocket 断连。TREK 的实时协作和 MCP 长连接都依赖 WebSocket。反向代理需要把 upgrade 头配好超时时间设长。Nginx 参考配置location / { proxy_pass http://trek:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; proxy_read_timeout 86400s; proxy_send_timeout 86400s; client_max_body_size 500m; }proxy_read_timeout设成 86400s 是为了避免实时同步断连client_max_body_size500m 是备份恢复接口的要求。报错三模型调用返回 401 或额度不足。检查ANTHROPIC_API_KEY环境变量有没有正确注入Key 有没有多余空格。如果返回额度相关错误去控制台看用量地址是 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。模型对话的连通性可以单独在 https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_contentmodelsutm_campaignrewrite 里测。报错四容器启动报 Cannot find module tsconfig-paths/register。这是挂载路径写错导致的。绝不要挂载-v ./app:/app这会遮盖镜像内的应用代码。只挂载./data和./uploads两个目录。报错五ENCRYPTION_KEY 丢失导致数据无法解密。这个 Key 必须妥善备份丢了加密数据就解不开。生成方式openssl rand -hex 32存到密码管理器不要只放在服务器上。6. 把 Key 通道收口之后TREK 的 MCP 设计值得认真对待的地方是它把 AI 权限边界做成了和人类用户等价的 OAuth 授权而不是给 AI 开一个管理员后门。你授权给 Claude 的 scope就是它能碰到的全部数据范围关掉 Addon 后工具列表实时收缩。这种思路在自托管工具里还不常见但对数据放在自己服务器上的场景来说是必要的克制。把 TaoToken 的统一 Key 通道接进来之后你实际得到的是两层收口TREK 的 OAuth 管住 AI 能访问哪些行程数据TaoToken 管住模型调用走哪个入口、额度怎么算。多个 AI 工具共用一套 Key换工具时不用重新配模型通道只改 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 API Key 在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 管理。Claude Code 走 Anthropic 协议的细节看 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecode-anthropicutm_campaignrewrite 。最后留一个实操建议先把 TREK 的 MCP 单独跑通确认 OAuth 授权和工具调用正常再接 TaoToken 的模型通道。两条链路分开验证出问题时能快速定位是哪一层。配置改完记得重启容器环境变量不会热加载。