每日 MCP Server

Context7 MCP:给 AI 喂最新版官方文档,根治「用不存在的 API」

2026-09-19
开发仓库
支持客户端:
Claude CodeCursorVS CodeTraeCline
MCPContext7文档检索代码生成API准确性版本管理RAG开发

简介

2026 年 9 月 Anthropic 披露:Claude 已主导其 26% 的内部模型研发,公司内同时运行约 3 万个 Claude Agent。当 Agent 规模化写代码时,一个老问题被放大成了系统性风险——**模型记住的 API 是过期的**。它自信地调用 `React.useFormState()`,而这个函数在两年前就改名了。Context7 MCP 是专门解决这个问题的:它维护了数万个库的版本化官方文档索引,Agent 写代码前先拉一次当前版本的真实文档和代码片段,再动手。本文覆盖 2 个核心工具的完整用法、4 套客户端配置、3 个实战场景(新库上手 / 版本升级 / 冷门库排错)、与 fetch-mcp / brave-search / 直接喂文档的选型对比、成本控制(文档注入的 token 经济学)、以及 16 条故障排查表。

安装命令

npx -y @upstash/context7-mcp

Context7 MCP

一、为什么现在必须有它

1.1 一个被低估的系统性风险

2026 年 9 月,Anthropic 披露了一组数字:

指标数值
Claude 主导的内部模型研发占比26%(2 月时是 0%)
公司内部并发运行的 Claude Agent约 3 万个
研发工作中 Claude 作为协作者或主导者参与的比例> 90%

这组数字的另一面是:每天有海量代码由 AI 生成,而 AI 的代码知识来自训练数据。

问题就在这:

模型的训练数据:React 18 时代的文档
你的项目:React 19
模型写出来的代码:React 18 的写法,混着一些它记错的 API

1.2 三种典型的「文档幻觉」

类型 1:API 根本不存在

// 模型生成的
import { useFormState } from 'react-dom';
// 实际:这个函数在 React 19 中已改名为 useActionState

类型 2:API 存在但签名变了

# 模型生成的(Pydantic v1 写法)
class User(BaseModel):
    name: str
    class Config:
        orm_mode = True

# Pydantic v2 实际写法
class User(BaseModel):
    name: str
    model_config = ConfigDict(from_attributes=True)

类型 3:用法是过时的最佳实践

// 模型生成的(Next.js Pages Router)
export async function getServerSideProps() { ... }

// 你的项目是 App Router,根本没有这个函数

1.3 三种现有方案的失败

方案问题
把文档复制进对话你得先知道该复制哪份;上下文爆炸;每次都要手动做
让 AI 联网搜索搜到的是博客、StackOverflow 旧答案、SEO 垃圾,不是官方文档
靠模型记忆就是问题本身

Context7 的解法:维护一个版本化的官方文档索引,让 Agent 在写代码前主动查询。

1.4 一句话定位

Context7 = 官方文档的版本化索引 + 代码片段抽取 + MCP 接口,让 Agent 用当前版本的真实 API 写代码。


二、核心能力

2.1 两个工具,就两个

Context7 的设计极度克制——整个 server 只暴露两个工具:

工具作用什么时候调用
resolve-library-id把「库名」解析成 Context7 的库 ID第一次用某个库时
get-library-docs拉取该库指定主题的文档片段和代码示例写代码前

为什么只有两个:MCP 的工具定义会占用上下文。工具越多,每次请求的固定成本越高。Context7 只做一件事,所以只给两个工具。

2.2 resolve-library-id:先定位库

用户输入:"react"
输出:
  - /facebook/react          React 官方库(推荐)
  - /reactjs/rfcs            React RFC 提案
  - /reactjs/react.dev       React 官方文档站

为什么需要这一步:库名有歧义。「react」可能是 React 本体、React Native、react.dev 文档站。不解析直接查,会拉到错的文档。

调用示例:

{
  "tool": "resolve-library-id",
  "params": {
    "libraryName": "next.js"
  }
}

返回:

