langspec mcp
编程语言规范搜索和引用服务器,基于 模型上下文协议(MCP).
获取官方语言规范,使用SQLite FTS5对其进行索引,并为Claude等AI助手提供结构化搜索工具。
特性
- 多语言支持 --Go、Java、Rust、TypeScript从官方来源索引
- 全文搜索 BM25在语言规范部分排名
- 结构化引用 具有节路径、规范URL和上下文片段
- 基于差异的重新索引 --仅更新重新摄入时更改的部分
- 稳定的区段ID --没有HTML锚点的标题将获得确定性ID
- 源策略控制 --仅可配置摘录或每种语言的全文访问
- 每周学习计划 --从规范TOC自动生成的研究计划
支持的语言
| 语言 | 来源 | 章节 | 策略 |
|---|---|---|---|
| 去吧 | Go编程语言规范 | ~162 | 单个HTML |
| Java Java语言规范(SE21) | ~575 | 多页HTML(19章) | |
| 生锈 | Rust 参考手册 | ~1401 | GitHub Markdown(119个文件) |
| TypeScript | TypeScript手册 | ~178 | GitHub Markdown(10个文件) |
快速开始
先决条件
- Node.js 18+
- npm
安装和构建
git clone
cd langspec-mcp
npm install
npm run build索引语言规范
# Index Go specification (default)
npm run ingest
# Specify a language
npm run ingest -- --language go
npm run ingest -- --language rust
npm run ingest -- --language java
npm run ingest -- --language typescript
# Index all languages at once
npm run ingest -- --language all启动MCP服务器
npm run serve服务器使用JSON-RPC 2.0通过stdio进行通信。
MCP工具
list_languages
列出所有索引语言及其文档。
// Input
{}
// Output
[
{ "language": "go", "docs": ["go-spec"] },
{ "language": "java", "docs": ["jls"] },
{ "language": "rust", "docs": ["rust-reference"] },
{ "language": "typescript", "docs": ["ts-handbook"] }
]list_versions
列出一种语言的可用版本。
// Input
{ "language": "go" }
// Output
[{ "version": "snapshot-20260208", "fetched_at": "2026-02-08T...", "source_url": "https://go.dev/ref/spec" }]search_spec
在规范部分进行全文搜索。
// Input
{
"query": "goroutine",
"language": "go",
"filters": { "limit": 5 }
}
// Output — array of citations with snippets centered on query matches
[{
"section_id": "Go_statements",
"title": "Go statements",
"section_path": "Statements > Go statements",
"url": "https://go.dev/ref/spec#Go_statements",
"snippet": { "text": "...A \"go\" statement starts the execution of a function call as an independent concurrent thread of control, or goroutine...", "start_char": 0, "end_char": 300 },
"score": -8.23
}]get_section
检索特定部分的完整详细信息。
// Input
{ "language": "go", "version": "snapshot-20260208", "section_id": "Go_statements" }
// Output
{
"citation": { "..." },
"content": {
"excerpt": "A \"go\" statement starts...",
"is_truncated": false,
"fulltext_available": false
}
}build_learning_plan
根据规格目录制定每周学习计划。
// Input
{
"language": "rust",
"total_weeks": 6,
"focus_areas": ["Types", "Traits"]
}
// Output
{
"language": "rust",
"version": "snapshot-20260208",
"total_weeks": 6,
"total_sections": 1401,
"weeks": [
{
"week": 1,
"theme": "Introduction, Notation",
"sections": ["..."],
"estimated_minutes": 45
}
]
}Claude桌面配置
添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"langspec": {
"command": "node",
"args": ["/absolute/path/to/langspec-mcp/dist/index.js", "serve"]
}
}
}项目结构
src/
├── config/
│ └── languages.ts # LanguageConfig registry (4 languages)
├── index.ts # CLI entry point (ingest / serve)
├── server.ts # MCP server + tool registration
├── types.ts # TypeScript types + Zod schemas
├── db/
│ ├── schema.ts # Database initialization + migrations
│ └── queries.ts # Query methods + snippet extraction
├── ingestion/
│ ├── index.ts # Pipeline orchestrator
│ ├── fetcher.ts # Multi-strategy fetch (HTML / GitHub Markdown)
│ ├── parser.ts # HTML + Markdown → structured sections
│ └── normalizer.ts # Section normalization + canonical URLs
└── tools/
├── list-languages.ts
├── list-versions.ts
├── search-spec.ts
├── get-section.ts
└── build-learning-plan.ts技术栈
- TypeScript (ES模块)
- @模型上下文协议/sdk --MCP服务器框架
- 更好平方3 + FTS5 --存储和全文搜索
- 再见 --HTML解析
- 黄道带 --输入验证
发展
# Watch mode
npm run dev
# Build
npm run build
# Run tests
npm test
# Re-index (diff-based — skips unchanged sections)
npm run ingest路线图
- \[x\] M1:Go规范+stdio MCP服务器+SQLite/FTS5
- \[x\] 平方米:引用精度(基于差异的重新索引、片段、稳定ID、源策略)
- \[x\] 立方米:
build_learning_plan工具(来自TOC的每周学习计划) - \[x\] M4:多语言支持(Go、Java、Rust、TypeScript)
- \[ \] M5:不起作用(缓存、速率限制、可观察性、局域网身份验证)
许可证
麻省理工学院
