
Code Analysis MCP Server

2025.04.17
0
Python代码分析代码重构开发工具开发效率
Code Analysis MCP Server 是一个模块化的模型上下文协议(MCP)服务器,专注于代码分析工具,特别是与 ast-grep 的集成。该服务器为 AI 助手和其他客户端提供了一个标准化的接口,用于执行结构化的代码查询和转换。
View on GitHub
Overview
基本能力
产品定位
Code Analysis MCP Server 是一个模块化的模型上下文协议(MCP)服务器,专注于代码分析工具,特别是与 ast-grep 的集成。该服务器为 AI 助手和其他客户端提供了一个标准化的接口,用于执行结构化的代码查询和转换。
核心功能
- 结构代码分析:使用 ast-grep 的强大模式匹配功能查找代码中的模式
- 代码转换:用新的实现替换代码中的模式
- YAML 规则支持:应用 YAML 中定义的自定义 lint 和转换规则
- 项目范围扫描:扫描整个项目以查找模式或规则违规
- 容器化部署:使用 Docker 轻松部署
- 模块化架构:设计用于轻松扩展其他代码分析工具
适用场景
- AI 助手需要执行代码分析任务
- 开发人员需要自动化代码重构或模式匹配
- 团队需要在整个项目中应用自定义 lint 规则
工具列表
- ast-grep
ast_grep_set_project_path
:为后续操作设置项目路径ast_grep_parse_code
:将代码解析为 ASTast_grep_find_pattern
:在代码文件中查找模式ast_grep_replace_pattern
:替换代码文件中的模式ast_grep_run_yaml_rule
:在代码文件上运行自定义 YAML 规则ast_grep_scan_project
:扫描整个项目以查找模式或规则违规ast_grep_initialize_project
:初始化一个新的 ast-grep 项目ast_grep_test_rule
:测试 ast-grep 规则
常见问题解答
无明确常见问题解答部分。
使用教程
使用依赖
- Python 3.12.8
- ast-grep CLI 工具
- Docker(用于容器化部署)
安装教程
使用 pip 安装
pip install code-analysis-mcp-server
从源代码安装
git clone https://github.com/yourusername/code-analysis-mcp-server.git
cd code-analysis-mcp-server
pip install -e .
使用 Docker 安装
docker pull yourusername/code-analysis-mcp-server
# 或本地构建
docker build -t code-analysis-mcp-server .
调试方式
启动服务器
# 直接执行
code-analysis-server
# 使用 Docker
docker run -p 8000:8000 -v /path/to/your/project:/project code-analysis-mcp-server
使用 Docker Compose
创建 docker-compose.yml
文件:
version: '3'
services:
code-analysis-mcp:
image: yourusername/code-analysis-mcp-server
ports:
- "8000:8000"
volumes:
- ${PROJECT_DIR:-./sample_project}:/project
environment:
- PROJECT_PATH=/project
restart: unless-stopped
然后运行:
PROJECT_DIR=/path/to/your/project docker-compose up -d
客户端示例
import asyncio
import json
from fastmcp import Client
from fastmcp.client.transports import SSETransport
async def main():
async with Client(transport=SSETransport("http://localhost:8000/sse")) as client:
# 设置项目路径
project_result = await client.call_tool(
"ast_grep_set_project_path",
{
"project_path": "/project"
}
)
# 正确处理结果
content_item = project_result[0]
result_data = json.loads(content_item.text)
print("Project path result:", result_data)
# 在文件中查找模式
find_result = await client.call_tool(
"ast_grep_find_pattern",
{
"file_path": "src/example.cs",
"pattern": "public class $NAME"
}
)
# 处理结果
content_item = find_result[0]
result_data = json.loads(content_item.text)
print(f"Found {result_data.get('count', 0)} matches")
if __name__ == "__main__":
asyncio.run(main())