使用说明
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: <http://example.org/>
INSERT DATA {
ex:subject1 ex:predicate1 "object1" .
ex:subject2 ex:predicate2 42 .
}
查询特定的命名图:
SELECT ?subject ?predicate ?object
FROM NAMED <http://example.org/graph1>
WHERE {
GRAPH <http://example.org/graph1> {
?subject ?predicate ?object
}
}
LIMIT 10