Skip to main content
Glama
MatthiasVanDE

jena-mcp-server

jena-mcp-server

Give a language model a working connection to Apache Jena Fuseki: SPARQL queries and updates, whole named graphs over the Graph Store Protocol, bulk RDF loading from disk, and dataset administration — sixteen tools over the Model Context Protocol.

┌─ your MCP client ─┐        ┌─ jena-mcp-server ─┐        ┌─ Fuseki ────────┐
│  Claude Code,     │ stdio  │  16 tools         │  HTTP  │  SPARQL         │
│  Claude Desktop,  │◄──────►│  graphs as        │◄──────►│  Graph Store    │
│  Cursor, …        │        │  resources        │        │  /$/ admin      │
└───────────────────┘        └───────────────────┘        └─────────────────┘

Why this exists

A triplestore is an awkward thing to hand to a model. The obvious approach — one tool that takes a SPARQL string — falls over in practice for three reasons, and this server is built around all three:

Unbounded queries flood the context. SELECT ?s ?p ?o WHERE { ?s ?p ?o } is the first thing anyone writes against an unfamiliar graph. Over a dataset of 1 600 triples it serialises to roughly 630 000 characters — about 157 000 tokens in a single tool result. Here a SELECT without its own LIMIT gets one, every result has a character ceiling, and anything genuinely large goes to a file instead.

SPARQL is the wrong tool for whole graphs. Reading a graph with CONSTRUCT puts it through the query parser and back out as a result set; replacing one means DELETE followed by an INSERT DATA carrying the entire content as query text. The Graph Store Protocol does both in one request, and this server exposes it directly — including loading a .ttl file from disk, which never enters the conversation at all.

Administration is where the sharp edges are. Fuseki answers 405, not 404, for a dataset that does not exist. Without a way to list datasets, that error is indistinguishable from a wrong endpoint path. And CREATE GRAPH on TDB2 returns 200 while creating nothing you can observe — an empty graph and a missing graph are the same thing. Both are documented in the tool descriptions, where the model will actually read them.

Related MCP server: GraphDB MCP Server

Install

npm install -g jena-mcp-server

Or from source:

git clone https://github.com/MatthiasVanDE/jena-mcp-server.git
cd jena-mcp-server && npm install && npm run build

Node 20 or newer. One runtime dependency: the MCP SDK.

Connect it

Claude Code

claude mcp add jena \
  -e JENA_ENDPOINT=http://localhost:3030 \
  -e JENA_DATASET=mydata \
  -- npx -y jena-mcp-server

Claude Desktop — in claude_desktop_config.json:

{
  "mcpServers": {
    "jena": {
      "command": "npx",
      "args": ["-y", "jena-mcp-server"],
      "env": {
        "JENA_ENDPOINT": "http://localhost:3030",
        "JENA_DATASET": "mydata",
        "JENA_USERNAME": "admin",
        "JENA_PASSWORD": "…"
      }
    }
  }
}

Putting a password in a client config file means it sits there in plain text. docs/configuration.md shows a two-line wrapper that keeps it in one place instead.

The sixteen tools

Querying

sparql_query · sparql_update · describe_resource

Graphs

list_graphs · read_graph · write_graph · drop_graph · load_rdf_file

Datasets

list_datasets · dataset_stats · create_dataset · delete_dataset

Server

server_info · backup_dataset · compact_dataset · task_status

Named graphs are also exposed as MCP resources, so a client can pull one in without composing a query.

Full reference: docs/tools.md.

Two settings worth knowing before you start

JENA_FILES_DIR is the only directory the file tools may touch, and until you set it they refuse to run. That is deliberate: a tool that "loads a file into the triplestore" is, unfenced, a tool that can ship any readable file on the machine to a remote server.

JENA_READ_ONLY=true hides the seven writing tools rather than refusing them on call. A model does not attempt what it is not offered.

Everything else: docs/configuration.md.

Documentation

Getting started

from zero to a graph you can query

Tool reference

every tool, argument and failure mode

Configuration

all settings, and how to keep secrets out of config files

Recipes

schema sync, bulk loading, exploring an unknown graph

Design notes

why it is built this way

Development

