ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MCP servers 上下文成本拆解:Claude Code 接很多工具不撑爆窗口的配置骨架

MCP servers 上下文成本拆解:Claude Code 接很多工具不撑爆窗口的配置骨架 1. 为什么接了 8 个 MCP serversClaude Code 窗口还没炸先说结论Claude Code 接 MCP server不是「接一个 server 就把这个 server 所有工具的完整 JSON schema 塞进上下文」。如果真是这样GitHub、Sentry、PostgreSQL、Slack、Jira、Figma 各接一个会话还没开始写代码窗口就被工具说明书吃掉一大半。我实测下来Claude Code 的 MCP 加载策略分三层会话启动时只把 tool names 和 server instructions 放进上下文完整工具定义被 deferred等任务真正需要时才通过 tool search 拉进来只有实际被调用的工具才会把参数 schema 和输出结果计入当前轮次。这个设计让「工具数量增长」和「上下文膨胀」解耦——你可以接很多 server但 idle 的工具只占很少上下文。这篇面向本地同时用多个 MCP 工具的开发者给出settings.json里 MCP 相关配置骨架、tool search 开关的可复制片段以及用一次对话验证窗口占用变化的具体步骤。核心检索词MCP servers、Claude Code、上下文成本、tool search、上下文窗口。2. 上下文成本到底花在哪三层拆解2.1 第一层server 连接层Claude Code 启动会话时会连接已配置的 MCP servers但「连接」不等于「把所有工具细节暴露给模型」。这一层只维护运行态信息哪些 server 可用、哪些正在连接、哪些失败、哪些需要 OAuth 认证。这些信息不进模型上下文只进/mcp面板。2.2 第二层工具可发现层这一层进入上下文的是 tool names 和 server instructions。它像一个索引目录告诉 Claude Code「GitHub 相关能力在 GitHub server」「数据库相关能力在 PostgreSQL server」但不会把每个工具的完整参数说明铺开。官方文档对 tool search 的描述很直接tool search 通过延迟工具定义来降低 MCP 的上下文使用量会话开始时只加载工具名和 server instructions所以增加更多 MCP servers 对 context window 的影响很小。2.3 第三层工具使用层当任务真的需要某个工具时Claude Code 才让相关工具进入上下文。Tool search 默认开启MCP tools 会被 deferred而不是 upfront 加载。Claude 用 search tool 在任务需要时发现相关工具只有实际使用的工具进入上下文。这跟前端 lazy loading 是一个思路首页不加载后台管理模块等用户真正进入某个路由再加载对应代码块。Claude Code 对 MCP tools 的处理类似只是对象从 bundle 变成了工具 schema。2.4 完整 JSON schema 为什么必须延迟一个工具 schema 通常包含名称、描述、输入参数、参数类型、是否必填、嵌套结构、枚举值、约束说明。单个工具还好但真实 server 往往暴露十几个能力。GitHub server 可能有读 issue、搜 PR、读文件、创建评论、提交 review、查 workflow、列 repository数据库 server 可能有查 schema、执行只读 SQL、看表结构、采样数据、解释执行计划。如果这些全部 upfront 加载每一轮请求都要背着一堆大概率用不到的参数定义。窗口被占用、成本上升更麻烦的是注意力被稀释工具选择更容易混乱。延迟加载把这块成本往后推普通代码分析任务不必为所有外部能力付「上下文税」。3. TaoToken 前置把模型接入和 MCP 配置分开管在动settings.json之前先把模型接入层和 MCP 配置层分开。模型接入走 TaoToken 的 API 端点MCP 配置走 Claude Code 自己的配置文件两者互不干扰排障时也能快速定位是哪一层出问题。TaoToken 官网入口https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_contentAPI 端点不加 UTMhttps://taotoken.net/api需要先拿到 API Key再去配置 Claude Code 的模型接入。API Keys 管理页https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite接入文档含 Claude Code 的 base_url 与鉴权字段说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite如果你主要做长期编码和 Agent 任务Coding Plan 页有按周期计费的方案说明https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite想先验证模型对话是否通用模型对话页发一条测试消息即可https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewriteClaude Code 专用接入说明Anthropic 兼容格式https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite注意模型接入和 MCP server 配置是两条独立的链路。模型接入失败表现为请求直接报错MCP 配置失败表现为/mcp面板里 server 显示 failed 或 pending。先分清是哪一层再动手改配置。4. 可复制配置settings.json 里的 MCP 骨架与 tool search 开关4.1 settings.json 的 MCP 相关骨架Claude Code 的 MCP server 配置可以放在项目级.mcp.json也可以放在用户级 settings。下面是一个多 server 并用的骨架重点看mcpServers的结构和每个 server 的type字段{ mcpServers: { github: { command: npx, args: [-y, modelcontextprotocol/server-github], env: { GITHUB_PERSONAL_ACCESS_TOKEN: ${GITHUB_TOKEN} } }, postgres: { command: npx, args: [-y, modelcontextprotocol/server-postgres], env: { DATABASE_URL: ${READONLY_DATABASE_URL} } }, sentry: { type: http, url: https://mcp.sentry.dev/mcp, headers: { Authorization: Bearer ${SENTRY_TOKEN} } } } }几个关键点commandargs是 stdio 类型 server本地进程不会自动重连。type: http是远程 server断连后 Claude Code 会用 exponential backoff 自动重连最多 5 次从 1 秒延迟开始每次加倍。重连期间在/mcp里显示 pending5 次失败后标记 failed可以手动重试。环境变量用${VAR}引用不要把 token 明文写进配置文件。项目级.mcp.json会跟随仓库共享Claude Code 在使用项目级 server 前会要求 approval这是安全边界。4.2 tool search 开关Tool search 默认开启。未设置ENABLE_TOOL_SEARCH时所有 MCP tools 延迟并按需加载。三种取值# 默认行为全部延迟加载不设置即为这个 # ENABLE_TOOL_SEARCH 未设置 # autoschema 能放进 10% context window 时 upfront 加载超出部分仍延迟 export ENABLE_TOOL_SEARCHauto # false关闭延迟机制所有 MCP tools upfront 加载 export ENABLE_TOOL_SEARCHfalse大多数团队不需要精细计算每个 server 的 token 成本默认开启就给了安全起点。auto适合工具数量中等、想减少一次 search 往返的场景。false只在调试「工具为什么没被搜到」时临时用长期开着会让窗口压力随 server 数量线性增长。4.3 输出侧限制工具调用的输出也会反过来影响上下文。Claude Code 在 MCP tool output 超过 10,000 tokens 时显示 warning默认最大 MCP output tokens 是 25,000可以通过环境变量调整export MAX_MCP_OUTPUT_TOKENS15000数据库查询默认加 limit日志查询强制时间范围issue 查询支持字段选择。真正撑爆窗口的往往不是 schema而是 tool result。5. 验证请求用一次对话看窗口占用变化5.1 先看 /mcp 面板配置完 server 后在 Claude Code 里运行/mcp面板会显示每个已连接 server 的 connection status、tool count并标记声明了 tools capability 却没有暴露工具的 server。这是验收入口不是出问题才打开的维修面板。命令行侧也可以用claude mcp list claude mcp get github claude mcp remove github5.2 一次对话验证窗口占用第一步只接一个 server发一条不涉及该 server 的普通代码问题比如「解释这个函数的复杂度」。观察/mcp里 tool count 和当前会话的 token 使用。第二步保持同一个 server再发一条明确需要该 server 的问题比如「查一下最近 24 小时 Sentry 里最常见的错误」。观察工具是否被 search 到、是否进入上下文、输出多大。第三步再加两个 server重复第一步的普通代码问题。对比两次的 token 使用差异。如果 tool search 正常工作差异应该很小因为 idle tools 只占 tool names 和 server instructions 的少量空间。5.3 成功结果长什么样/mcp里所有 server 显示 connectedtool count 符合预期。普通代码问题不触发任何 MCP 工具调用token 使用稳定。需要外部系统的问题能正确 search 到对应工具只有实际使用的工具 schema 进入上下文。远程 server 断连时显示 pending 并自动重连而不是静默失败。6. 本篇常见错排查6.1 server 显示 connected 但工具搜不到先看 server instructions 写得够不够清楚。Tool search 依赖工具名、工具描述和 server instructions。如果 instruction 只写「SAP tools」Claude Code 很难判断什么时候该找它。应该写清楚它处理的任务类别、何时搜索、关键能力。Claude Code 会把 tool descriptions 和 server instructions 各自截断到 2KB关键信息放开头。工具名也一样。query太泛search_abap_repository、read_cds_metadata、get_transport_status更容易被搜到。6.2 窗口占用比预期高检查ENABLE_TOOL_SEARCH是否被设成了false。检查是否有 server 暴露了大量描述冗长的工具。检查 tool output 是否过大用MAX_MCP_OUTPUT_TOKENS限制并在 server 侧做输出裁剪。6.3 远程 server 一直 pending 或 failedHTTP 或 SSE server 启动时遇到 5xx、connection refused、timeout 会重试最多 3 次。认证错误和 not found 不重试因为需要配置变更。401、403、404 不是多等几秒能解决的先检查 token 和 URL。OAuth 认证的 server 在/mcp里按浏览器登录流程完成授权token 会安全存储并自动刷新。6.4 项目级 .mcp.json 没被信任项目级 server 会跟随仓库共享Claude Code 使用前要求 approval。新成员克隆项目后看到 pending approval 是正常的确认信任后才会连接。长期保留历史 server 配置会让 MCP 配置变成「没人敢删的祖传配置」定期清理不活跃 server。6.5 工具调用输出把窗口撑爆一个 PostgreSQL tool 如果允许随便select *很容易把上万行数据扔回上下文。日志 server 不做时间范围过滤可能一次返回几十万字符。在 server 侧做默认 limit、强制时间范围、返回聚合结果而不是把大上下文当垃圾桶。7. 把工具数量增长和上下文膨胀解耦MCP servers 让 Claude Code 从「会读代码、会改文件、会运行命令」扩展到「能接触真实工程系统」。这个扩展不是免费午餐它引入上下文成本、连接状态、认证状态、权限边界、输出大小和工具搜索质量这些工程问题。Claude Code 当前的设计用 tool search 把最重的一块成本往后推会话启动只加载 tool names 和 server instructions完整工具定义按需进入上下文idle tools 开销很低。/mcp提供连接状态、工具数量、认证入口和故障排查窗口。远程 HTTP 和 SSE server 断连后自动重连并显示 pending 或 failed本地 stdio server 不自动重连。成熟的用法是把 MCP server 当工程基础设施设计少接无意义 server清理不活跃 server给 server instructions 写清楚边界限制工具输出使用最小权限定期看/mcp状态。这样既能接触 GitHub、Sentry、PostgreSQL、Slack、Jira、Figma 这类真实系统又不会让上下文窗口变成工具说明书的垃圾堆。需要长期跑编码和 Agent 任务的话Coding Plan 页有按周期计费的方案https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite接入过程中遇到鉴权或 base_url 问题先查接入文档https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite想单独验证模型对话是否正常用模型对话页发一条测试消息https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewriteAPI Key 在控制台管理https://taotoken.net/console/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewriteClaude Code 专用接入说明https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentclaudecodeutm_campaignrewrite
返回列表