使用说明
SPARQL-MCP服务器(骨架)
用于SPARQL实验的干净、最小的模型上下文协议(MCP)服务器骨架。这个脚手架故意没有登记任何工具。它为测试和未来扩展提供了两个切入点:
sparql-mcp-stdio:用于本地MCP客户端的stdio MCP服务器(例如Claude Desktop)sparql-mcp-web:具有基本功能的FastAPI应用程序/health端点(用于未来的WebSocket/HTTP桥接)
理由(来自论文)
本项目探索将MCP与SPARQL相结合,从单端点查询转向代理、联邦SPARQL。MCP提供了一个基于JSON-RPC的有状态接口,用于发现和调用服务器提供的功能(资源、提示、工具)。SPARQL 1.1通过以下方式添加了联邦查询 SERVICE,但实际限制仍然存在(源选择、规划、异构性、端点可用性)。最终目标是一个MCP服务器,它逐步添加模式探索、安全查询,并最终添加联合规划工具。
安装和设置
1.先决条件
- Python 3.10+
- 紫外线 (推荐):
pip install uv
2.配置环境变量
创建 .env 根目录中的文件(或更新现有文件)。 注:以下数值仅为示例;调整它们以匹配您的本地设置和端点配置。
| 变量 | 描述 | 示例值 |
|---|---|---|
LOCAL_STORE |
存储缓存VoID描述的路径 | local_store/void_descriptions |
FEDERATION_ENDPOINT |
联邦查询的主要SPARQL端点 | http://localhost:3030/ds/sparql |
SPARQL_TIMEOUT_SECONDS |
SPARQL查询超时(秒) | 60 |
VOID_CACHE_TTL_SECONDS |
缓存VoID描述的时间(秒) | 604800 (7天) |
VOID_HTTP_TIMEOUT_SECONDS |
通过HTTP获取VoID超时 | 60 |
VOID_SPARQL_TIMEOUT_SECONDS |
通过SPARQL获取VoID超时 | 60 |
EXPOSED_TOOLS |
以逗号分隔的向客户端公开的工具列表 | run_sparql_query,get_void_descriptions |
3.使用MCP客户端运行
对于光标
将此添加到您的 mcp.json (通常在 C:\Users\<User>\.cursor\mcp.json 或项目特定):
{
"mcpServers": {
"sparql-mcp": {
"command": "uv",
"args": [
"--directory",
"C:/absolute/path/to/sparql-mcp-server",
"run",
"sparql-mcp-stdio"
]
}
}
}
适用于克劳德桌面
添加 %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"sparql-mcp": {
"command": "uv",
"args": [
"--directory",
"C:/absolute/path/to/sparql-mcp-server",
"run",
"sparql-mcp-stdio"
]
}
}
}
本地运行(开发)
-
标准MCP服务器:
uv run sparql-mcp-stdio -
Web应用程序(仅限健康):
uv run sparql-mcp-web # visit http://localhost:8765/health
使用示例(现在使用查询工具)
安装后,您可以运行stdio服务器并从MCP客户端调用该工具。示例参数:
{
"endpoint": "https://dbpedia.org/sparql",
"query": "SELECT * WHERE { SERVICE <https://query.wikidata.org/sparql> { ?s ?p ?o } } LIMIT 5",
"format": "sparql-results+json",
"timeout_ms": 30000
}
注意:联合查询需要上游端点允许 SERVICE 远程主机;一些端点禁用或限制它。
下一步
- 添加配置加载器(endpoints.yaml)和允许列表强制
- 添加
list_endpoints以及流式传输以获得大结果 - 通过web为MCP添加WebSocket传输
可用工具
MCP服务器公开的工具(受 EXPOSED_TOOLS 在 .env):
run_sparql_query
执行SPARQL 1.1查询。查询必须包括 SERVICE 命名目标SPARQL端点的运算符。如果查询只包含一个 SERVICE,它被直接发送到该端点。如果查询包含多个 SERVICE,它通过本地SPARQL联合端点执行。
输入参数:
query(字符串,必填):SPARQL查询文本。format(字符串,可选):响应格式。之一sparql-results+json,text/turtle,application/ld+json,text/n3默认值:sparql-results+json.timeout_ms(整数,可选):请求超时(毫秒)。最小1000,最大值100000.
get_void_descriptions
检索一个或多个SPARQL端点的缓存VoID描述。如果没有缓存,该工具将尝试通过众所周知的VoID URL、默认图中的VoID三元组、命名图中的VoID和服务描述链接进行检索。
输入参数:
endpoint(字符串,可选):单端点URL。endpoints(字符串数组,可选):多个端点URL。
至少一个 endpoint 或 endpoints 是必需的。