npm run build     # compile
npm test          # unit tests, no server needed
npm run check     # both

The unit tests cover the parts where being wrong is quiet: which SPARQL form a string is, when a row cap may be appended, and what the file sandbox lets through.

Licence and acknowledgement

MIT — see LICENSE.

This is an independent implementation. It was written after working with ramuzes/mcp-jena (MIT, © 2025 ramuz), which demonstrated the idea of an MCP server for Jena; no code from it is included here, but credit for the starting point belongs there.

Available Tools

16 tools
backup_datasetA

Start a server-side backup of a dataset.

The backup is written on the server, into Fuseki's backups directory, and runs in the background: this returns a task id to poll with task_status.

Do this before anything destructive. There is no undo for drop_graph or delete_dataset.

Listed as a read tool deliberately -- it copies data out, it does not change it, so it stays available when the server runs read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetNoDataset name. Defaults to the configured one.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses the write location (Fuseki's backups directory), the async nature (runs in background, returns a task id), and the rationale for its read-tool classification (copies data out, stays available under read-only servers). That read-only justification is exactly the kind of trait annotations would normally supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads purpose, then placement/async behavior, then the safety rationale, then the read-tool justification. Every sentence contributes a distinct operational fact; there is no filler despite the multi-paragraph length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining what is returned (a task id) and how to consume it (poll with task_status). Combined with destination and safety context, an agent has everything needed to invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single 'dataset' parameter already documents its defaulting behavior, so the description needs to add nothing and doesn't. Baseline 3 applies since the schema does all the parameter work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a precise verb+resource: 'Start a server-side backup of a dataset.' The scope word 'server-side' immediately distinguishes it from anything client-side or export-oriented, and the sibling set (delete_dataset, drop_graph, compact_dataset) all deal with different lifecycle actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('Do this before anything destructive') and names the exact risks it protects against ('no undo for drop_graph or delete_dataset'), which are real siblings. It also hands off the follow-up step by naming task_status as the polling mechanism.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compact_datasetA

Compact a TDB2 dataset, reclaiming space held by superseded data.

Runs in the background; poll with task_status. delete_old removes the pre-compaction copy once it succeeds, which frees the most space and cannot be undone.

Only meaningful for TDB2 datasets.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetNoDataset name. Defaults to the configured one.
delete_oldNoDelete the pre-compaction copy. Default false.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden and largely discharges it: it discloses asynchronous background execution with a task_status polling pattern, the space-reclamation side effect, and the fact that delete_old 'cannot be undone' and 'frees the most space.' Irreversibility of a destructive option is exactly the disclosure an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short, front-loaded sentences: purpose first, then execution model, then the consequential parameter, then the applicability constraint. No filler and no repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an async mutation tool with no output schema, the description supplies the critical missing piece — that results must be obtained via task_status rather than a direct return — plus the irreversibility caveat and the TDB2 applicability limit. Nothing an agent needs to invoke it safely is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: delete_old's schema text only says 'Delete the pre-compaction copy. Default false,' while the description adds the consequence (frees the most space) and the risk (cannot be undone). The dataset parameter gets no added treatment, but it is self-explanatory and defaulted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('Compact a TDB2 dataset') with an explicit effect qualifier ('reclaiming space held by superseded data'). The added scope constraint 'Only meaningful for TDB2 datasets' makes it unambiguous against siblings like backup_dataset or delete_dataset, none of which perform compaction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete operational context — it 'Runs in the background; poll with task_status' — which tells the agent how to consume the result, and 'Only meaningful for TDB2 datasets' excludes invalid targets. It does not, however, state when compaction is warranted versus alternatives such as backup_dataset or a fresh write.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_datasetA

Create a dataset on the server.

kind "tdb2" (the default) is persistent and survives a restart; "mem" is in-memory and is gone when the server stops -- useful for a scratch space, and a trap if you meant to keep the data.

Fuseki writes a configuration file for the new dataset, so it comes back after a restart. A dataset created this way has the stock endpoints: sparql, query, update, data and get.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo"tdb2" (default, persistent) or "mem" (in-memory).
nameYesDataset name, without a leading slash.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and largely succeeds: it discloses that Fuseki writes a config file so the dataset survives restarts, that 'mem' data vanishes on stop, and which stock endpoints get created. It omits auth/permission requirements and duplicate-name behavior, so it's strong but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose is front-loaded in the first sentence, followed by the durability distinction the caller most needs. It's slightly wordy in the middle section, but each sentence conveys non-redundant behavioral information, so nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-annotation, no-output-schema mutation tool, the description covers persistence, restart behavior, and resulting endpoints — the factors an agent needs to call it correctly. Missing are permission requirements and conflict/error handling, but the core is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description genuinely enriches the 'kind' parameter by explaining the durability consequence of each value and flagging the common mistake of choosing 'mem' unintentionally, adding meaning beyond the schema's brief gloss.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource ('Create a dataset on the server'), making the tool's function unmistakable. It doesn't explicitly differentiate itself from siblings like delete_dataset or list_datasets, but the creation semantics are clear enough that an agent won't confuse it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear context for the key decision — choosing between 'tdb2' (persistent) and 'mem' (in-memory), including the 'trap' warning about losing data. It stops short of naming alternatives or exclusions (e.g., when to prefer load_rdf_file or back up instead), so it lands at clear-context rather than full when/when-not.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dataset_statsA

Size and shape of a dataset: triple counts, graphs, classes and properties.

A quick orientation for a store you have not seen before -- how much is in it, how it is divided over graphs, and which types and predicates dominate.

ParametersJSON Schema
NameRequiredDescriptionDefault
topNoHow many classes and predicates to list. Default 10.
datasetNoDataset name. Defaults to the configured one.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. Calling it 'a quick orientation' implies a lightweight, non-mutating read, but it never states that it is read-only, requires no special permissions, or leaves the store unchanged — important for a tool sitting beside destructive siblings like delete_dataset and drop_graph.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the substance front-loaded: what it measures first, when to reach for it second. No filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with no annotations and no output schema, the description covers the returned dimensions (counts, graph distribution, dominant types/predicates) well. It stops short of stating safety/read-only behavior, which is the only notable omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains both 'top' and 'dataset'. The phrase 'which types and predicates dominate' loosely maps to 'top', but the description adds no format, default, or behavior detail beyond the schema — baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete operation and its outputs — 'Size and shape of a dataset: triple counts, graphs, classes and properties' — which is specific enough to separate it from list_datasets, list_graphs, and sparql_query. An agent can tell what this returns without reading the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear use context: 'A quick orientation for a store you have not seen before.' That is a real when-to-use signal, but no alternative is named (e.g. list_graphs for graph names only) and there are no explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_datasetA

Remove a dataset from the server and delete its files. Irreversible.

This is not "unmount": the data on disk goes too. Take a backup first if there is anything in it you would miss.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesDataset name to remove.
confirmYesMust be true. A guard against deleting by autocomplete.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does well: it discloses that the operation is irreversible and that on-disk files are removed, not just the server registration, which is precisely the failure mode a caller would otherwise underestimate. It omits operational details like required privilege level (admin/maintenance), behavior when the dataset does not exist, and whether dependent graphs go with it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its consequence in the first sentence, then a short disambiguation and a short warning. Every sentence earns its place and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter destructive tool with no output schema, the description covers the essentials an agent needs: what is destroyed, that it cannot be undone, and to back up first. Missing only peripheral operational context such as permissions required and error behavior on a nonexistent dataset.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains both 'name' and the 'confirm' guard against autocomplete deletion. The description adds no parameter-level detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (remove/delete) and resource (dataset) and immediately scopes the operation: the files on disk are destroyed too. The explicit contrast with 'unmount' disambiguates it from a plausible alternative a reader might assume, which is exactly the kind of sibling differentiation that earns a top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a clear precondition ('Take a backup first'), which implicitly routes the agent to backup_dataset, and it sets the expectation that this is only for data you are willing to lose. It does not, however, explicitly contrast with other destructive-adjacent siblings such as drop_graph or compact_dataset, so the when-not guidance is partial.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

describe_resourceB

Everything the store knows about one IRI, in both directions.

Returns the triples where the IRI is the subject and, unless you turn it off, those where it is the object -- which is usually where the interesting part is, because it shows what points at the thing.

Faster to reach for than writing the query by hand, and it names the graph each triple came from.

ParametersJSON Schema
NameRequiredDescriptionDefault
iriYesThe IRI to describe, without angle brackets.
limitNoMaximum triples per direction. Default 200.
datasetNoDataset name. Defaults to the configured one.
incomingNoInclude triples pointing at the IRI. Default true.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It does disclose meaningful behavior: output covers both directions, incoming is toggleable, and each triple names its source graph. It omits read-only confirmation (only implied), how limit interacts across directions, and pagination/truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core behavior is front-loaded in the first sentence, followed by the two-direction explanation. The clause about the object direction being "where the interesting part is" is chattier than necessary but aids understanding rather than wasting space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description should describe return shape, which it partially does (triples both ways, graph provenance). It omits read-only safety framing and what happens when limit truncates results, leaving some gaps for a 4-param query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters are already documented. The description reinforces the incoming toggle ("unless you turn it off") but adds no syntax, default, or interaction detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (describe) and resource (one IRI), and clarifies scope: triples where the IRI is subject and object. It implicitly contrasts with hand-written queries but does not name the sibling (sparql_query) it replaces, leaving a small differentiation gap.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Faster to reach for than writing the query by hand" implies the tool is a shortcut alternative to sparql_query, which is useful implied guidance. However, there is no explicit when-to-use/when-not statement and no named alternative, so usage is only inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

drop_graphA

Delete a named graph and everything in it. There is no undo.

Run backup_dataset first if the contents matter.

A 404 means the graph was already empty, which on TDB2 means it did not exist.

ParametersJSON Schema
NameRequiredDescriptionDefault
graphYesGraph IRI to delete.
datasetNoDataset name. Defaults to the configured one.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it declares irreversibility ('no undo'), states the destruction scope, and explains the 404 outcome as an idempotency signal (already-empty/nonexistent graph does not error). It leaves permissions/auth requirements and any partial-failure behavior unstated, which is the only notable gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the destructive consequence and scoping, then the backup precaution, then error semantics. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-param destructive tool with no annotations and no output schema, the description covers the critical unknowns an agent needs: irreversibility, destruction scope, a prerequisite, and the meaning of a 404. Only auth/permission expectations and any response payload details are absent, which keeps it just short of complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and both parameters ('graph' as graph IRI, 'dataset' with its default) are already documented in the schema. The description adds no syntax, format, or naming detail beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (delete/drop) and resource (a named graph) and immediately states scope: 'everything in it.' It is clearly distinguishable from siblings like delete_dataset (dataset-level) and write_graph (non-destructive write), so an agent can select it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete precondition — 'Run backup_dataset first if the contents matter' — naming the sibling to use beforehand, which is genuinely actionable routing guidance. It stops short of explicitly contrasting with delete_dataset for the dataset-level case, so it is clear context rather than exhaustive when/when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_datasetsA

List the datasets on this Fuseki server and the endpoints each offers.

Reach for this first when a call fails with 405. Fuseki answers 405 -- not 404 -- for a dataset name it does not know, which reads like "wrong method" when it actually means "no such dataset".

The endpoint names matter too. A dataset configured through an assembler file often exposes only "sparql", while Fuseki's stock configuration also accepts "query". This shows which one you have.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full disclosure burden, and it delivers real behavioral context: Fuseki returns 405 rather than 404 for unknown datasets, and endpoint availability varies between assembler-configured and stock configurations. It omits auth or rate-limit expectations, but for a read-only listing operation that is a minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, each front-loaded with its claim and each adding non-redundant information: what is listed, why the 405 signal matters, and why endpoint names are worth reading. No sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description compensates by describing the return content in prose (datasets plus their endpoints) and the diagnostic value of that content. Completeness is good for a zero-parameter listing tool, though a one-line note on how datasets/endpoints appear in the response would close the last gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate beyond noting that listing is server-wide rather than scoped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the datasets on this Fuseki server') and adds a distinguishing scope the siblings lack: the endpoints each dataset offers. This differentiates it from dataset_stats, create_dataset, and delete_dataset by outcome rather than name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger condition ('Reach for this first when a call fails with 405') with the reasoning behind it, which is unusually actionable. It does not name an alternative tool or state exclusions, so it stops short of the explicit when/when-not/alternatives bar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_graphsA

