landfeedAPI · MCP · 2.0.0Agent Markdown

Errors catalogue

Codes are extracted from API, OAuth, watch, ask and stdio MCP emission sites. Parcel errors use error.code; watch uses an error string; OAuth uses its own JSON error; ask may send error SSE data. HTTP status, error code and coverage are separate signals. Internal watch admission codes can be suppressed as unsafe_event, rather than returned to the caller.

-32600

Invalid or oversized JSON-RPC request.

What to do: Send a supported JSON-RPC request shape and a valid id within transport bounds.

Emission sites: landfeed/mcp/server.mjs:120, landfeed/mcp/server.mjs:40.

-32601

The JSON-RPC method does not exist.

What to do: Use initialize, tools/list, tools/call or another supported protocol method.

Emission sites: landfeed/mcp/server.mjs:79.

-32602

JSON-RPC parameters or the requested tool are invalid.

What to do: Match the method schema and use a tool returned by tools/list.

Emission sites: landfeed/mcp/server.mjs:55, landfeed/mcp/server.mjs:71.

-32603

Internal JSON-RPC server failure.

What to do: Retain the call context, check billing if a tool started, and retry a read later.

Emission sites: landfeed/mcp/server.mjs:86, landfeed/mcp/server.mjs:88.

-32700

JSON-RPC parse failure.

What to do: Send valid UTF-8 JSON, one stdio message per line.

Emission sites: landfeed/mcp/server.mjs:98.

access_denied

Authorization was refused or its redirect policy changed.

What to do: Start consent again with a registered redirect; ask the operator if it is no longer allowed.

Emission sites: landfeed/api/landfeed_api/oauth.py:95, mcp==1.30.0/server/auth/provider.py:64.

account_inactive

The account is disabled.

What to do: Use an active account or ask account support.

Emission sites: landfeed/api/landfeed_api/watch/store.py:35.

account_required

A static benchmark credential cannot identify an account.

What to do: Use an issued account API key.

Emission sites: landfeed/api/landfeed_api/routers/watch.py:39.

ambiguous

Several parcel or area candidates match; HTTP 200. Candidate discovery is charged.

What to do: Ask the user for obręb or choose an explicitly confirmed candidate id; never pick silently.

Emission sites: landfeed/contracts/envelope.json:1.

billing_unavailable

Ask could not settle its reserved work. New artifacts and factual text are withheld.

What to do: Retain meta.request_id, inspect the account and reconcile settlement before replaying work.

Emission sites: landfeed/api/landfeed_api/ask/router.py:228.

blocked_destination

The webhook destination resolves to an unsafe address.

What to do: Use public HTTPS on port 443; correct DNS before reconfiguring the webhook.

Emission sites: landfeed/api/landfeed_api/watch/network.py:100.

body_too_large

The request body exceeds the endpoint cap.

What to do: Reduce the body; watch accepts at most 256 KiB.

Emission sites: landfeed/api/landfeed_api/routers/watch.py:86.

cancelled

The stdio MCP client cancelled the call; billing is unknown.

What to do: Check account usage before repeating a paid operation.

Emission sites: landfeed/mcp/bridge.mjs:127.

client_result_required

The continuation expects a client tool result.

What to do: Resend the signed continuation with matching client_results.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:50.

confirmation_required

The continuation expects explicit action confirmation.

What to do: Ask the user and resend confirmation for the signed step_id.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:55.

conflicting_historical_evidence

Historical event evidence contradicts the saved change.

What to do: Do not treat a suppressed event as no change; operator must repair producer evidence.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:122, landfeed/api/landfeed_api/watch/matching.py:207, landfeed/api/landfeed_api/watch/matching.py:209.

conflicting_version_provenance

Event version provenance contradicts its evidence.

What to do: Operator must reconcile version/source evidence; do not reconstruct it from current data.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:183.

context_too_large

Conversation evidence exceeds bounded context limits.

What to do: Resend only relevant signed results; at most 40 results and 512,000 bytes total.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:27, landfeed/api/landfeed_api/ask/conversation.py:66.

