Skip to main content
Glama

eLabFTW MCP

Standalone Model Context Protocol server for eLabFTW — 41 tools, pure Python, MCP protocol revision 2026-07-28 (stateless) with older handshakes still served. Single-user (stdio) and multi-user hosted mode (register page → personal URL with scoped token).

No R runtime, no external tool library: everything talks to the eLabFTW REST API v2 directly.

Credits

The tool surface, parameter names, validation rules and the safety rails (append-only body updates, provenance blocks, dry-run link operations) are a faithful port of

Marvin Luepke — elabR / elabrmcp

which implemented the same 41 tools in R on top of mcptools/`ellmer. That implementation is the reference this port was written against, and its documented behaviour is what the tests assert. Thank you — this would have been a much worse server without it.

Also derived from that work: the hosted mode's feature set (register flow, profile presets, per-token tool scope, audit log), which previously lived in the unified-researchdata-mcp deployment.

Related MCP server: protocol-mcp

Tools (41)

Group

Tools

Read (13)

list_experiments, list_items, list_experiment_templates, list_item_types, get_experiment, get_item, get_experiment_template, get_item_type, list_experiment_categories, list_experiment_statuses, list_item_categories, list_item_statuses

Meta (3)

get_connection_info, get_current_user_capabilities, refresh_team_caps

Create / update (7)

create_experiment, create_item, create_experiment_from_template, update_experiment_body, update_item_body, update_entity_fields, update_entity_metadata

Upload (1)

upload_image_from_content

Steps (5)

list_steps, add_step, update_step, toggle_step, delete_step

Links (8)

get_entity_links, ensure_link, ensure_link_by_query, bulk_ensure_links, delete_link, bulk_delete_links, expand_links_network, resolve_entity_by_query

AI (5)

review_experiment, suggest_tags, suggest_metadata, apply_tag_suggestions, add_ai_review_comment

Write tools honour the profile of the token (r read-only, h hybrid, f full) and the features.write_* switches in the config; destructive operations require an explicit confirmation argument.

Install

pip install .                 # or: uv pip install .

Requires Python ≥ 3.10 and an eLabFTW API key (eLabFTW → Account → API keys).

Local (stdio) usage

{
  "mcpServers": {
    "elabftw": {
      "command": "elabftw-mcp",
      "env": {
        "ELABFTW_BASE_URL": "https://elntest.ub.tum.de",
        "ELABFTW_API_KEY": "your-key"
      }
    }
  }
}

Or against any HTTP client: elabftw-mcp --transport streamable-http --port 8081 (stateless by default, --stateful for session-based clients, --json-response if the client cannot read SSE).

Hosted (multi-user) usage

export MCP_JWT_SECRET="$(python -c 'import base64,os;print(base64.urlsafe_b64encode(os.urandom(32)).decode())')"
elabftw-mcp --hosted --host 0.0.0.0 --port 8081
  • /register — enter instance URL + API key, pick a profile and the tools to expose

  • /mcp?token=… — the MCP endpoint for the issued personal URL

  • /status — service and protocol info

  • audit log (JSONL), registration rate limit, X-Forwarded-Proto aware

Tokens are HMAC-signed and carry the instance URL, the API key, the profile and the tool allow-list; keys are never stored server-side. Requests without a valid token get 401; tools outside a token's scope are refused with -32601.

Configuration

config.example.yml → config.yml (path via ELABFTW_MCP_CONFIG). Everything can be overridden by environment variables: ELABFTW_BASE_URL, ELABFTW_API_KEY, ELABFTW_MCP_AI_MODEL, ELABFTW_MCP_AI_KEY, ELABFTW_MCP_AI_BASE_URL, ELABFTW_MCP_RATE_LIMIT, MCP_JWT_SECRET, MCP_TOKEN_EXPIRY_DAYS, ELABFTW_MCP_AUDIT_LOG.

features:
  write_enabled: true        # master switch for every write tool
  write_create: true         # create_experiment / create_item / …
  write_update: true         # body / field / metadata updates
  allow_body_overwrite: true # otherwise only append mode is allowed
  ai_review: true            # review_experiment etc.
  cache_ttl_seconds: 300     # cache for team catalogues and /users/me

AI tools

review_experiment, suggest_tags and suggest_metadata call an OpenAI-compatible chat-completions endpoint (ai.base_url, ai.model, ai.api_key). Without a key they answer with the upstream placeholder wording instead of failing — the response contract (trace_id, entity_type, entity_id, suggestions, status) stays identical either way.

Tests

python tests/test_api_contract.py     # offline: request shapes vs. the OpenAPI spec
python tests/test_tools_offline.py    # offline: all 41 tools against a stub eLabFTW
python tests/test_transports.py       # offline: stdio + stateless HTTP, real MCP client
python tests/test_ai_tools.py         # offline: AI tools vs. a local LLM stub (no quota spent)
python tests/test_ai_tools.py --live  # live instance + local LLM stub
python tests/test_live_tools.py       # live: all 41 tools against a real instance
python tests/test_proxy_live.py       # live: register flow, scope, protocol eras

For a running deployment there are two checks that need nothing but a URL:

python tests/diagnostics/deployed_e2e.py    # one endpoint: register, 41 tools, read + write + cleanup
python3 tests/diagnostics/service_sweep.py  # the whole host: web hosts, register pages, /el, /dt, /nm

Live suites read the key from ../.elab_key (never printed), tag everything they create as elabmcp-test-<timestamp> and delete it again. tests/diagnostics/ holds the small probes used to pin down the API behaviour on a new instance (step fields, link direction, metadata payload).

Status of the last full run (eLabFTW 6.0.1, MCP Python SDK 2.2.0):

Suite

Result

test_live_tools.py — every tool against the live instance

46 / 46 checks PASS, test data cleaned up

test_tools_offline.py — every tool against the stub

45 / 45 PASS

test_api_contract.py — requests vs. OpenAPI (83 paths, 104 requests)

PASS

test_ai_tools.py — AI tools against a local OpenAI-compatible stub

15 / 15 PASS

test_ai_tools.py --live — same, but the entry comes from the real instance

17 / 17 PASS

test_transports.py — stdio + stateless HTTP + legacy handshake

8 / 8 PASS

test_proxy_live.py — register, scope, tokens, audit

13 / 13 PASS

API notes (measured against a running instance, not just the spec)

Observation

Consequence for the tools

PATCH .../steps/{id} rejects any action value other than finish ("Incorrect parameter for steps.") although the 6.0.2 spec declares action: update

update_step sends the spec-shaped payload first and retries without action — works on both behaviours

action: finish toggles and ignores a given finished value

toggle_step(finished=0/1) verifies the stored state and toggles a second time if needed

deadline is accepted on a step PATCH, deadline_notif is not (HTTP 400)

add_step sets the deadline in a follow-up PATCH and reports the stored value; deadline_notif is reported as unsupported instead of silently dropped

metadata must be sent as a JSON string; a nested object produces HTTP 500 / MySQL 3140

update_entity_metadata serialises before PATCHing

Links are stored on one side only: /{type}/{id}/experiments_links lists own links, rows carry entityid

outgoing via the subresource, incoming via ?related=<id>&related_origin=<type>

Tags are canonicalised on write (tga becomes TGA if the team already knows the tag) and the entity payload reports them as a `a

b

DELETE is a soft delete (state=3): the record disappears from listings but GET still answers

the live suites verify removal through the listing instead of a 404

Single-entity GETs can be very large (item types with long HTML bodies)

results are always valid JSON: long strings are shortened before anything is truncated

Response statuses used by the write tools: created, updated, deleted, uploaded, linked, already_linked, would_link, unlinked, already_absent, would_unlink, ok, partial — the same vocabulary across all write tools.

Relation to the previous /el deployment

