Token导航 LogoToken导航TokenDH.com
Graph Ra Gmcp logo
数据服务stdio官方级别未说明来源级核验

Graph Ra Gmcp

MCP Server

GraphRAG MCP Server 是一个基于知识图谱的语义检索服务,为LLMs提供高效、透明的数据查询能力,适用于公民咨询和政策分析场景。

工具数

5

提示词数

0

GitHub Stars

1

资源数

0
知识图谱PythonClaudeClaude DesktopClaudeCline

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

ArthurSrz

提供方

ArthurSrz

最后核验

2026/5/17 20:23

运行时

Docker

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

docker run -p 8080:8080 \

详细介绍

GraphRAG MCP服务器:面向LLM的生产级知识图检索

远程MCP(模型上下文协议)服务器在 全国大辩论 数据集。使用图优先架构查询具有8000多个实体的50个社区 比矢量RAG快29倍 内置出处追踪功能,将每个答案追溯到公民捐款。

实时端点(无需注册):

https://graphragmcp-production.up.railway.app/mcp

______________________________________________________________________

是什么让这个特别

这不仅仅是另一个RAG系统。GraphRAG MCP Server基于七项宪法原则构建,在速度、透明度和质量方面具有可衡量的优势。

1.闪电快速图形遍历

对于用户:查询将在1-2秒内返回,而不是30-60秒。互动体验,实时分析。

我们怎么做:启动时加载的预先计算的图索引启用O(1)邻居查找。没有针对每个查询的图解析。

证据: 性能提升50倍 记录在 故障排除.md --图形加载时间从每次查询25-30秒缩短到0.5秒。与传统的矢量RAG相比,GraphRAG实现了 响应时间快29倍 (平均延迟1.3秒vs 45秒,在54个查询中测量) 实验评估).

______________________________________________________________________

2.无孤立节点-万物互联

对于用户:每一条信息都是通过关系进行语境化的。你会得到更丰富的背景,更好的答案,没有孤立的事实。

我们怎么做:以社区为中心的设计,每个实体都跟踪其源社区和连接。图操作只返回具有关系的实体——孤立节点会被自动过滤。

为什么重要:没有上下文的信息只是噪音。图形结构确保当你询问税务问题时,你不仅会得到关键字匹配,还会得到主题、相关概念以及共同讨论它们的公民贡献。

______________________________________________________________________

3.完全透明-答案来源

对于用户:查看支持每项索赔的公民捐款。验证准确性,建立信任,审核响应。

我们怎么做:文本块是具有实体双向边的一级图节点。每个回复都包含可通过图表追踪的源报价: chunk → entity → response.

证据:块检索优化减少了文件I/O **500ms+至\ Entities │ │ │ │ Chunks connected via source_id attribute │ │ │ └─────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ OpenAI API │ │ (GPT-4o-mini for query synthesis) │ └─────────────────────────────────────────────────────────────┘


### 组件

- **FastMCP+Uvicorn**:具有TransportSecuritySettings的MCP协议服务器,用于反向代理兼容性
- **GraphIndex**:预计算的图索引(功能007)支持O(1)邻居查找,在服务器启动时加载
- **纳米石墨**:具有双策略检索的图遍历和查询引擎
- **存储**:GraphML图(实体关系)、JSON存储(块、社区报告、实体向量)
- **LLM**:GPT-4o-mini用于查询合成和社区报告生成

### 数据流

1. **客户端初始化MCP会话** → 接收 `mcp-session-id`
1. **工具调用已发出** (例如。, `grand_debat_query`)带有会话ID
1. **GraphIndex检索实体** 通过O(1)邻接列表查找
1. **图的遍历** 使用加权Dijkstra查找相关实体/块
1. **已组装上下文** 从块(通过 `source_id` 属性)+社区报告
1. **LLM综合答案** 有来源引用和来源链
1. **响应流式传输** 通过服务器发送事件(SSE)

### 关键架构决策

- **预计算**:启动时加载所有50个commune图(无延迟加载),以确保O(1)查找
- **先绘图**:块是图节点,起源是图边(双向块↔实体连接)
- **加权遍历**:具有关系类型权重的Dijkstra算法(关注度:1.0,HAS_SOURCE:0.9,APPARTIENT_A:0.3,RELATED_TO:0.1)
- **双重战略**:对于跨社区查询,将社区关键字+全球实体搜索相结合,实现92.7%的覆盖率