duplicate_artifact

An artifact identifier occurs more than once.

What to do: Send each complete signed artifact once.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:32.

event_type_has_no_producer

The requested event family has no serving producer.

What to do: Use one of the seven supported layer.changed watch filters.

Emission sites: landfeed/api/landfeed_api/watch/validation.py:60.

expired_continuation

The signed conversation continuation expired.

What to do: Start a new turn with fresh context; continuations last one hour.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:25.

idempotency_conflict

A request key was reused with different watch items.

What to do: Use the original items for a retry, or a new key for a new action.

Emission sites: landfeed/api/landfeed_api/watch/store.py:89.

incomplete_version_provenance

An event lacks the version/source evidence required for delivery.

What to do: Operator must repair the producer; never infer a negative from a missing delivery.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:51.

insufficient_credits

Ask could not reserve the declared budget.

What to do: Reduce max_credits within the supported range or fund the account before asking again.

Emission sites: landfeed/api/landfeed_api/ask/router.py:228.

internal

The server failed to complete the operation; HTTP 500, refunded.

What to do: Retain meta.request_id and retry a read later; check billing after an interrupted response.

Emission sites: landfeed/api/landfeed_api/app.py:469, landfeed/contracts/envelope.json:1.

invalid_arguments

The stdio tool received an invalid argument object or path value.

What to do: Match the tool inputSchema; path arguments must be nonempty strings.

Emission sites: landfeed/mcp/bridge.mjs:71, landfeed/mcp/bridge.mjs:76, landfeed/mcp/bridge.mjs:81.

invalid_client

OAuth client authentication failed.

What to do: Check client registration and auth method, then reconnect.

Emission sites: landfeed/api/landfeed_api/oauth.py:365, mcp==1.30.0/server/auth/provider.py:81.

invalid_client_metadata

OAuth registration requested unsupported metadata.

What to do: Use authorization_code/refresh_token and a supported client authentication method.

Emission sites: landfeed/api/landfeed_api/oauth.py:83, landfeed/api/landfeed_api/oauth.py:85, mcp==1.30.0/server/auth/provider.py:50.

invalid_client_tool

A declared client tool schema or its conversation input is invalid.

What to do: Send a self-contained local JSON schema and correctly shaped client results; remote/dynamic references are rejected.

Emission sites: landfeed/api/landfeed_api/ask/router.py:167.

invalid_digest

Signed evidence or its account binding failed verification.

What to do: Send the original signed object unchanged from this account; otherwise start again.

Emission sites: landfeed/api/landfeed_api/ask/signing.py:41.

invalid_grant

OAuth code or refresh token is expired, consumed or invalid.

What to do: Restart authorization; do not replay an old rotated refresh token.

Emission sites: landfeed/api/landfeed_api/oauth.py:165, landfeed/api/landfeed_api/oauth.py:194, landfeed/api/landfeed_api/oauth.py:298, mcp==1.30.0/server/auth/provider.py:81.

invalid_id

A watch/resource UUID is malformed.

What to do: Copy the UUID returned by creation/listing.

Emission sites: landfeed/api/landfeed_api/routers/watch.py:48.

invalid_input

Request parameters or JSON do not match the operation; generally HTTP 400 and free.

What to do: Correct required fields, types and exclusivity; inspect error.hint where present.

Emission sites: landfeed/api/landfeed_api/account/router.py:51, landfeed/api/landfeed_api/account/router.py:57, landfeed/api/landfeed_api/app.py:460, landfeed/api/landfeed_api/app.py:549, landfeed/api/landfeed_api/app.py:557, landfeed/api/landfeed_api/app.py:577, landfeed/api/landfeed_api/mcp_remote.py:39, landfeed/api/landfeed_api/routers/billing.py:141, landfeed/api/landfeed_api/routers/billing.py:87, landfeed/api/landfeed_api/routers/billing.py:93, landfeed/api/landfeed_api/routers/watch.py:104, landfeed/api/landfeed_api/routers/watch.py:116, landfeed/api/landfeed_api/routers/watch.py:183, landfeed/api/landfeed_api/routers/watch.py:188, landfeed/api/landfeed_api/routers/watch.py:91, landfeed/api/landfeed_api/routers/watch.py:99, landfeed/api/landfeed_api/watch/store.py:81, landfeed/api/landfeed_api/watch/validation.py:48, landfeed/contracts/envelope.json:1.

