Quack MCP Server

Quack MCP Server

nowucca

开发者工具
访问服务器

README

Quack MCP 服务器

Quack 是一个持续集成服务器,构建为 MCP 服务器,可自动执行 Python 代码的代码分析和测试。它提供了用于 Python 代码的 linting 和静态类型分析的工具。

特性

  • Linting: 使用 pylint 分析 Python 代码的风格、格式和代码质量问题。
  • 静态分析: 使用 mypy 执行静态类型检查,以识别类型错误。
  • 异步处理: 作业以异步方式处理,允许并发分析多个代码提交。
  • 作业管理: 跟踪和检索已提交作业的结果。

安装

  1. 克隆存储库:
git clone https://github.com/yourusername/quack.git
cd quack
  1. 安装依赖项:
pip install -r requirements.txt

Quack 服务器需要以下依赖项:

mcp[cli]
pylint
mypy
pytest
pytest-asyncio

用法

启动服务器

要使用 stdio 传输(默认)启动 Quack 服务器:

python3 quack.py

对于调试日志记录:

python3 quack.py --debug

要使用 SSE(服务器发送事件)传输启动服务器以进行 HTTP 通信:

python3 quack.py --sse --host=0.0.0.0 --port=8000

或者,您可以使用提供的 shell 脚本:

# 对于 stdio 传输(默认)
./run_quack.sh

# 对于 SSE 传输
./run_quack.sh --sse --host=0.0.0.0 --port=8000

Docker 容器

Quack 服务器可以在 Docker 容器中运行,该容器自动使用 SSE 传输:

# 构建 Docker 镜像
docker build -t quack-mcp-server .

# 运行容器,暴露端口 8000
docker run -p 8000:8000 quack-mcp-server

在 Docker 容器中运行时,服务器会自动以 SSE 模式在端口 8000 上启动。

使用 MCP 工具

Quack 公开了以下 MCP 工具:

  1. submit_code: 提交代码以进行 linting 和静态分析。
  2. submit_code_for_linting: 仅提交代码以进行 linting。
  3. submit_code_for_static_analysis: 仅提交代码以进行静态分析。
  4. get_job_results: 获取已提交作业的结果。
  5. list_jobs: 列出所有作业及其状态。

测试架构

Quack 有两个不同的测试概念:

  1. Quack 的测试: tests/ 目录中的测试验证 Quack 服务器、作业管理器和处理器是否正常工作。当您添加新的处理器时,您应该在此处添加测试以验证您的处理器是否工作。

  2. Quack 的测试: 这些是 Quack 对提交的代码执行的分析。lint 处理器和静态分析处理器分析 Python 代码是否存在问题。您的新处理器将在单独的代码提交上执行相同的操作。

目录结构

tests/
  ├── server/          # 服务器功能的测试
  │   ├── test_server_direct.py    # 作业管理器的直接测试
  │   ├── test_server_auto.py      # 自动启动和停止服务器
  │   └── test_server_client.py    # 测试 MCP 客户端接口
  ├── processors/      # 处理器的测试
  │   ├── test_lint_processor.py        # lint 处理器的测试
  │   └── test_static_analysis_processor.py  # 静态分析的测试
  └── examples/        # 用于服务器测试的示例提交
      └── example_code.py          # 包含用于测试的故意问题

当实现新的处理器(例如,测试覆盖率处理器)时:

  1. quack/processors/ 中创建您的处理器
  2. tests/processors/ 中为您的处理器添加测试
  3. 使用 tests/examples/ 中的代码来测试您的处理器分析的内容

运行测试

该存储库在 tests 目录中包含一个全面的测试套件。所有测试都使用 pytest 进行管理。

  1. 运行所有测试:
python -m pytest tests/ --asyncio-mode=auto
  1. 运行特定的测试文件:
python -m pytest tests/server/test_server_direct.py -v --asyncio-mode=auto
  1. 运行特定处理器的测试:
python -m pytest tests/processors/test_lint_processor.py -v
  1. 运行带有详细输出的测试并显示测试进度:
python -m pytest tests/ -v --asyncio-mode=auto
  1. 运行测试并在第一次失败时停止:
python -m pytest tests/ -x --asyncio-mode=auto

自动服务器管理

许多测试会自动根据需要启动和停止 Quack 服务器,因此您无需在测试期间手动管理服务器进程。这由 conftest.py 文件中的 pytest fixtures 处理。

tests/server/test_server_auto.py 中的服务器测试演示了如何自动启动和停止服务器以进行测试。这些测试验证:

  1. 服务器正确启动
  2. 服务器可以处理作业
  3. 服务器正确关闭

使用 Cline 设置 Quack

Quack 可以与 Cline 集成,以直接通过 Cline 界面提供代码分析功能。

配置步骤

  1. 配置 Cline MCP 设置

    Quack 服务器可以在 Cline 的 MCP 设置文件中配置,位于:

    ~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
    

    对于本地 Stdio 模式(默认)

    {
      "mcpServers": {
        "quack": {
          "command": "python3",
          "args": ["/path/to/your/quack.py", "--debug"],
          "env": {},
          "disabled": false,
          "autoApprove": []
        }
      }
    }
    

    对于带有 SSE 的 Docker 容器

    在 Docker 容器中运行服务器时,配置 Cline 以通过 HTTP/SSE 连接:

    {
      "mcpServers": {
        "quack": {
          "url": "http://localhost:8000/sse",
          "disabled": false,
          "autoApprove": []
        }
      }
    }
    

    注意:如果已将 Docker 容器映射到不同的端口,请将 localhost:8000 替换为适当的主机和端口。

