项目简介
该项目是一个基于Model Context Protocol (MCP) 实现的应用后端,旨在将大模型客户端(如AI助手)与Gen3数据共享平台集成。它通过标准化的JSON-RPC接口,提供访问Gen3 Schema(数据模型)、构建和验证GraphQL查询以及执行数据查询的能力,帮助LLM理解Gen3数据结构并安全地进行数据交互。
主要功能点
- Schema元数据访问: 提供丰富的Schema信息,包括实体(Entity)、字段、关系(Relationship)等,帮助LLM理解数据模型的结构。
- Schema结构注释: 对Schema信息进行处理和注释,提供实体的层级位置(Root/Intermediate/Leaf)、字段列表、关系描述以及针对每个实体的GraphQL查询示例,便于LLM快速发现和利用Schema信息。
- 查询模板生成: 根据指定的实体名称,生成包含常用字段和基本关系的GraphQL查询模板,作为LLM构建查询的起点。
- GraphQL查询验证: 在执行查询前,根据Gen3 Schema对GraphQL查询的语法和字段进行验证,有效减少因幻觉或Schema不匹配导致的查询错误,并提供修改建议。
- GraphQL查询执行: 执行经过验证的GraphQL查询,并将结果返回给LLM客户端,实现对Gen3数据共享平台的数据访问。
- 工作流程指导: 提供关于如何发现Schema、构建查询和执行查询的推荐工作流程资源,帮助LLM或其他客户端更好地使用提供的工具。
安装步骤
该项目是一个Python应用,需要Python环境。
- 克隆该项目的代码仓库到本地。
- 进入项目目录,安装所需的Python依赖库(通常通过'pip install -r requirements.txt'或'pip install .')。
服务器配置
MCP客户端需要配置如何启动该MCP服务器进程并与之通信。以下是一个示例JSON配置,用于指示客户端通过标准输入/输出(stdio)与服务器建立连接。客户端无需关心Gen3平台的具体配置(如证书路径、Gen3基础URL等),这些配置由MCP服务器自身在启动时读取(通常通过环境变量或配置文件)。
{ "name": "gen3", "command": "python", "args": ["-m", "gen3_mcp.main"], "transport": "stdio" }
配置项说明:
- 'name': MCP服务器的唯一名称,本实现中固定为 "gen3"。
- 'command': 启动服务器进程的命令,这里指定为执行Python解释器。
- 'args': 传递给'command'的参数列表,'-m gen3_mcp.main'指示Python运行'gen3_mcp.main'模块作为主程序,即启动MCP服务器。
- 'transport': 通信协议,这里指定使用标准输入/输出(stdio)。
注意: 实际的Gen3凭证文件路径或API地址等服务器端配置,需要在使用该MCP服务器的环境中通过设置相应的环境变量(如'GEN3_CREDENTIALS_FILE', 'GEN3_BASE_URL')或修改服务器代码中的默认值来完成,而不是通过MCP客户端配置传递。
基本使用方法
通过兼容MCP协议的客户端(如LLM应用),连接到该MCP服务器后,可以调用其暴露的Resources和Tools。
- 发现Schema和工具: 客户端可以读取以下Resources获取信息:
- 'gen3://tools-by-category': 获取按类别组织的可用工具列表及其用途。
- 'gen3://workflow': 获取推荐的数据探索和查询工作流程。
- 'gen3://endpoints': 获取Gen3 API端点信息。
- 'gen3://info': 获取MCP服务器及所连接Gen3实例的基本信息。
- 探索Schema详情: 调用 'annotated_schema_structure()' 工具,获取完整的Gen3数据模型结构,包括所有实体、字段、关系、Schema摘要和查询示例。
- 构建GraphQL查询:
- 调用 'query_template(entity_name="...")' 工具,为指定实体生成一个安全、有效的查询模板作为起点。
- 根据需求修改查询模板。
- 验证查询: 调用 'validate_query(query="...")' 工具,在执行前检查修改后的GraphQL查询是否存在语法错误或无效的实体/字段名。根据返回结果中的建议进行修正。
- 执行查询: 调用 'execute_graphql(query="...")' 工具,执行通过验证的GraphQL查询,获取Gen3平台上的实际数据。
推荐遵循 'gen3://workflow' 中描述的流程,尤其是在修改查询后总是先进行验证 ('validate_query'),以最大限度地提高数据访问的成功率。
信息
分类
数据库与文件