List the named graphs in a dataset, with a triple count for each.

Only graphs holding at least one triple appear, and on TDB2 that is the whole story: an empty graph is indistinguishable from one that was never created. If a graph you just made is missing, it has no triples yet.

The default graph is reported separately, because a query without a GRAPH clause reads that one -- and on a store without a union default graph it is often empty while the named graphs are full.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetNoDataset name. Defaults to the configured one.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that only graphs with at least one triple appear, that empty graphs are indistinguishable from never-created ones on TDB2, and that the default graph is reported separately. It omits auth/rate-limit behavior but covers the subtle semantic quirks a caller needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first sentence, and the following sentences each add genuine semantic value rather than filler. Slightly verbose, but the length is earned by the non-obvious empty/default graph behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey return content; it does so by stating graphs come with triple counts and that the default graph is reported separately. Complete enough for correct invocation, with only minor gaps around formatting or ordering.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single dataset parameter is already documented in the schema. The description adds no parameter details beyond what the schema provides, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("List the named graphs in a dataset") plus a return detail ("with a triple count for each"). It is clearly distinct from read_graph/drop_graph/write_graph, though it does not explicitly name a sibling to route the agent away from.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied through the discussion of empty graphs and default graphs, but there is no explicit when-to-use, when-not-to-use, or alternative tool named. The agent must infer the selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

