关于 Quack MCP Server
Quack 是用于异步检查 Python 代码的 MCP 服务,提供 lint 和静态类型分析。它面向需要提交分析任务并查询状态与结果的开发者和编码 Agent。
主要功能
- 01使用 pylint 检查代码
- 02使用 mypy 检查类型
- 03异步处理分析任务
- 04跟踪任务并获取结果
- 05支持 stdio 和 SSE 传输
适用场景
- 01检查 Python 代码风格与质量
- 02查找静态类型错误
- 03提交多个分析任务
- 04查询任务状态与结果
MCP 相关
提供提交 Python 代码进行 lint 和静态分析的工具,并可列出任务及获取结果。支持 stdio 和 SSE 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Quack MCP 服务
Quack 是一个作为 MCP 服务构建的持续集成服务,可自动分析和测试 Python 代码。它提供用于 Python 代码检查和静态类型分析的工具。
功能
- 代码检查:使用 pylint 分析 Python 代码的风格、格式和代码质量问题。
- 静态分析:使用 mypy 执行静态类型检查,以识别类型错误。
- 异步处理:任务以异步方式处理,可并发分析多份代码提交。
- 任务管理:跟踪并获取已提交任务的结果。
安装
- 克隆仓库:
git clone https://github.com/yourusername/quack.git
cd quack
- 安装依赖项:
pip install -r requirements.txt
Quack 服务需要以下依赖项:
mcp[cli]
pylint
mypy
pytest
pytest-asyncio
使用方法
启动服务
使用 stdio 传输(默认)启动 Quack 服务:
python3 quack.py
启用调试日志:
python3 quack.py --debug
使用 SSE(Server-Sent Events)传输通过 HTTP 通信来启动服务:
python3 quack.py --sse --host=0.0.0.0 --port=8000
或者,你也可以使用提供的 shell 脚本:
# For stdio transport (default)
./run_quack.sh
# For SSE transport
./run_quack.sh --sse --host=0.0.0.0 --port=8000
Docker 容器
Quack 服务可以在 Docker 容器中运行,并会自动使用 SSE 传输:
# Build the Docker image
docker build -t quack-mcp-server .
# Run the container, exposing port 8000
docker run -p 8000:8000 quack-mcp-server
在 Docker 容器中运行时,服务会自动以 SSE 模式在端口 8000 上启动。
使用 MCP 工具
Quack 提供以下 MCP 工具:
submit_code:提交代码以进行代码检查和静态分析。submit_code_for_linting:提交代码,仅进行代码检查。submit_code_for_static_analysis:提交代码,仅进行静态分析。get_job_results:获取已提交任务的结果。list_jobs:列出所有任务及其状态。
测试架构
Quack 有两种不同的测试概念:
-
针对 Quack 的测试:
tests/目录中的测试用于验证 Quack 服务、任务管理器和处理器是否正常工作。添加新处理器时,应在此处添加测试,以验证处理器能否正常工作。 -
由 Quack 执行的测试:这些是 Quack 对已提交代码执行的分析。代码检查处理器和静态分析处理器会分析 Python 代码并查找问题。你的新处理器也会对单独提交的代码执行同类分析。
目录结构
tests/
├── server/ # Tests OF the server functionality
│ ├── test_server_direct.py # Direct testing of job manager
│ ├── test_server_auto.py # Auto-starts and stops the server
│ └── test_server_client.py # Tests the MCP client interface
├── processors/ # Tests OF the processors
│ ├── test_lint_processor.py # Tests for lint processor
│ └── test_static_analysis_processor.py # Tests for static analysis
└── examples/ # Example submissions for testing BY the server
└── example_code.py # Contains intentional issues for testing
实现新处理器时(例如,测试覆盖率处理器):
- 在
quack/processors/中创建处理器 - 在
tests/processors/中为处理器添加测试 - 使用
tests/examples/中的代码测试处理器要分析的内容
运行测试
仓库在 tests 目录中包含完整的测试套件。所有测试都使用 pytest 管理。
- 运行所有测试:
python -m pytest tests/ --asyncio-mode=auto
- 运行指定的测试文件:
python -m pytest tests/server/test_server_direct.py -v --asyncio-mode=auto
- 运行指定处理器的测试:
python -m pytest tests/processors/test_lint_processor.py -v
- 运行测试并显示详细输出和测试进度:
python -m pytest tests/ -v --asyncio-mode=auto
- 运行测试,并在首次失败时停止:
python -m pytest tests/ -x --asyncio-mode=auto
自动管理服务
许多测试会根据需要自动启动和停止 Quack 服务,因此测试期间无需手动管理服务进程。这由 conftest.py 文件中的 pytest fixtures 处理。
tests/server/test_server_auto.py 中的服务测试展示了如何在测试期间自动启动和停止服务。这些测试会验证:
- 服务能否正常启动
- 服务能否处理任务
- 服务能否正常关闭
使用 Cline 设置 Quack
Quack 可以与 Cline 集成,让你直接通过 Cline 界面使用代码分析功能。
配置步骤
-
配置 Cline MCP 设置
可以在 Cline 的 MCP 设置文件中配置 Quack 服务,文件路径为:
~/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": [] } } }Docker 容器搭配 SSE
在 Docker 容器中运行服务时,请将 Cline 配置为通过 HTTP/SSE 连接:
{ "mcpServers": { "quack": { "url": "http://localhost:8000/sse", "disabled": false, "autoApprove": [] } } }注意:如果你将 Docker 容器映射到其他端口,请将
localhost:8000替换为相应的主机和端口。
使用 Cline 搭配 Quack
配置完成后,你可以使用 Cline 通过 Quack 服务分析 Python 代码。以下是一些提示词示例:
-
分析代码中的 lint 问题:
Analyze this Python code for linting issues: [paste your code here] -
检查代码中的类型错误:
Check this Python code for type errors: [paste your code here] -
获取全面的反馈:
What's wrong with this Python function? [paste your function here]
测试用示例代码
你可以使用以下包含故意设置的问题的示例代码来测试 Quack 服务:
# Linting issues
unused_var = 42 # Unused variable
x = 10 # Single-letter variable name
# Type issues
def add(a: int, b: int) -> int:
return a + b
# Function with both linting and type issues
def calculate_average(numbers): # Missing type annotations
total = 0
for num in numbers:
total += num
unused_result = total * 2 # Unused variable
return total / len(numbers)
# Call with wrong type
result = add("5", 10) # Type error: str + int
工作原理
- 当你让 Cline 分析 Python 代码时,Cline 会使用 Quack MCP 服务
- Quack 服务会通过其 lint 和静态分析工具处理代码
- 分析结果会返回给 Cline,由 Cline 以易读的格式呈现给你
故障排查
如果 Cline 似乎没有使用 Quack 服务:
- 确保已在 MCP 设置文件中正确配置 Quack 服务
- 检查 quack.py 文件的路径是否正确(适用于 stdio 模式)
- 确认 URL 正确且服务正在运行(适用于 SSE 模式)
- 确保已安装所有依赖项
- 重启 VSCode 以重新加载 MCP 设置
Docker 特定问题
在 Docker 中运行时:
-
端口映射:确保容器的 8000 端口已正确映射到主机端口:
docker run -p 8000:8000 quack-mcp-server -
网络访问:如果在复杂的网络环境中运行 Docker,请确保主机可以访问容器的端口。
-
容器日志:检查容器日志中是否存在启动问题:
docker logs <container_id> -
测试连接:你可以测试 SSE 端点是否可访问:
curl http://localhost:8000这应该会返回 404 响应(因为没有根端点),但可以确认服务正在运行。
架构
Quack 基于 Model Context Protocol(MCP)构建,由以下组件组成:
- 服务端:处理客户端连接和工具调用的主 MCP 服务。
- 作业管理器:管理作业的生命周期,包括提交、处理和结果获取。
- 处理器:执行实际代码分析的专用组件:
- Lint 处理器:使用 pylint 分析代码风格和质量。
- 静态分析处理器:使用 mypy 执行静态类型检查。
开发
添加新处理器
添加新处理器的步骤:
- 在
quack/processors目录中创建新的处理器类。 - 实现
process方法以执行分析。 - 在服务端注册该处理器。
- 在
tests/processors/中为处理器添加测试。
示例:添加测试覆盖率处理器
- 使用处理器实现创建
quack/processors/coverage.py - 在
quack/server.py的服务端中添加该处理器 - 在
tests/processors/test_coverage_processor.py中创建测试 - 使用
tests/examples/中的示例代码测试处理器
调试
使用 --debug 标志运行服务,以启用详细日志记录:
python3 quack.py --debug
日志会同时写入控制台和 logs/quack.log。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。