Measured against the running R-based service (researchmcp.duckdns.org/el, reproduced by tests/diagnostics/compare_with_deployed.py): the tool surface is identical — 41 tools on both sides, none missing, none extra — and the same entities and ids come back (categories, statuses and user info 100% identical, get_experiment 81%).

Deliberate differences:

previous deployment

this server

answer format

R print output (list(limit = 2, …))

JSON

entity rows

whole row

whole row (only body_html is dropped, tags normalised to a list of strings)

protocol

2025-06-18 only

2026-07-28 stateless plus legacy handshakes

AI tools

bootstrap placeholders

real LLM calls, same response contract

X-Write-Scope

forwarded to the worker

accepted, can only narrow the token's profile

personal URLs

HMAC(instance, key, profile, tools, expiry)

byte-compatible format, verified with the same MCP_JWT_SECRET

Only /el (proxy + R worker) is replaced. /nm (NOMAD MCP), /dt (DataTagger MCP), the eLabFTW instance, the databases, Caddy and the two Streamlit apps keep running untouched.

Documented differences from the upstream R implementation

Topic

Behaviour here

Metadata structure

eLabFTW 6 format (metadata.extra_fields keyed by field name, group_id per field) instead of the 5.x group-keyed layout

Incoming links

Resolved via the documented ?related=<id>&related_origin=<type> query — eLabFTW stores a link on one side only, so the related_* keys of the entity payload do not carry incoming links

Linkable types

eLabFTW's link routes exist for experiments and items only; template/item-type link calls fail with a clear message instead of a silent no-op

AI tools

Real LLM calls (upstream shipped bootstrap placeholders); same response contract

Provenance

Key elabrmcp_provenance is kept, source reports elabftw-mcp

Team capability flags

A missing users_canwrite_* flag allows the call (the API enforces permissions) instead of denying it

Low-level/inventory/compound flags

Present in the config for compatibility; the API is called directly

License

MIT, see LICENSE.

This server is a rewrite of Marvin Luepke's elabMCP R server and its elabR library, both MIT licensed. The tool surface, the response shapes and the runtime quirks documented below follow those sources; the credits are in the section above.

Available Tools

41 tools
add_ai_review_commentA

Attach an AI-generated review comment to an eLabFTW experiment or item. The provenance header ('[AI-GENERATED] | | trace: …') is added automatically. WRITE OPERATION — requires the comment write scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
commentYes
trace_idNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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 a fair job: it discloses that the tool is a WRITE OPERATION, that the provenance header is added automatically (so the agent should not include it), and that a comment write scope is required. It stops short of describing append-vs-overwrite behavior or failure modes.

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?

Three tight sentences with the operation and its automatic header behavior front-loaded, and no filler. Slightly compressed given the undocumented parameters, but efficient per sentence.

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?

An output schema exists, so return values need not be explained, and the description covers the essentials: write classification, required scope, and the auto-generated header. The main gap is entity_type semantics and valid values, which are undocumented in both schema and description.

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

Parameters2/5

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

Schema description coverage is 0% for all four parameters, so the description must compensate and largely does not. Only trace_id gets indirect meaning via the 'trace: …' header notation; entity_type, id, and comment are left entirely to the bare schema titles.

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 gives a specific verb (attach) and resource (AI-generated review comment) and names the target domain (eLabFTW experiment or item), which is clear and concrete. It does not distinguish itself from the sibling review_experiment tool, which an agent might reasonably confuse it with.

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?

It states the write scope requirement ('requires the comment write scope') and flags the operation as a write, giving some context for use. However, there is no guidance on when to reach for this versus review_experiment or how it fits into a review workflow.

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

add_stepA

Add a new step (task) to an existing eLabFTW experiment, item, experiment template or item type. WRITE OPERATION — requires the step write scope. A deadline (date/datetime string) is set with a follow-up update because the create endpoint only stores the body. Returns entity_type, entity_id, step_id, the stored deadline and status='created'.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyYes
deadlineNo
entity_typeYes
deadline_notifNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 flags WRITE OPERATION, names the required 'step write scope' permission, and discloses a non-obvious quirk (the create endpoint only stores the body, so deadlines require a follow-up update). It omits error/rate-limit behavior and whether deadline_notif triggers notifications, keeping it short of a 5.

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 tight sentences, front-loaded with the core action and scope, then the write/permission caveat, then the deadline quirk. Every clause 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?

An output schema exists, so the explicit return-value sentence is largely redundant, and the description is otherwise adequate for the write itself. However, with zero annotation and zero schema-description coverage, leaving 'deadline_notif' and the deadline-assignment behavior only partially explained is a real gap.

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 0%, so the description must compensate for all five params. It does add the deadline format (date/datetime string) and its stored-vs-applied behavior, and its entity-type list maps to the entity_type values, but 'id', 'body' and especially 'deadline_notif' remain unexplained.

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 (add) and resource (a step/task), and enumerates the exact set of host entities it accepts (experiment, item, experiment template, item type). This clearly separates it from sibling mutators like update_step, toggle_step and delete_step 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 Guidelines3/5

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

The description implies usage — it must be an existing entity, and it routes deadline setting to 'a follow-up update' — but it never states when to prefer this tool over siblings such as update_step or when a step should be created at all. Usage is inferable rather than explicit.

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

apply_tag_suggestionsB

Persist a list of (suggested) tags to an eLabFTW experiment or item. WRITE OPERATION — requires the tag write scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
tagsYes
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 behavioral burden, and it does disclose the two most important facts: this is a WRITE OPERATION and it requires the tag write scope. It stops short of the remaining high-value disclosures — whether persistence appends to or replaces existing tags, whether it is idempotent, and whether it fails on duplicate tags.

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?

Two short sentences with the operation stated first and the critical constraint (write scope) second — well front-loaded with no filler. It is efficiently sized, though the second sentence is a fragment bolted on rather than integrated prose.

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?

The presence of an output schema means return values need not be described, so the gap lies elsewhere: required-parameter semantics and the effect of re-applying tags are both missing for a mutation tool. Adequate but with clear gaps for a write operation with zero annotation coverage.

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

Parameters2/5

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

Schema description coverage is 0% across all three required parameters. The description only vaguely maps 'tags' and the entity ('experiment or item'), leaving 'id' entirely unexplained and giving no hint about the accepted values for 'entity_type' (which has no enum). With three undocumented required parameters, the description fails to compensate for the coverage gap.

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 ('Persist') and resource ('tags to an eLabFTW experiment or item'), which clearly separates it from the read-only suggest_tags sibling by virtue of the write semantics. The parenthetical '(suggested)' hints at the workflow relationship but the description never names suggest_tags directly, so sibling differentiation is implied rather than explicit.

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?

The phrase 'a list of (suggested) tags' implies this is the persistence step following suggest_tags, so the intended usage context is weakly conveyed. However, there is no explicit when-to-use statement, no statement of what happens if tags already exist, and no stated alternative for a non-persisting path.

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

create_experimentA

Create a new eLabFTW experiment. WRITE OPERATION — requires the create write scope. Discover valid category/status IDs first; never embed IDs in the title or body. If the team enforces experiment templates (force_exp_tpl), this tool is refused and create_experiment_from_template must be used. Returns the new id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
tagsNo
titleNoUntitled
status_idNo
category_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden and largely meets it: it flags this as a WRITE OPERATION, names the required create write scope, and discloses a refusal condition (force_exp_tpl). It stops short of describing failure/error behavior beyond that one gate or any side effects on templates/metadata, so it is 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.

Conciseness5/5

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

Four short sentences, front-loaded with the write/scope requirement and escalating to prerequisites and refusal conditions. Every sentence carries distinct, load-bearing information 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?

