Skip to content

Utilities and errors

edi_ping

edi_ping is a liveness and capability report. It makes no upstream request unless asked to, so it is the first thing to call when a client connects or a tool fails unexpectedly.

Field Meaning
pong Always ok.
version, protocolVersion edi-mcp version and the MCP revision it serves (2026-07-28).
transport stdio or http.
keyConfigured Whether this call has an EDI API key available. The key itself is never shown.
keySource config (the server's environment or config file), request (an HTTP caller's X-EDI-Key header) or none.
backend pasta with a key, dataone without one (see Backends).
keyRequiredTools Registered tools that fail with auth_required without a key.
downloadsEnabled, downloadDir Whether download tools are offered on this transport, and where they write.
endpoints The PASTA, auth, DataONE and citation base URLs in use.
api Present only with check_api=true.

With check_api=true edi-mcp makes one small request to the backend serving the caller — with a key, it exchanges the key for a token and lists PASTA's scopes; without one, it runs a zero-row DataONE query — and reports in api:

Field Meaning
reachable Whether the backend answered.
backend The backend that was checked.
credential token (an edi-token cookie), key (the key as a query parameter, used only when EDI's auth service is unreachable) or none (DataONE).
endpoint, latencyMs The request made and how long it took.
error The error code and message when the check failed, e.g. upstream_forbidden for a rejected key.

edi-mcp --check calls edi_ping in-process and prints the report as JSON. It stays offline; the live check is edi_ping(check_api=true).

Error codes

A failed tool call returns isError: true and structuredContent.error = {code, message, details, hint?}. code is stable and machine-readable; message is safe to show a user and never contains a key or token; hint, when present, is a one-line remedy.

Code Meaning What to do
invalid_argument The arguments failed validation, an identifier could not be parsed, or the upstream rejected the request (HTTP 400). Fix the argument; details names the problem and, for identifiers, lists the accepted forms.
not_found No such package, scope, revision or resource (HTTP 404/410), or a scope name matched nothing. Check the identifier; scope misses include didYouMean.
ambiguous_input A scope name or location matches several scopes about equally. Pick one of the ranked candidates and pass its exact scope.
auth_required The operation needs an EDI API key and none is available for this call. Set EDI_API_KEY (stdio) or send X-EDI-Key (HTTP); details.guide points at edi://guide/api-key.
upstream_forbidden A key was sent and EDI refused. Without reason (HTTP 401) the key was rejected; with reason: access_restricted (HTTP 403) the key works but the package is restricted to named users or groups. Replace the key, or for a restricted package ask its contact for access. edi-mcp never falls back to DataONE here.
rate_limited The upstream answered HTTP 429. Wait details.retryAfterSeconds before retrying.
upstream_error The upstream failed (HTTP 5xx), answered with an unexpected status, or returned a body that could not be parsed. Retry later; details carries the status and endpoint.
upstream_unavailable The upstream could not be reached (network error or timeout). Retry in a moment; call edi_ping(check_api=true).
result_too_large A result stayed above the hard size limit after trimming, or an upstream response exceeded the byte cap. Narrow the request: a smaller limit or a narrower search.
unknown_tool No tool has that name. details.available lists the tools.
internal_error A bug in edi-mcp. Report it with the request id.
feature_unavailable Reserved: a feature disabled by configuration. —
not_available_in_http_mode Reserved for the stdio-only download tools (Roadmap). Use a stdio deployment.
download_limit_exceeded, download_denied, checksum_mismatch Reserved for the download tools (Roadmap): a per-call limit, a path or host outside what is allowed, and a file whose SHA-1 differs from the one EDI publishes. —

Results that are merely large are not errors: lists are trimmed to fit the result budget (50,000 bytes by default) and report page.truncatedReason: budget with a nextOffset to continue from.