Server data from the Official MCP Registry
Refund eligibility notary for US subscriptions. Returns ALLOWED/DENIED/UNKNOWN.
Refund eligibility notary for US subscriptions. Returns ALLOWED/DENIED/UNKNOWN.
Remote endpoints: streamable-http: https://refund.decide.fyi/api/mcp
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Imported from the Official MCP Registry.
1 tool verified · Open access · No issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Remote Plugin
No local installation needed. Your AI client connects to the remote endpoint directly.
Add this to your MCP configuration to connect:
{
"mcpServers": {
"io-github-ndkasndakn-refund-decide": {
"url": "https://refund.decide.fyi/api/mcp"
}
}
}From the project's GitHub README.
Deterministic Decision API engine powering workflow applications, stable MCP notary remotes, decision memo packets, and execution gates
Positioning: Decide is the API engine and compatibility surface. Krafthaus workflow apps, Policy MCP Notaries, decision memo packets, and execution gates are application surfaces that reuse the same verdict, request ID, and evidence contract.
Binding production verdicts should use a versioned declarative rulebook:
Runtime architecture: see docs/RULEBOOK_RUNTIME_ARCHITECTURE.md.
Machine-readable schema: https://api.decide.fyi/schemas/rulebook-v1.schema.json.
Active runtime manifest: https://api.decide.fyi/manifests/rulebook-runtime-v1.json.
Downstream application binding: decide_application_binding_v1.
The production core is hybrid_declarative_rulebook_with_trusted_adapters:
direct declarative rulebooks are supported, registered first-party trusted
adapters may supply bounded facts, and customer executable rulebooks are
rejected. In both supported binding modes, Rulebook v1 remains the only binding
verdict selector.
{
"mode": "rulebook",
"rulebook": {
"schema_version": "rulebook_v1",
"rulebook_id": "pricing_exception",
"version": "2026-06-11",
"input_schema": {
"required": ["discount_percent"],
"properties": {
"discount_percent": { "type": "number" }
}
},
"rules": [
{
"rule_id": "approve_standard_discount",
"priority": 50,
"condition": {
"field": "discount_percent",
"operator": "lte",
"value": 15
},
"outcome": {
"decision": "yes",
"verdict": "APPROVE",
"action": "approve_discount",
"reason_code": "WITHIN_STANDARD_LIMIT"
}
}
],
"default_outcome": {
"decision": "review",
"verdict": "REVIEW",
"action": "route_to_owner",
"reason_code": "NO_RULE_MATCHED"
}
},
"context": {
"inputs": {
"discount_percent": 10
}
}
}
mode: "rulebook" does not call an LLM. It validates the request rulebook
against the published JSON Schema, hashes the rulebook, evaluates bounded
conditions, and returns yes, no, or review alongside the application
verdict, action, reason code, matched rule, and evaluator_version. Responses
also include rulebook_contract with the enforced schema URL/hash,
runtime_binding with the direct or trusted-adapter binding mode, input_hash,
a SHA-256 hash of the canonical inputs or adapter facts consumed by the
declarative evaluator, plus a rulebook_attestation_v1 bundle hash over the
deterministic execution tuple.
Production deployments can sign that bundle hash with a
rulebook_attestation_signature_v1 Ed25519 envelope; verification keys are
published at /.well-known/rulebook-attestation-keys.json. Set
DECIDE_RULEBOOK_ATTESTATION_SIGNATURE_REQUIRED=true in production to fail
closed instead of returning unsigned Rulebook decisions. Publish retired public
verification keys with DECIDE_RULEBOOK_ATTESTATION_KEY_HISTORY_JSON so older
Decision Records remain verifiable after rotation.
Rulebook requests cannot preload Decide-generated Decision Record material.
Fields such as runtime_binding, trusted_adapter, adapter_facts,
rulebook_attestation, application_verdict, and action are response-only at
the request body, context.inputs, and adapter-facts boundaries; attempts return
RULEBOOK_OUTPUT_MATERIAL_FORBIDDEN.
Legacy single, multi, and runtime requests remain available for
AI-assisted exploration, but they are not binding production verdicts. Those
responses include decision_contract with authority: "advisory_only" and
production_verdict: false, plus production_binding_required: true and the
supported production binding modes; callers that need deterministic execution
must use mode: "rulebook" and capture rulebook_contract, runtime_binding,
and the Rulebook attestation material.
At the public Decision Record boundary, successful evaluations are registered as immutable tenant-scoped snapshots. Historical replay restores the original canonical input and stored rulebook snapshot rather than trusting a caller override or the current application deployment.
Rulebook v1 also supports registered first-party trusted adapters for bounded
fact normalization. Adapter requests pin an exact semantic version and manifest
hash; responses attest the bundled implementation source hash plus canonical
input/output hashes and the enforced execution contract. Each invocation runs
once in an empty-environment worker with hard time/resource limits and denied
common ambient capabilities. The declarative rulebook remains the only binding
verdict selector. See docs/TRUSTED_ADAPTERS_V1.md.
The current reference applications prove both production patterns: Solana Execution Gate, Decision Memo Readiness Gate, and Krafthaus Workflow Readiness Binding use trusted adapters before Rulebook v1, while the Refund, Trial, Cancel, and Return Policy MCP notaries supply normalized facts directly to Rulebook v1 and expose the signed rulebook result through their stable REST and MCP surfaces.
Before evaluator, adapter, or rulebook changes ship, run the local historical replay gate:
npm run rulebook:migration-dry-run -- --json
Use --candidate-rulebook, --candidate-adapter, and
--candidate-evaluator-version to compare proposed migrations against the
golden replay corpus before production routing changes.
For release gates, prefer a rulebook_migration_v1 manifest so candidate
artifacts, expected drift, and approval status are reviewed together:
npm run rulebook:migration-dry-run -- --migration path/to/migration.json --json
The manifest schema is published at
https://api.decide.fyi/schemas/rulebook-migration-v1.schema.json, and the dry
run validates manifests against that closed schema before replay.
After production routing or runtime-contract changes ship, run the production runtime smoke:
npm run smoke:rulebook-runtime
This hits https://api.decide.fyi from outside the runtime and verifies the
published hybrid_declarative_rulebook_with_trusted_adapters manifest, closed
Rulebook v1 schema, attestation key endpoint, direct declarative evaluation,
executable-rulebook rejection, and advisory-only contract metadata on legacy
AI-assisted responses. GitHub Actions also runs this as the scheduled/manual
Rulebook Runtime Production Smoke workflow.
The legacy single, multi, and runtime modes are AI-assisted surfaces.
They are not the production determinism boundary for loosely defined business
judgment.
Architecture:
Buttons install the Refund Notary server. To add all 4 servers, use the JSON config below.
| Server | Domain | Tool | Verdicts |
|---|---|---|---|
| Refund Notary | refund.decide.fyi | refund_eligibility | ALLOWED / DENIED / UNKNOWN |
| Cancel Notary | cancel.decide.fyi | cancellation_penalty | FREE_CANCEL / PENALTY / LOCKED / UNKNOWN |
| Return Notary | return.decide.fyi | return_eligibility | RETURNABLE / EXPIRED / NON_RETURNABLE / UNKNOWN |
| Trial Notary | trial.decide.fyi | trial_terms | TRIAL_AVAILABLE / NO_TRIAL / UNKNOWN |
All servers: 100 vendors, US region, individual plans, stateless, no auth, 100 req/min. Runtime contracts and reference evidence stay here.
{
"mcpServers": {
"refund-decide": { "url": "https://refund.decide.fyi/api/mcp" },
"cancel-decide": { "url": "https://cancel.decide.fyi/api/mcp" },
"return-decide": { "url": "https://return.decide.fyi/api/mcp" },
"trial-decide": { "url": "https://trial.decide.fyi/api/mcp" }
}
}
# Refund eligibility
curl -X POST https://refund.decide.fyi/api/v1/refund/eligibility \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","days_since_purchase":12,"region":"US","plan":"individual"}'
# Cancellation penalty
curl -X POST https://cancel.decide.fyi/api/v1/cancel/penalty \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","region":"US","plan":"individual"}'
# Return eligibility
curl -X POST https://return.decide.fyi/api/v1/return/eligibility \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","days_since_purchase":12,"region":"US","plan":"individual"}'
# Trial terms
curl -X POST https://trial.decide.fyi/api/v1/trial/terms \
-H "Content-Type: application/json" \
-d '{"vendor":"adobe","region":"US","plan":"individual"}'
Start local dev server:
npx vercel dev
In a separate terminal:
# Handler-level smoke checks (no running server required)
npm run smoke
# MCP endpoint checks (requires vercel dev running on localhost:3000)
npm run mcp:check
# End-to-end workflow fixture (example -> result)
npm run workflow:test
# Production customer-key verification after provisioning a key
DECIDE_SMOKE_API_KEY='<customer-key>' npm run smoke:customer-key
Use workflow endpoints when you want one request to return:
yes | no) from /api/deciderequest_idEndpoints
POST https://refund.decide.fyi/api/v1/workflows/zendesk/refundPOST https://cancel.decide.fyi/api/v1/workflows/zendesk/cancelPOST https://return.decide.fyi/api/v1/workflows/zendesk/returnPOST https://trial.decide.fyi/api/v1/workflows/zendesk/trial{
"ticket_id": "ZD-9001",
"workflow_type": "refund",
"question": "Should this Adobe annual plan refund request proceed under policy?",
"vendor": "adobe",
"region": "US",
"plan": "individual",
"days_since_purchase": 5
}
For refund and return, include days_since_purchase.
Set decision_override to bypass model classification during fixtures and CI:
{
"decision_override": "yes"
}
{
"ok": true,
"flow": "zendesk_refund_v1",
"ticket_id": "ZD-9001",
"decision": { "c": "yes", "request_id": "req_123" },
"policy": { "verdict": "ALLOWED", "code": "WITHIN_WINDOW" },
"action": {
"type": "approve_refund",
"zendesk_tags": ["decide", "decide_yes", "refund_allowed"]
}
}
Endpoint: POST https://refund.decide.fyi/api/v1/refund/eligibility
MCP Tool: refund_eligibility
Checks if a subscription purchase is within the vendor's refund window.
Input: vendor, days_since_purchase, region, plan
{"refundable":true,"verdict":"ALLOWED","code":"WITHIN_WINDOW","message":"Refund is allowed. Purchase is 12 day(s) old, within 14 day window.","vendor":"adobe","window_days":14}
Codes: WITHIN_WINDOW, OUTSIDE_WINDOW, NO_REFUNDS, UNSUPPORTED_VENDOR
Endpoint: POST https://cancel.decide.fyi/api/v1/cancel/penalty
MCP Tool: cancellation_penalty
Checks cancellation penalties — early termination fees, contract locks, or free cancellation.
Input: vendor, region, plan
{"verdict":"PENALTY","code":"EARLY_TERMINATION_FEE","message":"adobe charges an early termination fee: 50% of remaining months on annual plan.","vendor":"adobe","policy":"etf"}
Codes: NO_PENALTY, EARLY_TERMINATION_FEE, CONTRACT_LOCKED, UNSUPPORTED_VENDOR
Endpoint: POST https://return.decide.fyi/api/v1/return/eligibility
MCP Tool: return_eligibility
Checks if a subscription purchase can be returned/reversed, with return type and method.
Input: vendor, days_since_purchase, region, plan
{"returnable":true,"verdict":"RETURNABLE","code":"FULL_RETURN","message":"Return is available. Purchase is 5 day(s) old, within 14-day window.","vendor":"adobe","return_type":"full_refund","method":"self_service"}
Codes: FULL_RETURN, PRORATED_RETURN, CREDIT_RETURN, OUTSIDE_WINDOW, NO_RETURNS, UNSUPPORTED_VENDOR
Endpoint: POST https://trial.decide.fyi/api/v1/trial/terms
MCP Tool: trial_terms
Checks free trial availability, length, card requirement, and auto-conversion status.
Input: vendor, region, plan
{"verdict":"TRIAL_AVAILABLE","code":"AUTO_CONVERTS","message":"adobe offers a 7-day free trial. Credit card required. Auto-converts to paid plan.","vendor":"adobe","trial_days":7,"card_required":true,"auto_converts":true}
Codes: AUTO_CONVERTS, NO_AUTO_CONVERT, TRIAL_NOT_AVAILABLE, UNSUPPORTED_VENDOR
| Vendor | Identifier | Refund | Cancel | Return | Trial |
|---|---|---|---|---|---|
| 1Password | 1password | No refunds | Free | No return | 14d |
| Adobe | adobe | 14d | ETF | 14d full | 7d |
| Amazon Prime | amazon_prime | 3d | Free | 3d full | 30d |
| Apple App Store | apple_app_store | 14d | Free | 14d full | - |
| Apple Music | apple_music | No refunds | Free | No return | 30d |
| Apple TV+ | apple_tv_plus | No refunds | Free | No return | 7d |
| Audible | audible | No refunds | Free | No return | 30d |
| Bitwarden | bitwarden | 30d | Free | 30d full | 7d |
| Bumble | bumble | No refunds | Free | No return | 7d |
| Calm | calm | 30d | Free | 30d full | 7d |
| Canva | canva | No refunds | Free | No return | 30d |
| ChatGPT Plus | chatgpt_plus | No refunds | Free | No return | - |
| Claude Pro | claude_pro | No refunds | Free | No return | - |
| Coursera Plus | coursera_plus | 14d | Free | 14d full | 7d |
| Crunchyroll | crunchyroll | No refunds | Free | No return | 7d |
| Deezer | deezer | No refunds | Free | No return | 30d |
| Disney+ | disney_plus | No refunds | Free | No return | - |
| DoorDash DashPass | doordash_dashpass | No refunds | Free | No return | 30d |
| Dropbox (US) | dropbox_us | No refunds | Free | No return | 30d |
| Duolingo | duolingo | No refunds | Free | No return | 14d |
| Evernote | evernote | 20d | Free | 20d full | 14d |
| ExpressVPN | expressvpn | 30d | Free | 30d full | 7d |
| Figma | figma | No refunds | Free | No return | 30d |
| Fubo TV | fubo_tv | No refunds | Free | No return | 7d |
| GitHub Pro | github_pro | No refunds | Free | No return | - |
| Google Play | google_play | 2d | Free | 2d full | - |
| Grammarly | grammarly | No refunds | Free | No return | 7d |
| Headspace | headspace | No refunds | Free | No return | 7d |
| HelloFresh | hellofresh | No refunds | Free (5d notice) | No return | - |
| Hinge | hinge | No refunds | Free | No return | 7d |
| Hulu | hulu | No refunds | Free | No return | 30d |
| iCloud+ | icloud_plus | 14d | Free | 14d full | - |
| Instacart+ | instacart_plus | 5d | Free | 5d full | 14d |
| LinkedIn Premium | linkedin_premium | 7d | Free | 7d full | 30d |
| MasterClass | masterclass | 30d | Free | 30d full | - |
| Max (HBO) | max | No refunds | Free | No return | - |
| Microsoft 365 | microsoft_365 | 30d | Free | 30d full | 30d |
| Midjourney | midjourney | No refunds | Free | No return | - |
| Netflix | netflix | No refunds | Free | No return | - |
| Nintendo Switch Online | nintendo_switch_online | No refunds | Free | No return | 7d |
| Noom | noom | 14d | Free | 14d full | 7d |
| NordVPN | nordvpn | 30d | Free | 30d full | 7d |
| Notion | notion | 3d | Free | 3d full | - |
| Paramount+ | paramount_plus | No refunds | Free | No return | 7d |
| Peacock | peacock | No refunds | Free | No return | 7d |
| Peloton | peloton | No refunds | Free | No return | 30d |
| PlayStation Plus | playstation_plus | 14d | Free | 14d prorated | 14d |
| Scribd | scribd | 30d | Free | 30d full | 30d |
| Shutterstock | shutterstock | No refunds | ETF | No return | 30d |
| Slack | slack | No refunds | Free | Credit | 90d |
| Sling TV | sling_tv | No refunds | Free | No return | - |
| Spotify | spotify | No refunds | Free | No return | 30d |
| Squarespace | squarespace | 14d | Free | 14d full | 14d |
| Strava | strava | 14d | Free | 14d full | 30d |
| Surfshark | surfshark | 30d | Free | 30d full | 7d |
| Tidal | tidal | No refunds | Free | No return | 30d |
| Tinder | tinder | No refunds | Free | No return | - |
| Todoist | todoist | 30d | Free | 30d full | 30d |
| Twitch | twitch | No refunds | Free | No return | - |
| Walmart+ | walmart_plus | No refunds | Free | No return | 30d |
| Wix | wix | 14d | Free | 14d full | 14d |
| Xbox Game Pass | xbox_game_pass | 30d | Free | 30d full | 14d |
| YouTube Premium | youtube_premium | No refunds | Free | No return | 30d |
| Zoom | zoom | No refunds | Free | No return | - |
Scope: US region, individual plans only.
Policies are sourced from official vendor documentation and terms of service.
rules/ linking to official policy pages.GET /api/compliance-export returns a CSV snapshot of tracked sources, hashes, and pending candidate changes (?format=json for machine-readable output).rules_version field for staleness detection.Added:
GET /api/compliance-export endpoint for policy monitoring evidence export (CSV default, JSON via ?format=json).Changed:
Changed:
server.json, MCP initialize, and /.well-known/*.Added:
Fixed:
contents:write permission and fixed shell logicAdded:
rules/policy-sources.jsonenum in inputSchema for agent discoverabilityFixed:
ERR_IMPORT_ATTRIBUTE_MISSING crash on Vercel (Node 22 import attributes)Added:
All 4 policy servers are free to use. No authentication. No API keys.
/api/decide is public by default, and can be protected by setting DECIDE_API_KEY in server env vars.
If you run decide behind the decidesite proxy with dynamic customer keys, also set:
DECIDE_PROXY_SHARED_TOKEN: shared secret required in x-decide-proxy-token header for trusted proxy calls.DECIDE_API_KEY: backend internal key that the trusted proxy forwards upstream (recommended to keep backend private).Rate limit: 100 requests/minute per IP.
For first-customer handoff and keyed production verification, see docs/FIRST_CUSTOMER_RUNBOOK.md.
Use POST /api/policy-fetch-hook as a fetch adapter for the daily checker when direct fetches are blocked.
Request body:
{
"url": "https://example.com/policy",
"vendor": "example_vendor",
"policy_type": "refund",
"timeout_ms": 18000
}
Auth:
Authorization: Bearer <POLICY_CHECK_BROWSER_HOOK_TOKEN> or x-hook-token: <token>Server env:
POLICY_CHECK_BROWSER_HOOK_TOKEN (required for endpoint auth)POLICY_FETCH_BROWSERLESS_TOKEN (optional; enables browserless render first)POLICY_FETCH_BROWSERLESS_CONTENT_URL (optional override; default https://chrome.browserless.io/content)POLICY_FETCH_ALLOWED_HOSTS (optional comma-separated host allowlist)Checker (GitHub Actions, repo decide):
POLICY_CHECK_BROWSER_HOOK_URL = deployed endpoint URL (example: https://decide-1.vercel.app/api/policy-fetch-hook)POLICY_CHECK_BROWSER_HOOK_TOKEN = same token as runtime envPOLICY_CHECK_FETCH_LANES_DEFAULT = browser_hook,direct,zendesk_api,mirrorQuestions? support@decide.fyi or @decidefyi on X
Decide is the API engine. Applications prove the primitive.
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Web content fetching and conversion for efficient LLM usage
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.