load_rdf_fileA

Load an RDF file from the sandbox into a dataset.

Accepts Turtle, N-Triples, TriG, N-Quads, JSON-LD and RDF/XML; the media type comes from the extension. TriG and N-Quads carry their own graph names, so do not pass a target graph with those -- the file decides.

This exists so that bulk RDF never has to pass through the conversation. A 44 kB ontology rewritten as INSERT DATA costs roughly 11 000 tokens; here it costs none.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileYesPath in the sandbox.
modeNo"merge" (default, adds) or "replace".
graphNoTarget graph IRI. Omit for the default graph, or for quad formats.
datasetNoDataset name. Defaults to the configured one.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does real work: format auto-detection from extension, the rule that quad formats override any target graph, and the token-cost rationale for the file path. It omits mutation semantics of mode=replace (does it drop existing triples?) and any auth or async/task behavior, which are meaningful for a data-loading write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, front-loaded with the action and followed by format rules and rationale. The token-cost sentence is a concise justification for the tool's existence rather than filler; nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description covers formats, mode, and graph interaction well. The remaining gap is the return/execution model (synchronous vs. a task tracked via task_status) and the exact effect of replace mode, which the agent cannot infer from structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning beyond the schema: it explains that media type is inferred from the file extension and that the graph parameter must be omitted for quad formats because the file defines graph names. That interaction is not derivable from the parameter descriptions alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Load), resource (RDF file), source (from the sandbox) and destination (into a dataset). An agent can distinguish it from write_graph and sparql_update, which serve inline or in-conversation writes, without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear context for using this over passing RDF inline (contrasted with INSERT DATA) and an explicit exclusion: 'do not pass a target graph' with TriG/N-Quads. It stops short of naming the sibling tools (sparql_update, write_graph) that would be the alternatives, so this is strong context rather than full routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_graphA

