codesight mcp
Security-hardened, token-efficient code intelligence for AI assistants.
一 MCP服务器 它通过树型AST解析对本地和GitHub代码库进行索引,然后公开34个用于符号检索、代码图遍历和影响分析的工具——所有这些工具都具有字节偏移精度,与发送完整文件相比,可以将令牌成本降低约99%。支持66种语言。
______________________________________________________________________
快速导航
______________________________________________________________________
特性
代码索引和检索
- 树型AST解析 跨66种语言进行字节偏移O(1)符号检索
- 增量索引 通过内容哈希——在重新索引时跳过未更改的文件
- 本地+GitHub存储库索引 --索引磁盘上的文件夹或从GitHub获取
- 人工智能生成的摘要 -用于符号描述的可选Anthropic API集成
- 全文搜索 通过支持编校的匹配跨索引文件内容
- 语义搜索 --通过设备嵌入进行混合关键字+矢量评分(可选
[semantic]额外)
代码图和关系分析
- 呼叫者和街道 --谁调用函数,它调用什么?
- 呼叫链 --追踪任意两个符号之间的完整路径
- 类型层次结构 --继承树和接口实现
- 导入图形 --哪些文件导入什么,从哪里导入?
- 影响分析 --更改功能,查看下游受影响的所有内容
安全
- 6步路径验证链 --空字节、遍历、限制、解析、包含、符号链接
- 内容边界标记 --间接快速注射防御(微软重点研究)
- 错误清理 --原始异常永远不会到达人工智能;系统路径总是被剥离
- MCP工具注释 --readOnlyHint、destructiveHint、幂等Hint、openWorldHint在所有34个用于客户端权限决策的工具上
- 2495次测试 --具有真实临时目录的对抗性、安全性、集成性、基准测试、模糊性和压力覆盖
______________________________________________________________________
支持的语言
codesight mcp支持 66种编程语言 通过树形图,包括Python、JavaScript、TypeScript、Go、Rust、Java、C/C++、C#、Ruby、Swift、Kotlin、PHP、Dart、Perl、Haskell、Scala、Erlang等49种语言。请参阅 完整语言列表 了解详情。
每种语言解析器都提取函数、类、方法、参数、调用关系、导入和继承,以构建一个全面的代码图。
______________________________________________________________________
快速开始
步骤1:安装
# From source (recommended — not published to PyPI)
git clone https://github.com/cmillstead/codesight-mcp.git
cd codesight-mcp
uv sync # recommended — uses lockfile with pinned versions
# or: pip install -e . (uses version ranges, not the lockfile)步骤2:注册MCP服务器
使用 claude mcp add 注册。这是Anthropic推荐的方法 使用MCP执行代码 模式——服务器通过MCP协议自行描述其工具,您的客户端通过以下方式自动发现它们 tools/list。不需要手动工具列表或每个工具的权限配置。
claude mcp add codesight-mcp \
-e CODESIGHT_ALLOWED_ROOTS=/Users/you/src \
-e GITHUB_TOKEN=ghp_... \
-- /path/to/codesight-mcp/.venv/bin/codesight-mcp| 变量 | 必填 | 描述 |
|---|---|---|
CODESIGHT_ALLOWED_ROOTS | 是(本地) | 冒号分隔目录 index_folder 可以访问。如果未设置,默认情况下会被拒绝。 |
GITHUB_TOKEN | 是(GitHub) | 私有仓库需要;建议避免对公共回购的利率限制。 |
ANTHROPIC_API_KEY | 否 | 启用AI生成的符号摘要。如果未设置,则返回到docstring。 |
所有34个工具包括 MCP工具注释 --每个工具都声明它是只读的、破坏性的、幂等的,还是访问外部服务的。您的MCP客户端使用这些注释自动做出权限决策,因此您不需要为每个工具单独配置权限:
| 注释 | 含义 | 工具 |
|---|---|---|
readOnlyHint: true | 不修改任何状态 | 25工具(搜索、导航、分析) |
destructiveHint: false, idempotentHint: true | 创建/更新状态,可以安全重试 | index_repo, index_folder |
destructiveHint: true, idempotentHint: true | 删除数据,可以安全重试 | invalidate_cache |
openWorldHint: true | 访问外部服务(GitHub、Anthropic) | index_repo, index_folder |
步骤3:为存储库建立索引
在任何其他工具工作之前,您必须至少索引一个存储库。问你的AI:
- 本地文件夹: *“将仓库索引到~/src/myproject”*
- GitHub仓库: *“索引GitHub仓库所有者/myproject”*
AI呼叫 index_folder 或 index_repo,它获取文件、解析AST并将符号提取到 ~/.code-index/。后续调用会自动跳过未更改的文件。
第四步:探索
一旦被索引,AI就会使用 get_repo_outline, search_symbols,以及 get_symbol 导航代码库——只检索所需的符号,而不是整个文件。
步骤5(可选):将CLAUDE.md添加到索引存储库
添加一个 CLAUDE.md 对于每个索引仓库,Claude Code更喜欢codesight mcp而不是读取完整文件:
## Code Navigation
This repo is indexed in codesight-mcp. Use codesight-mcp MCP tools for code
exploration instead of reading full files:
- `search_symbols` — find functions/classes/types by name or description
- `get_file_outline` — all symbols in a file with signatures
- `get_symbol` — full source of a specific symbol
- `get_repo_outline` — directory structure and language breakdown
- `get_callers` / `get_callees` — call graph navigation
- `get_call_chain` — trace execution paths between two symbols
- `get_impact` — see what's affected by changing a symbol
Use `Read` only for content that isn't a named symbol (config files, etc).______________________________________________________________________
工具
codesight mcp曝光 34个MCP工具 分为八类:
索引
| 工具 | 说明 |
|---|---|
index_repo | 索引GitHub存储库(获取、解析AST、提取符号) |
index_folder | 索引本地文件夹(遍历、解析AST、提取符号) |
list_repos | 列出所有索引存储库 |
invalidate_cache | 删除索引以强制完全重新索引 |
导航
| 工具 | 说明 |
|---|---|
get_repo_outline | 高级概述:目录、文件数量、语言细分 |
get_file_tree | 索引仓库的文件树,可选择按路径前缀过滤 |
get_file_outline | 包含签名和摘要的文件中的所有符号 |
get_symbol | 特定符号的完整源代码(字节偏移检索) |
get_symbols | 在一次呼叫中批量检索多个符号 |
get_symbol_context | 一次调用中的符号+兄弟符号+父类信息 |
搜索
| 工具 | 说明 |
|---|---|
search_symbols | 按名称、签名、摘要或文档字符串搜索符号 |
search_text | 在索引文件中进行全文搜索(与编辑内容进行匹配) |
search_references | 文本搜索功能丰富,每次点击都有封闭的符号上下文 |
代码图
| 工具 | 说明 |
|---|---|
get_callers | 查找调用给定符号的所有函数 |
get_callees | 查找给定符号调用的所有函数 |
get_call_chain | 跟踪两个符号之间的执行路径(带循环检测的BFS) |
get_type_hierarchy | 显示继承树——一个类的父母和孩子 |
get_imports | 显示文件或符号的导入关系 |
get_impact | 影响分析——变更下游受影响的一切 |
分析和可视化
| 工具 | 说明 |
|---|---|
analyze_complexity | 找出最复杂/最具风险的符号——圈复杂度、认知复杂度、嵌套深度、扇入/扇出、复合风险评分。支持路径过滤和排序模式。 |
get_key_symbols | 在调用图上使用PageRank按结构重要性对符号进行排名。标识最相关和最依赖的符号。 |
get_diagram | 生成Mermaid图——从代码图中调用图、类型层次结构、导入树和影响图。 |
get_dead_code | 查找未引用的符号——调用方或导入方为零的函数和类。 |
get_status | 服务器状态——存储配置、索引统计信息和功能标志。 |
get_usage_stats | 每个工具的调用次数、错误率、平均响应时间和未调用的工具。 |
verify | 验证索引完整性——校验和、符号一致性和文件是否存在。 |
lint_index | 审核索引质量——缺少字段、孤立符号、过时数据。 |
安全
| 工具 | 说明 |
|---|---|
scan_security | 扫描符号以查找危险的API使用模式(19个OWASP/CWE规则) |
generate_sbom | 生成软件物料清单(CycloneDX、SPDX或内部JSON) |
check_licenses | 分析锁文件中的依赖许可证并标记风险 |
trace_taint | 通过代码图转发BFS源到汇污染分析 |
依赖和困难
| 工具 | 说明 |
|---|---|
get_dependencies | 外部与内部导入分析——使用哪些包以及由哪些文件使用 |
compare_symbols | 使用内容哈希的两个索引版本之间的符号级差异 |
get_changes | 使用可选的下游影响分析将git diff映射到受影响的符号 |
______________________________________________________________________
自然语言示例
索引后,使用简单的英语通过您的AI助手进行交互:
查找代码
- *“在哪里
process_payment功能?"* - *“显示与身份验证相关的所有类”*
- *“查找处理数据库连接的任何代码”*
理解关系
- *“什么函数调用
validate_input?"* - *“什么
initialize_system打电话?"* - *“向我展示来自的完整呼叫链
main到process_data"* - *“继承层次是什么
BaseController?"*
影响分析
- *“如果我改变
calculate_tax,还有什么受到影响?"* - *“哪些文件导入
utils模块?"* - *“让我看看下游的一切
authenticate_user"*
探索结构
- *“请概述此存储库”*
- *“里面有什么符号
src/server.py?"* - *“列出所有索引仓库”*
______________________________________________________________________
代码图和关系分析
codesight mcp根据AST解析过程中提取的关系构建内存中的代码图。不需要外部图数据库——图使用在查询时根据符号索引构造的集合邻接表的字典。
它是如何工作的:
- 在索引过程中,AST解析器提取
calls,imports,以及inherits_from每个符号的关系 - 这些关系与JSON索引中的符号元数据一起存储
- 在查询时,
CodeGraph.build(symbols)从符号字典构造图 - 图形工具(调用者、被调用者、调用链、影响)使用具有循环检测的BFS遍历此结构
与...相比 CodeGraphContext: codesight mcp不使用外部数据库(FalkorDB/Neo4j)。权衡是简单性和零配置与处理大量图形的能力。对于大多数项目(数千个文件),内存中的方法是快速且足够的。
______________________________________________________________________
Git钩子:提交和推送时自动重新索引
codesight mcp包括自动保持索引最新的git挂钩:
| 钩子 | 触发器 | 更新 |
|---|---|---|
post-commit | 每次提交 | 本地文件夹索引 |
post-push | 每次推送 | GitHub仓库索引(自动检测远程) |
在任何仓库中安装:
cp /path/to/codesight-mcp/hooks/post-commit .git/hooks/post-commit
cp /path/to/codesight-mcp/hooks/post-push .git/hooks/post-push
chmod +x .git/hooks/post-commit .git/hooks/post-push这两个钩子都在后台运行,因此它们永远不会阻塞您的工作流程。移除 --no-ai 如果你想自动更新人工智能生成的摘要,可以从任一钩子中选择。
一次性设置 --git钩子不继承shell环境,因此凭据和二进制路径必须单独提供:
mkdir -p ~/.config/codesight-mcp
cat > ~/.config/codesight-mcp/env <<'EOF'
export GITHUB_TOKEN=ghp_...
export CODESIGHT_BIN=/path/to/.venv/bin/codesight-mcp
EOF
chmod 600 ~/.config/codesight-mcp/env您还可以直接从命令行进行索引:
codesight-mcp index ~/src/myproject # index a local folder
codesight-mcp index ~/src/myproject --no-ai # skip AI summaries (faster)
codesight-mcp index-repo owner/myproject # index a GitHub repo______________________________________________________________________
安全模型
codesight mcp将连接的AI视为不受信任的主体。每个工具参数在使用前都经过验证。索引中的每个文件路径在检索时都会重新验证。错误消息经过净化,因此系统路径永远不会泄漏。
| 层 | 防御 |
|---|---|
| 路径验证 | 6步链:空字节、遍历、长度限制、解析、包含、符号链接检查 |
| 内容边界 | 微软风格的聚光标记,以抵抗间接提示注入 |
| 错误清理 | 工具响应中没有原始异常或系统路径 |
| 允许的根 | CODESIGHT_ALLOWED_ROOTS 限制哪些目录可以被索引 |
| 秘密编辑 | 函数体中的秘密是从API输出中编辑的; CODESIGHT_NO_REDACT=1 禁用并记录警告 |
| 安息的秘密 | 索引文件 ~/.code-index/ 包含原始源代码,包括任何嵌入的秘密。存储在加密卷上并限制文件系统权限。覆盖 CODE_INDEX_PATH. |
| 快速注射防御 | 基于Nonce的分隔符用于AI摘要、注入短语块列表、类型验证的提示插值 |
| 图遍历限制 | BFS呼叫链搜索限制在5条路径和50个深度,以防止资源耗尽 |
看 安全.md 了解完整的威胁模型、防御矩阵和验证链的详细信息。关键安全决策的架构决策记录在 文件/决定/.
______________________________________________________________________
数据处理
当 ANTHROPIC_API_KEY 设置时,codesight-mcp将函数和类签名发送到Anthropic API,用于索引期间生成的AI摘要。不发送源代码,只发送签名。要禁用,请省略 ANTHROPIC_API_KEY 环境变量。
______________________________________________________________________
环境变量
| 变量 | 描述 |
|---|---|
CODESIGHT_ALLOWED_ROOTS | 冒号分隔的目录列表 index_folder 允许索引。 必需 用于本地文件夹索引——如果未设置,默认情况下会被拒绝。例子: /Users/you/src:/home/you/projects |
GITHUB_TOKEN | GitHub个人访问令牌。私人回购需要;强烈建议避免对公共回购的利率限制。 |
ANTHROPIC_API_KEY | AI生成符号摘要的Anthropic API密钥。可选--如果未设置,则回退到docstring。 |
CODE_INDEX_PATH | 索引的自定义存储目录。违约: ~/.code-index/ |
CODESIGHT_NO_REDACT | 设置为 1 禁用工具输出中的秘密编校。记录警告; search_text 设置后完全禁用。 |
CODESIGHT_READ_ONLY | 设置为 1 跳过文件系统权限操作(fchmod/mkdir)。自动用于沙盒环境中的非破坏性CLI命令。 |
CODESIGHT_USAGE_LOG | 持久JSONL使用日志的文件路径。如果没有此功能,使用记录仅在内存中(重新启动时丢失)。 |
CODESIGHT_USAGE_ENABLED | 设置为 0 禁用使用日志记录。违约: 1 (已启用)。 |
CODESIGHT_USAGE_MAX_MEMORY | 驱逐前内存使用记录的最大数量。违约: 10000. |
CODESIGHT_LOG_LEVEL | 日志冗长: DEBUG, INFO, WARNING, ERROR, CRITICAL。允许所有级别。违约: WARNING.优先于 LOG_LEVEL. |
LOG_LEVEL | 回退日志级别。限于 WARNING/ERROR/CRITICAL 为了安全起见(ADV-LOW-10)。使用 CODESIGHT_LOG_LEVEL 解锁 DEBUG/INFO. |
______________________________________________________________________
语义搜索
按意图搜索,而不是按确切名称搜索。需要 semantic 额外:
pip install codesight-mcp[semantic] # adds fastembed (~100MB ONNX runtime + model weights)如果没有这个额外的参数,传递语义参数会返回一个有用的错误,解释要安装什么。
参数
| 参数 | 类型 | 说明 |
|---|---|---|
semantic | bool | 混合关键字+语义评分(默认权重:0.7语义,0.3关键字) |
semantic_only | bool | 纯语义评分,完全跳过关键字匹配 |
semantic_weight | float | 混合比从0.0(仅关键字)到1.0(仅语义) |
例子
# Find by intent, not exact name
search_symbols(query="the function that validates credentials", semantic=True)
# Pure semantic search
search_symbols(query="password hashing utility", semantic_only=True)环境变量
| 变量 | 描述 |
|---|---|
CODESIGHT_EMBED_PROVIDER | 显式提供程序选择(默认:自动检测) |
CODESIGHT_EMBED_MODEL | 模型覆盖(默认值: BAAI/bge-base-en-v1.5) |
CODESIGHT_NO_SEMANTIC | 设置为 1 完全禁用语义特征 |
运作原理
嵌入在第一个语义查询上延迟生成,并与索引一起缓存在gzip JSON sidecar文件中。重新索引时,缓存会自动失效。默认提供程序完全在设备上运行,没有API调用。当 semantic=false (默认设置),开销为零——嵌入从不加载或计算。
关键字评分包括复合标识符拆分(hash_password → {hash, password}, AuthManager → {auth, manager})后缀词干(hashing → hash, validates → validate),因此即使没有启用语义搜索,基于意图的查询也会匹配。
______________________________________________________________________
归因
许可证
麻省理工学院——见 许可证.