An output schema exists and the description still confirms the return shape ('Returns the new id'). Combined with the write-scope, ID-discovery, and template-refusal guidance, an agent has what it needs to call this correctly; only the tags/body semantics remain thin.

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 0%, so the description must compensate; it usefully explains that status_id/category_id must be discovered from valid IDs and warns against embedding IDs in title/body. However, it says nothing about tags, body content format, or the default 'Untitled' title, leaving several parameters undocumented in both schema and description.

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 (create a new eLabFTW experiment) and immediately contrasts itself with the template-based sibling by naming it. An agent can distinguish create_experiment from create_experiment_from_template without opening either definition.

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-not guidance: if force_exp_tpl is enforced the tool is refused and create_experiment_from_template must be used instead. It also states a prerequisite (look up valid category/status IDs first), which is actionable routing and preparation guidance rather than inference.

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

create_experiment_from_templateA

Create a new eLabFTW experiment from an experiment template. WRITE OPERATION — requires the create write scope. Use list_experiment_templates to find template IDs. include_steps/include_body decide whether the template's steps and body are copied. Returns the new id.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
titleNo
trace_idNo
status_idNo
category_idNo
template_idYes
include_bodyNo
include_stepsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 load and does well: it declares this is a WRITE OPERATION, names the required create write scope, explains the copy semantics of the two boolean flags, and states the return value ('the new id'). It omits failure modes/permission errors, keeping it short of a 5.

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 tight sentences, front-loaded with the action and the write/scope warning, with no filler. Every sentence adds information.

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?

Auth requirements, template discovery, flag semantics, and the return value are covered, and an output schema exists so return shape needn't be detailed. However, five parameters remain unexplained, leaving the definition incomplete for a tool with this many inputs.

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

Parameters2/5

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

Schema description coverage is 0% across 8 parameters, so the description must compensate. It only explains template_id (indirectly) and the two include_* flags; tags, title, trace_id, status_id, and category_id are left entirely undefined in both schema and description.

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 ('Create a new eLabFTW experiment from an experiment template'), and the 'from template' qualifier clearly separates it from the sibling create_experiment.

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 concrete routing guidance: the prerequisite tool (list_experiment_templates) for obtaining a template_id, plus the required write scope and the effect of the include_steps/include_body flags. An agent knows when and how to call it.

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

create_itemA

Create a new eLabFTW database item (resource). WRITE OPERATION — requires the create write scope. Items belong to item categories; discover valid IDs first and never embed IDs in the title or body. Returns the new id.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyNo
tagsNo
titleNoUntitled
status_idNo
category_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and it does disclose the key traits: this is a WRITE OPERATION, it requires the create write scope, and it returns the new id. It does not cover failure behavior (e.g. invalid category_id) or reversibility, which are secondary for a create call.

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 purpose, then the write/scope warning, then the ID-hygiene rule. Every sentence earns its place; nothing is padded.

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 5-param mutation tool with no annotations, the description covers the essentials (write nature, auth scope, ID discovery, return of new id) and an output schema exists so return details needn't be repeated. Only the tags/status_id parameters remain unexplained.

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 0% across 5 parameters, so the description must compensate. It clarifies category_id (item categories, IDs must be looked up) and warns against putting IDs in title/body, but says nothing about tags or status_id, leaving two parameters undocumented in both schema and prose.

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 (Create) and resource (a new eLabFTW database item/resource), and the parenthetical disambiguates it from experiment-creating siblings. An agent can distinguish it from create_experiment and create_experiment_from_template 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 real operational preconditions: requires the create write scope, items belong to item categories, and valid IDs must be discovered first rather than embedded in title/body. It stops short of naming the sibling tools (e.g. list_item_categories) that supply those IDs, but the when-to-use context is clear.

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

delete_stepA

Delete a step from an eLabFTW experiment, item, experiment template or item type. WRITE OPERATION — requires the step write scope. Returns status='deleted'.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
step_idYes
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/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 disclose the key traits: it is an explicit WRITE OPERATION, it requires a specific write scope, and it returns status='deleted'. It omits irreversibility/cascade behavior and idempotency, but the mutation and auth posture are stated.

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 lines, front-loaded with the action and scope, followed by the operation class and return value. No filler sentences.

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?

An output schema exists so return-value detail is unnecessary, and the description covers the write/auth posture. However, for a 3-required-parameter mutation with 0% schema coverage, the ambiguous id vs step_id semantics leave a real gap an agent could trip over.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate, and it only partially does: the four entity types map loosely to entity_type, but it never clarifies the distinction between id and step_id, both of which are required integers. Two of the three parameters remain unexplained in both schema and prose.

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 precise verb (delete) and resource (step) and scopes it to four eLabFTW entity types, which cleanly separates it from update_step, toggle_step, add_step and list_steps by intent. It stops short of explicitly naming those siblings, so it is clear but not maximally differentiated.

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?

States a prerequisite (requires the step write scope), which is useful context, but gives no when-to-use guidance versus alternatives like toggle_step or update_step, and no conditions under which deletion should be avoided. Usage is only implied by the verb.

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

get_connection_infoA

Return connection and session details for the active server: eLabFTW base URL, authenticated user, active team, effective server mode (read-only vs write-enabled), enabled tool groups, and a category catalogue (experiments and items) for the active team. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/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 and does disclose the key behavioral trait: it is side-effect free and never writes. It also reveals the effective server mode (read-only vs write-enabled), which is meaningful context. It stops short of stating auth requirements or confirming idempotency/output shape beyond the field list.

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 verb and subject are front-loaded, and the trailing safety sentence is short and useful. The long enumeration of returned fields is somewhat list-heavy, especially since an output schema already exists, but it remains readable and earns most of its space.

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 zero-parameter, read-only introspection tool with an output schema, the description is essentially complete. The only redundancy is enumerating return fields the output schema already documents; otherwise nothing an agent needs to call it is missing.

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 the baseline of 4 applies. There is nothing for the description to clarify beyond what the empty schema already conveys.

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 (Return) and resource (connection and session details), then enumerates exactly what is returned: base URL, authenticated user, active team, server mode, enabled tool groups, and category catalogue. An agent can tell precisely what this tool provides 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 Guidelines2/5

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

There is no guidance on when to call this versus siblings such as get_current_user_capabilities or refresh_team_caps, nor any stated precondition. 'Always safe to call' describes safety, not usage context, leaving the agent to infer that it is a bootstrap/diagnostic call.

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

get_current_user_capabilitiesA

Return a sanitized subset of the current user's capabilities and team roles. Calls /users/me and returns only the fields relevant for capability detection: userid, fullname, current team id, team memberships (id, name, is_admin, is_owner, is_archived), is_sysadmin, can_manage_compounds and can_manage_inventory_locations. Sensitive fields (email, API keys, signatures, preferences) are deliberately omitted.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 endpoint called, that the response is a 'sanitized subset', the exact set of team-membership fields exposed, and which sensitive fields (email, API keys, signatures, preferences) are deliberately omitted. It omits auth requirements and pagination/caching behavior, so not a 5.

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?

Two sentences, front-loaded with the outcome and then the field-level detail. The field enumeration is long but is the substantive content rather than padding, so it earns its place; a minor trim is conceivable.

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?

An output schema exists, so the description need not fully explain return values, yet the field list usefully complements it by explaining what is intentionally excluded (sanitization), which the schema alone would not convey. For a no-argument, no-annotation read tool this is nearly 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?