Fetch one named graph whole, as Turtle.

One HTTP request, and it never touches the query parser -- the right way to read a graph you intend to inspect or copy. A CONSTRUCT returns the same triples but has to be parsed as a query first.

A 404 here means the graph holds no triples. That is not an error about the endpoint.

Graphs get large quickly; pass out_file for anything beyond a few hundred triples.

ParametersJSON Schema
NameRequiredDescriptionDefault
graphNoGraph IRI. Omit for the default graph.
formatNoMedia type to request: text/turtle (default), application/n-triples, application/rdf+xml, application/ld+json.
datasetNoDataset name. Defaults to the configured one.
out_fileNoWrite to this path in the sandbox instead of returning the content.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the single-HTTP-request cost, that it bypasses the query parser, and the important semantic that a 404 means an empty graph rather than an endpoint failure, plus a size warning. It does not address authentication, permissions, or behavior on a missing dataset, which a mutation-adjacent read on a shared store could reasonably mention.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short front-loaded sentences, each carrying a distinct fact (what it fetches, why over CONSTRUCT, 404 meaning, size handling). Nothing is padding, even the clarifying line about 404 semantics earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read tool with no output schema, the description covers the return medium (Turtle), the error semantics (404 = empty graph), and the large-result escape hatch (out_file). An agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real guidance: it states out_file should be used 'for anything beyond a few hundred triples' and confirms Turtle as the returned format, going beyond the schema's per-field text.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Fetch) and resource (one named graph whole, as Turtle), and explicitly distinguishes itself from a CONSTRUCT query that 'returns the same triples but has to be parsed as a query first.' An agent can separate this from sparql_query, list_graphs, and write_graph without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit when-to-use condition ('the right way to read a graph you intend to inspect or copy') and names the alternative approach (CONSTRUCT) with the tradeoff that selects it. Also gives a concrete threshold for the out_file parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

