这是一个使用 tree-sitter 提供代码分析能力的模型上下文协议(MCP)服务器,旨在让AI助手能够智能地访问代码库,并进行适当的上下文管理。Claude Desktop 是参考实现目标。
<a href="https://glama.ai/mcp/servers/@wrale/mcp-server-tree-sitter"> <img width="380" height="200" src="https://gips3.baidu.com/it/u=2127562439,4061082180&fm=3081&app=3081&f=PNG?w=760&h=400" alt="mcp-server-tree-sitter MCP 服务器" /> </a>要查看所有可用命令及其当前实现状态和详细的特性矩阵,请参阅 FEATURES.md 文档。
pip install mcp-server-tree-sitter
git clone https://github.com/wrale/mcp-server-tree-sitter.git
cd mcp-server-tree-sitter
pip install -e ".[dev,languages]"
您可以通过 MCP CLI 或手动配置 Claude Desktop 来使服务器在 Claude Desktop 中可用。
将服务器注册到 Claude Desktop:
mcp install mcp_server_tree_sitter.server:mcp --name "tree_sitter"
或者,您可以手动配置 Claude Desktop:
打开您的 Claude Desktop 配置文件:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json如果不存在,请创建该文件。
将服务器添加到 mcpServers 部分:
{
"mcpServers": {
"tree_sitter": {
"command": "python",
"args": [
"-m",
"mcp_server_tree_sitter.server"
]
}
}
}
或者,如果您使用的是 uv 或其他包管理器:
{
"mcpServers": {
"tree_sitter": {
"command": "uv",
"args": [
"--directory",
"/ABSOLUTE/PATH/TO/YOUR/PROJECT",
"run",
"-m",
"mcp_server_tree_sitter.server"
]
}
}
}
注意:请确保将 /ABSOLUTE/PATH/TO/YOUR/PROJECT 替换为您项目的实际绝对路径。
保存文件并重启 Claude Desktop。
一旦您正确配置了至少一个 MCP 服务器,MCP 工具图标(锤子)将在 Claude Desktop 的界面中出现。然后,您可以通过点击此图标来访问 tree_sitter 服务器的功能。
如果您不想从 PyPI(已发布版本)手动安装包或克隆存储库,只需使用以下配置即可:
打开您的 Claude Desktop 配置文件(位置同上)。
将 tree-sitter 服务器添加到 mcpServers 部分:
{
"mcpServers": {
"tree_sitter": {
"command": "uvx",
"args": [
"--directory", "/ABSOLUTE/PATH/TO/YOUR/PROJECT",
"mcp-server-tree-sitter"
]
}
}
}
保存文件并重启 Claude Desktop。
这种方法使用 uvx 直接运行已安装的 PyPI 包,这是已发布版本的推荐方法。服务器在基本配置下运行不需要任何额外参数。
MCP Tree-sitter 服务器在调用之间维持状态。这意味着:
这种持久性在服务器生命周期内使用单例模式的关键组件来维持内存中的状态。
有几种方式可以运行服务器:
python -m mcp run mcp_server_tree_sitter.server
# 显示可用目标
make
# 使用默认设置运行服务器
make mcp-run
# 显示帮助信息
make mcp-run ARGS="--help"
# 显示版本信息
make mcp-run ARGS="--version"
# 使用自定义配置文件运行
make mcp-run ARGS="--config /path/to/config.yaml"
# 启用调试日志
make mcp-run ARGS="--debug"
# 禁用解析树缓存
make mcp-run ARGS="--disable-cache"
# 使用默认设置运行服务器
mcp-server-tree-sitter
# 显示帮助信息
mcp-server-tree-sitter --help
# 显示版本信息
m.mcp-server-tree-sitter --version
# 使用自定义配置文件运行
mcp-server-tree-sitter --config /path/to/config.yaml
# 启用调试日志
mcp-server-tree-sitter --debug
# 禁用解析树缓存
mcp-server-tree-sitter --disable-cache
直接使用 MCP CLI:
python -m mcp dev mcp_server_tree_sitter.server
或者使用 Makefile 目标:
make mcp-dev
您也可以传递参数:
make mcp-dev ARGS="--debug"
首先,注册一个项目以进行分析:
register_project_tool(path="/path/to/your/project", name="my-project")
列出项目中的文件:
list_files(project="my-project", pattern="**/*.py")
查看文件内容:
get_file(project="my-project", path="src/main.py")
获取语法树:
get_ast(project="my-project", path="src/main.py", max_depth=3)
提取符号:
get_symbols(project="my-project", path="src/main.py")
搜索文本:
find_text(project="my-project", pattern="function", file_pattern="**/*.py")
运行 tree-sitter 查询:
run_query(
project="my-project",
query='(function_definition name: (identifier) @function.name)',
language="python"
)
analyze_complexity(project="my-project", path="src/main.py")
虽然主要用途是通过 MCP 服务器,但您也可以直接在 Python 代码中使用该库:
# 从 API 模块导入
from mcp_server_tree_sitter.api import (
register_project, list_projects, get_config, get_language_registry
)
# 注册一个项目
project_info = register_project(
path="/path/to/project",
name="my-project",
description="Description"
)
# 列出项目
projects = list_projects()
# 获取配置
config = get_config()
# 通过依赖注入访问组件
from mcp_server_tree_sitter.di import get_container
container = get_container()
project_registry = container.project_registry
language_registry = container.language_registry
创建一个 YAML 配置文件:
cache:
enabled: true # 启用/禁用缓存(默认:true)
max_size_mb: 100 # 缓存的最大大小(MB,默认:100)
ttl_seconds: 300 # 缓存条目的时间生存期(秒,默认:300)
security:
max_file_size_mb: 5 # 处理的最大文件大小(MB,默认:5)
excluded_dirs: # 要排除处理的目录
- .git
- node_modules
- __pycache__
allowed_extensions: # 可选允许的文件扩展名列表
# - py
# - js
# 留空或省略表示所有扩展名
language:
default_max_depth: 5 # AST 遍历的默认最大深度(默认:5)
preferred_languages: # 在启动时预加载以提高性能的语言列表
- python # 预加载减少首次操作的延迟
- javascript
log_level: INFO # 日志级别(DEBUG, INFO, WARNING, ERROR)
max_results_default: 100 # 搜索操作的默认最大结果数
使用以下命令加载它:
configure(config_path="/path/to/config.yaml")
服务器的日志详细程度可以通过环境变量控制:
# 启用详细的调试日志
export MCP_TS_LOG_LEVEL=DEBUG
# 使用正常的信息日志(默认)
export MCP_TS_LOG_LEVEL=INFO
# 仅显示警告和错误消息
export MCP_TS_LOG_LEVEL=WARNING
有关日志配置的详细信息,请参阅 日志文档。有关命令行接口的详细信息,请参阅 CLI 文档。
preferred_languages 设置控制哪些语言解析器在服务器启动时预加载而不是按需加载。这提供了几个好处:
默认情况下,所有解析器都是在首次需要时按需加载的。为了获得最佳性能,请指定您项目中最频繁使用的语言。
您还可以配置特定设置:
configure(cache_enabled=True, max_file_size_mb=10, log_level="DEBUG")
或者使用环境变量:
export MCP_TS_CACHE_MAX_SIZE_MB=256
export MCP_TS_LOG_LEVEL=DEBUG
export MCP_TS_CONFIG_PATH=/path/to/config.yaml
环境变量使用格式 MCP_TS_SECTION_SETTING(例如,MCP_TS_CACHE_MAX_SIZE_MB)用于部分设置,或 MCP_TS_SETTING(例如,MCP_TS_LOG_LEVEL)用于顶级设置。
配置值按照以下优先级顺序应用:
configure() 调用设置的值服务器会查找配置:
configure() 调用中指定的路径MCP_TS_CONFIG_PATH 环境变量中指定的路径~/.config/tree-sitter/config.yamlMCP Tree-sitter 服务器包含一个诊断框架,有助于识别和解决问题:
# 运行诊断测试
make test-diagnostics
# CI友好版本(不会因诊断问题而失败构建)
make test-diagnostics-ci
诊断测试提供关于服务器行为的详细信息,并可以帮助隔离特定问题。有关诊断框架的更多信息,请参阅 诊断文档。
MCP Tree-sitter 服务器在与 tree-sitter 库交互时通过精心设计的模式和协议保持类型安全性。如果您正在扩展代码库,请查阅 类型安全指南,了解处理 tree-sitter API 变化的关键信息。
服务器提供的 MCP 资源如下:
project://{project}/files - 列出项目中的所有文件project://{project}/files/{pattern} - 列出匹配模式的文件project://{project}/file/{path} - 获取文件内容project://{project}/file/{path}/lines/{start}-{end} - 获取文件中的特定行project://{project}/ast/{path} - 获取文件的 ASTproject://{project}/ast/{path}/depth/{depth} - 获取具有自定义深度的 AST服务器提供的工具包括:
register_project_tool, list_projects_tool, remove_project_toollist_languages, check_language_availablelist_files, get_file, get_file_metadataget_ast, get_node_at_positionfind_text, run_queryget_symbols, find_usageanalyze_project, get_dependencies, analyze_complexityget_query_template_tool, list_query_templates_tool, build_query, adapt_query, get_node_typesfind_similar_codeclear_cachediagnose_config请参阅 FEATURES.md 以获取每个工具的实现状态、依赖项和使用示例的详细信息。
服务器提供的 MCP 提示如下:
code_review - 创建代码审查提示explain_code - 创建解释代码的提示explain_tree_sitter_query - 解释 tree-sitter 查询语法suggest_improvements - 创建建议代码改进的提示project_overview - 创建项目概述分析提示MIT