项目简介

'swipl-mcp-server' 是一个基于Model Context Protocol (MCP) 构建的后端服务,旨在让支持工具的LLM(大型语言模型)能够直接与SWI-Prolog进行交互。它使得LLM可以通过标准化的JSON-RPC接口,利用Prolog强大的逻辑推理和知识表示能力,实现更复杂的任务和更智能的交互。

主要功能点

  • 知识库管理: 支持加载Prolog文件、添加/删除事实和规则、清空知识库以及导出完整的知识库内容。
  • Prolog查询: 提供两种查询模式:标准模式(分页式、内存高效)和引擎模式(基于SWI-Prolog引擎的真实回溯,适用于复杂查询)。
  • 符号列表: 列出知识库中所有可用的谓词。
  • Prompt模板: 内置多种专家级Prompt,如“Prolog专家模式”、“知识库分析”、“查询优化”等,帮助LLM更好地理解和执行Prolog相关任务。
  • 资源访问: 提供对服务器能力、许可证、帮助文档以及知识库谓词和内容的动态访问。
  • 安全机制: 实现了严格的文件路径限制(仅允许特定目录 '~/.swipl-mcp-server/')、危险谓词(如 'shell()', 'system()' ) 的预执行拦截以及沙盒隔离,确保操作安全。

安装步骤

  1. 安装Node.js: 确保您的系统已安装Node.js 20.0.0或更高版本。
  2. 安装SWI-Prolog: 确保您的系统已安装SWI-Prolog,并且 'swipl' 命令可以在系统PATH中找到。
  3. 通过npm安装: 在终端中运行以下命令进行全局安装:
    npm install -g @vpursuit/swipl-mcp-server
  4. 运行服务器: 安装完成后,您可以通过以下命令启动服务器:
    npx @vpursuit/swipl-mcp-server

服务器配置 (供MCP客户端参考)

为了让您的MCP客户端(如Claude Code CLI、Claude Desktop、Cline等)连接到SWI-Prolog MCP服务器,您需要配置客户端指向服务器的启动命令。以下是典型的配置示例(JSON格式),请根据您的客户端类型进行调整:

{
  "mcpServers": {
    "swipl": {
      "command": "npx",
      "args": ["@vpursuit/swipl-mcp-server"],
      "transport": "stdio",
      "env": {
        "SWI_MCP_READY_TIMEOUT_MS": "10000",
        "SWI_MCP_QUERY_TIMEOUT_MS": "120000",
        "MCP_LOG_LEVEL": "debug"
      }
    }
  }
}
  • 'swipl': 您可以为服务器指定一个易于识别的名称(例如:'swipl', 'prolog_server')。
  • 'command': 启动服务器的命令,通常是 '"npx"'。
  • 'args': 传递给 'command' 的参数,这里是 '["@vpursuit/swipl-mcp-server"]'。
  • 'transport': 通信协议,默认通常是 '"stdio"'。
  • 'env': 可选的环境变量,用于调整服务器行为。
    • 'SWI_MCP_READY_TIMEOUT_MS': 服务器启动超时时间(毫秒),默认5000。如果启动缓慢可尝试增加,例如 '"10000"'。
    • 'SWI_MCP_QUERY_TIMEOUT_MS': 查询执行超时时间(毫秒),默认30000。对于复杂查询可增加,例如 '"120000"'。
    • 'MCP_LOG_LEVEL': 日志级别,可选值包括 'debug', 'info', 'warn', 'error', 'silent'。

基本使用方法 (通过MCP客户端调用)

一旦您的MCP客户端配置并连接成功,您就可以通过客户端的工具调用接口与Prolog服务器交互。

  • 查询知识库: 例如,要启动一个Prolog查询并获取结果:

    1. 调用 'query_start' 工具,参数为 '{"query": "parent(X, mary)"}'。
    2. 调用 'query_next' 工具以获取第一个解决方案。
    3. 重复调用 'query_next' 直到返回“No more solutions available”。
    4. 调用 'query_close' 工具结束查询会话。
  • 加载Prolog文件: 调用 'knowledge_base_load' 工具,参数为 '{"filename": "~/.swipl-mcp-server/my_program.pl"}'。 重要提示:出于安全原因,文件必须位于您的用户主目录下的 '.swipl-mcp-server/' 目录中。

  • 添加事实或规则: 调用 'knowledge_base_assert' 工具,参数为 '{"fact": "parent(john, mary)."}'。 如果需要批量添加,可以使用 'knowledge_base_assert_many' 工具,参数为 '{"facts": ["fact1.", "fact2." ]}'。

  • 利用Prompt模板: 在支持Prompt的MCP客户端中(例如,Claude Code CLI 中的 '/swipl' 命令),您可以选择内置的Prompt来获得专家级指导。例如,输入 '/swipl prolog_init_expert' 以启动Prolog专家协助模式。

通过这些功能,LLM可以构建、查询和分析Prolog知识库,从而实现复杂的逻辑推理任务和智能决策。

信息

分类

AI与计算