server_infoA

Version, uptime and per-dataset request statistics.

Worth a call at the start of a session to confirm you are talking to the server you think you are -- a wrong endpoint that happens to answer is otherwise hard to spot.

ParametersJSON Schema
NameRequiredDescriptionDefault
datasetNoLimit the statistics to one dataset.

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden. It implies a non-mutating read via its metrics-flavored content and adds a genuinely useful behavioral frame: detecting a wrong endpoint that still answers. It does not state read-only status outright, nor permissions, rate limits, or caching behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler, and the payoff (what it returns) is front-loaded ahead of the rationale for calling it. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema or annotations, but the description enumerates the returned fields (version, uptime, per-dataset stats) well enough for an agent to know what to expect. The only real omission is any contrast with the similarly named dataset_stats sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single optional 'dataset' parameter is fully documented in the schema as limiting statistics to one dataset. The description adds no syntax or format details beyond that, so the baseline 3 for schema-covered params applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb-less but concrete resource set: version, uptime, and per-dataset request statistics. An agent knows exactly what comes back. However, it never distinguishes itself from the sibling dataset_stats, which sounds like it could return overlapping statistics, so sibling differentiation is missing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to call it ('at the start of a session') and why (confirming the endpoint identity). No exclusions or named alternatives are given, so it stops short of the 5-level when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sparql_queryA

Run a read-only SPARQL query (SELECT, CONSTRUCT, ASK or DESCRIBE).

Forms: SELECT returns rows, CONSTRUCT and DESCRIBE return triples, ASK returns a boolean. WHERE is optional -- "SELECT ?s { ?s ?p ?o }" is valid SPARQL.

Property paths are the reason to reach for SPARQL over a REST API: a/b sequence ?s foaf:knows/foaf:name ?name a|b alternative ?s (rdfs:label|skos:prefLabel) ?label a* zero or more ?s skos:broader* ?ancestor a+ one or more ?s rdfs:subClassOf+ ?super a? zero or one ^a inverse ?child ^ex:hasParent ?parent !a negated ?s !rdf:type ?o

Named graphs: GRAPH { ?s ?p ?o }, or GRAPH ?g { ... } to range over all of them. Note that a query without a GRAPH clause reads the default graph, which on many datasets is empty unless the store is configured with a union default graph.

