Tax MCP guideDocs home · Quickstart · All guides

How to feed roadmap feedback

Turn blocked workflows into roadmap signals without promising custom work or automatic support.

Target reader

Product managers and support teams collecting unsupported-envelope evidence.

Supported-envelope boundary

Feedback influences prioritization. It does not move legal, pricing, readiness, marketplace, or support claims.

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.

What to collect

Collect the workflow name, route, decline code or review state, sanitized request shape, and what the user expected.

Do not collect API keys, SSNs, taxpayer documents, or raw return PDFs through feedback.

How to route it

Use /feedback for structured roadmap input and support@tax-mcp.com for account or operational help.

Link the user back to the supported envelope and tell them whether the workflow is modeled, declined, planned, or unsupported today.

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