The tool takes zero parameters, so the baseline of 4 applies. The description correctly does not invent argument semantics, and instead documents the shape of what is retrieved.

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 names a specific verb and resource ('Return ... the current user's capabilities and team roles') and even cites the underlying endpoint /users/me, so the purpose is unmistakable. It does not explicitly differentiate itself from the adjacent sibling refresh_team_caps, which is the only thing keeping it off a 5.

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 only: the phrase 'relevant for capability detection' hints at when the tool is useful, but there is no explicit when-to-use, when-not-to-use, or comparison to alternatives such as refresh_team_caps. No prerequisites or auth context are stated.

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

get_experimentA

Fetch a single elabFTW experiment by its numeric ID. Returns the full experiment record including body, metadata, tags, comments, links and uploads. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations are absent, so the description carries the full behavioral burden, and it does well on the key trait: 'Always safe to call; never writes anything' explicitly declares read-only safety. It also enumerates the returned contents. It omits auth/permission or not-found behavior, keeping it below a 5.

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 operation and identifier, then the return payload, then the safety note. Every sentence earns its place with no redundancy.

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 simple single-entity read with an output schema already documenting the return shape, the description supplies enough: what it fetches, how it is identified, and the read-only safety profile. Nothing essential for correct invocation is missing.

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 0% and the single parameter ('Id', integer) is described only mechanically, so the schema does not compensate. The description supplies the meaning — 'numeric ID' identifying the experiment to fetch — which resolves the otherwise undocumented parameter.

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), resource (elabFTW experiment), and scope (single, by numeric ID). The word 'single' cleanly separates it from the list_experiments sibling without the schema being opened.

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 by 'fetch a single experiment by its numeric ID', so an agent knows to use it when it already has an ID. However, no explicit when-to-use/when-not guidance is given, and no alternatives (e.g. list_experiments for discovery) are named.

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

get_experiment_templateA

Fetch a single elabFTW experiment template by its numeric ID. Returns the full template record including body, metadata and steps. Use list_experiment_templates to discover templates and create_experiment_from_template to create an experiment from one. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 disclose the key safety trait ('Always safe to call; never writes anything') plus the shape of the result (full record with body, metadata, steps). It stops short of noting anything about auth requirements or error behavior for a missing/invalid ID, so it is 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.

Conciseness5/5

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

Three short sentences, each doing distinct work: what it fetches, what it returns, and how it relates to alternatives. Front-loaded with the purpose and free of filler.

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?

An output schema exists, so return values need no elaboration, and the description still sketches the record contents. For a one-parameter read tool with sibling routing spelled out, an agent has everything needed to call 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 0% and the single property is a bare integer titled 'Id', so the description must compensate. It does by specifying 'numeric ID' and implying it identifies an existing template, which is more than the schema conveys, though it adds no format constraints or failure modes.

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 (Fetch) plus resource (elabFTW experiment template) and scoping detail (single, by numeric ID). It also explicitly distinguishes itself from list_experiment_templates and create_experiment_from_template, so an agent can tell it apart from siblings without opening schemas.

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?

Names the two relevant alternatives and the condition that selects each: list_experiment_templates to discover IDs, create_experiment_from_template to instantiate one. This leaves nothing to inference about when to use this tool versus its neighbors.

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

get_itemA

Fetch a single elabFTW database item (resource) by its numeric ID. Returns the item with metadata, tags, comments, links and uploads. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 behavioral burden and does disclose the key trait: 'Always safe to call; never writes anything,' plus the returned payload (metadata, tags, comments, links, uploads). It does not cover permissions, rate limits, or behavior when the ID is not found, which keeps it short of a 5.

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 tight sentences, front-loaded with purpose, then return contents, then safety. No filler and nothing redundant.

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?

Because an output schema exists, return-shape explanation is not required, yet the description still names the returned fields helpfully. For a single-parameter read tool with no annotations this is nearly complete, with only not-found/permission edge cases unaddressed.

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 0% and the single 'id' property has only a type. The description compensates by specifying the ID is numeric and identifies the entity class it addresses, giving the agent enough to construct a valid call.

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), resource (single elabFTW database item / resource), and scope (by its numeric ID). This clearly distinguishes it from list_items and from get_experiment/get_item_type siblings that target different resource types.

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: an agent infers it should be used when it already has an item ID. There is no explicit when-to-use, no contrast with list_items (fetch many) or resolve_entity_by_query, and no stated prerequisite. The sentence about safety addresses behavior, not selection.

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

get_item_typeA

Fetch a single elabFTW item type by its numeric ID. Returns the full item type record including body, metadata and steps. Use list_item_types to discover item types. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden, and it does disclose the safety profile ("Always safe to call; never writes anything") plus the shape of the returned record. It omits error behavior for an invalid or missing ID and any permission requirements, leaving modest gaps.

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?

Three short, front-loaded sentences with no filler, leading with the action and ID requirement. The sentence enumerating return fields is somewhat redundant given an output schema exists, costing a little efficiency.

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 single-parameter read tool with an output schema, the agent gets purpose, discovery path, and safety in one place. Missing only edge-case guidance (invalid ID handling), which is a minor rather than a blocking gap.

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 0%, so the schema's bare "Id" integer is all the structured data offers. The description adds that it is the item type's *numeric* ID and hints where IDs come from (list_item_types), but gives no constraints, range, or failure modes for the value.

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 ("Fetch a single elabFTW item type by its numeric ID") and the word "single" implicitly contrasts with the list sibling. It does not address the nearby get_item sibling, so full sibling differentiation is not achieved.

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?

"Use list_item_types to discover item types" names the alternative and the condition that selects it, giving the agent a clear routing path. It stops short of stating explicitly when this tool (versus that one) is the right call, so it is clear context rather than a full when/when-not rule.

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

list_experiment_categoriesA

List all experiment categories for the active elabFTW team. Specify team_id='current' (default) or a numeric team ID. Returns id, title, color and is_default per category — use those ids when filtering list_experiments by category. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNocurrent

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/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 discharges it by declaring 'Always safe to call; never writes anything', which conveys the read-only safety profile. It also discloses the returned fields, though it leaves pagination/rate behavior unstated.

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 tight sentences, front-loaded with purpose then the parameter, return fields, and safety note. Each sentence earns its place with no redundancy.

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 simple single-parameter list tool, the description covers purpose, parameter behavior, returned fields, and safety, and the presence of an output schema means return structure need not be elaborated further. Nothing needed to call it correctly is missing.

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 0%, so the description must compensate, and it does: it explains that team_id defaults to 'current' and otherwise accepts a numeric team ID. This fully documents the single parameter, though it adds no format validation detail.

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 gives a precise verb+resource ('List all experiment categories') scoped to the 'active elabFTW team', which distinguishes it from the adjacent 'list_item_categories' sibling. An agent can identify the tool 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 clear context for how the output is consumed ('use those ids when filtering list_experiments by category') and explains the team_id default. It does not explicitly exclude alternatives like list_item_categories, but the retrieval context is well established.

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

list_experimentsA

Search or list elabFTW experiments. Returns a structured response with paging metadata, applied filters, and result records. Check paging.returned_count vs paging.limit to detect further pages. Use the dedicated filter arguments for known category/user/status IDs or tags instead of putting them into q. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
sortNo
tagsNo
limitNo
orderNo
scopeNo
stateNo
offsetNo
owner_idsNo
status_idsNo
category_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/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 it does state the safety profile explicitly ('Always safe to call; never writes anything'). It also describes the return shape and the pagination detection rule (returned_count vs limit), which is real behavioral context beyond the schema. It stops short of noting auth/permission requirements or rate limits.

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?

Four short sentences, front-loaded with purpose and returning shape, then the filter rule and the safety note. Nothing is redundant, though the pagination instruction is slightly operational detail that could be trimmed.

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?

An output schema exists, so return values need not be explained, and the description covers safety and pagination adequately. The significant remaining hole is that over half the input parameters have no semantic documentation anywhere, which an agent would need to call 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 0%, so the description must compensate, and it only partially does: it names q, tags, and the category/user/status ID filters. Sort, limit, order, scope, state, and offset are left entirely undocumented in both description and schema, which is a meaningful gap for an 11-parameter tool.

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 ('Search or list elabFTW experiments'), which is unambiguous. It does not explicitly differentiate from sibling list tools such as list_items or list_experiment_templates, so an agent must infer the distinction from the resource 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 Guidelines3/5

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

