RAGFlow MCP 客户端示例
Python 和 curl 的 MCP 客户端示例。
示例 MCP Python 客户端
我们提供一个用于测试的 原型 MCP 客户端示例 在这里。
重要
如果你的 MCP 服务器以主机模式运行,请在异步连接时将获取到的 API 密钥包含在客户端的 headers
中:
async with sse_client("http://localhost:9382/sse", headers={"api_key": "YOUR_KEY_HERE"}) as streams:
# 其余代码...
或者,为了符合 OAuth 2.1 第五节,你可以运行以下代码来连接到你的 MCP 服务器:
async with sse_client("http://localhost:9382/sse", headers={"Authorization": "YOUR_KEY_HERE"}) as streams:
# 其余代码...
使用 curl 与 RAGFlow MCP 服务器交互
当通过 HTTP 请求与 MCP 服务器进行交互时,请遵循以下初始化序列:
- 客户端发送一个
initialize
请求,包括协议版本和功能。 - 服务器回复一个包含支持的协议和功能的
initialize
响应。 - 客户端使用一个
initialized
通知确认准备就绪。
_此时,客户端与服务器之间的连接已经建立,并可以进行进一步的操作(例如工具列表)。
注意
有关此初始化过程的更多信息,请参见这里。
在接下来的部分中,我们将带你完成一个完整的工具调用流程。
1. 获取会话 ID
每个与 MCP 服务器进行的 curl 请求都必须包含一个会话 ID:
$ curl -N -H "api_key: YOUR_API_KEY" http://127.0.0.1:9382/sse
注意
有关获取 API 密钥的信息,请参见这里。
传输
传输将流式处理消息,包括工具结果、服务器响应和保持连接的 ping。
服务器返回会话 ID:
event: endpoint
data: /messages/?session_id=5c6600ef61b845a788ddf30dceb25c54
2. 发送 Initialize
请求
客户端发送一个包含协议版本和功能的 initialize
请求:
session_id="5c6600ef61b845a788ddf30dceb25c54" && \
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "1.0",
"capabilities": {},
"clientInfo": {
"name": "ragflow-mcp-client",
"version": "0.1"
}
}
}' && \
传输
服务器回复一个包含支持的协议和功能的 initialize
响应:
event: message
data: {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-03-26","capabilities":{"experimental":{"headers":{"host":"127.0.0.1:9382","user-agent":"curl/8.7.1","accept":"*/*","api_key":"ragflow-xxxxxxxxxxxx","accept-encoding":"gzip"}},"tools":{"listChanged":false}},"serverInfo":{"name":"ragflow-server","version":"1.9.4"}}}
3. 确认准备就绪
客户端通过一个 initialized
通知确认准备就绪:
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "notifications/initialized",
"params": {}
}' && \
此时,客户端与服务器之间的连接已经建立,并可以进行进一步的操作(例如工具列表)。
4. 工具列表
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/list",
"params": {}
}' && \
传输
event: message
data: {"jsonrpc":"2.0","id":3,"result":{"tools":[{"name":"ragflow_retrieval","description":"根据问题从 RAGFlow 的检索接口中检索相关片段,使用指定的 dataset_ids 和可选的 document_ids。以下是所有可用数据集的列表及其描述和 ID。如果你不确定哪个数据集与问题有关,请简单地将所有数据集 ID 传递给函数。","inputSchema":{"type":"object","properties":{"dataset_ids":{"type":"array","items":{"type":"string"}},"document_ids":{"type":"array","items":{"type":"string"}},"question":{"type":"string"}},"required":["dataset_ids","question"]}}]}}
5. 调用工具
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "ragflow_retrieval",
"arguments": {
"question": "如何安装 neovim?",
"dataset_ids": ["DATASET_ID_HERE"],
"document_ids": []
}
}
}'
传输
event: message
data: {"jsonrpc":"2.0","id":4,"result":{...}}
完整的 curl 示例
session_id="YOUR_SESSION_ID" && \
# 步骤1:初始化请求
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "1.0",
"capabilities": {},
"clientInfo": {
"name": "ragflow-mcp-client",
"version": "0.1"
}
}
}' && \
sleep 2 && \
# 步骤2:初始化通知
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "notifications/initialized",
"params": {}
}' && \
sleep 2 && \
# 步骤3:工具列表
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/list",
"params": {}
}' && \
sleep 2 && \
# 步骤4:调用工具
curl -X POST "http://127.0.0.1:9382/messages/?session_id=$session_id" \
-H "api_key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "ragflow_retrieval",
"arguments": {
"question": "如何安装 neovim?",
"dataset_ids": ["DATASET_ID_HERE"],
"document_ids": []
}
}
}'