invalid_polygon

The supplied geometry cannot be admitted.

What to do: Use a valid WGS84 Polygon/MultiPolygon within endpoint limits.

Emission sites: landfeed/api/landfeed_api/watch/store.py:65, landfeed/api/landfeed_api/watch/validation.py:96.

invalid_redirect_uri

OAuth callback URI is not allowed by server policy.

What to do: Register an exact client callback allowed by the operator.

Emission sites: landfeed/api/landfeed_api/oauth.py:81, mcp==1.30.0/server/auth/provider.py:50.

invalid_request

The OAuth request is incomplete or violates resource/PKCE requirements.

What to do: Use S256 PKCE, exact redirect_uri and the discovered MCP resource.

Emission sites: landfeed/api/landfeed_api/oauth.py:290, landfeed/api/landfeed_api/oauth.py:307, landfeed/api/landfeed_api/oauth.py:367, landfeed/api/landfeed_api/oauth.py:93, landfeed/api/landfeed_api/oauth.py:97, mcp==1.30.0/server/auth/provider.py:64, mcp==1.30.0/server/auth/provider.py:81.

invalid_response

The stdio bridge received invalid JSON, UTF-8 or a non-envelope response. Billing is unknown.

What to do: Keep the request context, check usage and report the transport failure.

Emission sites: landfeed/mcp/bridge.mjs:119, landfeed/mcp/bridge.mjs:130.

invalid_scope

OAuth requested a scope other than landfeed:read.

What to do: Request landfeed:read.

Emission sites: landfeed/api/landfeed_api/oauth.py:100, mcp==1.30.0/server/auth/provider.py:64, mcp==1.30.0/server/auth/provider.py:81.

invalid_software_statement

OAuth registration contains an invalid software statement.

What to do: Remove unsupported software metadata or use dynamic client registration with valid client metadata.

Emission sites: mcp==1.30.0/server/auth/provider.py:50.

invalid_target

The OAuth resource does not identify this MCP server.

What to do: Use the resource in protected-resource discovery, ending /mcp.

Emission sites: landfeed/api/landfeed_api/oauth.py:296.

invalid_webhook_url

Webhook URL syntax, protocol or privacy admission failed.

What to do: Use a public HTTPS URL on port 443 with no credentials, fragment or private fields.

Emission sites: landfeed/api/landfeed_api/watch/network.py:63.

missing_artifact

Conversation history refers to an artifact absent from results.

What to do: Resend the full original signed artifact, including data.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:36.

missing_historical_evidence

Historical event evidence or its dated source is missing.

What to do: Operator must repair source evidence; current dates cannot replace historical dates.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:201, landfeed/api/landfeed_api/watch/matching.py:42, landfeed/api/landfeed_api/watch/matching.py:78, landfeed/api/landfeed_api/watch/matching.py:84, landfeed/api/landfeed_api/watch/matching.py:87, landfeed/api/landfeed_api/watch/matching.py:99.

not_covered

The input resolved outside the loaded data; this is unknown, not a negative result.

What to do: Inspect scope/source/note; use another source. The uncovered work is refunded.

Emission sites: landfeed/api/landfeed_api/app.py:199, landfeed/api/landfeed_api/app.py:212, landfeed/api/landfeed_api/app.py:216, landfeed/api/landfeed_api/app.py:228, landfeed/api/landfeed_api/app.py:231, landfeed/api/landfeed_api/app.py:344, landfeed/api/landfeed_api/app.py:392, landfeed/api/landfeed_api/app.py:432, landfeed/contracts/envelope.json:1.

not_found

No matching resource was found; parcel reads refund the work.

What to do: Check the id and account ownership; refine q or point where applicable.

Emission sites: landfeed/api/landfeed_api/account/router.py:49, landfeed/api/landfeed_api/app.py:193, landfeed/api/landfeed_api/app.py:208, landfeed/api/landfeed_api/app.py:577, landfeed/api/landfeed_api/watch/store.py:114, landfeed/api/landfeed_api/watch/store.py:120, landfeed/api/landfeed_api/watch/store.py:74, landfeed/api/landfeed_api/watch/store.py:91, landfeed/contracts/envelope.json:1.

note_required

A correction event lacks its explanatory note.

What to do: Operator must supply the producer correction note before delivery.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:148.

private_content

Watch input contains forbidden owner or land-register content.

What to do: Remove private fields; use only cadastral parcel/area selectors.

Emission sites: landfeed/api/landfeed_api/watch/validation.py:50.

provider_unavailable

The ask provider failed.

What to do: Retry later after checking settled billing; factual output is withheld on failed settlement.

Emission sites: landfeed/api/landfeed_api/ask/providers/codex_pool.py:205, landfeed/api/landfeed_api/ask/v2.py:155.

rate_limited

A rate, concurrency, credit or team quota limit refused admission; HTTP 429.

What to do: Inspect balance, plan/quota and any Retry-After; reduce concurrency and retry reads with backoff.

Emission sites: landfeed/api/landfeed_api/account/router.py:53, landfeed/api/landfeed_api/ask/router.py:197, landfeed/api/landfeed_api/billing/metering.py:110, landfeed/api/landfeed_api/mcp_remote.py:114, landfeed/api/landfeed_api/routers/billing.py:126, landfeed/api/landfeed_api/routers/billing.py:89, landfeed/api/landfeed_api/watch/store.py:130, landfeed/contracts/envelope.json:1.

resolution_unavailable

Webhook destination DNS could not be resolved.

What to do: Retry later; fix DNS if persistent.

Emission sites: landfeed/api/landfeed_api/watch/network.py:92, landfeed/api/landfeed_api/watch/network.py:98.

response_too_large

The stdio response exceeded 16 MiB; billing is unknown.

What to do: Reduce requested data and check usage before replay.

Emission sites: landfeed/mcp/bridge.mjs:103.

server_error

OAuth could not complete due to a server failure.

What to do: Reconnect later; report the failure without sending secrets.

Emission sites: landfeed/api/landfeed_api/oauth.py:369, mcp==1.30.0/server/auth/provider.py:64.

signing_unavailable

Ask conversation signing is unavailable.

What to do: Retry later; operator must configure the persistent signing secret.

Emission sites: landfeed/api/landfeed_api/ask/signing.py:30.

source_unavailable

A required source or accounting/authentication service failed; HTTP 503.

What to do: Retry the read later; retain request_id and inspect billing. Do not interpret this as no data.

Emission sites: landfeed/api/landfeed_api/account/router.py:61, landfeed/api/landfeed_api/app.py:462, landfeed/api/landfeed_api/app.py:464, landfeed/api/landfeed_api/app.py:466, landfeed/api/landfeed_api/auth.py:45, landfeed/api/landfeed_api/billing/metering.py:110, landfeed/contracts/envelope.json:1.

temporarily_unavailable

OAuth endpoint exceeded its per-process request budget.

What to do: Respect Retry-After (60 seconds) and restart authorization if necessary.

Emission sites: landfeed/api/landfeed_api/oauth.py:358, mcp==1.30.0/server/auth/provider.py:64.

timeout

The stdio bridge exceeded its 30-second deadline; billing is unknown.

What to do: Check usage before retrying; the server may have completed the work.

Emission sites: landfeed/mcp/bridge.mjs:128.

transport_error

The stdio bridge could not complete HTTP; billing is unknown.

What to do: Check service connectivity and account usage before replay.

Emission sites: landfeed/mcp/bridge.mjs:139.

unapproved_software_statement

The OAuth server does not approve the submitted software statement.

What to do: Use supported dynamic registration and contact the operator for an approved client policy.