It gives one concrete routing rule — use dedicated filter arguments for known category/user/status IDs or tags rather than q — which is genuinely useful. However, it offers no guidance on when to choose this tool over alternatives like get_experiment or list_items, leaving the primary selection decision implied.

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

list_experiment_statusesA

List all experiment statuses for the active eLabFTW team. Specify team_id='current' (default) or a numeric team ID. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNocurrent

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden, and it does disclose the critical trait: "Read-only." It says nothing about pagination, result caps, or whether the team must exist/have permissions, so it is adequate but not rich for an annotation-free tool.

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 compact sentences with zero waste; the purpose is front-loaded and the parameter rule follows immediately. Nothing could be removed without losing 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?

An output schema exists, so return-value shape need not be described, and the single parameter and its default are covered. Only minor gaps remain (pagination, team-permission preconditions).

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 0%, so the description must compensate, and it does: team_id accepts 'current' (the default) or a numeric team ID. That is exactly the semantic an agent needs and the schema leaves bare.

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+resource ("List all experiment statuses") and scopes it to the active eLabFTW team. It does not explicitly distinguish itself from the near-named sibling list_item_statuses, but the resource 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 Guidelines3/5

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

Usage is implied — an agent that needs the set of experiment statuses would call this — and the default team behavior is clarified. There is no explicit when-not guidance or routing to alternatives such as list_item_statuses.

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

list_experiment_templatesA

List elabFTW experiment templates (/experiments_templates). Returns a structured response with paging metadata and result records. Templates are reusable pre-filled starting points for new experiments and are DIFFERENT from item types (use list_item_types for those). Use get_experiment_template for a single template and create_experiment_from_template to use one. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
sortNo
tagsNo
limitNo
orderNo
stateNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 safety burden and does so ('Always safe to call; never writes anything'), and notes the paged structured response. It stops short of richer behavioral detail (auth scope, pagination boundaries with offset/limit), so it is strong but not complete.

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 tight sentences, each earning its place: identity, return shape, sibling disambiguation, and routing. Nothing is padded and the disambiguation is front-loaded.

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?

An output schema exists, so return values need no prose, and the read-only nature is stated. The remaining hole is the fully undocumented filtering/paging parameter set, which leaves an agent guessing at how to narrow results.

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

Parameters2/5

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

Seven parameters (q, sort, tags, limit, order, state, offset) have 0% schema description coverage, and the description never explains any of them — notably 'state', which is ambiguous, and how sort/order interact. The description does not compensate for the coverage gap.

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+resource ('List elabFTW experiment templates') and immediately disambiguates from the closest confusing sibling by asserting templates are 'DIFFERENT from item types (use list_item_types for those).' An agent can select this 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?

Explicitly routes to alternatives by intent: list_item_types for item types, get_experiment_template for a single record, create_experiment_from_template for consuming one. It also states the safe-to-call condition, so both when-to-use and when-to-use-something-else are covered.

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

list_item_categoriesA

List all item categories (resource categories) for the active eLabFTW team. Specify team_id='current' (default) or a numeric team ID. Use the returned ids when filtering list_items by category. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNocurrent

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full load, and it does disclose the safety profile ('Always safe to call; never writes anything') plus the team-scoping behavior. It omits permission/authorization requirements and pagination or ordering behavior for the returned list.

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 clauses, each earning its place: identity, parameter rules, downstream use, and safety. The core purpose is front-loaded with zero filler.

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?

An output schema exists, so return values needn't be explained, and the description covers scope, the lone parameter, and safety. For a simple one-param list tool nothing an agent needs is missing.

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 0% and the single team_id param has no schema description, so the description must compensate — which it does by stating the default ('current') and the accepted numeric team ID format. It doesn't say where numeric team IDs come from or whether a stringified number is required.

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?

Specific verb+resource ('List all item categories') with a clarifying synonym ('resource categories') that separates it from the sibling list_experiment_categories. It never explicitly contrasts with list_item_types, so an agent still has to infer that boundary.

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 downstream use case ('Use the returned ids when filtering list_items by category') and explains the team scoping choice, which is clear context for when to reach for this tool. It stops short of stating when-not or naming an alternative sibling.

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

list_itemsB

Search or list elabFTW database items (resources). Returns a structured response with paging metadata, applied filters, and result records. Check paging.returned_count vs paging.limit to detect further pages. Use the dedicated filter arguments for known IDs or tags instead of q. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
sortNo
tagsNo
limitNo
orderNo
scopeNo
stateNo
offsetNo
owner_idsNo
status_idsNo
category_idsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.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 full burden and does disclose the key safety trait: 'Always safe to call; never writes anything.' It also reveals the return shape (paging metadata, applied filters, records) and how to detect more pages. It omits auth/permission requirements, but for a read-only list tool this is solid disclosure.

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?

Four tight sentences, front-loaded with purpose then return/paging advice then parameter guidance. No filler, though 'Search or list' hedges where one precise verb would be cleaner.

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?

An output schema exists, so return values need not be restated, and the description thoughtfully covers paging. But for an 11-parameter tool with 0% schema documentation and no annotations, the description leaves too many filter parameters unexplained to be considered complete.

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

Parameters2/5

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

Schema description coverage is 0% across 11 parameters, so the description must compensate and largely does not. It only alludes to q and to 'dedicated filter arguments for known IDs or tags'; scope, state, sort, order, limit, and offset are never explained in prose or schema.

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: 'Search or list elabFTW database items (resources)', which separates it from list_experiments and list_item_types by naming the resource type. The duality of 'search or list' is slightly muddy but an agent can still identify this as the general item-listing tool.

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?

Offers parameter-level guidance ('Use the dedicated filter arguments for known IDs or tags instead of q'), which is useful. However, it never says when to prefer this tool over get_item or resolve_entity_by_query, so broader routing 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.

list_item_statusesA

List all item statuses (resource statuses) for the active eLabFTW team. Specify team_id='current' (default) or a numeric team ID. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
team_idNocurrent

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 burden. It does usefully declare "Read-only," which covers the safety profile that annotations would normally supply, but says nothing about pagination, permissions, or what happens when an unknown team_id is passed.

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, front-loaded with what is listed and scoped by team, followed by the accepted argument values. Every clause 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?

An output schema exists, so return values need not be explained, and the description covers purpose plus the sole parameter's semantics. The only omission is any hint about access requirements or pagination/size limits for a team-wide listing.

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 0%, so the description must compensate, and it does: it explains that team_id accepts 'current' (the default) or a numeric team ID. It does not state what a numeric ID resolves to or error behavior for invalid IDs, but the accepted-value semantics are covered.

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 names a specific verb ("List") and resource ("item statuses (resource statuses)") scoped to the active eLabFTW team, so an agent knows exactly what it returns. It is clear but does not explicitly distinguish itself from near-siblings such as list_experiment_statuses or list_item_types.

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 by the text: call it to enumerate the team's statuses, with the team_id scoping rule given. There is no explicit when-to-use/when-not-to-use guidance and no mention of the alternative status/type listing tools, so the agent must infer the boundary.

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

list_item_typesA

List elabFTW item types (/items_types), also called resource categories. They define the category structure and default content for database items and are DIFFERENT from experiment templates (use list_experiment_templates). Use get_item_type for a single one. Always safe to call; never writes anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
sortNo
tagsNo
limitNo
orderNo
stateNo
offsetNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden and does disclose read-only safety ('Always safe to call; never writes anything') plus what item types conceptually represent. It omits any pagination or default-limit behavior despite limit/offset parameters.

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 tight sentences with zero waste; the core purpose is front-loaded before the disambiguation and safety notes.

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?

