项目简介
KIRI MCP 代码上下文服务器旨在为 LLM 提供高效、准确的代码库信息。它通过索引 Git 仓库中的代码到 DuckDB 数据库,并暴露一系列智能工具(如语义搜索、代码片段提取、依赖分析),帮助 LLM 理解代码结构、功能和依赖关系,从而提升代码理解和生成能力。
主要功能点
- 智能代码上下文提取: 根据任务目标,智能抽取最相关的代码片段,准确率高达 95%。
- 语义搜索: 支持多词查询、依赖分析和 BM25 排名,高效查找相关文件和代码。
- 代码片段获取: 按符号边界(函数、类)获取特定代码段,提供清晰的上下文。
- 依赖关系分析: 追踪文件间的导入/导出关系,支持入站和出站依赖图,便于影响分析和重构。
- 自动同步: 监视模式 (Watch mode) 可在文件变更时自动重新索引,保持数据最新。
- MCP 原生支持: 无缝集成 Claude Desktop、Codex CLI 等 MCP 客户端。
- 多种语言支持: 支持 TypeScript、Swift、PHP 的 AST 级别符号提取,其他语言提供文件级支持。
安装步骤
- 前提条件: 确保您的系统已安装 Node.js (v18.0.0 或更高版本), npm (v9.0.0 或更高版本) 和 Git (v2.0 或更高版本)。
- 全局安装 (推荐): 打开终端,运行以下命令进行全局安装:
npm install -g kiri-mcp-server - 使用 npx (无需永久安装): 如果您不想进行永久全局安装,可以直接在 MCP 客户端配置中使用 'npx' 运行 KIRI。
服务器配置 (MCP 客户端所需)
MCP 客户端需要配置 KIRI MCP 服务器的启动命令及其参数。以下是配置示例及其说明,请根据您的 MCP 客户端(如 Claude Code 或 Codex CLI)的文档进行调整:
- 服务器名称 (server name): 'kiri' (您可以自定义此名称)
- 启动命令 (command):
- 如果您已全局安装 KIRI,使用 'kiri'。
- 如果您使用 'npx' 启动 KIRI,使用 'npx'。
- 命令参数 (args):
- 'kiri-mcp-server@latest': 如果您使用 'npx' 启动 KIRI,这是 KIRI 包的名称和版本。如果您已全局安装,此参数不需要。
- '--repo .': 指定 KIRI 索引的 Git 仓库根目录。'.' 表示当前目录。
- '--db .kiri/index.duckdb': 指定 KIRI 用于存储索引数据的 DuckDB 数据库文件的路径。'.kiri/index.duckdb' 会在仓库根目录下创建一个 '.kiri' 目录并存放数据库文件。
- '--watch': 启用监视模式,使 KIRI 在文件变更时自动更新索引。
超时配置 (daemon ready timeout):
对于大型仓库,KIRI 的初始索引可能需要较长时间。您可能需要在 MCP 客户端中增加 KIRI 守护进程的启动超时时间:
- Claude Code (示例 JSON 配置片段):
{ "mcpServers": { "kiri": { "command": "kiri", // 或 "npx" "args": ["--repo", ".", "--db", ".kiri/index.duckdb", "--watch"], "env": { "KIRI_DAEMON_READY_TIMEOUT": "480" // 守护进程初始化超时时间,单位秒 } } } } - Codex CLI (示例 TOML 配置片段):
[mcp_servers.kiri] command = "kiri" # 或 "npx" args = ["--repo", ".", "--db", ".kiri/index.duckdb", "--watch"] startup_timeout_sec = 240 # 守护进程初始化超时时间,单位秒
基本使用方法
- 重启 MCP 客户端: 配置完成后,重启您的 MCP 客户端(如 Claude Desktop 或 Codex CLI)以加载 KIRI 服务器。首次启动时,KIRI 会自动索引您的仓库(大型项目可能需要几分钟)。
- 调用 KIRI 工具: 在与 LLM 客户端的对话中,可以直接通过工具调用来获取代码上下文:
- 获取核心上下文: 使用 'context_bundle' 工具,提供明确的任务目标。
- 示例: “查找用户认证流程和 JWT token 验证相关的代码。”
- 搜索文件: 使用 'files_search' 工具,搜索特定关键词。
- 示例: “搜索所有 API endpoint handler 的文件。”
- 获取代码片段: 使用 'snippets_get' 工具,提供文件路径和行号。
- 示例: “显示 'src/server/handlers.ts' 文件中第 100 行附近的函数实现。”
- 分析依赖: 使用 'deps_closure' 工具,分析文件依赖关系。
- 示例: “如果我修改 'utils.ts' 中的 'parseRequest' 函数,会影响哪些文件?”
- 重新排序结果: 使用 'semantic_rerank' 工具,对现有搜索结果进行语义排序。
- 示例: “根据‘用户认证流程’重新排序这些候选文件。”
- 获取核心上下文: 使用 'context_bundle' 工具,提供明确的任务目标。
信息
分类
开发者工具