Prolog调试MCP服务器
一个MCP(模型上下文协议)服务器,它将SWI-Prolog作为调试和诊断推理引擎公开。Claude解析错误和症状,Prolog进行逻辑推理以找到根本原因。
建筑
┌─────────────┐ stdio/SSE ┌─────────────────┐
│ Claude │ ◄─────────────────► │ MCP Server │
│ (or LLM) │ (MCP) │ (Python) │
└─────────────┘ └────────┬────────┘
│
│ janus-swi
▼
┌─────────────────┐
│ SWI-Prolog │
│ (swipl engine) │
└─────────────────┘先决条件
- SWI Prolog 9.1.12+:由janus swi要求
# macOS
brew install swi-prolog
# Ubuntu/Debian
sudo apt install swi-prolog- Python 3.10+
- 紫外线:用于项目管理
安装
cd prolog-debug-mcp
uv sync用法
在Claude代码中配置
添加 ~/.claude/settings.json:
{
"mcpServers": {
"prolog-debug": {
"command": "uv",
"args": ["run", "--directory", "/path/to/prolog-debug-mcp", "python", "-m", "prolog_debug_mcp.server"]
}
}
}可用工具
| 工具 | 说明 |
|---|---|
assert_dependency | 添加依赖关系:服务依赖于depends_on |
assert_error | 记录服务中观察到的错误/症状 |
find_root_causes | 查找服务错误的所有可能根本原因 |
suggest_checks | 根据依赖关系获取要检查的建议服务 |
impact_analysis | 查找给定服务失败时受影响的所有服务 |
check_cycles | 检查涉及服务的依赖周期 |
get_status | 获取当前会话状态(所有服务、依赖关系、错误) |
clear_session | 清除所有断言的事实,重新开始 |
query | 运行任意Prolog查询(高级) |
示例会话
User: "My web app is returning 500 errors. It talks to a postgres
database and a redis cache. The redis pod is in CrashLoopBackOff."
Claude: Let me set up the dependency model and record the errors.
[Calls assert_dependency("webapp", "postgres")]
[Calls assert_dependency("webapp", "redis")]
[Calls assert_error("webapp", "500_error")]
[Calls assert_error("redis", "crashloopbackoff")]
[Calls find_root_causes("webapp")]
Result:
{
"service": "webapp",
"root_causes": [
{"symptom": "crashloopbackoff", "path": ["webapp", "redis"]}
]
}
Claude: The root cause traces to Redis being in CrashLoopBackOff.
The webapp depends on Redis, so when Redis crashes, the
webapp returns 500s. Check the Redis pod logs for why
it's crash-looping.测试
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run specific test file
uv run pytest tests/test_prolog.py运作原理
Prolog核心规则
服务器使用具有以下关键谓词的知识库:
depends(Service, DependsOn)-服务取决于DependsOnerror(Service, Symptom)-服务存在观察到的错误/症状root_cause(Service, Symptom, Path)-通过依赖关系跟踪错误以找到根本原因has_cycle(Service)-检测依赖周期
根本原因逻辑
在以下情况下找到根本原因:
- 服务出现错误AND
- 要么它没有错误的依赖关系(它是根),要么
- 我们可以通过依赖关系进行跟踪,以发现更深层次的错误
这允许系统通过遵循依赖链到问题的实际来源来回答“为什么X失败了?”。
技术栈
| 组件 | 选择 | 基本原理 |
|---|---|---|
| MCP框架 | MCP(官方SDK) | MCP官方Python SDK |
| Prolog Bridge | janus-swi | 比pyswip快5倍,C API,主动维护 |
| Prolog引擎 | SWI Prolog 9.1.12+ | janus要求,健壮,文档良好 |
| Python | 3.10+ | 类型提示,异步支持 |
许可证
CC0 1.0通用 -公共领域
