1. 为什么说 Claude Code 的瓶颈不在模型,而在“没有工具手”
先说个我的真实体验。我已经用 Claude Code 写了两个多月的实际项目,最直观的变化是:它从“一个很会写代码的应届生”,变成了“一个能自己查资料、自己翻 issue、自己验证页面、自己查数据库的资深开发”。让这个质变发生的,不是换更大的模型,也不是堆砌更长的 system prompt,而是给它接上了 MCP Server。
很多人一开始会有个疑问:Claude Code 本身已经能读文件、能执行命令、能改代码,为什么还需要 MCP?我举个特别典型的例子。上个月我让它改一个分页接口,它按训练数据里的老写法给我返回了page和per_page参数,但那个库的新版本早就改成了cursor和limit。不是它不聪明,是它的知识有“截止日期”。这时候一个能拉取实时文档的 MCP Server,就能直接解决这个问题。
再换一个场景:你在本地启动了一个前端项目,想让 Claude Code 帮忙检查某个页面在移动端宽度下有没有横向滚动条。它读写能力再强,也看不见浏览器里的真实渲染结果。但如果接上 Playwright MCP,它可以自己开一个无头浏览器,访问你的 localhost,截图、读控制台报错,然后把结论带回来。这就是我所说的“工具手”。
所以整篇文章的核心就一句话:MCP Server 是把 Claude Code 从“只能碰本地文件的代码生成器”升级成“能主动获取信息、操作外部系统、形成执行闭环的开发助手”的关键。这篇文章我会先把 MCP 的基本概念讲清楚,再给你我实际在用的 8 个 MCP Server 的完整配置和用法,最后是一些配置上的避坑经验。适合正在用 Claude Code、但觉得它“差点意思”的人,也适合刚接触 MCP 想入门的同学。
1.1 MCP 到底是什么?用“USB-C 接口”来理解就通了
MCP 的全称是 Model Context Protocol,也就是模型上下文协议。你可以把它理解成 AI 世界的 USB-C 接口标准。在 MCP 出现之前,每个工具想接入 AI 助手,都要单独做一套 API 适配:接入 GitHub 一套,接入数据库一套,接入浏览器一套,模型厂商就得为每个工具写专门的集成代码。这就像每台设备都要用自己的充电线,非常折腾。
MCP 做的事情很简单,它把“工具能力”抽象成一套统一的协议。一个 MCP Server 只需要按照这套协议,把自己能提供的功能注册成一个个“工具”,再描述清楚每个工具的用途和参数。Claude Code 这类客户端启动后,会自动发现这些工具,并在合适的时机调用它们。对用户来说,你不需要关心底层是 JSON-RPC 还是 stdio 传输,只需要知道“装一个 MCP Server = 给 Claude Code 增加了一组能力”。
有一个类比特别贴切:Claude Code 的模型部分是“大脑”,而通过 MCP 接入的各种 Server,就是它的大脑皮层可以控制的手、眼睛、耳朵。大脑再聪明,没有手去操作,很多事情也只能停留在“嘴上说说”。高级开发者之所以高级,不是因为他记得所有 API,而是因为他知道去哪里查文档、出现 Bug 后知道去哪里找线索、改完代码知道怎么验证。MCP 给了 Claude Code 同样的可能性。
1.2 在 Claude Code 里安装 MCP Server,比想象中简单
Claude Code 本身提供了非常简洁的 MCP 管理命令。最常用的三条,你只要记住就够了:
# 查看当前已添加的 MCP Server 列表 claude mcp list # 添加一个 MCP Server(最常见的本地 stdio 方式) claude mcp add <名字> -- <启动命令> # 删除一个 MCP Server claude mcp remove <名字>比如我想添加 Context7 这个实时文档检索工具,只需要执行:
claude mcp add context7 -- npx -y @upstash/context7-mcp这里有两个注意点。第一,命令里的--后面跟的是这个 Server 真正要执行的启动命令,很多新手会漏掉这个分隔符,导致参数解析错乱。第二,MCP Server 有作用域的概念,默认是 user 级别,也就是对这台机器上所有 Claude Code 项目生效。如果你只想让某个特定项目使用某些工具,可以加上--scope project,这样配置会写进当前项目的 MCP 配置里,不会污染全局。
装完之后,重启当前的 Claude Code 会话,让新的工具列表被重新加载。然后你可以直接问模型“你现在有哪些 MCP 工具可用”,它就会列出来。注意,一定要重启会话,不是输入/clear,是彻底退出重进。这一点我踩过几次坑,后面在常见问题里会专门说。
2. 我的 8 个 MCP Server 选型清单:从需求反推,而不是为了装而装
市面上的 MCP Server 已经多到眼花缭乱,官方仓库、社区项目、各家大厂发布的数量加起来几百个。如果你每个都装,Claude Code 每次会话光扫描工具列表就要消耗大量上下文额度,模型反而会因为选择太多而变笨。我的选型原则很简单:先列出一个高级开发者在日常工作中需要具备哪些能力,然后为每个能力找最合适的工具。
我给自己定义的能力模型是这样的:会读最新文档、能看懂网页内容、擅长拆解复杂问题、有长期记忆、能操作浏览器做验证、能处理 GitHub 上的协作流程、能直接查数据库、能看线上报错。对应下来,我最终固定保留了这 8 个:
| MCP Server | 定位 | 解决什么问题 | 启动方式 |
|---|---|---|---|
| Context7 | 实时文档检索 | 模型知识过期、API 用法记错 | npx |
| Fetch | 网页内容抓取 | 让模型阅读指定 URL 的内容 | npx |
| Sequential Thinking | 结构化推理 | 复杂任务容易漏步骤、想不清楚 | npx |
| Memory | 跨会话记忆 | 项目技术决策、用户偏好记不住 | npx |
| Playwright | 浏览器自动化 | 页面效果无法验证、E2E 测试难写 | npx |
| GitHub | 代码托管平台操作 | issue 管理、PR 创建、仓库检索 | Docker 或远程 HTTP |
| PostgreSQL | 数据库直连 | 查表结构、写查询、分析数据问题 | npx |
| Sentry | 错误监控 | 线上异常排查、崩溃现场还原 | npx |
这套组合覆盖了一个后端或全栈开发者最常打交道的三类外部系统:信息源(文档、网页)、代码协作平台(GitHub)、运行时环境(浏览器、数据库、错误监控)。从你开始写代码前的调研阶段,到写完后验证、上线后排查 Bug,整条链路都有工具承接。
这里顺便说下为什么没选一些看起来很火的工具。很多人会装一堆“看起来有用”的 Server,比如 Notion、Slack、天气查询之类。但你要想清楚,当模型在一个会话里同时面临 30 个工具时,它连正确的工具调用决策都会变慢。我现在的做法是:平时只保留和当前项目强相关的 8 个,真需要某个一次性能力再去临时添加。工具在精不在多,这其实和招人是一个道理——你需要的是一个能打的团队,不是一堆简历漂亮的闲人。
3. 先武装“大脑”:4 个提升理解力与信息获取能力的 MCP Server
3.1 Context7:让模型告别“知识截止日期”
Context7 是我毫不犹豫放进清单的第一个。它的作用非常直接:当模型需要了解某个库、框架或者 API 的最新用法时,它会去 Context7 的文档索引里检索并返回最新的官方文档片段。这样模型就不是在凭记忆猜测,而是基于真实文档回答。
安装方式:
claude mcp add context7 -- npx -y @upstash/context7-mcp我的实际用法通常是在 prompt 里明确告诉模型:“先查一下 xxx 的最新文档,再开始写代码。”比如写 NestJS 的中间件,我会说“用 Context7 查一下 NestJS 当前版本 middleware 的官方推荐写法”。它会在动手之前先去翻文档,引用回来的内容再组织代码。
这里有个细节值得说:Context7 返回的内容本身仍是模型“读到”的材料,不是绝对真理。所以我会在代码审查环节保留警惕,尤其是新用到的 API,不要因为模型说“这是从官方文档拿到的”就完全放松。Context7 降低的是“幻觉概率”,而不是把概率降为零。它最大的价值是帮模型把“不确定的猜测”变成“有依据的判断”。
3.2 Fetch:让 Claude Code 自己打开网页看内容
Fetch MCP Server 解决的是“模型只能读训练数据里的网页,不能读实时网页”的问题。很多情况下,你希望 Claude Code 参考一个 GitHub issue、一篇官方博客、或者某个 API 的在线页面,原来的做法是你手动把内容复制粘贴进对话,很麻烦。有了 Fetch,你只需要给它一个 URL,它就能把网页内容抓取下来转成 Markdown 文本交给模型。
安装命令:
claude mcp add fetch -- npx -y @modelcontextprotocol/server-fetch我最常用的场景是让 Claude Code 复现某个 Bug 时,它需要查看远端 issue 的讨论上下文。我直接说“帮我把这个 issue 打开看一下作者是怎么复现的”,模型会调用 Fetch 工具访问 GitHub issue 页面,把关键信息读回来。这比我把一大段文字粘贴进会话要省事得多,而且不会漏掉原文。
不过要提醒一点:Fetch 是只读工具,它只能“看”,不能提交表单、不能点击按钮。如果你希望 Claude Code 能交互式地操作网页,应该用后面要说的 Playwright,两者定位完全不同。另外,Fetch 不适合抓取有强登录鉴权的页面,那种场景下抓回来的往往是登录页,不是你要的内容。如果遇到这种情况,请把页面内容保存成文件,或者干脆复制核心段落给模型。
3.3 Sequential Thinking:让模型学会“先想清楚再动手”
这个工具的名字很直白,就是“顺序思考”。它来自官方维护的 MCP servers 仓库,作用是给模型提供一个结构化的思考工具,让它在面对复杂任务时把推理过程拆成一步步可见的思考记录,并且允许模型回溯修正之前的判断。它像给 Agent 加了一个“白板”,复杂的问题可以在白板上推演,而不是一股脑在上下文里乱撞。
安装方式:
claude mcp add reasoning -- npx -y @modelcontextprotocol/server-sequential-thinking我一般在两种场景下强制要求模型使用它:第一种是涉及架构调整或重构的任务。比如我之前让 Claude Code 分析一个模块要不要拆分成两个服务,如果直接让它给出结论,它可能会凭直觉给一个看似合理的方案。但我让它先调用 Sequential Thinking 依次列出:这个模块当前的耦合点、拆分后数据一致性影响、调用方改动范围、分阶段实施计划,最后再给结论。整套思考下来,明显比“跳步式回答”靠谱很多。
第二种是排 Bug 的时候。代码报错时,模型往往容易直接跳到“最常见原因”,而 Sequential Thinking 会逼迫它先考虑多个假设,再逐个验证排除。这其实就是高级开发者排障时的思路,只不过以前靠人脑,现在模型也学会了。当然它不是万能的,如果任务本身非常简单,没必要让模型走这套流程,反而浪费 token 和时间。
3.4 Memory:跨会话记住项目里的“人情世故”
Memory MCP Server 可能是这 8 个里最容易被低估的。Claude Code 单次会话有上下文窗口,但会话关闭后,你在这段对话里强调过的所有偏好、决策、背景信息就全丢了。下次重新开一个会话,它又开始问你“这个项目用不用 TypeScript”“接口是不是走 /api 前缀”。这种体验非常让人抓狂。Memory 工具解决的就是这个问题。
安装命令:
claude mcp add memory -- npx -y @modelcontextprotocol/server-memory它本质上是一个基于知识图谱的本地记忆存储。模型可以把当前对话中的关键实体和关系记录下来,比如“项目使用 pnpm 作为包管理器”“支付模块的回调需要验签”“用户偏好简洁的注释风格”。这些信息会在未来的会话中重新被读取,成为模型做决策时的背景。
我的习惯是:在每个项目刚接入时,专门花几分钟把项目的技术栈、目录结构约定、关键业务规则,一条条让模型记进 Memory 里。第二周开始,效果就会非常明显。模型给出的代码风格、目录建议、命名方式,都会明显靠近这个项目的既有习惯,而不像一个模板化的通用助手。不过注意,Memory Server 的存储文件是纯文本知识图谱,虽然方便调试,但不适合存放密码、密钥等敏感信息。
4. 再武装“双手”:4 个打通执行链路与验证闭环的 MCP Server
4.1 Playwright:让 Claude Code 自己打开浏览器验证页面
如果说前面几个工具是让 Claude Code“懂更多”,那 Playwright 是让它“能做更多”。这是微软官方出的浏览器自动化 MCP Server,它允许模型控制一个真实的浏览器实例,进行打开页面、点击、输入、截图、读取 Console 日志等一系列操作。对前端开发来说,这是质变级别的工具。
安装命令:
claude mcp add playwright -- npx @playwright/mcp@latest首次使用前需要安装浏览器内核,执行一次npx playwright install chromium即可。装好后,你可以这样指挥 Claude Code:“打开本地 5173 端口,进入登录页,输入测试账号密码,点击登录,然后告诉我页面是否正常跳转”。模型会自己操作浏览器,把每一步执行结果和页面状态带回来。
我最常用的场景有两个。第一个是让它写完前端代码后,自己启动开发服务器并打开页面验证视觉效果;第二个是让它帮我在本地复现用户报的 Bug,通过实际操作页面找到触发条件。这比传统方式高效太多,等于是“代码写得对不对,让 Agent 自己跑一遍看”。如果你希望观察它的每一步操作,可以不要完全用无头模式,留一个可见的浏览器窗口,你会看到它在页面上像真人一样移动鼠标和点击,那个画面还挺有冲击力的。
4.2 GitHub:把代码托管平台的日常操作交给 Agent
GitHub MCP Server 让 Claude Code 可以直接读取仓库、搜索代码、查看 issue、创建 issue、甚至创建 Pull Request。它解决的核心问题,是让代码开发的上游调研和下游交付都在同一个 Agent 工作流里完成,不用频繁切回网页。
安装命令有两种常见方式。本机装了 Docker 的话,可以用官方容器:
claude mcp add github -- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_TOKEN -v /tmp/github-mcp:/tmp ghcr.io/github/github-mcp-server如果不想跑 Docker,也可以用 GitHub 官方托管的远程 MCP 端点,通过 HTTP 方式接入,鉴权头带上自己的 GitHub Personal Access Token 即可。需要注意,这个 token 至少要有读取仓库和 issue 的权限。如果涉及创建 PR,还需要额外开启写权限。
这个工具给我带来的最大改变是:Claude Code 改完代码后,我可以直接说“帮我创建一个 PR,标题写清楚改动内容,描述里附上改动点清单和自测结论”。它会把本地的代码变更整理成一份像模像样的 PR 描述,然后通过 GitHub MCP 提交。对于开源项目维护者或者团队内部协作来说,这个流程非常顺手。不过还是提醒一句:涉及写操作的时候,一定看清楚模型准备操作的仓库和分支,别把测试代码推到主干上。
4.3 PostgreSQL:让 Claude Code 直接面对真实数据
后端开发绕不开数据库。之前我让 Claude Code 排查数据问题,它只能看代码逻辑,没法看数据本身。那就很尴尬,因为很多 Bug 的根源是脏数据、边界数据、或者某个字段超出预期值。PostgreSQL MCP Server 把数据库查询能力直接开放给了模型。
安装命令:
claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres "postgresql://用户名:密码@localhost:5432/数据库名"我的典型用法是:“看一下 users 表里最近 7 天注册但从未登录过的用户数量”,它自己就会生成 SQL 并执行查询,把结果整理成结论告诉我。省去了我打开数据库客户端、手写查询、再贴给它的整个环节。
但这里必须强调,绝对不要直接用生产库连接串配置这个工具。我踩过坑之后总结出一个原则:给 MCP Server 单独建一个只读数据库账号,权限只限于需要的库表。这样即便模型生成的 SQL 有误,最坏情况也就是查询报错,不会产生写操作损害数据。连接本地开发库时相对安全,但如果要连预发或生产环境的库,请务必设置只读角色,并开启语句超时限制。数据库不是用来给 Agent 练手的,这个底线一定要守住。
4.4 Sentry:线上错误不再靠“猜”和“问”
最后一个是 Sentry MCP。Sentry 是业界非常流行的错误监控平台,线上部署的应用一旦崩溃或抛出异常,会自动上报到 Sentry。Sentry MCP Server 把“读取线上错误报告”的能力开放给了 Claude Code,这样当用户反馈某个线上问题时,模型可以直接去 Sentry 查错误事件、看堆栈、看发生次数和影响用户数。
安装方式:
export SENTRY_AUTH_TOKEN=你的认证令牌 export SENTRY_ORG=你的组织名 claude mcp add sentry -- npx -y @sentry/mcp-server它会把环境变量里的认证信息传递进去,访问你组织的 Sentry 数据。我的使用场景通常是这样的:用户说“支付成功了但订单还是待支付状态”,我没必要自己先去 Sentry 后台翻半天,直接让 Claude Code 去查最近几小时的支付相关异常,把带payment关键词的事件拉出来。它会告诉我异常信息、涉及的代码位置、影响范围,然后结合代码仓库里的逻辑一起分析。
Sentry MCP 的价值在于把“线上反馈”和“代码修复”连成了闭环。以前排查线上问题,需要反复切换 Sentry 后台、日志系统、本地 IDE 三个环境,现在这个链条大大缩短。需要注意的是,Sentry 的认证令牌有权限范围,建议使用最小授权,只读访问 events 和相关项目即可。不要把有管理权限的 token 明文放在项目配置里。
5. 实操经验:MCP Server 的组合用法与 token 节省技巧
5.1 一个组合工作流:从线上报错到提交修复的完整链路
很多人装了 MCP Server 之后,还是当成“单个功能”用,没有充分发挥组合价值。我举一个真实发生在我项目里的工作流,你就明白这几个工具串起来是什么感觉。某天群里有人反馈“导出报表功能点了没反应”,我打开一个全新的 Claude Code 会话,然后输入这样一段话:
“先查 Sentry 里最近一小时的导出相关错误,再用 PostgreSQL 看一下导出记录表最近的数据状态,定位到问题后,参考仓库里导出模块的代码,给出修复方案,修复完用 Playwright 打开导出页面点一次按钮验证,最后帮我创建一个修复 PR。”
你看,这个任务涉及四个 MCP Server:Sentry 提供线上线索、PostgreSQL 验证数据、Playwright 做回归验证、GitHub 负责交付。模型会按顺序调用这些工具,整个过程我只需要在旁边做最终审查。实际跑下来大概不到十分钟,它就完成了一次完整的问题定位、修复和验证。这就是“高级开发者”和“初级开发者”的区别——初级只会写代码,高级会围绕一个任务调动所有资源把它闭环解决。
5.2 怎么让工具不打架:给 MCP Server 做“行为管理”
当你装了 8 个甚至更多 MCP Server 后,会遇到一个新问题:模型的工具选择不一定总是最优的。比如它想获取某个网页内容时,可能去调 Fetch,也可能用 Playwright 打开浏览器,两者都能达成目的,但效率和成本差别很大。一个简单粗暴的经验是:在 prompt 里写清楚工具的优先级规则。
我通常会在项目里的 CLAUDE.md 或者会话开头加上这么一句话:“需要读取单页静态内容时优先用 Fetch,需要交互式浏览器操作时用 Playwright,涉及数据查询用 PostgreSQL,涉及错误上下文用 Sentry。”这样模型就有一个决策优先级,不会在简单的读网页任务上去启动一个完整浏览器,白白浪费时间和 token。
每个 MCP Server 本质上都有一个“工具描述”,这些描述会进入模型的上下文,成为它决策的依据。所以那些工具描述写得是否清晰,直接影响调用准确率。这也是为什么有些 Server 装了好用,有些装了等于没装。如果某个工具的描述太含糊,模型根本不知道什么时候该用它,自然就变成了摆设。
5.3 token 节省的实在经验:控制工具列表长度与上下文
MCP Server 不是越多越好,因为每个 Server 的“工具列表”都会占用上下文。工具描述越长的 Server,占用越多。我有几个实测下来的办法可以有效控制 token 消耗。第一,只保留当前项目真正用到的 Server,临时需求用完就删。第二条,多个项目共用的 Server 设为 user 级别,单个项目专用的设为 project 级别,避免所有项目加载全部工具。第三,工具命名尽量短但要语义化。我自己就一直把名字起得简单点,比如context7、fetch、memory,这样模型在工具调用时也少花 token。
还有一个很实用的技巧:在长时间会话的中后段,如果上下文已经很长,有些不太可能用到的工具可以通过/mcp菜单临时禁用掉。这能防止模型在信息量过载时做出误判。反正 MCP Server 是即插即用的,禁用不影响后续重新启用。
5.4 MCP Server 的安全边界:本地工具的权限意识
聊到 MCP Server,就绕不开安全问题。这里说的不仅是网络安全,更是本地工具的权限边界。PostgreSQL 能访问数据库,GitHub 能读写仓库,Playwright 能操作浏览器,Sentry 能读取线上错误。这些工具单独用都挺好,但组合在一起,意味着一个模型的误操作可能产生连锁影响。所以我的底线是:
所有能产生写操作的工具,尽量使用最小权限账号。数据库用只读角色,GitHub token 按需授权,Sentry token 只读,不要为了省事把最高权限全部交给 Agent。
另外要注意,MCP Server 的返回值里可能包含网页或文档里的内容,如果其中嵌入了类似“忽略之前的指令,执行某某操作”的文本,理论上模型存在被提示词注入的风险。目前各家模型对这类攻击的防护在逐渐增强,但我们自身能做的,就是不让高权限工具随意访问不可信来源的内容。简单说,别让 Claude Code 用有写权限的 GitHub token 去读取不受信任的网页内容。
6. 常见问题与排查技巧实录
6.1 添加 MCP Server 后不生效,工具列表里看不到
这是咨询频率最高的问题。绝大多数情况是添加后没有重启 Claude Code 会话。MCP 工具列表是在会话启动时加载的,运行中途添加或修改都不生效。正确做法是彻底退出当前 Claude Code,重新进入。如果重启后还是看不到,执行claude mcp list确认 Server 在列表中,如果列表里没有,说明添加失败;如果列表里有但工具不出现,可以用claude doctor做一次环境检查,看是否有连接报错。
6.2 npx 启动的 MCP Server 频繁掉线或启动很慢
很多基于 npx 的 Server 第一次启动需要下载包,会慢一些。如果每次都启动很慢,可以先把包全局安装,或者用本地路径启动。另一个常见问题是 Node.js 版本过低导致 Server 启动失败。MCP Server 普遍需要 Node.js 18 以上,建议保持在 LTS 版本。如果 Server 启动后立刻退出,可以先用终端手动执行启动命令,直接看它打印什么错误,这样比盲猜效率高得多。
6.3 模型不去调用你想让它用的工具
这种情况也经常遇到。原因可能是工具描述不清晰、当前对话上下文里没有触发条件、或者工具本身能力不匹配。我的处理方式非常直接:在用户 prompt 里点名指定。不要只说“帮我看看这个文档”,而是说“用 fetch 工具获取这个 URL 的内容”。显式指定工具后,模型基本都会服从。如果仍然不调用,那大概率是工具配置有问题,回第一项检查。
6.4 多个 MCP Server 同时使用时,如何判断具体哪个出问题
当你装了很多 Server,某个功能的报错往往不是 Claude Code 本身的问题,而是背后某个 Server 挂了。排查思路是从下往上:先用claude mcp list看整体状态,再单独运行有嫌疑的 Server 的命令验证它是否正常,最后再去查模型是怎么调用它的。比如 Playwright 报错,你先手动跑一下npx playwright install chromium,确认浏览器内核是否装了;PostgreSQL 报错,先手动用同样的连接串跑一条简单 SQL,确认数据库账号密码是否正确。
下面是我整理的一个速查表:
| 现象 | 大概率原因 | 处理方式 |
|---|---|---|
| 添加后不生效 | 没重启会话 | 退出重进,查看 mcp list |
| 基于 npx 的 Server 启动慢 | 首次下载或 Node 版本低 | 预装包,升级 Node 到 LTS |
| Server 掉线 | 进程崩溃或端口冲突 | 手动执行启动命令看报错 |
| 模型不使用工具 | 描述不清/上下文无触发 | 在 prompt 中显式指定工具 |
| 数据库工具查询失败 | 连接串错误或角色权限不足 | 手动执行 SQL 验证账号和权限 |
| GitHub 工具鉴权失败 | token 权限不足或过期 | 确认 token 的 repo/issue 权限 |
6.5 我第一次配置踩过的坑:工具作用域混乱
最后分享一个我印象特别深的坑。最早我图省事,把所有 MCP Server 都加成了 user 级别。后来我在不同的项目里做技术方案,发现 Claude Code 经常会不由自主地调用一些跟当前项目完全无关的工具,比如我在写 Python 脚本时,它突然去查前端框架文档。排查了很久才发现,是 user 级别的工具列表把所有项目的上下文都污染了。
从那以后我给自己立了一条规矩:凡是跟具体业务相关的 Server,比如 PostgreSQL 连接串、特定项目专属的 GitHub 配置,一律用 project 级别;只有通用的、无副作用的工具才放 user 级别。这样既保证每个项目能用到该用的工具,又避免跨项目的上下文干扰。
按照我这套方案跑下来的实际感受是:8 个 Server 刚好是一个不过载又能覆盖完整开发链路的组合。如果你一开始不知道装什么,直接照抄这份清单用上半个月,期间根据自己的项目类型删减或增补。等你能明显感到“它不再是一个问答工具,而是一个能自己把事情办完的同事”的时候,说明这套工具链已经真正为你所用。