Because an output schema exists, return values need no explanation, and purpose, alternatives, and safety are all covered. The one real gap is that none of the 7 filter/pagination parameters are described anywhere.

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

Parameters2/5

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

Schema description coverage is 0% across 7 parameters, so the description must compensate, but it explains none of them. The meaning of q (full-text?), sort, order, state, tags, limit (default 25) and offset is left entirely undocumented.

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 states a specific verb and resource ('List elabFTW item types'), gives the alternate name ('resource categories') and the API path, and explicitly distinguishes itself from experiment templates and get_item_type. An agent can identify exactly what this returns without opening another 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?

It names the alternative (list_experiment_templates) and the condition that selects it, and routes single-item lookups to get_item_type. When-to-use and when-not-to-use are both explicit.

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

list_stepsA

List all steps (tasks) attached to an eLabFTW experiment, item, experiment template or item type. Returns entity_type, entity_id, total_steps and a steps array (id, body, finished, ordering, deadline). With render_markdown=True a 'markdown' field with a GFM checkbox task list and deep links to each step is added. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
entity_typeYes
render_markdownNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it explicitly declares 'Read-only' and describes the concrete response shape (entity_type, entity_id, total_steps, steps array with id/body/finished/ordering/deadline). It stops short of stating pagination behavior, ordering guarantees, auth/permission requirements, or behavior when the entity has no steps.

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?

Three front-loaded sentences: purpose/scope first, then return shape, then the render_markdown branch. Every sentence is load-bearing, though the return-field enumeration is somewhat redundant given an output schema exists.

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 read-only listing tool with an output schema and no annotations, the description is nearly sufficient: it covers scope, the render_markdown toggle, and the read-only guarantee. Remaining gaps are minor — no pagination limits, no behavior for zero steps, and the return-field detail is partly duplicated by the output schema.

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 0%, so the description must compensate, and it partially does: it enumerates the valid entity_type values and explains that render_markdown=True adds a 'markdown' field with a GFM checkbox list and deep links. It does not clarify what 'id' refers to beyond the entity type, nor the default behavior of render_markdown (the schema does supply default=false).

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 all steps (tasks) attached to an eLabFTW experiment, item, experiment template or item type') and enumerates the exact valid entity scopes. An agent can distinguish it from mutation siblings like add_step/update_step/toggle_step/delete_step 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 Guidelines3/5

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

Usage is implied by the verb 'List' and the 'Read-only' tag, and the entity_type list tells the agent which entities are in scope. However, there is no explicit when-to-use/when-not guidance and no routing to alternatives (e.g., use add_step to create, toggle_step to flip completion).

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

refresh_team_capsA

Refresh and return the cached team capability flags for the current session. Fetches the team record, sanitizes the capability fields used for policy checks, updates the cache and returns the sanitized team_caps object. Does not write to eLabFTW resources.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 reasonably well: it discloses the side effect (updates the cache), the read/write boundary ('Does not write to eLabFTW resources'), and that returned capability fields are sanitized for policy checks. It stops short of stating auth/permission prerequisites or failure 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?

Three tight sentences: purpose first, then the mechanism, then the non-mutation disclaimer last. Nothing is padded, though the mechanism sentence could be slightly tighter given an output schema already exists.

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?

Zero parameters and an output schema mean the return shape needn't be re-explained, and the description still summarizes the returned sanitized team_caps object. What remains unaddressed is the relationship to the sibling capability tool and any permission requirements, but nothing essential to invoking it is missing.

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 the baseline is 4. Nothing in the description is needed to clarify argument usage, and it does not introduce any spurious parameter-like claims.

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 ('Refresh and return the cached team capability flags') and adds the mechanism (fetch team record, sanitize, update cache). It is clearly distinguishable in intent from get_current_user_capabilities, but never names that sibling explicitly, so differentiation is left to inference.

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?

The phrase 'for the current session' and 'cached' implies usage when the session cache needs refreshing, but there is no explicit when-to-use, when-not-to-use, or call-out to get_current_user_capabilities as the alternative. Usage is implied rather than stated.

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

resolve_entity_by_queryA

Search experiments or items by query and return compact candidates for disambiguation. Read-only, always available. Returns status, entity_type, resolution (not_found | unique | ambiguous) and the candidate list — use it to find an id before acting on it.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNo
tagsNo
scopeNoall
offsetNo
extendedNo
owner_idsNo
status_idsNo
entity_typeYes
category_idsNo
limit_candidatesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 disclose read-only, always-available semantics plus the resolution states (not_found | unique | ambiguous). It does not cover permission requirements, rate limits, or whether tag/filter args broaden or narrow results, leaving a modest gap.

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?

Two compact sentences, front-loaded with the action and the return contract. No filler, though the second sentence packs a few concepts without fully unpacking them.

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?

An output schema exists, so return values need not be explained, and the resolution semantics are a useful bonus. But for a 10-parameter tool with zero schema descriptions, the description is not complete enough to guide correct invocation.

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

Parameters2/5

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

Ten parameters at 0% schema description coverage, and the description only gestures at a free-text query and an entity type. Nine parameters (tags, scope, offset, extended, owner_ids, status_ids, category_ids, limit_candidates) are undocumented in both schema and description, so an agent must guess their meaning and interactions.

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+resource (search experiments or items by query) and the output shape (compact candidates for disambiguation), which separates it from the list_* siblings that return full entities. It does not name any sibling explicitly, so it lands at 4 rather than 5.

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?

"Use it to find an id before acting on it" gives a clear use context and positions the tool as a precursor to mutation tools. No explicit when-not or named alternatives are given, but the workflow guidance is concrete.

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

review_experimentA

Generate an AI review summary for an eLabFTW experiment (documentation quality, risks, suggestions, completeness score). Read-only — writes nothing. Needs an AI endpoint; without one the response carries the upstream placeholder marker.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 does well: it discloses that the operation is read-only ('writes nothing') and that it depends on an AI endpoint, with a defined fallback placeholder behavior. It does not cover auth requirements or rate limits, but the core behavioral profile is clear.

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, front-loaded with the purpose followed by the safety and dependency caveats. Every clause 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?

An output schema exists so return values need not be explained, and the description covers the primary operational caveat (AI endpoint dependency). For a single-parameter read-only tool this is nearly complete, with only minor gaps around the id parameter.

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 0% and the sole 'id' parameter is undocumented in the schema. The description implicitly clarifies that the id refers to an eLabFTW experiment, adding marginal meaning, but does not specify format or behavior beyond that.

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 (Generate) and resource (AI review summary for an eLabFTW experiment) and even enumerates the output components (documentation quality, risks, suggestions, completeness score). This clearly distinguishes it from read-only siblings like get_experiment and from the related add_ai_review_comment.

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?

It states a key prerequisite ('Needs an AI endpoint; without one the response carries the upstream placeholder marker'), which tells the agent when the tool is useful. However, it never explicitly contrasts this with alternatives such as get_experiment or add_ai_review_comment, leaving the choice to inference.

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

suggest_metadataA

Suggest structured metadata (custom fields) for an eLabFTW experiment or item. Read-only — writes nothing; feed the result into update_entity_metadata to persist it.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden and does so by explicitly declaring 'Read-only — writes nothing'. It also discloses the follow-up persistence path via 'update_entity_metadata'. It does not cover auth requirements or whether the target entity must already exist, but the key safety trait is clearly stated.

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, front-loaded with the action and scope, followed by the critical read-only and persistence guidance. 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?

