jena-mcp
(Fuseki) integration.
Documentation — Installation, deployment, usage across the API, CLI, and MCP interfaces, and guidance for provisioning the Apache Jena Fuseki platform are maintained in the official documentation.
Table of Contents
Overview
jena-mcp exposes a standardized interface to interact with an Apache Jena Fuseki server using the Model Context Protocol — SPARQL query/update, the Graph Store server.
Installation
Pick the extra that matches what the operator want to run:
| Extra | Installs | Use when |
|---|---|---|
jena-mcp[mcp] |
Connector-focused MCP server (agent-connector-sdk — FastMCP/FastAPI + epistemic-graph[full]) |
The operator only run the MCP server (smallest install / image) |
jena-mcp[all] |
Everything (mcp + agent + logfire) |
Development / both surfaces |
# Connector-focused MCP server (includes the shared graph engine)
uv pip install "jena-mcp[mcp]"
# Agent runtime (adds model orchestration to the shared graph engine)
# Everything (development)
uv pip install "jena-mcp[all]" # or: python -m pip install "jena-mcp[all]"
Container images (:mcp)
One multi-stage docker/Dockerfile builds the MCP-only image (--target mcp):
| Image tag | Build target | Contents | Entrypoint |
|---|---|---|---|
example/jena-mcp:mcp |
--target mcp |
jena-mcp[mcp] — connector-focused, includes epistemic-graph[full]; no model-orchestration stack |
jena-mcp |
docker build --target mcp -t example/jena-mcp:mcp docker/ # connector-focused MCP server
docker/mcp.compose.yml runs the connector-focused :mcp server; docker/compose.yml runs the
agent (immutable agent digest) with a co-located :mcp sidecar.
Knowledge-graph database (epistemic-graph)
Agent Connector SDK core dependency (epistemic-graph[full]). The [mcp] extra keeps
deployments can use the bundled engine. For production or shared state, run
epistemic-graph as a dedicated database service and configure the runtime to use it.
Deployment recipes (single-node + Raft HA), connection configuration, and architecture
diagrams are documented in the
epistemic-graph deployment guide.
Usage
Run the MCP server directly:
python -m jena_mcp
MCP Configuration Examples
Install the connector-focused
[mcp]extra. Examples usejena-mcp[mcp]to add FastMCP / FastAPI throughagent-connector-sdk; the required Agent Connector SDK core still carriesepistemic-graph[full]. The[agent-runtime]extra additionally enables model orchestration.
stdio Transport (local IDEs — Cursor, Claude Desktop, VS Code)
{
"mcpServers": {
"jena-mcp": {
"command": "uvx",
"args": [
"--from",
"jena-mcp[mcp]",
"jena-mcp"
],
"env": {
"APACHE_JENA_URL": "http://localhost:3030",
"JENATOOL": "True",
"JENA_FUSEKI_URL": "http://localhost:3030/ds",
"JENA_PASSWORD": "admin",
"JENA_URL": "http://localhost:3030",
"JENA_USERNAME": "admin"
}
}
}
}
Runtime references require an alias-aware launcher such as Arbora. Other launchers must omit those entries and inject the resolved values through their own runtime secret boundary.
Streamable-HTTP Transport (networked / production)
{
"mcpServers": {
"jena-mcp": {
"command": "uvx",
"args": [
"--from",
"jena-mcp[mcp]",
"jena-mcp",
"--transport",
"streamable-http",
"--port",
"8000"
],
"env": {
"TRANSPORT": "streamable-http",
"HOST": "127.0.0.1",
"PORT": "8000",
"APACHE_JENA_URL": "http://localhost:3030",
"JENATOOL": "True",
"JENA_FUSEKI_URL": "http://localhost:3030/ds",
"JENA_PASSWORD": "admin",
"JENA_URL": "http://localhost:3030",
"JENA_USERNAME": "admin"
}
}
}
}
Alternatively, connect to a pre-deployed Streamable-HTTP instance by url:
{
"mcpServers": {
"jena-mcp": {
"url": "http://localhost:8000/jena-mcp/mcp"
}
}
}
Run a reviewed container image as a least-privilege stdio child (no listener or published port):
docker run -i --rm \
--read-only \
--cap-drop=ALL \
--security-opt=no-new-privileges \
--pids-limit=256 \
--tmpfs /tmp:rw,noexec,nosuid,nodev,size=64m \
-e TRANSPORT=stdio \
-e APACHE_JENA_URL=http://localhost:3030 \
-e JENATOOL=True \
-e JENA_FUSEKI_URL=http://localhost:3030/ds \
-e JENA_PASSWORD=admin \
-e JENA_URL=http://localhost:3030 \
-e JENA_USERNAME=admin \
registry.example.invalid/jena-mcp@sha256:<digest> jena-mcp
For containerized network HTTP, supply an authenticated TLS ingress (or
direct server TLS), exact MCP_ALLOWED_HOSTS, and an exact trusted-proxy
CIDR policy through the operator-owned deployment profile. The generator
does not emit an unauthenticated non-loopback listener.
Auto-generated from the code-read env surface (package vars) — do not edit.
Additional Deployment Options
jena-mcp can run as a local stdio process or container, or behind a remote
network boundary. The
Deployment guide carries
the detailed transport contract.
- Local container — launch a reviewed immutable image as a least-privilege stdio child with no listener or published port.
- Remote URL — connect through an operator-supplied authenticated HTTPS
ingress. Keep its URL, outbound identity references, trust profile, and exact
MCP_ALLOWED_HOSTSinAgentConfig.
Environment Variables
Package environment variables
| Variable | Example | Description |
|---|---|---|
APACHE_JENA_URL |
http://localhost:3030 |
deployed convention; takes precedence |
JENA_FUSEKI_URL |
http://localhost:3030/ds |
|
JENA_URL |
http://localhost:3030 |
fallback alias for the base URL |
JENA_DATASET |
— | |
APACHE_JENA_TOKEN |
secret-injected | deployed convention; takes precedence |
JENA_TOKEN |
secret-injected | fallback alias for the bearer token |
JENA_USERNAME |
admin |
|
JENA_PASSWORD |
secret-injected | |
JENA_TLS_PROFILE |
— | |
JENA_TLS_PROFILE_REF |
— | |
JENATOOL |
True |
Inherited agent-connector-sdk variables (apply to every connector)
| Variable | Example | Description |
|---|---|---|
TRANSPORT |
stdio |
MCP transport: stdio | streamable-http | sse |
HOST |
127.0.0.1 |
Loopback bind host (set an authenticated ingress explicitly) |
PORT |
8000 |
Bind port (HTTP transports) |
MCP_ENABLED_TOOLS |
— | Comma-separated tool allow-list |
MCP_DISABLED_TOOLS |
— | Comma-separated tool deny-list |
MCP_ENABLED_TAGS |
— | Comma-separated tag allow-list |
MCP_DISABLED_TAGS |
— | Comma-separated tag deny-list |
EUNOMIA_TYPE |
none |
Authorization mode: none | embedded | remote |
EUNOMIA_POLICY_FILE |
mcp_policies.json |
Embedded Eunomia policy file |
EUNOMIA_REMOTE_URL |
— | Remote Eunomia authorization server URL |
ENABLE_OTEL |
False |
Enable OpenTelemetry export |
OTEL_EXPORTER_OTLP_ENDPOINT |
— | OTLP collector endpoint |
MCP_CLIENT_AUTH |
— | Outbound MCP child auth: oidc-client-credentials | basic | none |
OIDC_CLIENT_ID |
— | OIDC client id (service-account auth) |
OIDC_CLIENT_SECRET_REF |
secret://identity/oidc-client-secret |
Runtime secret reference for the OIDC service account |
MCP_BASIC_AUTH_USERNAME |
— | HTTP Basic username (MCP_CLIENT_AUTH=basic) |
MCP_BASIC_AUTH_PASSWORD_REF |
secret://identity/mcp-basic-password |
Runtime secret reference for HTTP Basic auth (MCP_CLIENT_AUTH=basic) |
DEBUG |
False |
Verbose logging |
PYTHONUNBUFFERED |
1 |
Unbuffered stdout (recommended in containers) |
MCP_URL |
http://localhost:8000/mcp |
URL of the MCP server the agent connects to |
PROVIDER |
— | Operator-configured LLM provider for the agent |
MODEL_ID |
— | Operator-configured model id for the agent |
11 package + 23 inherited variable(s). Auto-generated from .env.example + the shared agent-connector-sdk set — do not edit.
Every variable the server reads, grouped by purpose.
Connection & Credentials (Jena / Fuseki)
| Variable | Description | Default |
|---|---|---|
JENA_FUSEKI_URL |
Fuseki server base URL (aliases: APACHE_JENA_URL, JENA_URL) |
http://localhost:3030/ds |
JENA_USERNAME |
Basic-auth user id | — |
JENA_PASSWORD |
Basic-auth password | — |
JENA_TOKEN |
Bearer token, used in place of basic auth (alias: APACHE_JENA_TOKEN) |
— |
JENA_TLS_PROFILE |
Named outbound TLS policy from AgentConfig | system |
MCP server / transport
| Variable | Description | Default |
|---|---|---|
TRANSPORT |
stdio, streamable-http, or sse |
stdio |
HOST |
Bind host (HTTP transports) | 0.0.0.0 |
PORT |
Bind port (HTTP transports) | 8000 |
MCP_TOOL_MODE |
Tool surface: condensed, verbose, or both |
condensed |
Telemetry & governance
| Variable | Description | Default |
|---|---|---|
ENABLE_OTEL |
Enable OpenTelemetry export | True |
OTEL_EXPORTER_OTLP_ENDPOINT |
OTLP collector endpoint | — |
EUNOMIA_TYPE |
Authorization mode: none, embedded, remote |
none |
EUNOMIA_POLICY_FILE |
Embedded policy file | mcp_policies.json |
EUNOMIA_REMOTE_URL |
Remote Eunomia server URL | — |
Tool toggles
| Variable | Description | Default |
|---|---|---|
JENATOOL |
Register the Jena tool set (set false to disable) |
True |
MCP Tools
Auto-generated — do not edit between the markers below.
Intent tools
| MCP Tool | Kind | Description |
|---|---|---|
jena_admin |
intent | Administer the Fuseki server: datasets, stats, tasks, backup, compact. |
jena_graph |
intent | Read or modify RDF graphs via the Graph Store Protocol. |
jena_source_records |
intent | List normalized, read-only SPARQL bindings for governed ingestion. |
jena_sparql |
intent | Execute a SPARQL query or update against a Fuseki dataset. |
4 intent tool(s) · 0 operation(s). Call an operation as act(action='<operation>', params={...}) (ask for reads); find(action='describe', params={'action': '<operation>'}) returns its arguments. An operation is enabled unless its <DOMAIN>TOOL toggle is set false. Auto-generated — do not edit.
Documentation
The complete documentation is published as the official documentation site and is the recommended reference for installation, deployment, and day-to-day operation.
| Page | Contents |
|---|---|
| Installation | pip, source, extras, prebuilt Docker image |
| Usage | the MCP tools, the JenaApi client, the CLI |
| Backing Platform | deploy Apache Jena Fuseki with Docker |
| Overview | tool surface, endpoints, components |
| Concepts | concept registry (CONCEPT:JENA-*) |
AGENTS.md is the canonical contributor/agent guidance.
Deploy with agent-connector-sdk-deployment
Provision this package with the consolidated agent-connector-sdk-deployment
workflow. It selects an installed-package, editable-source, or immutable-container
path; records only runtime secret and TLS-profile references in AgentConfig; and
runs doctor, registration, policy, observability, and rollback gates. Ask your agent
to "deploy jena-mcp with agent-connector-sdk-deployment".
| Install mode | Command |
|---|---|
| Installed package | uv tool install "jena-mcp[mcp]", then run jena-mcp |
| Immutable container | deploy registry.example.invalid/jena-mcp@sha256:<digest> through the operator-selected orchestrator |
The repository embeds no deployment profile, credential value, certificate path, or
environment-specific endpoint. Supply those at runtime through AgentConfig and the
configured secret provider.
Governed capability contract
This package ships a compact canonical skill surface with specialist procedures
kept as referenced workflows. The current MCP tools, skill metadata,
connector_manifest.yml, ontology, mappings, shapes, fixtures, migrations,
tool-schema fingerprints, and certification metadata form one versioned
capability contract. Validate them together; do not rely on stale tool names or
historical per-task skill wrappers.
Runtime endpoints, credentials, certificate trust, tenant identity, retention, and observability policy are deployment inputs and are never packaged values. See Configuration, trust, and privacy before enabling a network transport, connector ingestion, Arbora delegation, or trace export.
Metadata
Release files for jena-mcp 2.3.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| jena_mcp-2.3.1-py3-none-any.whl | Python 3 | none | any | Details |
Release files / jena_mcp-2.3.1-py3-none-any.whl
| Download URL | jena_mcp-2.3.1-py3-none-any.whl |
|---|---|
| Size | 48.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ddc1d7a7b87b67db0a29f94d53fd0b11772f3158580e5a8737d9a4b1e28d064c
|
|
BLAKE2b-256 checksum How to use checksums |
4c311d2f40f6d35d8ee3ddaebd17097f4cdd759f88587a21f514f5b786b8e885
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.4
|