将 Quack 与 Cline 结合使用

配置完成后,您可以使用 Cline 使用 Quack 服务器分析 Python 代码。以下是一些示例提示:

  • 分析代码是否存在 linting 问题:

    分析此 Python 代码是否存在 linting 问题:
    [在此处粘贴您的代码]
    
  • 检查代码是否存在类型错误:

    检查此 Python 代码是否存在类型错误:
    [在此处粘贴您的代码]
    
  • 获取全面的反馈:

    这个 Python 函数有什么问题?
    [在此处粘贴您的函数]
    

用于测试的示例代码

您可以使用以下带有故意问题的示例代码来测试 Quack 服务器:

# Linting 问题
unused_var = 42  # 未使用的变量
x = 10  # 单字母变量名

# 类型问题
def add(a: int, b: int) -> int:
    return a + b

# 具有 linting 和类型问题的函数
def calculate_average(numbers):  # 缺少类型注释
    total = 0
    for num in numbers:
        total += num
    unused_result = total * 2  # 未使用的变量
    return total / len(numbers)

# 使用错误的类型调用
result = add("5", 10)  # 类型错误:str + int

工作原理

  1. 当您要求 Cline 分析 Python 代码时,Cline 将使用 Quack MCP 服务器
  2. Quack 服务器将通过其 linting 和静态分析工具处理代码
  3. 结果将返回给 Cline,Cline 将以可读的格式将其呈现给您

故障排除

如果 Cline 似乎没有使用 Quack 服务器:

  1. 确保 Quack 服务器已在 MCP 设置文件中正确配置
  2. 检查 quack.py 文件的路径是否正确(对于 stdio 模式)
  3. 验证 URL 是否正确并且服务器正在运行(对于 SSE 模式)
  4. 确保已安装所有依赖项
  5. 重新启动 VSCode 以重新加载 MCP 设置

Docker 特有的问题

在 Docker 中运行时:

  1. 端口映射: 确保容器的端口 8000 正确映射到主机端口:

    docker run -p 8000:8000 quack-mcp-server
    
  2. 网络访问: 如果在复杂的网络环境中运行 Docker,请确保主机可以访问容器的端口。

  3. 容器日志: 检查容器日志中是否存在任何启动问题:

    docker logs <container_id>
    
  4. 测试连接: 您可以测试 SSE 端点是否可访问:

    curl http://localhost:8000
    

    这应该返回 404 响应(因为没有根端点),但确认服务器正在运行。

架构

Quack 使用模型上下文协议 (MCP) 构建,由以下组件组成:

  • 服务器: 主要的 MCP 服务器,用于处理客户端连接和工具调用。
  • 作业管理器: 管理作业的生命周期,包括提交、处理和结果检索。
  • 处理器: 执行实际代码分析的专用组件:
    • Lint 处理器: 使用 pylint 分析代码风格和质量。
    • 静态分析处理器: 使用 mypy 执行静态类型检查。

开发

添加新的处理器

要添加新的处理器:

  1. quack/processors 目录中创建一个新的处理器类。
  2. 实现 process 方法以执行分析。
  3. 在服务器中注册处理器。
  4. tests/processors/ 中为您的处理器添加测试。

示例:添加测试覆盖率处理器

  1. 使用您的处理器实现在 quack/processors/coverage.py 中创建
  2. quack/server.py 中将处理器添加到服务器
  3. tests/processors/test_coverage_processor.py 中创建测试
  4. 使用 tests/examples/ 中的示例代码测试您的处理器

调试

使用 --debug 标志运行服务器以启用详细日志记录:

python3 quack.py --debug

日志将写入控制台和 logs/quack.log

推荐服务器

Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
MCP Package Docs Server

MCP Package Docs Server

促进大型语言模型高效访问和获取 Go、Python 和 NPM 包的结构化文档,通过多语言支持和性能优化来增强软件开发。

精选
本地
TypeScript
Claude Code MCP

Claude Code MCP

一个实现了 Claude Code 作为模型上下文协议(Model Context Protocol, MCP)服务器的方案,它可以通过标准化的 MCP 接口来使用 Claude 的软件工程能力(代码生成、编辑、审查和文件操作)。

精选
本地
JavaScript
@kazuph/mcp-taskmanager

@kazuph/mcp-taskmanager

用于任务管理的模型上下文协议服务器。它允许 Claude Desktop(或任何 MCP 客户端)在基于队列的系统中管理和执行任务。

精选
本地
JavaScript
mermaid-mcp-server

mermaid-mcp-server

一个模型上下文协议 (MCP) 服务器,用于将 Mermaid 图表转换为 PNG 图像。

精选
JavaScript
Jira-Context-MCP

Jira-Context-MCP

MCP 服务器向 AI 编码助手(如 Cursor)提供 Jira 工单信息。

精选
TypeScript
Linear MCP Server

Linear MCP Server

一个模型上下文协议(Model Context Protocol)服务器,它与 Linear 的问题跟踪系统集成,允许大型语言模型(LLM)通过自然语言交互来创建、更新、搜索和评论 Linear 问题。

精选
JavaScript
Sequential Thinking MCP Server

Sequential Thinking MCP Server

这个服务器通过将复杂问题分解为顺序步骤来促进结构化的问题解决,支持修订,并通过完整的 MCP 集成来实现多条解决方案路径。

精选
Python
Curri MCP Server

Curri MCP Server

通过管理文本笔记、提供笔记创建工具以及使用结构化提示生成摘要,从而实现与 Curri API 的交互。

官方
本地
JavaScript