GAP模型上下文协议服务器

MCP for GAP是一个统一的服务实现,将GAP包函数作为工具暴露给MCP客户端调用,支持动态工具加载和包特定配置。

  • by kamalsaleh
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 kamalsaleh/mcp_for_gap

使用说明

GAP的MCP

GAP(组、算法、编程)包的模型上下文协议(MCP)服务器实现。

概述

该项目提供了一个统一的MCP服务器,将GAP包函数作为MCP客户端(如Claude Desktop、Cherry Studio、Cline等)可以调用的工具公开。

特性

  • 统一服务器:单个MCP服务器,带有指定GAP包中的工具
  • 动态工具加载:自动从使用AutoDoc记录的GAP包中提取工具
  • 软件包特定配置:通过以下方式自定义每个包的工具过滤 mcp_for_gap/files/config.yml
  • 命名空间工具:不同包中的工具带有前缀,以避免命名冲突

建筑

config.yml → extract_tools.py → JSON files → mcp_server.py → MCP Clients
                                ↓              ↓
                          path-to/mcp_for_gap/files/packages/   GAP Session
                          ├── CAP.json
                          ├── LinearAlgebraForCAP.json
                          └── ModulePresentationsForCAP.json

安装

  1. 确保GAP已安装并在PATH中可用

  2. 安装Python mcp包:

    pip install mcp
    

配置

1.配置GAP包(config.yml)

在文件中指定 config.yml 导出哪些GAP包以及包含/排除哪些工具:

packages:
  - name: LinearAlgebraForCAP
    tools:
      - MatrixCategory
      - VectorSpaceObject
      - VectorSpaceMorphism
  - name: ModulePresentationsForCAP
    tools:
      - all
    exclude_tools_with_subwords:
      - INSTALL

extract_mcp_schema_for:
  - LinearAlgebraForCAP
  - ModulePresentationsForCAP

2.提取工具

运行提取脚本以生成JSON工具定义:

python3 extract_tools.py

这将在中创建JSON文件 mcp_for_gap/files/packages/ 目录。

3.配置MCP客户端

将统一服务器添加到MCP客户端配置中。服务器将自动从所有GAP包中加载工具。

适用于克劳德桌面

编辑您的Claude Desktop配置文件:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 视窗: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

添加以下配置:

 {
  "mcpServers": {
    "gap": {
      "command": "python3",
      "args": [
        "/absolute/path/to/mcp_for_gap/mcp_server.py"
      ]
    }
  }
}

对于其他MCP客户端

使用相同的命令和参数模式。服务器通过stdio进行通信,并与任何兼容MCP的客户端协同工作。

重要:替换 /absolute/path/to/mcp_for_gap/mcp_server.py 使用克隆目录的实际绝对路径。

用法

运行服务器

只需运行服务器(它将自动加载所有包):

python3 mcp_server.py

服务器将:

  • 从中的所有JSON文件加载工具 mcp_for_gap/files/packages
  • 创建GAP会话
  • 启动MCP服务器监听stdio

与MCP客户端一起使用

配置后,这些工具将在您的MCP客户端中可用。工具名称以包缩写作为前缀,以避免冲突。前缀由包名称中的大写字母组成:

  • CAP模块演示文稿 → MPFCAP_ 前缀
  • 线性代数ForCAP → LAFCAP_ 前缀
  • CAP → CAP_ 前缀

工具名称示例:

  • 呼叫 GAP_EvalCode 执行任意GAP代码
  • 呼叫 MPFCAP_FreeLeftPresentation 创建自由左演示文稿
  • 呼叫 MPFCAP_AsLeftPresentation 将矩阵转换为左视图
  • 呼叫 LAFCAP_Dimension 求向量空间对象的维数

Claude Desktop中的示例用法:

Use the GAP_EvalCode tool to compute the symmetric group S4:
code: "SymmetricGroup(4);"

文件结构

  • mcp_server.py -加载所有包并共享一个GAP会话的MCP服务器
  • extract_tools.py -从GAP包文档中提取工具定义
  • gapwrapper.py -GAP进程的Python包装器
  • files/config.yml -包和工具过滤的YAML配置。
  • files/GAP.json -Json文件来运行任意GAP代码。
  • files/packages/ -用户提取的JSON工具定义

运作原理

  1. 工具提取: extract_tools.py 解析GAP包XML文档并提取函数签名、描述和参数类型。
  2. 工具筛选:每个包都可以有自定义排除规则来过滤内部或实用程序函数。
  3. 统一服务器: mcp_server.py 创建一个MCP服务器,从中指定的所有包中加载工具 mcp_for_gap/files/config.yml,在它们前面加上包缩写(由包名称中的大写字母组成),以避免命名冲突。
  4. 共享GAP会话:所有工具都使用相同的GAP流程实例,使其高效,并允许在函数调用之间共享状态。
  5. GAP执行:当调用工具时,服务器使用原始函数名构造GAP命令,并通过共享 gapwrapper,将结果返回给客户端。

发展

添加新包

  1. 将包添加到 mcp_for_gap/files/config.yml:

    - name: YourPackage
      tools:
        - all
      exclude_tools_with_subwords:
        - InternalFunction
    
  2. 运行提取:

    python3 extract_tools.py
    
  3. 重新启动MCP客户端-新工具将自动加载

直接测试GAP集成:

from gapwrapper import GAP
gap = GAP()
print(gap("SymmetricGroup(4);"))

测试工具加载:

from mcp_server import load_all_tools
tools = load_all_tools()
print(f"Loaded {len(tools)} tools")

许可证

国际学生中心

贡献

欢迎投稿!请随时提交拉取请求或未决问题。