context7-mcp
Context7 把 AI 编码从"凭训练记忆"变成"实时查官方文档"。
- 它是什么:Upstash 开源的 MCP 服务器,索引 3500+ 库的官方文档。
- 核心痛点:LLM 训练数据落后于库迭代,AI 经常用旧版 API 或凭空幻觉 API。
- 触发方式:在 prompt 末尾加
use context7,MCP 自动把最新版文档塞进上下文。 - Token 友好:~1K token 工具开销,比 GitHub MCP 少一个数量级。
- 成熟度:截至 2026-06 GitHub 57k+ Stars,覆盖 Cursor/Claude Code/Codex 全家桶。
- 局限:私有仓库需 API Key,未收录的库 MCP 返空。
- 结论:对不熟的库懒得翻文档,装它最划算。
What:把"代码知识库"塞进 LLM 的上下文
Context7 是 Upstash 推出的 MCP 服务器,本质是专门给代码文档做的 RAG 检索。
它做的事情非常克制:
- 后台维护一份 3500+ 常用库的官方文档索引(GitHub README、官方 docs、源码注释、JSDoc)
- 对外只暴露两个工具:
resolve-library-id(模糊词 → 精确库 ID)和get-library-docs(库 ID → 切片后的文档) - 当 prompt 里出现触发词
use context7,MCP 把当前任务相关的文档切片动态塞进上下文,再交给模型生成
和 Cursor 自带 "@Docs" 的关键区别:
| 维度 | Cursor @Docs | Context7 |
|---|---|---|
| 文档源 | 用户手动引入 | 自动从仓库拉 |
| 版本控制 | 取决于用户加的是哪个 | 按版本精确切片 |
| 触发 | 每次写 @xxx | prompt 末尾加一次 |
| 跨客户端 | 仅 Cursor | Cursor/Claude Code/Codex/Copilot |
| Token | 全文加载 | 按预算切片 |
一句话:Context7 是把"主动查文档"变成模型自己喊一声就能拿到的事。
Why:为什么 LLM 写代码会"翻车"
LLM 写代码翻车的本质只有一个字——旧。
模型训练数据有截止日期。一个库从 v15 迭代到 v19,函数签名改了 4 次、配置项删了十几个、新增了几个实验性 API。这些变化一条都进不到模型权重里。
具体表现有三种:
- API 过期:用 React Router v6 的写法写 v7 项目,配对了但 API 拼法变了
- API 幻觉:凭空编造一个不存在的 API,比如
Mongoose里编出db.collection.findAndModify()这种伪方法 - 版本错位:同一库的不同版本答案不一样,Next.js 14 和 15 的 middleware 写法差异巨大
直观的痛点场景——你让 AI 写一段 Next.js 15 的 middleware,它给你返回 v13 时代的写法,import { cookies } from 'next/server' 的用法、matcher 配置、export 形式全错位。代码编译失败,你得再花 10 分钟告诉它"用新的 API"。
Context7 的解法是绕过训练数据,从源头拉:
- 每次对话都从 GitHub 仓库或官方文档站实时抓取(不是训练时缓存的快照)
- 按版本过滤(v15 只拉 v15 的文档,不会拿 v13 的糊弄)
- 按 token 预算切片(默认 ~5000 token)
它不是让模型"记"得更好,是让模型"查"得到的永远是最新的。
How:三步集成 + 一个 prompt 示例
Step 1: 装 server
npx 一行启动,不需要单独的守护进程:
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp@latest"]
}
}
}
写到对应客户端的配置里:
- Claude Code:
~/.claude/mcp.json或项目根.mcp.json - Cursor:
~/.cursor/mcp.json - Codex:项目根
.codex/mcp.json
Step 2: 加 API Key(可选)
公开库不需要 API Key,私有仓库才需要。去 context7.com/dashboard 拿一个免费 Key,写到 env 里:
{
"mcpServers": {
"context7": {
"command": "npx",
"args": ["-y", "@upstash/context7-mcp@latest"],
"env": {
"CONTEXT7_API_KEY": "<REDACTED>"
}
}
}
}
Step 3: 触发——prompt 末尾加 use context7
正常 prompt 完全不变,只在结尾加一句触发词:
帮我写一段 Next.js 15 的 middleware,根据 cookie 判断访问者所属 A/B 桶:
A 桶重定向到 /v2 首页,B 桶保持原路径。use context7
模型看到 use context7 后的执行流:
不写触发词,模型不会主动调。这也是为啥社区里不少人装了 Context7 觉得"没用"——他们只是装了,没让模型去用。
两个最常见的问题
第一,不想每次都写 use context7。模型默认不知道你想用,得手动加触发词。一个 workaround 是在项目根加 AGENTS.md 或 CLAUDE.md,写明"对所有涉及外部库的问题默认 use context7",客户端启动时会把这段指令注入到 system prompt。
第二,未收录的库模型会"白问一次"。3500+ 不是覆盖一切,团队内部的基础库、没有官方文档的内部分支都会查不到。这种情况 MCP 工具直接返空,模型就回退到训练数据。装了等于没装,自己读 docs 反而更快。
该不该装
| 场景 | 建议 |
|---|---|
| 主力写 React/Vue/Next.js 等热门库 | 必装 |
| 用 Cursor/Claude Code 做主力 IDE | 必装 |
| 写内部基础库 / 闭源 SDK | 价值有限 |
| 团队规范文档齐全 + 内网文档站 | 看情况 |
| 只用一两个库且都很熟 | 不装也行 |
把它当成"懒人版的 docs 阅读器"——对不熟的库价值最大,对熟的库提升很有限(前提是模型的训练数据没太落后)。
References
- upstash/context7 GitHub —— Upstash, 截至 2026-06
- Context7 MCP 官网
- MCP 协议规范
- Enes Akar 创始人的吐槽长文 —— X / Twitter