______________________________________________________________________

## 数据结构

每个commune文件夹都包含预索引的GraphRAG数据:

law_data/ ├── Rochefort/ │ ├── vdb_entities.json # Entity vector database │ ├── kv_store_text_chunks.json # Original contribution texts │ ├── kv_store_community_reports.json # AI-generated community summaries │ ├── kv_store_full_docs.json # Full documents │ ├── kv_store_llm_response_cache.json # Cached LLM responses │ └── graph_chunk_entity_relation.graphml # Knowledge graph ├── Andilly/ │ └── ... └── ... (50 communes total)


### GraphML架构

**节点**:

- `entity_name`:实体标识符(每个社区唯一)
- `entity_type`:公社、概念、主题、市民贡献、大块
- `description`:自然语言描述
- `source_id`: **关键属性** --以分号分隔的块ID(例如,“chunk_001chunk_002“)

**边缘**:

- `relationship_type` 或 `type`:关注、有来源、有装置、有关系
- `weight`:关系强度(可选)

**块**:通过连接 `source_id` 属性(不通过 `HAS_SOURCE` edges——这是在failures.md中记录的一个关键发现)。

______________________________________________________________________

## 部署

### 环境变量

|变量|描述|必填|默认|示例|
|----------|-------------|----------|---------|---------|
| `OPENAI_API_KEY` |用于LLM调用的OpenAI API密钥|是|-| `sk-...` |
| `GRAND_DEBAT_DATA_PATH` |公社数据目录的路径|否| `./law_data` | `/data/communes` |
| `PORT` |HTTP服务器端口|否| `8080` | `8000` |
| `ENABLE_OPIK_LOGGING` |启用评估日志|否| `true` | `false` |
| `OPIK_API_KEY` |用于日志记录的Opik API密钥(可选)|否|-| `...` |

______________________________________________________________________

### 部署到铁路

Install Railway CLI

npm install -g @railway/cli

Login

railway login

Link to project

railway link

Set environment variables

railway variables --set "OPENAI_API_KEY=your-key"

Deploy

railway up


**重要**:铁路使用反向代理(`railway-edge`).服务器包括 `TransportSecuritySettings(enable_dns_rebinding_protection=False)` 防止HTTP 421“无效主机标头”错误(请参阅 [故障排除.md](troubleshooting.md)).

______________________________________________________________________

### 部署到云端运行

gcloud run deploy grand-debat-mcp \ --source . \ --region europe-west1 \ --allow-unauthenticated \ --set-env-vars "OPENAI_API_KEY=your-key"


______________________________________________________________________

### 码头工人

Build

docker build -t grand-debat-mcp .

Run

docker run -p 8080:8080 \ -e OPENAI_API_KEY="your-key" \ -v $(pwd)/law_data:/app/law_data \ grand-debat-mcp


______________________________________________________________________

### 本地开发

**先决条件**:Python 3.11+,OpenAI API密钥

Clone repository

git clone https://github.com/ArthurSrz/graphRAGmcp.git cd graphRAGmcp

Install dependencies

pip install -r requirements.txt

Set environment variables

export OPENAI_API_KEY="your-api-key" export GRAND_DEBAT_DATA_PATH="./law_data"

Run with stdio (for MCP Inspector testing)

python server.py --stdio

Run as HTTP server

python server.py --port 8000


**使用MCP检查员进行测试**:

npx @modelcontextprotocol/inspector python server.py --stdio


______________________________________________________________________

## 故障排除

### 常见问题

#### 1.“主机标头无效”(HTTP 421)

**原因**:MCP SDK的DNS重新绑定保护拒绝来自反向代理(Railway、Cloud Run)的请求,其中Host标头与允许列表不匹配。

**解决方案**:服务器包括 `TransportSecuritySettings(enable_dns_rebinding_protection=False)` --安全性在代理层处理。如果您正在运行自定义部署,请确保此设置存在于 `server.py`.

______________________________________________________________________

#### 2.“必填字段”Pydantic验证错误

**原因**:嵌套的Pydantic模型破坏了Dust.tt和其他需要平面参数模式的MCP客户端。

**解决方案**:此服务器使用扁平参数 `Annotated[type, Field(description="...")]` 为了实现通用客户端兼容性。如果您正在修改工具,请避免使用嵌套参数。

______________________________________________________________________

#### 3.查询结果为空

