Apache Jena的MCP服务器
一个模型上下文协议(MCP)服务器,将AI代理连接到Apache Jena,以实现SPARQL查询功能。
概述
该项目实现了一个MCP服务器,允许AI代理(如Cursor、Claude for Cline或Claude Desktop)访问和查询存储在Apache Jena中的RDF数据。该服务器提供用于对Jena-Fuseki服务器执行SPARQL查询和更新的工具。
特性
- 对Jena Fuseki服务器执行SPARQL查询
- 执行SPARQL更新以修改RDF数据
- 列出数据集中可用的命名图
- Jena Fuseki的HTTP基本身份验证支持
- 与模型上下文协议兼容
先决条件
- Node.js(v16或更高版本)
- 加载了RDF数据的Apache Jena Fuseki服务器
- 支持模型上下文协议的AI代理(例如Cursor、Claude for Cline)
安装
- 克隆此存储库:
git clone https://github.com/ramuzes/mcp-jena.git
cd mcp-jena- 安装依赖项:
npm install- 构建TypeScript代码:
npm run build用法
使用默认设置运行服务器(耶拿为localhost:3030,数据集为“ds”):
npm start或者指定自定义Jena端点、数据集和身份验证凭据:
npm start -- --endpoint http://your-jena-server:3030 --dataset your_dataset --username your_username --password your_password您还可以使用短标志:
npm start -- -e http://your-jena-server:3030 -d your_dataset -u your_username -p your_password对于具有自动转译的开发模式:
npm run dev:transpile -- -e http://your-jena-server:3030 -d your_dataset -u your_username -p your_password码头工人
您可以使用Docker运行MCP Jena服务器:
构建Docker镜像
docker build -t mcp-jena .使用Docker运行
docker run -e JENA_FUSEKI_URL=http://your-jena-server:3030 -e DEFAULT_DATASET=your_dataset mcp-jena可用工具
此MCP服务器提供以下工具:
execute_sparql_query-对Jena数据集执行SPARQL查询
- 包括全面的SPARQL语法文档 - 属性路径运算符(/、\*、+、?、^、|)及其示例 - 常见的查询模式和模板 - 自动查询验证和建议
execute_sparql_update-执行SPARQL更新查询以修改数据集
- 插入/删除操作文档 - 使用WHERE子句进行条件更新 - 图形管理操作
list_graphs-列出数据集中所有可用的命名图
- 图表使用模式和最佳实践 - 来源和版本示例
sparql_query_templates-获取预构建的SPARQL查询模板
- 探索:基础数据发现和统计 - 属性路径:复杂的图形导航模式 - 统计:知识图度量和分析 - 验证:数据质量和一致性检查 - 模式:结构发现和记录
环境变量
您还可以使用环境变量配置服务器:
JENA_FUSEKI_URL:您的Jena Fuseki服务器的URL(默认值:http://localhost:3030)DEFAULT_DATASET:默认数据集名称(默认值:ds)JENA_USERNAME:Jena Fuseki的HTTP基本身份验证用户名JENA_PASSWORD:Jena Fuseki的HTTP基本身份验证密码PORT:MCP服务器的端口(用于HTTP传输,默认值:8080)API_KEY:用于MCP服务器身份验证的API密钥
SPARQL查询示例
基本SELECT查询:
SELECT ?subject ?predicate ?object
WHERE {
?subject ?predicate ?object
}
LIMIT 10使用UPDATE插入数据:
PREFIX ex:
INSERT DATA {
ex:subject1 ex:predicate1 "object1" .
ex:subject2 ex:predicate2 42 .
}查询特定的命名图:
SELECT ?subject ?predicate ?object
FROM NAMED
WHERE {
GRAPH {
?subject ?predicate ?object
}
}
LIMIT 10