Code Analysis MCP Server

Code Analysis MCP Server

site icon
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:将代码解析为 AST
  • ast_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())

许可证

该项目遵循 MIT 开源许可条款,请参阅 MIT 了解完整条款。