**原因**:公社ID不匹配(例如,使用 `Saint-Jean-d'Angély` 而不是 `Saint_Jean_Dangely`).

**解决方案**:始终使用 `grand_debat_list_communes` 以获得准确的社区ID。响应包括正确的下划线格式的名称。

______________________________________________________________________

#### 4.会话错误

**原因**:缺失 `mcp-session-id` 工具调用中的标题。

**解决方案**:

1. 呼叫 `initialize` 方法优先→ 提取 `mcp-session-id` 从响应标头
1. 包含 `mcp-session-id: ` 所有后续文件中的标题 `tools/call` 请求:

______________________________________________________________________

#### 5.首次查询速度慢

**原因**:服务器启动后的第一个查询会预热缓存(LLM响应缓存初始化、实体向量加载)。

**解决方案**:预期行为——后续查询更快(~1-2s)。这是每次服务器重启的一次性成本。

______________________________________________________________________

**详细故障排除**,请参阅 [故障排除.md](troubleshooting.md) 它记录了所有主要的优化、错误修复和架构发现。

______________________________________________________________________

## 查询示例

### 发现

**列出所有公社**:

{"name": "grand_debat_list_communes", "arguments": {}}


**搜索与退休相关的实体**:

{ "name": "grand_debat_search_entities", "arguments": {"params": {"commune_id": "Marans", "pattern": "retraite", "limit": 20}} }


______________________________________________________________________

### 目标研究(本地模式)

**Rochefort的财政问题**:

{ "name": "grand_debat_query", "arguments": {"params": {"commune_id": "Rochefort", "query": "Quelles sont les principales préoccupations fiscales des citoyens?", "mode": "local"}} }


**退休话题**:

{ "name": "grand_debat_query", "arguments": {"params": {"commune_id": "Saint_Xandre", "query": "Que disent les citoyens sur les retraites?", "mode": "local"}} }


______________________________________________________________________

### 主题分析(全球模式)

**Surgères的总体主题**:

{ "name": "grand_debat_query", "arguments": {"params": {"commune_id": "Surgères", "query": "Quels sont les grands thèmes abordés par les citoyens?", "mode": "global"}} }


**Rivedoux Plage的社区集群**:

{ "name": "grand_debat_get_communities", "arguments": {"params": {"commune_id": "Rivedoux_Plage", "limit": 10}} }


______________________________________________________________________

### 来源与验证

**从Andilly获得原创贡献**:

{ "name": "grand_debat_get_contributions", "arguments": {"params": {"commune_id": "Andilly", "limit": 5}} }


**具有完整来源跟踪的查询** (本地模式自动包含带引号的源块):

{ "name": "grand_debat_query", "arguments": {"params": {"commune_id": "Rochefort", "query": "Préoccupations environnementales?", "mode": "local"}} }


______________________________________________________________________

## 贡献与支持

### 问题和Bug报告

- **GitHub 问题**:报告错误,请求功能→ 
- **GitHub讨论**:提问,分享用例→ 

### 绩效反馈

- 使用基准报告性能回归(延迟测量前后)
- 绩效改进应包括量化的影响(见 [故障排除.md](troubleshooting.md) 模板)

### 文档改进

- 欢迎通过Pull Requests进行更正和澄清
- 专注于面向用户的文档(集成指南、示例、故障排除)

______________________________________________________________________

## 链接和资源

- **MCP协议文件**: [https://modelcontextprotocol.io](https://modelcontextprotocol.io)
- **全国大辩论背景**: [https://granddebat.fr](https://granddebat.fr)
- **OPIK评估仪表板**: [https://www.comet.com/opik](https://www.comet.com/opik)
- **实验评估报告**: [docs/eval/exprimental-design-rag-comparison.md](docs/eval/experimental-design-rag-comparison.md)
- **故障排除和优化历史记录**: [故障排除.md](troubleshooting.md)
- **GraphIndex实现**: [graph_index.py](graph_index.py)
- **宪法原则(完整版)**: [.define/memory/constitution.md](.specify/memory/constitution.md)

______________________________________________________________________

## 许可证

麻省理工学院

目录标签

目录标签

知识图谱PythonClaude本地部署语义检索LLM集成政策分析公民咨询

支持客户端

Claude DesktopClaudeCline

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

session

运行时(runtime,运行环境)

Docker

工具数量(toolCount,工具数)

5

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdiosession部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP