Tax MCP guideDocs home · Quickstart · All guides

How to read a Tax MCP response

Turn computed, decline, review, and error responses into safe product behavior without private explanation.

Target reader

Developers and product managers wiring response envelopes into workflow state.

Supported-envelope boundary

Use GET /api/mcp/tax-capabilities before sending taxpayer-like payloads. Only modeled fields and required affirmations can compute.

Reference links: GET /api/mcp/tax-capabilities for the supported envelope, OpenAPI for request and response schema, roadmap feedback, changelog/release notes, support/contact, and terms.

Interpret the envelope first

Start with computed, status, billed, retry_safe, and next_action before reading any tax line.

A deterministic decline is a successful safety outcome. It is not an outage and should not trigger blind retries.

Provenance appears on successful computed or workflow responses; decline responses use code and reason instead.

Display guidance

Computed responses may show tax figures with derivation and legal_notice.

Decline and needs_review responses should show the reason, next_action, and review routing. Do not invent a fallback tax estimate.

Response-state contract

StateHTTPBilledRetry safenext_actionClient display guidance
Computed200Yes on metered customer planstrue with the same Idempotency-KeynoneShow computed figures with derivation and provenance.
Deterministic decline200Yes on metered customer plansfalse for the same unsupported bodyreview_inputsShow the reason and route to review; do not show a tax estimate.
needs_review200Yes on metered customer planstrue for replay; human review is still requiredreview_inputsShow the review queue item, diff, reason, and provenance.
Validation error400Nofalse until request shape is fixedfix_request_and_resubmitShow a request-error state and tell the developer what field to fix.
Auth error401/403Nofalse until credentials are fixedcheck_credentialsAsk the operator to check, rotate, or unsuspend the API key.
Quota or rate limit429Noquota: false; rate: true after backoffupgrade_plan_or_wait_next_period or retry_after_backoffHard-stop quota or transient rate-limit message; do not overrun.
Idempotency replay200Once totalalready replayednoneShow the original result and reassure that replay did not double bill.
Idempotency mismatch409Nofalse with that keyuse_new_idempotency_keyClient bug: same key was used for a different body.
Idempotency in progress409Notrue with the same key after a short waitretry_after_inflight_completesShow in-progress and retry the same key.
Server failure500/503No500: false; 503: true after backofffix_request_and_resubmit or retry_after_backoffOpen support if persistent; do not show a computed result.

First-user comprehension checkpoint

First evaluators should be able to explain these states without private help before sending taxpayer-like payloads. Each row names the guide to read, the safe recovery behavior, and the privacy-safe telemetry event that can detect confusion.

State to understandExpected understandingPrimary guideSafe recoveryTelemetry hook
Computed 200A computed 200 can show figures, provenance, legal_notice, billed, retry_safe, and next_action.read-responseReplay the same Idempotency-Key for network uncertainty; do not change the body under the same key.docs_guides_computed_comprehension
Deterministic decline 200A computed:false 200 is a successful safety answer, not an outage or a free retry loop.deterministic-decline-uiShow code, reason, billed, retry_safe, and next_action; route to review or feedback without a tax estimate.docs_guides_decline_comprehension
needs_review 200needs_review is not a final computed tax answer; it is a human-review workflow state.read-responseShow diff, reason/provenance, billed, retry_safe, and next_action; route to a review queue.docs_guides_needs_review_comprehension
Validation errorA 400 validation failure is unbilled and should be fixed before resubmitting.billing-retries-quotaFix the request shape; do not ask support to infer a missing taxpayer fact.docs_guides_validation_recovery_view
Auth errorA 401/403 auth failure is unbilled and usually means the API key or account state needs attention.billing-retries-quotaCheck, rotate, or unsuspend the key; never paste keys or bearer tokens into support or feedback.docs_guides_auth_recovery_view
Quota or rate limitA 429 is unbilled; monthly quota is a hard cap, while per-minute rate limit can wait/back off.billing-retries-quotaWait, back off, or use account/billing support; do not expect silent overage.docs_guides_quota_recovery_view
Idempotency replaySame-key same-body replay returns the stored result and bills once total.billing-retries-quotaReuse the same key for uncertainty about the same logical POST.docs_guides_replay_comprehension
Idempotency mismatchSame-key different-body mismatch is a client bug, unbilled, and must not be retried with that key.billing-retries-quotaUse a new key only for a new logical request after fixing the client bug.docs_guides_mismatch_recovery_view
Idempotency in progressAn in-progress response is unbilled at failure time and may be retried with the same key after a short wait.billing-retries-quotaRetry the same key after the in-flight request settles.docs_guides_in_progress_recovery_view
Server failureA 500/503 is unbilled and must not produce a guessed tax result in the client UI.read-responseRetry only when the response class says retry is safe; open support if persistent.docs_guides_server_failure_recovery_view

Examples to reproduce

Computed 200

Supported-envelope linkage for the computed example

Preflight this example against the capability manifest before sending taxpayer-like payloads. It names modeled fields, required affirmations, deterministic decline codes, needs_review states, not-modeled residuals, billing semantics, and docs links. OpenAPI lives at /api/openapi.json.

{
  "computed": true,
  "year": 2025,
  "filingStatus": "single",
  "taxableIncome": 69250,
  "incomeTax": 10149,
  "totalTax": 10149,
  "billed": true,
  "retry_safe": true,
  "next_action": "none",
  "provenance": {
    "engine": "deterministic",
    "jurisdiction": "federal",
    "tax_year": 2025
  },
  "legal_notice": {
    "ref": "https://tax-mcp.com/terms#compute-notice",
    "version": "v1"
  }
}

Deterministic decline 200

Supported-envelope linkage for the decline example

Preflight this example against the capability manifest before sending taxpayer-like payloads. It names modeled fields, required affirmations, deterministic decline codes, needs_review states, not-modeled residuals, billing semantics, and docs links. OpenAPI lives at /api/openapi.json.

{
  "computed": false,
  "code": "schedule_c_needs_review",
  "reason": "Schedule C self-employment compute requires scheduleCIsSingleSolePropFinalNetAffirmed:true before Tax MCP can compute this bounded path.",
  "billed": true,
  "retry_safe": false,
  "next_action": "review_inputs"
}

needs_review 200

Supported-envelope linkage for the needs_review example

Preflight this example against the capability manifest before sending taxpayer-like payloads. It names modeled fields, required affirmations, deterministic decline codes, needs_review states, not-modeled residuals, billing semantics, and docs links. OpenAPI lives at /api/openapi.json.

{
  "status": "needs_review",
  "computed": {
    "computed": true,
    "state": "ca",
    "year": 2025,
    "stateTaxableIncome": "<computed value elided>",
    "totalTax": "<computed value elided>"
  },
  "diff": [
    {
      "line": "CA AGI (540:17)",
      "engine": "<computed value elided>",
      "filed": "<filed value supplied by caller, elided>",
      "delta": "<difference elided>",
      "cls": "DIFFERS",
      "note": "source set appears incomplete vs the filed oracle; a human reviews"
    }
  ],
  "billed": true,
  "retry_safe": true,
  "next_action": "review_inputs",
  "provenance": {
    "engine": "deterministic",
    "jurisdiction": "ca",
    "tax_year": 2025
  }
}

Validation error

{
  "error": "invalid_request",
  "billed": false,
  "retry_safe": false,
  "next_action": "fix_request_and_resubmit",
  "reason": "Correct the request body before resubmitting."
}

Checklist

Telemetry, support, and privacy handoff

Privacy-safe guide telemetry may record only named events and coarse categories. It must never include API keys, bearer tokens, taxpayer documents, raw taxpayer PII, full unredacted request/response bodies, or unredacted support text.

EventSurfacePurposeSafe fields
docs_guide_index_view/docs/guidesDetect whether evaluators reach the guide index from docs or quickstart.session_id, surface, timestamp
docs_guides_comprehension_map_view/docs/guidesDetect whether first users see the response-class comprehension map before sending payloads.session_id, surface, timestamp
docs_guides_to_quickstart_click/docs/guides/*Measure guide-to-first-call continuity without recording request bodies or secrets.session_id, guide_slug, timestamp
docs_guides_support_click/docs/guides/*Route account or operational confusion to support without collecting raw support text.session_id, guide_slug, support_category, timestamp
docs_guides_feedback_click/docs/guides/*Route unsupported-envelope surprises to structured feedback without taxpayer PII.session_id, guide_slug, response_class, decline_or_error_code, timestamp
docs_guides_privacy_notice_view/docs/guides/*Confirm the no-secrets/no-PII support boundary is visible before support or feedback handoff.session_id, guide_slug, timestamp

Forbidden fields: api_key, bearer_token, raw_taxpayer_document, raw_taxpayer_pii, full_unredacted_request_body, full_unredacted_response_body, unredacted_free_form_support_text.

Run the first safe callContact supportFile roadmap feedback