Results are capped. A SELECT without its own LIMIT gets one appended (see default_limit), because an unbounded exploration query over even a small dataset can return hundreds of thousands of characters. Pass limit: 0 to lift the cap deliberately, and out_file to send a large result to disk instead of through the conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoRow cap for a SELECT that sets none itself. 0 lifts it. Defaults to the server setting.
queryYesThe SPARQL query.
datasetNoDataset name. Defaults to the configured one.
out_fileNoWrite the result here (inside the file sandbox) and return only the path and size.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so richly: read-only semantics, the fact that a LIMIT is auto-appended to SELECTs, that limit:0 lifts the cap, and that out_file routes large results to disk instead of the conversation. It also discloses the empty-default-graph behavior on many datasets — exactly the operational context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then organized into scannable sections (forms, property-path table, named graphs, result caps). It is on the longer side, but the property-path examples and cap warnings each earn their place for a complex query tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a query tool with no output schema, the description still explains the return shape of each form (rows, triples, boolean) and the cap/file behaviors. Combined with 100% schema coverage, an agent has everything needed to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3, but the description adds real meaning: it explains why limit exists (unbounded queries can return hundreds of thousands of characters), that limit:0 lifts the cap deliberately, and that out_file sends results to disk. dataset is only lightly touched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Run a read-only SPARQL query (SELECT, CONSTRUCT, ASK or DESCRIBE).' It enumerates the query forms and their return shapes, clearly distinguishing this read-only tool from the sibling sparql_update. The purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance ('Property paths are the reason to reach for SPARQL over a REST API') and warns about default-graph pitfalls that inform usage. It does not explicitly contrast with read-oriented siblings like describe_resource or read_graph, so it falls short of full alternative coverage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sparql_updateA

Run a SPARQL Update: INSERT, DELETE, LOAD, CLEAR, CREATE, DROP, COPY, MOVE or ADD.

To create a named graph, insert into it: INSERT DATA { GRAPH { "o" } }

CREATE GRAPH on its own is not enough on TDB2. It answers 200, but a graph with no triples does not exist as far as anything else is concerned -- list_graphs will not show it and the Graph Store Protocol answers 404 for it.

For replacing a whole graph from a file, write_graph and load_rdf_file are better: they do not put the RDF through this conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
updateYesThe SPARQL Update statement.
datasetNoDataset name. Defaults to the configured one.

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses a genuinely useful behavioral quirk (CREATE GRAPH returns 200 but the empty graph is invisible to list_graphs and yields 404 via GSP). But it never warns that DROP, CLEAR, and DELETE are irreversible, nor mentions permissions or transaction semantics — significant omissions for a mutation tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core capability, then a worked example, then the TDB2 caveat, then alternatives — a sensible priority order. The TDB2 paragraph is slightly verbose (repeats the 'graph does not exist' idea three ways) but each sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no output schema and no annotations, the description covers operation semantics, a syntax example, a platform-specific pitfall, and alternative tools. It is missing only response/error shape and permission or transaction expectations, which the absence of an output schema makes somewhat forgivable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description earns an extra point by embedding a concrete 'INSERT DATA { GRAPH <iri> { <s> <p> "o" } }' example that demonstrates the expected syntax of the `update` string. It adds no detail on the `dataset` parameter beyond the schema's default behavior note.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run a SPARQL Update') and enumerates the exact operation families (INSERT, DELETE, LOAD, CLEAR, CREATE, DROP, COPY, MOVE, ADD), which distinguishes it cleanly from the read-oriented sparql_query sibling. An agent can tell what class of operation this tool executes without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule with named alternatives: 'For replacing a whole graph from a file, write_graph and load_rdf_file are better.' It also warns when a naive approach fails (CREATE GRAPH alone on TDB2). It does not, however, state the complementary case — that read-only queries belong to sparql_query — leaving that inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

task_statusA

The state of a background task started by backup_dataset or compact_dataset.

A task that has finished reports a "finished" timestamp; one still running does not.

ParametersJSON Schema
NameRequiredDescriptionDefault
task_idYesTask id returned by backup_dataset or compact_dataset.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the completion signal (a "finished" timestamp is present only when done), which is genuine behavioral value, but it omits error/failed/cancelled states, whether results are retained or expire, and what the call returns besides that timestamp.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the resource identity front-loaded and the completion-semantics detail immediately after. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description must carry the whole contract, and it only covers the finished/not-finished distinction. For a polling tool an agent needs to know the other possible states and the full return shape, which are absent, though the core completion check is adequately conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter and schema coverage is 100%, so the schema already explains that task_id comes from backup_dataset or compact_dataset. The description adds no syntax, format, or validity details beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (background task state) and explicitly scopes it to tasks created by backup_dataset or compact_dataset, which routes the agent away from the other dataset/graph siblings. An agent can immediately tell this is a task-introspection tool, not a dataset query.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the mention of backup_dataset and compact_dataset suggests this is called after those operations to check progress, but it never says when to poll, how often, or that it is the only way to observe those long-running operations. No alternatives exist among siblings, so there is nothing to exclude.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

