LLVM文档搜索服务

一个基于MCP协议的LLVM文档搜索服务,提供实时全文搜索功能,帮助AI助手快速获取LLVM API和编译器内部信息。

  • by spaghettifunk
  • Go
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 animalang/mcp-llvm

使用说明

MCP LLVM 文档服务器

A. 模型上下文协议(MCP) 提供可搜索访问的LLVM文档的服务器。这使得像Claude Code这样的AI助手能够实时搜索LLVM文档,以回答有关LLVM API、编译器内部机制等方面的问题。

特点/功能

  • 全文搜索 通过使用Bleve查阅LLVM文档
  • 符合MCP标准/规定 JSON-RPC 2.0 协议
  • 智能内容提取 带有HTML解析和代码片段生成功能
  • 快速索引 带有并发工作线程池
  • 可配置的 LLVM版本和搜索后端

什么是MCP?

模型上下文协议(MCP)是一项开放标准,它使人工智能助手能够安全地访问外部工具和数据源。此服务器实现了MCP,以提供LLVM文档搜索功能,该功能可被任何兼容MCP的客户端(如Claude Code)使用。

安装

先决条件

  • Go 1.24.4 或更高版本
  • Git

从源代码构建

git clone https://github.com/animalang/mcp-llvm.git
cd mcp-llvm
go build -o mcp-llvm

这将创建 mcp-llvm 在当前目录中可执行。

用法

运行服务器

首次运行时,服务器将自动下载并索引LLVM文档:

./mcp-llvm

命令行选项

./mcp-llvm [flags]

Flags:
  -m, --mode string           Search backend mode: "bleve" or "semantic" (default: "bleve")
  -l, --llvm-version string   LLVM version to index (default: "21.1.2")
  -r, --repo-path string      Path to store LLVM documentation (default: "~/.mcp-llvm/docs")
  -i, --index-path string     Path to store search index (default: "~/.mcp-llvm/bleve-index")
  -h, --help                  Display help information

示例

# Use LLVM 21.1.2 (default)
./mcp-llvm

# Use a different LLVM version
./mcp-llvm --llvm-version 20.0.0

# Use custom paths
./mcp-llvm --repo-path /path/to/llvm-docs --index-path /path/to/index

与Claude代码的集成

要使用此MCP服务器与Claude代码配合:

1. 构建服务器

cd /path/to/mcp-llvm
go build -o mcp-llvm

2. 配置Claude代码

编辑您的MCP配置文件:

macOS/Linux: ~/.config/claude-code/mcp.json Windows: %APPDATA%\claude-code\mcp.json

添加以下配置:

{
  "mcpServers": {
    "llvm-docs": {
      "command": "/absolute/path/to/mcp-llvm",
      "args": [
        "--llvm-version", "21.1.2",
        "--mode", "bleve"
      ]
    }
  }
}

注服务器将自动使用 ~/.mcp-llvm/docs 并且 ~/.mcp-llvm/bleve-index 作为默认路径。您可以覆盖这些路径,使用 --repo-path 并且 --index-path 如有需要。

重要的替换 /absolute/path/to/mcp-llvm 使用您构建的可执行文件的实际绝对路径。

3. 重启Claude代码

保存配置后,重启Claude Code以加载新的MCP服务器。

4. 使用该工具

一旦配置完成,Claude Code将自动获得对(所需资源/功能)的访问权限 llvm_search 工具。你可以提出这样的问题:

  • “LLVM的PassManager是如何工作的?”
  • “LLVM IR 函数的语法是什么?”
  • “解释LLVM的即时编译(JIT)API”

Claude Code 将自动调用 llvm_search 当需要关于LLVM的信息时,使用该工具。

它是如何工作的

建筑学

┌─────────────┐         ┌─────────────┐         ┌──────────────┐
│ Claude Code │ ◄─────► │  MCP Server │ ◄─────► │ LLVM Docs    │
│  (Client)   │  stdio  │ (This tool) │         │ (Bleve Index)│
└─────────────┘         └─────────────┘         └──────────────┘

工作流程

  1. 初始化首次运行时,服务器会从GitHub克隆LLVM文档
  2. 索引编制HTML文档文件使用Bleve进行索引,以便快速进行全文搜索
  3. MCP协议服务器通过stdin/stdout使用JSON-RPC 2.0与Claude Code进行通信
  4. 搜索当克劳德需要LLVM信息时,它会向服务器发送一个搜索查询
  5. 结果服务器返回带有标题和路径的相关文档片段

MCP 工具公开

llvm_search

查阅LLVM文档。

参数:

  • query (字符串,必填):搜索查询(例如,“PassManager”,“JIT 编译”)
  • limit (整数,可选):最大结果数量(默认:5,最大:20)

返回值:

  • 包含标题、文件路径和内容摘录的文档片段数组

项目结构

mcp-llvm/
├── cmd/
│   └── root.go           # CLI command definition
├── internal/
│   ├── mcp/
│   │   └── mcp.go        # MCP protocol implementation
│   ├── search/
│   │   ├── search.go     # Search interface
│   │   ├── bleve.go      # Bleve search backend
│   │   └── semantic.go   # Semantic search (stub)
│   └── repository/
│       └── repository.go # Git repo management
├── main.go               # Entry point
├── go.mod                # Go module definition
└── README.md             # This file

发展

运行测试

go test ./...

添加一个新的搜索后端

  1. 实施 SearchBackend 接口内(或“在接口中”) internal/search/search.go
  2. 将您的后端添加到工厂中 NewSearchBackend()
  3. 使用 --mode 标志以选择您的后端

故障排除

索引未构建

如果索引构建失败,请删除索引目录并重试:

rm -rf .llvm-docs/bleve-index
./mcp-llvm

克劳德代码找不到工具

  1. 验证路径中的内容 mcp.json 是绝对的(而非相对的)
  2. 检查可执行文件是否具有执行权限: chmod +x mcp-llvm
  3. 查看Claude Code的日志以获取错误信息
  4. 通过运行服务器并发送JSON-RPC请求来手动测试服务器

运行缓慢

  • 首次运行时会比较慢,因为它正在克隆和索引文档
  • 后续的运行速度很快,因为索引已被缓存
  • 考虑使用SSD以获得更好的索引性能

许可证

详见LICENSE文件。

贡献

欢迎贡献!请在GitHub上提交问题或拉取请求。

资源