SPARQL-MCP服务器

一个用于SPARQL实验的干净、最小的模型上下文协议(MCP)服务器骨架,提供两种测试入口点:stdio MCP服务器和FastAPI Web应用。

  • by Fredibau
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Fredibau/sparql-mcp-server

使用说明

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 是必需的。