write_graphA

Replace or extend one named graph with RDF you supply.

mode "replace" (the default) makes the graph exactly what you send: whatever was in it is gone. mode "merge" adds to what is there.

Replacing per graph is how a versioned schema is kept in sync -- one graph per module, so that updating one cannot wipe another.

Give the RDF either inline (content) or from a file (file). Prefer the file for anything beyond a handful of triples: it goes straight to the server instead of through the conversation.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileNoPath in the sandbox. Use this or content, not both.
modeNo"replace" (PUT, default) or "merge" (POST).
graphNoGraph IRI. Omit to target the default graph.
contentNoRDF as text. Use this or file, not both.
datasetNoDataset name. Defaults to the configured one.
content_typeNoMedia type. Inferred from the extension when a file is used.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does well: it flags that replace is destructive ('whatever was in it is gone'), declares replace as the default, and explains that file payloads bypass the conversation and go straight to the server. It omits permissions/auth requirements and any indication of what a call returns or how failures manifest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then structured into short paragraphs that each cover one decision (mode, per-graph versioning rationale, payload source). No filler sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a six-parameter mutation tool with no annotations and no output schema, the description covers the destructive/default behavior and payload choice well. It does not describe the response, error conditions, or required permissions, which leaves minor gaps for a write operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine meaning: mode's replace/merge semantics and default, the mutual exclusivity of content and file, and the practical preference for file on larger payloads. Only content_type and dataset get no elaboration beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (write/replace/extend) and resource (a named graph) with RDF payload, and distinguishes itself from siblings like sparql_update (which it frames as per-graph replacement) and read_graph/drop_graph. An agent can tell what this does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit mode semantics (replace is the destructive default, merge is additive) and a clear rule for choosing file vs inline. It stops short of naming sibling alternatives such as sparql_update or drop_graph, so a routing decision between write_graph and a generic SPARQL update is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 16 tool updatesv1.0.0
    • First observedbackup_dataset
    • First observedcompact_dataset
    • First observedcreate_dataset
    • First observeddataset_stats
    • First observeddelete_dataset
    • First observeddescribe_resource
    • First observeddrop_graph
    • First observedlist_datasets
    • First observedlist_graphs
    • First observedload_rdf_file
    • First observedread_graph
    • First observedserver_info
    • First observedsparql_query
    • First observedsparql_update
    • First observedtask_status
    • First observedwrite_graph

TDQS

A4/5.0

Scored across 16 tools

Disambiguation4/5

Most tools have clearly distinct purposes (e.g., load_rdf_file vs write_graph vs sparql_update), but read_graph and describe_resource overlap somewhat in retrieving graph data, and sparql_query could be used for many read operations. Descriptions help clarify boundaries, so ambiguity is minimal.

Naming Consistency4/5

Predominantly snake_case verb_noun pattern (e.g., load_rdf_file, create_dataset, drop_graph), but a few names like dataset_stats and task_status are noun-first rather than verb-first. Still, the convention is mostly consistent and readable.

Tool Count5/5

16 tools is well-scoped for a Jena/Fuseki MCP server covering dataset management, graph operations, querying, and background tasks. Each tool earns its place without redundancy.

Completeness4/5

Covers most lifecycle operations: create/delete datasets, load/write/read graphs, SPARQL query/update, backup, compact, and task status. Missing a direct tool to list all triples or export a dataset, but these can be achieved via SPARQL. Minor gaps exist but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that connects AI agents to Apache Jena, enabling them to execute SPARQL queries and updates against RDF data stored in Jena Fuseki.
    8
    MIT
  • A
    license
    B
    quality
    C
    maintenance
    A Model Context Protocol server that provides read-only access to Ontotext GraphDB, enabling LLMs to explore RDF graphs and execute SPARQL queries.
    2
    6
    16
    GPL 3.0
  • A
    license
    A
    quality
    C
    maintenance
    MCP server exposing SPARQL query functionalities for LLMs, enabling query execution, validation, and graph exploration across SPARQL endpoints.
    7
    MIT