Prolog调试服务

一个基于SWI-Prolog的调试和诊断推理引擎,用于解析错误和症状,通过逻辑推理找到根本原因。

  • by jackwillis
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 jackwillis/prolog-debug-mcp

使用说明

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) -服务取决于DependsOn
  • error(Service, Symptom) -服务存在观察到的错误/症状
  • root_cause(Service, Symptom, Path) -通过依赖关系跟踪错误以找到根本原因
  • has_cycle(Service) -检测依赖周期

根本原因逻辑

在以下情况下找到根本原因:

  1. 服务出现错误AND
  2. 要么它没有错误的依赖关系(它是根),要么
  3. 我们可以通过依赖关系进行跟踪,以发现更深层次的错误

这允许系统通过遵循依赖链到问题的实际来源来回答“为什么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通用 -公共领域