An output schema exists so return values need not be described, and the read-only nature plus the persistence sibling are covered. The remaining gap is the lack of any parameter explanation, which is a real but bounded omission for a two-parameter tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate for the two undocumented parameters. While 'experiment or item' loosely hints at the 'entity_type' values, neither 'entity_type' nor 'id' is explained with format, allowed values, or meaning.

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 states a specific verb and resource ('Suggest structured metadata (custom fields) for an eLabFTW experiment or item') and immediately names the persisting sibling 'update_entity_metadata'. An agent can distinguish this read-only suggestion tool from the write tool without inspecting schemas.

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 clearly describes the intended workflow: use this to generate suggestions, then feed the result into 'update_entity_metadata' to persist. It does not state explicit exclusions versus sibling tools like 'suggest_tags', but the context of use is clear.

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

suggest_tagsA

Suggest tags for an eLabFTW experiment or item based on its content. Read-only — writes nothing; use apply_tag_suggestions to persist them.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/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 disclose the key behavioral trait: it is read-only and writes nothing, which is the critical distinction from apply_tag_suggestions. It does not cover auth requirements or whether suggestions are persisted in any session state, leaving some gaps.

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 core action front-loaded and the read-only constraint plus the persistence alternative immediately following. No wasted words.

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?

An output schema exists, so return values need not be described, and the read-only nature and persistence path are covered. The main remaining hole is the undocumented parameters, which the description does not compensate for.

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

Parameters2/5

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

Schema description coverage is 0% for two required parameters, and the description only loosely implies entity_type by mentioning 'experiment or item'. It adds no meaning for id or the accepted entity_type values/format, so the agent gets little guidance beyond the bare 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 (suggest) and resource (tags) scoped to experiments or items, and notes suggestions are content-based. It also names the differing sibling apply_tag_suggestions, so an agent can separate the suggestion step from the persistence step without inspecting either 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?

Clearly routes the agent: use this to generate suggestions, then use apply_tag_suggestions to persist them. This gives a clear use context and names the follow-on alternative, though it does not state explicit exclusions or preconditions (e.g., required permissions).

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

toggle_stepA

Mark a step as complete or incomplete. WRITE OPERATION — requires the step write scope. finished=1 marks it complete, finished=0 incomplete; when omitted the server-side finish action flips the current state.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
step_idYes
finishedNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 explicitly labels this a WRITE OPERATION and names the required step write scope, plus discloses the non-obvious toggle behavior when finished is omitted. It does not cover idempotency or what the response contains, but an output schema exists to cover returns.

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 with zero filler. The write-operation warning is front-loaded and the flag semantics follow immediately, so the most decision-relevant information lands first.

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?

Output schema exists, so return values need not be described. The description covers the mutation, the auth scope, and the toggle semantics, but leaves 'entity_type' and the id/step_id relationship undefined, and gives no disambiguation against the adjacent step-mutation siblings.

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 0% for 4 parameters, so the description must compensate. It fully explains the crux parameter 'finished' (1=complete, 0=incomplete, omitted=flip), but says nothing about 'entity_type' (an unconstrained required string with no enum) or the distinction between 'id' and 'step_id'.

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 ('Mark a step as complete or incomplete'), so the action is unambiguous. However, it does not distinguish itself from the sibling 'update_step', which plausibly could also change completion state, so an agent must still guess which to pick.

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?

The description explains the semantics of the finished flag including the omitted case (server flips current state), which is real usage guidance. But it gives no when-to-use vs when-not-to-use framing against 'update_step' or 'add_step', and no prerequisites beyond the scope note.

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

update_entity_fieldsA

Update top-level scalar fields (title, status, category) on an existing eLabFTW experiment or item. WRITE OPERATION — requires the update write scope. At least one of title, status_id, category_id must be given. Returns the applied fields and a read-back verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
titleNo
trace_idNo
status_idNo
category_idNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 well: it flags a WRITE OPERATION, the required write scope, and the at-least-one-field constraint. It stops short of saying whether unspecified fields are left untouched or that the read-back is the verification mechanism's output.

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 tight sentences, front-loaded with the purpose and then the operational caveats. No filler; each sentence adds 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?

An output schema exists, so return details needn't be spelled out, and the write scope plus validation rule are covered. The main gap is that entity_type and id are undocumented and the valid values for entity_type (experiment vs item) are not stated.

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 0% across 6 params. The description covers title, status_id, and category_id (including that at least one is required), but leaves id, entity_type, and trace_id unexplained — notably entity_type, which likely drives behavior. Partial compensation, so a mid score.

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 (update), the exact resource and scope (top-level scalar fields on an existing eLabFTW experiment or item), and enumerates the affected fields. This clearly separates it from siblings like update_entity_metadata and update_experiment_body.

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 clear precondition ('at least one of title, status_id, category_id must be given') and the required permission scope. It does not explicitly name alternatives for editing non-scalar fields, but 'top-level scalar fields' implicitly positions it against update_entity_metadata.

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

update_entity_metadataA

Update the metadata (custom fields) of an eLabFTW experiment, item, experiment template or item type. WRITE OPERATION — requires the update write scope. 'fields' is a JSON string with an array of field objects ({key, value | values, type, group_id, allow_multi_values, description}); 'groups' optionally defines extra field groups ([{id, name}]). mode='merge' (default) keeps the existing metadata, 'overwrite' rebuilds it from the supplied fields. Returns the resulting field names and a read-back verification.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
modeNomerge
fieldsYes
groupsNo
trace_idNo
entity_typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/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 meets it: it discloses the write nature, the required write scope, the destructive semantics of mode='overwrite' ('rebuilds it'), the preservation semantics of 'merge', and a read-back verification. It omits edge behavior such as what happens to fields not mentioned in a merge or any rate limits.

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 purpose and the WRITE OPERATION/scope warning, then parameter detail. The 'fields' schema description is dense but every element earns its place; 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?

An output schema exists, so return values need not be spelled out, yet the description still summarizes the read-back verification. Combined with the write-scope note and mode semantics, this is nearly complete for a 6-param write tool; only the trace_id parameter and merge edge cases are unaddressed.

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 0%, so the description must compensate, and it does for the complex parameters — it gives the JSON shape of 'fields' ({key, value | values, type, group_id, allow_multi_values, description}), the structure of 'groups' ([{id, name}]), and the default/values of 'mode'. The simple params (id, entity_type) are self-evident, but 'trace_id' is left undocumented.

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 ('Update') and resource ('metadata (custom fields)') and enumerates the four entity types it applies to, so the agent knows what it targets. It does not differentiate itself from the sibling 'update_entity_fields', which sounds like a near-identical operation, leaving a routing ambiguity.

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?

The description explains the merge vs overwrite modes and flags 'WRITE OPERATION — requires the update write scope', which is useful operational guidance. However, it never states when to choose this tool over the sibling 'update_entity_fields', so the agent must infer the distinction.

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

update_experiment_bodyA

Update the body of an existing eLabFTW experiment. WRITE OPERATION — requires the update write scope. The existing content_type (HTML=1 / Markdown=2) is preserved. mode='append' (default) keeps the original body byte-for-byte and appends the new text; mode='overwrite' replaces it and needs both the config flag allow_body_overwrite and confirm_overwrite=true. The result reports a read-back verification of the change.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
modeNoappend
textYes
trace_idNo
confirm_overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 richly: it declares the write operation and required update scope, states that content_type is preserved, specifies that append keeps the original body byte-for-byte, details overwrite prerequisites (allow_body_overwrite config plus confirm_overwrite=true), and notes read-back verification.

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 the WRITE OPERATION warning, then proceeds in tight, information-dense sentences. Every clause (scope, content_type preservation, mode semantics, overwrite preconditions, verification) earns its place with no filler.

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 mutation tool with no annotations and an output schema present, the description covers the safety profile, preconditions, and mutation semantics an agent needs. Return-value detail is rightly deferred to the output schema, and the read-back verification note ties it together.

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 0%, so the description must compensate; it explains mode semantics and its default and the confirm_overwrite coupling well. id and text are self-evident from their names, but trace_id is left unexplained, keeping this from a 5.

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 ('Update the body of an existing eLabFTW experiment'), and the 'experiment' scoping plus body target distinguishes it from the sibling update_item_body. An agent can identify the target object and mutation 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 clear operating context: it is a write operation requiring the update write scope, and it lays out append (default) vs overwrite conditions including the required config flag and confirm_overwrite. It stops short of explicitly routing the agent to sibling alternatives, so it is a 4 rather than a 5.

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

