Skip to main content
Glama

Passage Data — cited environmental limits

Audit a published Darwin Core archive

audit_archive
Idempotent

A file this tool reads, sent or fetched from the address given, is read as one dropped on our website: what the read finds (column headings, the shape of its rows, the terms they became, refusal codes) is kept so the reader learns, never the file or its values. Names and contacts are dropped or replaced by a code, and protected species' locations are made coarser. What is wrong with a Darwin Core archive already published on GBIF? The defects in a published Darwin Core archive, found by the audit our website runs on an archive dropped on it: give a GBIF dataset key (the archive is fetched from the endpoint GBIF's registry lists), the archive's address, or the archive itself as base64. Each defect is coded (FS_...), with the check that found it (each check's words once, in checks; a finding names it by index), its count over the rows read, and the file and lines it stands on (at most 5 lines a finding; not_located says why when a check names neither a cell nor a row). bdq names every test of TDWG's BDQ TG2 suite: ran, with compliant and not_compliant counts and lines, or not run under a code (bdq.terms_absent, bdq.authority_absent, bdq.does_not_reproduce, bdq.not_implemented): a test not run is not a test passed. annex: true adds the audit as a markdown document to attach to a report. A large archive answers pending with a call_id: call again with only that call_id to collect it. Refusals are coded: dataset.not_found, dataset.no_archive, archive.unreachable, archive.not_dwca, archive.too_large, url.refused.

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "audit_archive"
  }
}

Input Schema

NameRequiredDescriptionDefault
urlNoThe http(s) address of a Darwin Core archive: an IPT's archive.do?r=..., a .zip (up to 200 MB).
annexNoAlso return the audit as a markdown document (a data quality annex).
call_idNoOnly after a `pending` answer: its call_id, to collect the audit without naming the archive again.
filenameNoWith content_base64: the archive's file name.
gbif_datasetNoA GBIF dataset key (a UUID, as in gbif.org/dataset/<key>).
content_base64NoThe archive's bytes, base64-encoded (at most 10 MB of zip; a larger one by its url).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A3.8/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations: it discloses the privacy handling (names/contacts dropped or coded, protected locations coarsened), that the file and its values are never retained, the async 'pending' + call_id collection flow, and the full refusal-code taxonomy. This is exactly the kind of context annotations (readOnlyHint=false, idempotentHint=true, openWorldHint=true) do not convey.

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

Conciseness2/5

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

The prose is overloaded and poorly front-loaded: the first sentence is a run-on about file reading and privacy before the purpose appears, and information about inputs, defect codes, bdq results, annex, async, and refusals is crammed into one dense block. It carries content but not structure.

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

Completeness4/5

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

With no output schema, the description does the work of describing returns (defect codes FS_..., the checks array with per-index references, counts, lines, not_located, bdq suite status, annex, pending/call_id, refusal codes), which is enough for an agent to call it correctly. Minor gaps remain around exact response shape.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description goes further by explaining the relationship between the three input modes and the call_id handoff ('call again with only that call_id to collect it'), which the schema does not state. Slight verbosity dilutes but does not eliminate the added 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?

The tool clearly audits a published Darwin Core archive for defects and enumerates its three input modes (GBIF key, URL, base64). However, the opening sentence is convoluted and never explicitly differentiates it from close siblings like build_dwc_archive or map_to_darwin_core, so an agent gets the verb+resource but not the routing.

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 ('what is wrong with a Darwin Core archive already published on GBIF?') but there is no explicit when-to-use vs when-not, no prerequisites, and no named alternative among the many audit/check siblings. The context is inferable but not stated.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.