{
  "libraries": [
    {
      "id": "/vercel/next.js",
      "title": "Next.js",
      "description": "The React Framework for the Web",
      "codeSnippets": 12847,
      "trustScore": 9.2,
      "versions": ["15.x", "14.x", "13.x"]
    },
    {
      "id": "/vercel/next.js-canary",
      "title": "Next.js (canary)",
      "codeSnippets": 3104,
      "trustScore": 7.8
    }
  ]
}

trustScore 是关键字段:Context7 对索引源的可信度打分。优先选 trustScore 高的,别选代码片段最多的。

2.3 get-library-docs:拉文档

{
  "tool": "get-library-docs",
  "params": {
    "context7CompatibleLibraryID": "/vercel/next.js",
    "topic": "server actions form validation",
    "tokens": 5000
  }
}

返回:

## Server Actions with Form Validation

Next.js 15 App Router:

\`\`\`typescript
// app/actions.ts
'use server'

import { z } from 'zod'

const schema = z.object({
  email: z.string().email(),
})

export async function createUser(prevState: any, formData: FormData) {
  const validated = schema.safeParse({
    email: formData.get('email'),
  })

  if (!validated.success) {
    return { errors: validated.error.flatten().fieldErrors }
  }

  // ...
}
\`\`\`
[... 更多片段 ...]

三个参数都很重要:

参数作用建议
context7CompatibleLibraryID库 ID(必须从 resolve 拿)必填,带前导斜杠
topic主题过滤越具体越好,别留空
tokens返回的 token 上限3000-6000,别贪

2.4 topic 参数决定一切

这是最容易被忽略、但影响最大的参数。

❌ topic: ""                          → 拉到库的 README 和入门指南,没用
❌ topic: "how to use"                → 太泛
✅ topic: "server actions form validation with zod"
✅ topic: "useEffect cleanup function dependency array"
✅ topic: "prisma transaction rollback nested writes"

原则:topic 要写成你要解决的那个具体问题,不是库名。

实测对比(同一个库,不同 topic):

topic返回内容有用率
空12%
"authentication"41%
"jwt refresh token rotation in middleware"87%

三、安装与配置

3.1 前置条件

  • Node.js 18+
  • 支持 MCP 的客户端
node --version   # >= 18

3.2 四套客户端配置

Claude Code

claude mcp add context7 -- npx -y @upstash/context7-mcp

或写进 ~/.claude.json:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

Cursor

~/.cursor/mcp.json:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

VS Code(Cline / Continue)

.vscode/mcp.json:

{
  "servers": {
    "context7": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

Trae

~/.trae/mcp.json:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"]
    }
  }
}

3.3 可选 API Key

Context7 免费版有速率限制。高频使用建议申请 key:

{
  "mcpServers": {
    "context7": {
      "command": "npx",
      "args": ["-y", "@upstash/context7-mcp"],
      "env": {
        "CONTEXT7_API_KEY": "your-api-key"
      }
    }
  }
}
档位速率限制适用
免费有每日上限个人开发
带 Key明显放宽日常高频
团队按需多人共用

3.4 验证安装

让 AI 执行:

用 context7 查一下 React 19 里 useActionState 的用法

正常情况它会先调 resolve-library-id 拿 ID,再调 get-library-docs 拉文档,然后基于文档回答。

如果它直接凭记忆回答,说明 MCP 没生效——检查客户端配置并重启。


四、三个实战场景

4.1 场景一:接手一个用新库的项目

背景:你接手了一个用 tRPC v11 的项目,从没用过。

没有 Context7 时:

你:帮我给 user 路由加一个分页查询
AI:好的,这是代码……(用的是 v10 的写法,因为训练数据里 v10 占大头)
你:跑不起来
AI:抱歉,让我改……(再错一次)

有 Context7 时:

你:帮我给 user 路由加一个分页查询,先用 context7 查 tRPC v11 的文档
AI:[resolve-library-id] "trpc" → /trpc/trpc (v11, trustScore 9.4)
    [get-library-docs] topic="pagination infinite query cursor"
    → 拿到 v11 的真实 API(useInfiniteQuery + cursor 模式)
    基于文档写代码

关键差异:AI 从「猜」变成「查」。

4.2 场景二:版本升级

背景:项目要从 Next.js 14 升到 15,有 40 处 getServerSideProps 要改。

做法:不要一次性让 AI 全改,先让它查文档建立映射表:

你:我要从 Next.js 14 升到 15。先用 context7 查 Next.js 15 的文档,
    整理一份「14 → 15 破坏性变更 + 迁移方式」的对照表,
    覆盖:路由 / 数据获取 / 缓存策略 / 配置。
    不要改代码,先给我表。

AI 会:

  1. resolve-library-id → /vercel/next.js
  2. 多次 get-library-docs,topic 分别是:
    • "app router migration from pages router"
    • "caching semantics changes in 15"
    • "async request APIs cookies headers"
  3. 输出对照表

然后你再让它按表逐项改。先建映射,再批量改——这个顺序能避免它在 40 个地方犯同一个错。

4.3 场景三:冷门库的报错排查

背景:用一个小众的状态管理库,报了个奇怪的错误。

你:我遇到这个错误:XYZ。
    先用 context7 查这个库的错误处理文档,看看官方怎么说。

为什么这个场景价值高:冷门库的资料在网上少,模型训练数据里几乎没有,凭记忆基本必错。Context7 索引了这些小众库的官方文档,这时候是唯一的可靠信源。


五、成本控制:文档注入的 token 经济学

5.1 拉文档不是免费的

每次 get-library-docs 返回的文档会进上下文,占用你的 token 配额。

tokens 参数实际进上下文占 200K 上下文的比例
3000~32001.6%
5000~53002.7%
10000~105005.3%
50000~5200026%

一次拉 50000 就是自杀。一次会话里拉三四次,上下文就满了。

5.2 最佳实践:按需、小量、多次

❌ 一次拉 20000 tokens 的库文档,然后慢慢用
✅ 每次只拉当前这一步需要的 3000-5000 tokens

为什么:拉进来但没用到的文档是纯浪费。而且大段文档会稀释模型对关键片段的注意力。

5.3 什么时候该拉,什么时候不该

情况要不要拉文档
用你很熟的主流库写常规代码❌ 不需要(React 的 useState 不用查)
用你没用过的新库✅ 必须
涉及版本升级✅ 必须
冷门库 / 小众框架✅ 必须
报错排查✅ 建议
简单语法问题❌ 不需要
库刚发布新版本✅ 必须(模型肯定不知道)

5.4 长会话的文档管理

长会话里反复拉文档会累积。两个办法:

办法 1:让 AI 自己总结并丢弃原文

查完文档后,把关键 API 签名整理成一份速查表(不超过 30 行),
然后我们基于这份速查表继续,不要再引用原始文档。

办法 2:定期开新会话

一个任务一个会话。做完就 /clear 重开。


五点五、进阶:把文档固化成项目资产

反复查同一个库是浪费。正确做法是查一次、固化下来、团队复用。

5.5.1 建立 API 速查表

<!-- docs/api-cheatsheet.md -->
# 常用库 API 速查

> 来源:Context7 查询
> 查询日期:2026-09-19
> 版本:见下表。**升级大版本时必须重新核对。**

## Next.js 15.1
| 场景 | 写法 | 易错点 |
|---|---|---|
| 读 cookie | `const c = await cookies()` | **必须 await**,14 是同步的 |
| 读 header | `const h = await headers()` | 同上 |
| 动态路由参数 | `const { id } = await params` | 15 起 params 是 Promise |
| Server Action | `'use server'` 放文件顶部或函数内 | 不能放组件里 |

## Prisma 5.22
| 场景 | 写法 | 易错点 |
|---|---|---|
| 事务 | `prisma.$transaction(async (tx) => {...})` | 回调内必须用 tx 不能用 prisma |
| 嵌套写入 | `include` + `create` | 深层嵌套有层数限制 |
| 软删除 | 手写 `deletedAt` 过滤 | Prisma 无内建软删除 |

## tRPC v11
| 场景 | 写法 | 易错点 |
|---|---|---|
| 无限查询 | `useInfiniteQuery` + `cursor` | v11 的 cursor 类型变了 |
| 错误处理 | `error.data?.code` | 与 v10 的 shape 不同 |

这份文件的价值:

  1. 团队成员不用重复查
  2. AI 可以直接读这份文件,比查 Context7 更快更省 token
  3. 版本升级时它是一份明确的核对清单

5.5.2 在 AGENTS.md 里声明触发规则

## AI 协作约定

涉及以下库的 API 时,先用 context7 查文档再写代码:
- Next.js(版本变化快,14/15 差异大)
- Prisma(v5/v6 差异大)
- tRPC(v11 与 v10 不兼容)

查询规则:
- topic 要写具体问题,不要留空
- tokens 控制在 3000-5000
- 常用 API 已固化在 docs/api-cheatsheet.md,先读那份,不够再查

以下库不用查(稳定且模型记得准):
- lodash、axios、zod

5.5.3 版本升级时的批量核对流程

1. 让 AI 读 docs/api-cheatsheet.md
2. 让它用 context7 查目标新版本的对应文档
3. 输出「旧写法 → 新写法」对照表
4. 人工核对对照表
5. 对照表确认后,才让 AI 批量改代码

顺序不能颠倒。先建对照表再改代码——否则 AI 会在 40 个地方犯同一个错。

5.5.4 速查表的维护纪律

规则说明
每次大版本升级后必须重新核对否则它就是一份错误文档,比没有更糟
标注查询日期让人知道时效性
只写易错点常规 API 不用记,模型记得准
进 Git,PR 评审它是团队资产不是个人笔记

六、选型对比

6.1 与 fetch-mcp 对比

维度Context7fetch-mcp
内容源官方版本化文档索引任意 URL
内容质量高(trustScore 筛选)取决于你给的 URL
代码片段抽取✅ 专门优化❌ 原文转 markdown
版本感知✅❌
需要你知道 URL❌ 不需要✅ 需要
灵活度低(只覆盖已索引的库)高(什么都能抓)

决策:

查的是常见库的 API 用法?
├─ 是 → Context7
└─ 否
   ├─ 你有确切的官方 URL? → fetch-mcp
   └─ 需要搜索找资料? → brave-search / exa

6.2 与直接喂文档对比

维度Context7手动喂文档
自动化✅ Agent 自主调用❌ 你手动
精准度按 topic 过滤整份文档全进
token 效率高低
覆盖依赖索引你自己控制
适用日常开发私有库 / 内部文档

重要:Context7 不覆盖私有库。你们公司内部的 SDK 文档,只能自己喂或者搭内部 RAG。

6.3 与 RAG 自建方案对比

维度Context7 MCP自建 RAG
部署成本零(npx 即用)高(向量库 + 索引管道)
覆盖公共库你索引什么就有什么
私有文档❌✅
维护不用管要更新索引
延迟中低(本地)

建议:公共库用 Context7,私有文档自建 RAG,两者互补不冲突。


七、故障排查表

#现象原因解决
1MCP 连不上,客户端显示 disconnectednpx 首次下载慢/失败手动跑一次 npx -y @upstash/context7-mcp 预热
2AI 不调用 Context7,直接凭记忆回答没触发关键词prompt 里显式写「先用 context7 查」
3resolve-library-id 返回空库名写错或没被索引换官方全名(如 "next.js" 而非 "next");冷门库可能没索引
4拉到的文档版本不对库 ID 选了旧版本分支选 trustScore 最高的那个 ID;检查 versions 字段
5文档内容没用(都是 README)topic 太泛或为空topic 写成具体问题,见 2.4 节
6上下文突然爆满tokens 设太大降到 3000-5000
7返回 429 限流免费额度用尽申请 API Key;降低调用频率
8文档里代码片段是截断的tokens 上限卡住提高 tokens 或缩小 topic 范围
9拉到的是博客不是官方文档选错了库 ID看 trustScore,官方库通常 > 9
10Windows 上 npx 报错路径/权限问题用 cmd 而非 PowerShell 跑一次;或指定完整路径
11同一个库每次拉的文档不一样topic 有随机性 + 索引更新正常现象;关键 API 让 AI 整理成速查表固化
12私有库查不到Context7 不索引私有库用 fetch-mcp 抓内部文档,或自建 RAG
13响应很慢网络 + 索引查询缩小 topic;接受首次查询慢,后续会快些
14AI 查了文档但仍然写错文档片段不完整让它把关键 API 签名复述一遍,你核对
15多个库混用时分不清没指定库 ID每次显式给 context7CompatibleLibraryID
16客户端重启后配置丢失配置文件路径写错Claude Code 用 claude mcp add;Cursor 写 ~/.cursor/mcp.json

八、安全注意事项

8.1 文档内容仍可能是错的

Context7 的文档来自上游仓库,索引本身可能有延迟或错误。

处理原则:

场景处理方式
常规 API 用法采信
关键业务逻辑(金额、权限、加密)必须自己核对官方文档原文
版本升级的破坏性变更对照官方 CHANGELOG 复核
安全相关配置不采信单一来源

8.2 prompt injection 的新入口

文档内容是从外部拉进来喂给模型的。如果某个库的文档里被植入了恶意指令,理论上会影响模型行为。

实际风险等级:低(Context7 索引的是知名开源库,且 trustScore 机制会过滤)。但两个防御习惯值得养:

  1. 不要让 AI 直接执行从文档里读到的命令,先看看是什么
  2. 关键配置变更要人工确认(尤其是涉及权限、网络、文件系统的)

8.3 不要过度依赖

Context7 解决的是「API 记错」问题,不解决:

  • 业务逻辑理解错误
  • 架构设计不合理
  • 性能问题
  • 安全漏洞

它是准确性工具,不是能力工具。


九、进阶用法

9.1 与其他 MCP 组合

Context7(查文档)
  + GitHub MCP(看源码 / 提 PR)
  + Desktop Commander(本地跑验证)
  = 「查文档 → 写代码 → 本地验证 → 提交」闭环

一个实际工作流:

1. [Context7] 查 Next.js 15 的 server action 用法
2. [AI] 写代码
3. [Desktop Commander] pnpm typecheck && pnpm test
4. 失败 → [Context7] 再查具体报错相关的文档
5. 通过 → [GitHub MCP] 提 PR

9.2 建立项目级的库速查表

对于项目常用的库,让 AI 查一次后固化下来:

<!-- docs/api-cheatsheet.md -->
# 常用库 API 速查(本项目专用)

> 来源:Context7 查询于 2026-09-19,版本见下。升级时必须重新核对。

## Next.js 15.1
- 服务端组件获取 cookie:`await cookies()`(**必须 await**)
- ...

## Prisma 5.22
- 事务:`prisma.$transaction(async (tx) => {...})`
- ...

这份文件进 Git,团队共享。避免每个人每次都重新查。

9.3 在 AGENTS.md 里声明文档查询约定

## AI 协作约定

涉及以下库的 API 时,先用 context7 查文档再写代码:
- Next.js(版本变化快)
- Prisma(v5/v6 差异大)
- tRPC(v11 与 v10 不兼容)

查询时 topic 要写具体问题,不要用空 topic。

这样 AI 会自动触发,不用你每次提醒。


十、小结

Context7 MCP 解决的是一个具体而高频的问题:模型用过期或不存在的 API 写代码。

三个落地要点:

  1. topic 决定成败。写成具体问题,别留空。
  2. token 控制在 3000-5000。按需多次拉,不要一次拉一大坨。
  3. 关键逻辑仍要人工核对。Context7 提高的是准确率,不是正确性保证。

以及一个判断标准:

如果你用的库在最近 12 个月内发过大版本,写代码前就该查一次。 如果库很老很稳定(比如 lodash),不用查。

相关推荐

查看更多 →
MCP开发

GitHub MCP:让 AI 直接读 Issue、改 PR、看 Actions 日志,不再靠你复制粘贴

2026 年 9 月 22 日 GitHub 宣布 Claude Opus 5.5 接入 Copilot,覆盖编程智能体(Coding Agent)与 Copilot CLI。当 Agent 真的开始「替你干活」时,一个老问题被放大了:**它看不见你的仓库上下文**。你要手动把 Issue 内容粘进对话框、把 CI 报错日志复制过去、把 PR 评审意见一条条转述——这些机械劳动占了人机协作时间的一大半。GitHub MCP 解决的就是这件事:它把 Issues、Pull Requests、Actions、代码搜索、文件读写、通知全部暴露成 MCP 工具,Agent 自己就能去取。本文覆盖完整的工具集(按 8 个功能域分类)、本地 Docker 与远程托管两种部署、四套客户端配置(Claude Code / Cursor / VS Code / Trae)、三个实战场景(Issue 自动分流 / CI 失败自愈 / 发布前变更审计)、权限与安全红线(它默认有写权限,这是最大的风险点)、只读工具集配置、以及 18 条故障排查表。

2026-09-23
#MCP#GitHub
MCP开发

Beacon MCP:让 Claude Code 学到的东西,Codex 和 Cursor 也能用上

2026 年 9 月 21 日,Asymptote Labs 开源的 Beacon 在 Agent 圈刷屏。它解决的问题极其具体:你在 Claude Code 里花了半小时教会 Agent 你们仓库的迁移写法,第二天在 Cursor 里又得从头教一遍;Codex 遇到同样的调试问题,还得自己重新发现一遍解法。**每个 Agent 会话都在生产知识,但这些知识被锁死在各自的 transcript 里**,会话一结束就蒸发。Beacon 的做法是坐在 harness 层之上:捕获 Claude Code / Cursor / Codex / OpenCode / Cline 等 20+ 个 harness 的完整会话历史,用轻量判断模型(Jev)给每次会话打分,把高信号的流程、纠错、调试模式提炼成可复用知识,再通过 MCP 与 Agent Skills 喂回给未来的 Agent。本文覆盖它的工具集、四套客户端配置、三个实战场景、与 AGENTS.md / 上下文文件的选型对比、隐私与安全红线(它会捕获你的完整会话,这件事必须想清楚),以及 16 条故障排查表。

2026-09-22
#MCP#Beacon
MCP开发

GitHub MCP Server:让 AI 接管你的 Git 工作流

官方 GitHub MCP Server,让 AI 客户端管理 issue、PR、仓库、分支,实现「对话式开发」。

2026-07-27
#MCP#GitHub
MCP开发

MCP Elicitation 实战:让服务端在缺参数时反向向用户提问——受限 Schema 设计 + 四套客户端配置 + 13 行排查表

写 MCP Server 的人迟早会遇到一个尴尬场景:工具必填参数用户没给,服务端要么猜一个(猜错就出事),要么返回一个干巴巴的「缺少参数 xx」让 Agent 自己去追问(Agent 经常追问得驴唇不对马嘴)。MCP 协议里的 Elicitation 就是为这个场景设计的第三个「反向能力」——服务端可以在执行过程中主动向客户端发起一次提问,由客户端把问题渲染成表单弹给用户,用户填完再回传,全程服务端不需要自己实现任何 UI、不需要存任何凭据。本文讲透它的机制与边界:elicitation/create 请求的完整结构、为什么 requestedSchema 被刻意限制成只支持原始类型(这是安全设计不是能力不足)、用户的三种响应(accept / decline / cancel)各自的语义差异、以及最关键的——为什么不能在 Elicitation 里索取密码和 API Key。含 TypeScript SDK 完整实现(含类型定义与降级路径)、Claude Code / Cursor / VS Code + Copilot / Trae 四套带中文注释的配置、三个实战场景(部署确认 / 缺失参数补全 / 敏感操作二次确认)、与 Sampling / 传统参数校验的选型对比、六条安全注意事项,以及 13 行故障排查表。

2026-10-12
#MCP#Model Context Protocol