update_item_bodyA

Update the body of an existing eLabFTW database item. WRITE OPERATION — requires the update write scope. mode='append' (default) preserves the original body and appends; mode='overwrite' replaces it and needs allow_body_overwrite plus confirm_overwrite=true.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
modeNoappend
textYes
trace_idNo
confirm_overwriteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 well: it flags the WRITE OPERATION, names the required update write scope, and spells out which mode destroys the original body and what confirmation is needed. It omits details like reversibility of append vs overwrite beyond the stated replacement semantics, so not a 5.

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 that front-load the operation and the destructive-path warning; every clause carries 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?

Output schema exists, so return values need not be explained, and the description covers the scope and destructive-mode requirements well. The gap is undocumented semantics for id/text/trace_id on a mutation tool with zero schema descriptions.

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 0%, so the description must compensate. It explains mode and confirm_overwrite semantics, but the required id and text parameters and trace_id are left entirely undocumented in both schema and description; it also mentions allow_body_overwrite, which is not a parameter of this schema, adding ambiguity.

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 ('Update the body of an existing eLabFTW database item'), which cleanly distinguishes it from siblings like update_experiment_body and update_entity_metadata.

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 conditional guidance for the two modes, including the default ('append' preserves and appends) and the conditions for the destructive path (allow_body_overwrite plus confirm_overwrite=true). It does not name sibling alternatives for when this tool is the wrong choice, so it stops short of a 5.

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

update_stepA

Update an existing step: body and/or deadline. WRITE OPERATION — requires the step write scope. At least one of body, deadline, deadline_notif must be provided; deadline_notif is reported as unsupported when the API rejects it (see notes).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
bodyNo
step_idYes
deadlineNo
entity_typeYes
deadline_notifNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/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 unusually well: it flags the WRITE OPERATION, the required write scope, the at-least-one-field constraint, and discloses that deadline_notif may be rejected by the API and reported as unsupported. What it omits is whether unspecified fields are preserved and what the response/error shape looks like, which keeps it below 5.

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 and tight: the mutation and its scope constraint come first, with no padding sentences. The trailing '(see notes)' points at notes that are not present anywhere in the provided material, a small dangling reference that costs a point.

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?

The existence of an output schema means return values need not be explained, and the write-scope plus field constraint are covered. But for a no-annotation mutation tool, the unresolved identifier semantics and the dangling '(see notes)' reference leave the agent guessing about entity_type/step_id usage.

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 0%, so the description must compensate, and it only explains half the parameters (body, deadline, deadline_notif). The three required identifiers (id, step_id, entity_type) remain completely undocumented in both schema and description, which is a meaningful gap for a tool that cannot be called without them.

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 ('Update an existing step') and names the editable fields (body, deadline). It implicitly separates itself from add_step/delete_step/toggle_step by scoping to field edits, though it never explicitly contrasts with toggle_step, which an agent might confuse for a status change on the same resource.

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?

Gives a real precondition ('at least one of body, deadline, deadline_notif must be provided') and names the required write scope, which is genuinely useful. However, it never states when to reach for this tool versus toggle_step, add_step, or update_entity_fields, so alternative selection 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.

upload_image_from_contentA

Upload a single image attachment to an eLabFTW experiment or item from base64-encoded content. WRITE OPERATION — requires the update write scope. Only image/png, image/jpeg, image/gif and image/tiff are accepted. Returns the new upload id and size.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
commentNo
filenameYes
mime_typeNo
entity_typeYes
content_base64Yes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 behavioral burden and discharges much of it: it discloses the write/auth requirement (update scope), the validation constraint (allowed mime types), and the return contents (upload id and size). Gaps remain around size limits, idempotency, and permitted entity_type values, keeping it out of the top band.

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 sentences, each earning its place: purpose, auth/operation class, accepted formats, and return. The most decision-relevant facts (what it does and that it is a write) are front-loaded with zero filler.

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?

An output schema exists so the return format need not be spelled out, and the auth/mime facts are supplied. However, for a 6-parameter write tool with zero schema descriptions and no annotations, the unexplained parameter semantics and missing accepted entity_type values leave real gaps for an agent trying to invoke it correctly.

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

Parameters2/5

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

Schema coverage is 0% across 6 parameters, so the description must compensate but largely does not. It loosely hints at entity_type ('experiment or item') and content_base64 ('from base64-encoded content'), while filename, mime_type, and comment are never explained and no accepted entity_type values are given.

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 (upload), resource (a single image attachment), target (eLabFTW experiment or item) and source (base64-encoded content) are all stated. No sibling tool performs uploads, so an agent can immediately place it. The purpose is self-contained and 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 states the operation class (WRITE OPERATION), the required scope (update write scope), and the accepted input types (png/jpeg/gif/tiff), which are effective gating conditions. It stops short of explicitly naming a when-not or an alternative, but no sibling offers a competing path, so little is left ambiguous.

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. 41 tool updatesv0.1.0
    • First observedadd_ai_review_comment
    • First observedadd_step
    • First observedapply_tag_suggestions
    • First observedbulk_delete_links
    • First observedbulk_ensure_links
    • First observedcreate_experiment
    • First observedcreate_experiment_from_template
    • First observedcreate_item
    • First observeddelete_link
    • First observeddelete_step
    • First observedensure_link
    • First observedensure_link_by_query
    • First observedexpand_links_network
    • First observedget_connection_info
    • First observedget_current_user_capabilities
    • First observedget_entity_links
    • First observedget_experiment
    • First observedget_experiment_template
    • First observedget_item
    • First observedget_item_type
    • First observedlist_experiment_categories
    • First observedlist_experiment_statuses
    • First observedlist_experiment_templates
    • First observedlist_experiments
    • First observedlist_item_categories
    • First observedlist_item_statuses
    • First observedlist_item_types
    • First observedlist_items
    • First observedlist_steps
    • First observedrefresh_team_caps
    • First observedresolve_entity_by_query
    • First observedreview_experiment
    • First observedsuggest_metadata
    • First observedsuggest_tags
    • First observedtoggle_step
    • First observedupdate_entity_fields
    • First observedupdate_entity_metadata
    • First observedupdate_experiment_body
    • First observedupdate_item_body
    • First observedupdate_step
    • First observedupload_image_from_content

TDQS

A3.5/5.0

Scored across 41 tools

Disambiguation4/5

Most tools target a distinct resource+action and descriptions clarify boundaries well. However, the link family (ensure_link, ensure_link_by_query, bulk_ensure_links, delete_link, bulk_delete_links) and the info family (get_connection_info, get_current_user_capabilities, refresh_team_caps) have overlapping purposes that could cause misselection, and resolve_entity_by_query overlaps with the list_* searches.

Naming Consistency4/5

The dominant pattern is consistent verb_noun snake_case (get_item, list_experiments, create_experiment, update_step, delete_link, bulk_ensure_links). A few names deviate slightly (review_experiment, refresh_team_caps, expand_links_network) but remain readable and predictable.

Tool Count2/5

41 tools is heavy for a single MCP server and pushes well past the comfortable 3-15 range. While the eLabFTW domain is broad, the count is high enough to burden tool selection and discovery.

Completeness3/5

Strong read/link/step/update coverage, but notable lifecycle gaps: no delete for experiments, items, uploads, templates, or metadata. Read+create+update are covered while destructive/cleanup operations are largely absent, and there is no direct tag-list or item-type management.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers