
1. 真实项目里 Claude Code 为什么总在 LSP、MCP、Git 三处翻车Claude Code 是 Anthropic 推出的终端 AI 编程助手能读代码、改文件、跑命令、连外部工具适合已经在用命令行开发、想让 AI 深度参与重构和排障的工程师。但很多人第一次把它接进真实仓库往往不是模型不会写代码而是卡在三个地方LSP 诊断没输出、MCP 服务连不上、Git 提交被 hook 反复打回。这三个问题看起来分散本质都是「客户端配置」和「外部进程握手」没对齐。我试过在一个 TypeScript Python 混合仓库里连续踩坑LSP 明明装了 typescript-language-serverClaude Code 却报No LSP server configured for .tsMCP 的数据库服务在本地能跑接进 Claude Code 就local proxy failedGit 提交时 pre-commit hook 改了文件Claude Code 直接放弃提交。后来把配置拆成三段——LSP 段、MCP 段、Git 段——逐段验证才把工作流恢复。这篇按「问题场景 → 前置准备 → 可复制配置 → 验证请求 → 常见错排查 → 工具入口」六段走每段都给能直接粘贴的 settings 片段和验证命令。核心检索词先摆出来Claude Code 故障排除、LSP 诊断配置、MCP 服务接入、Git 工作流恢复。适合已经装好 Claude Code、但被报错卡住的人如果你还没拿到可用的 API Key第 2 节会给出获取路径。需要说明的是Claude Code 本身是客户端它调用的是背后的模型 API。国内直连官方端点经常超时所以下面所有配置里的 Base URL 都指向一个兼容 Anthropic 协议的接入点Key 和 Model ID 三件套必须同时正确缺一个就会在验证阶段报 401 或reading choices。2. 接入前的三件套准备Base URL、API Key、Model IDClaude Code 的所有高级能力——LSP、MCP、Git 代理——都建立在「模型请求能通」这个前提上。如果模型请求本身失败LSP 诊断会卡在等待、MCP 工具调用会超时、Git 提交信息生成会中断。所以排障第一步永远是确认三件套。三件套指的是Base URL请求地址、API Key鉴权凭证、Model ID模型标识。Claude Code 读取的是环境变量或 settings 文件不同版本读取优先级略有差异但核心变量名是固定的。你可以先在一个干净终端里导出确认能通再写进配置文件。获取 Key 的路径打开接入点的控制台在 API Keys 页面创建。地址是 https://taotoken.net/api-keys 创建后复制那串以sk-开头的字符串只显示一次务必存好。注意这里不要用官网首页代替直接进 API Keys 页。拿到 Key 后先做一次最小验证不涉及 Claude Code只用 curl 确认端点活着export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的key export ANTHROPIC_MODELclaude-sonnet-4-20250514 curl -s $ANTHROPIC_BASE_URL/v1/messages \ -H x-api-key: $ANTHROPIC_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: $ANTHROPIC_MODEL, max_tokens: 64, messages: [{role:user,content:reply with ok}] }返回 JSON 里出现content:[{type:text,text:ok...就说明三件套正确。如果返回 401是 Key 错或没带x-api-key头如果返回model not found是 Model ID 写错如果连接超时是 Base URL 不可达。这一步过了再进 Claude Code 配置能省掉后面一半的排查时间。Model ID 建议用当前可用的 Sonnet 系列写死在配置里比依赖默认值稳。Claude Code 有些版本会读ANTHROPIC_MODEL有些读 settings 里的model字段两个都写上最保险。下面第 3 节的 settings 片段会把三件套和 LSP、MCP 一起放进去。3. 可复制的 settings 配置LSP、MCP、Git 三段拆开写Claude Code 的配置文件通常放在~/.claude/settings.json项目级可以放.claude/settings.json。项目级优先于用户级团队协作时把项目级提交进仓库能保证所有人 LSP 和 MCP 行为一致。下面这份是完整可粘贴版本路径和字段名按官方结构写你按自己环境改 command 和 args。{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的key, ANTHROPIC_MODEL: claude-sonnet-4-20250514 }, model: claude-sonnet-4-20250514, lsp: { typescript: { command: typescript-language-server, args: [--stdio] }, python: { command: pylsp, args: [] }, rust: { command: rust-analyzer, args: [] } }, mcpServers: { local-db: { command: node, args: [/Users/you/tools/db-mcp-server.js], env: { DB_URL: postgres://localhost:5432/app } }, remote-api: { url: https://your-mcp-host.example.com/mcp, headers: { Authorization: Bearer your-mcp-token } } }, git: { commitTemplate: conventional, autoStageHookChanges: true } }LSP 段的关键是command必须在 PATH 里能找到。typescript-language-server用npm i -g typescript-language-server typescript装pylsp用pip install python-lsp-serverrust-analyzer从 rustup 组件装。装完在终端直接敲一次命令名能进交互就说明 PATH 没问题。MCP 段分本地和远程两种。本地用commandargs远程用urlheaders。本地服务脚本路径必须绝对路径相对路径在 Claude Code 的工作目录下会解析失败这是local proxy failed最常见的原因。远程服务的url必须以/mcp结尾少写这段会 404。Git 段里autoStageHookChanges控制 hook 改文件后是否自动git add再 amend。如果你的仓库 hook 会格式化代码打开这个能减少手动操作如果 hook 有副作用比如跑迁移建议关掉改成手动确认。配置写完后用claude --version确认客户端能启动再用claude config list看配置是否被读到。有些版本命令是claude settings show按你装的版本试。配置没被读到后面所有验证都会失败。4. 逐步验证LSP 诊断、MCP 工具调用、Git 提交各跑一遍配置写完不等于生效必须逐段验证。验证顺序建议 LSP → MCP → Git因为 LSP 只依赖本地进程MCP 依赖网络和外部服务Git 依赖仓库状态从简到繁。LSP 验证在项目里打开一个.ts文件让 Claude Code 做一次跳转定义。输入类似「用 LSP 找到 src/utils.ts 第 45 行 calculateTotal 的定义」。如果返回了定义位置说明 LSP 握手成功。如果报No LSP server configured回到第 3 节检查lsp.typescript.command是否在 PATH如果报initialize timeout多半是 language server 启动慢或版本不兼容手动在终端跑一次typescript-language-server --stdio看有没有报错。MCP 验证先单独跑本地 MCP 服务脚本确认它能启动并监听。然后让 Claude Code 调用一次工具输入「用 local-db 查询 select 1」。如果返回结果说明 MCP 链路通。如果报local proxy failed检查脚本路径是否绝对、Node 版本是否满足、env里的变量是否传进去。远程 MCP 报401就是headers.Authorization的 token 错报ECONNREFUSED是 url 不可达。Git 验证改一个文件让 Claude Code 提交。输入「提交当前更改message 用 conventional 格式」。观察是否触发 hook、hook 改文件后是否自动 stage、最终 commit 是否成功。如果报nothing to commit先git status看暂存区如果报pre-commit hook failed先手动跑npm run lint -- --fix再提交。三段都验证通过后做一次组合验证让 Claude Code 用 LSP 找引用、用 MCP 查数据、然后提交。这个组合能暴露配置之间的冲突比如 MCP 服务占用了 LSP 需要的端口或者 Git hook 改了 LSP 正在读的文件。组合验证过了工作流才算真正恢复。5. 常见报错对照401、local proxy failed、reading choices、OAuth排障最有效的方式是拿真实报错去对照。下面四个是 Claude Code 接入阶段最高频的每个都给触发条件和修复动作。401 Unauthorized模型请求被拒。触发条件Key 错、Key 过期、请求头没带x-api-key、Base URL 指向了不鉴权的端点。修复用第 2 节的 curl 单独验证三件套确认ANTHROPIC_API_KEY没有多余空格确认ANTHROPIC_BASE_URL是https://taotoken.net/api而不是带路径的地址。local proxy failedMCP 本地服务启动失败。触发条件脚本路径相对、Node 版本低、脚本依赖没装、端口被占。修复把args里的路径改成绝对路径在终端手动node /abs/path/server.js看报错用lsof -i :端口查占用。reading choices模型返回结构解析失败。触发条件Base URL 指向的端点返回的不是 Anthropic 格式、Model ID 不被支持、请求被中间层改写。修复用 curl 看原始返回确认有content数组确认 Model ID 在接入点支持列表里不要在同一次请求里混用 OpenAI 格式和 Anthropic 格式。OAuth 相关报错出现在 Claude Code 尝试用账号登录而非 API Key 时。触发条件配置里同时存在 OAuth token 和 API Key客户端优先走了 OAuth。修复清掉~/.claude下的 OAuth 缓存文件只保留env里的 API Key或者在 settings 里显式关闭 OAuth 登录。另外两个容易忽略的Command timed out after 120000ms是 Bash 命令超时把长任务拆小或加超时参数old_string not found是 Edit 匹配失败重新读文件、复制精确文本、给足上下文再改。这两个不属于接入层但会伪装成「配置问题」排障时要区分。6. 工具入口与长期工作流建议三段配置跑通后Claude Code 的 LSP、MCP、Git 就能稳定协作。日常使用建议把项目级.claude/settings.json提交进仓库但 Key 不要写死在里面用环境变量注入或者用.env.gitignore。团队里每个人用自己的 Key配置结构一致行为才一致。如果你主要做长期编码和 Agent 任务建议用 Coding Plan额度更稳适合连续多轮的工具调用https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite 。如果只是临时验证模型返回用模型对话页更快https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel_chatutm_campaignrewrite 。需要管理多个 Key 或看用量进控制台https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite API Keys 页在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite 。最后给一个实用习惯每次改完 settings先跑claude config list确认读到了再跑一次最小 curl 确认三件套最后才进项目做 LSP/MCP/Git 验证。这个顺序能把「配置没生效」和「服务本身坏了」分开排障时间至少省一半。