Emission sites: mcp==1.30.0/server/auth/provider.py:50.

unapproved_source

Event evidence references a source without the required serving approval.

What to do: Operator must review the source; never substitute an unapproved answer.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:28.

unauthorized

Credentials are missing, invalid or lack account/role authority (401 or 403).

What to do: Use a valid account key, reconnect OAuth, or request the required team role.

Emission sites: landfeed/api/landfeed_api/account/router.py:28, landfeed/api/landfeed_api/account/router.py:47, landfeed/api/landfeed_api/auth.py:38, landfeed/api/landfeed_api/routers/billing.py:85, landfeed/api/landfeed_api/routers/watch.py:36, landfeed/contracts/envelope.json:1.

unauthorized_client

The OAuth client is not allowed to use this grant.

What to do: Register a client supporting authorization_code and refresh_token, then reconnect.

Emission sites: mcp==1.30.0/server/auth/provider.py:64, mcp==1.30.0/server/auth/provider.py:81.

unavailable

Ask cannot finish due to provider, signing or settlement availability.

What to do: Keep request_id; inspect billing and retry only when safe.

Emission sites: landfeed/api/landfeed_api/ask/streaming.py:48, landfeed/api/landfeed_api/ask/v2.py:151.

unexpected_continuation

A confirmation/client result does not match the continuation kind.

What to do: Resend only the matching signed action/result or start a new turn.

Emission sites: landfeed/api/landfeed_api/ask/conversation.py:58.

unknown_tool

The stdio MCP tool name is not in the six-tool catalogue.

What to do: Call tools/list and use a published tool name.

Emission sites: landfeed/mcp/bridge.mjs:69.

unsafe_event

Notification evidence failed schema, source or privacy admission.

What to do: Operator must correct the producer; a suppressed notification proves no absence.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:141, landfeed/api/landfeed_api/watch/matching.py:151, landfeed/api/landfeed_api/watch/matching.py:160, landfeed/api/landfeed_api/watch/matching.py:167, landfeed/api/landfeed_api/watch/matching.py:172, landfeed/api/landfeed_api/watch/matching.py:177, landfeed/api/landfeed_api/watch/matching.py:185, landfeed/api/landfeed_api/watch/matching.py:214, landfeed/api/landfeed_api/watch/matching.py:226, landfeed/api/landfeed_api/watch/worker.py:67.

unsupported_grant_type

The OAuth grant type is unsupported.

What to do: Use authorization_code or refresh_token; client_credentials is not supported.

Emission sites: mcp==1.30.0/server/auth/provider.py:81.

unsupported_legacy_event

A stored legacy event has no safe supported notification shape.

What to do: Use supported layer.changed events; operator must implement a typed producer for other families.

Emission sites: landfeed/api/landfeed_api/watch/matching.py:114.

unsupported_response_type

OAuth authorization requested a response type other than code.

What to do: Request response_type=code with PKCE S256.

Emission sites: mcp==1.30.0/server/auth/provider.py:64.

validation_work_limit

Watch validation exceeds item/vertex work bounds (413).

What to do: Limit to 100 items and 1024 polygon vertices in aggregate; reduce the request.

Emission sites: landfeed/api/landfeed_api/watch/validation.py:67, landfeed/api/landfeed_api/watch/validation.py:79, landfeed/api/landfeed_api/watch/validation.py:91.

watch_limit

The shared plan watch-item quota is exhausted (409).

What to do: Remove items or obtain an approved larger limit; zero can mean operator configuration is pending.

Emission sites: landfeed/api/landfeed_api/watch/store.py:46, landfeed/api/landfeed_api/watch/store.py:58.

watch_unavailable

Watch storage or processing is unavailable (503).

What to do: Retry reads later; use the creation idempotency key when retrying creation.

Emission sites: landfeed/api/landfeed_api/ask/router.py:204.

webhook_unconfigured

The watch has no configured webhook to rotate.

What to do: Configure the webhook first, then save its one-time secret securely.

Emission sites: landfeed/api/landfeed_api/watch/store.py:157.