MCP Hub
Back to servers

decide

Deterministic MCP notary suite for subscription policies: refund, cancellation, return, and trial terms. Stateless, read-only rules engine with auditable verdicts and hosted remote endpoints.

glama
Forks
2
Updated
Mar 26, 2026

decide.fyi

Decision API + MCP notaries for deterministic system and agent decisions

Version MCP Vendors

One-Click Install

Add to Cursor Install in VS Code Add to Claude Add to ChatGPT Add to Codex Add to Gemini

Buttons install the Refund Notary server. To add all 4 servers, use the JSON config below.

MCP Servers

ServerDomainToolVerdicts
Refund Notaryrefund.decide.fyirefund_eligibilityALLOWED / DENIED / UNKNOWN
Cancel Notarycancel.decide.fyicancellation_penaltyFREE_CANCEL / PENALTY / LOCKED / UNKNOWN
Return Notaryreturn.decide.fyireturn_eligibilityRETURNABLE / EXPIRED / NON_RETURNABLE / UNKNOWN
Trial Notarytrial.decide.fyitrial_termsTRIAL_AVAILABLE / NO_TRIAL / UNKNOWN

All servers: 100 vendors, US region, individual plans, stateless, no auth, 100 req/min.

Quick Start

Connect via MCP (Claude Desktop / Windsurf / other clients)

{
  "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" }
  }
}

REST API

# 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"}'

Local Dev Checks

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

Zendesk Workflow Orchestrators

Use workflow endpoints when you want one request to return:

  • decision classification (yes | no | tie) from /api/decide
  • policy result from the relevant notary endpoint
  • recommended Zendesk action + tags + private note with request_id

Endpoints

  • POST https://refund.decide.fyi/api/v1/workflows/zendesk/refund
  • POST https://cancel.decide.fyi/api/v1/workflows/zendesk/cancel
  • POST https://return.decide.fyi/api/v1/workflows/zendesk/return
  • POST https://trial.decide.fyi/api/v1/workflows/zendesk/trial

Request

{
  "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.

Deterministic test mode

Set decision_override to bypass model classification during fixtures and CI:

{
  "decision_override": "yes"
}

Response (example)

{
  "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"]
  }
}

Refund Notary

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

Cancel Notary

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

Return Notary

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

Trial Notary

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


Supported Vendors (100)

VendorIdentifierRefundCancelReturnTrial
1Password1passwordNo refundsFreeNo return14d
Adobeadobe14dETF14d full7d
Amazon Primeamazon_prime3dFree3d full30d
Apple App Storeapple_app_store14dFree14d full-
Apple Musicapple_musicNo refundsFreeNo return30d
Apple TV+apple_tv_plusNo refundsFreeNo return7d
AudibleaudibleNo refundsFreeNo return30d
Bitwardenbitwarden30dFree30d full7d
BumblebumbleNo refundsFreeNo return7d
Calmcalm30dFree30d full7d
CanvacanvaNo refundsFreeNo return30d
ChatGPT Pluschatgpt_plusNo refundsFreeNo return-
Claude Proclaude_proNo refundsFreeNo return-
Coursera Pluscoursera_plus14dFree14d full7d
CrunchyrollcrunchyrollNo refundsFreeNo return7d
DeezerdeezerNo refundsFreeNo return30d
Disney+disney_plusNo refundsFreeNo return-
DoorDash DashPassdoordash_dashpassNo refundsFreeNo return30d
Dropbox (US)dropbox_usNo refundsFreeNo return30d
DuolingoduolingoNo refundsFreeNo return14d
Evernoteevernote20dFree20d full14d
ExpressVPNexpressvpn30dFree30d full7d
FigmafigmaNo refundsFreeNo return30d
Fubo TVfubo_tvNo refundsFreeNo return7d
GitHub Progithub_proNo refundsFreeNo return-
Google Playgoogle_play2dFree2d full-
GrammarlygrammarlyNo refundsFreeNo return7d
HeadspaceheadspaceNo refundsFreeNo return7d
HelloFreshhellofreshNo refundsFree (5d notice)No return-
HingehingeNo refundsFreeNo return7d
HuluhuluNo refundsFreeNo return30d
iCloud+icloud_plus14dFree14d full-
Instacart+instacart_plus5dFree5d full14d
LinkedIn Premiumlinkedin_premium7dFree7d full30d
MasterClassmasterclass30dFree30d full-
Max (HBO)maxNo refundsFreeNo return-
Microsoft 365microsoft_36530dFree30d full30d
MidjourneymidjourneyNo refundsFreeNo return-
NetflixnetflixNo refundsFreeNo return-
Nintendo Switch Onlinenintendo_switch_onlineNo refundsFreeNo return7d
Noomnoom14dFree14d full7d
NordVPNnordvpn30dFree30d full7d
Notionnotion3dFree3d full-
Paramount+paramount_plusNo refundsFreeNo return7d
PeacockpeacockNo refundsFreeNo return7d
PelotonpelotonNo refundsFreeNo return30d
PlayStation Plusplaystation_plus14dFree14d prorated14d
Scribdscribd30dFree30d full30d
ShutterstockshutterstockNo refundsETFNo return30d
SlackslackNo refundsFreeCredit90d
Sling TVsling_tvNo refundsFreeNo return-
SpotifyspotifyNo refundsFreeNo return30d
Squarespacesquarespace14dFree14d full14d
Stravastrava14dFree14d full30d
Surfsharksurfshark30dFree30d full7d
TidaltidalNo refundsFreeNo return30d
TindertinderNo refundsFreeNo return-
Todoisttodoist30dFree30d full30d
TwitchtwitchNo refundsFreeNo return-
Walmart+walmart_plusNo refundsFreeNo return30d
Wixwix14dFree14d full14d
Xbox Game Passxbox_game_pass30dFree30d full14d
YouTube Premiumyoutube_premiumNo refundsFreeNo return30d
ZoomzoomNo refundsFreeNo return-

Scope: US region, individual plans only.

Data Freshness

Policies are sourced from official vendor documentation and terms of service.

  • Daily automated checks — GitHub Action runs at 08:00 UTC, hashing vendor policy pages across all 4 services (refund, cancel, return, trial). If a page changes, an issue is opened for review.
  • Policy source URLs tracked — Each service has its own sources file in rules/ linking to official policy pages.
  • Compliance exportGET /api/compliance-export returns a CSV snapshot of tracked sources, hashes, and pending candidate changes (?format=json for machine-readable output).
  • Versioned rules — Each rules file includes a rules_version field for staleness detection.

Architecture

  • Stateless — No database, no sessions, no side effects
  • Deterministic — Same input always produces same output
  • Versioned Rules — Rules files include version for tracking changes
  • Daily Monitoring — GitHub Action checks all vendor policy pages daily
  • Serverless — Runs on Vercel serverless functions
  • Zero Dependencies — Core compute logic has no external dependencies
  • Hostname Routing — Vercel middleware routes subdomains to correct MCP endpoints

Limitations

  • US Only — Currently only supports US region
  • Individual Plans Only — Business/enterprise plans not yet supported
  • Calendar Days — Windows are based on calendar days, not business days
  • Static Rules — Does not account for promotional offers or special circumstances

Changelog

Unreleased

Added:

  • GET /api/compliance-export endpoint for policy monitoring evidence export (CSV default, JSON via ?format=json).
  • Smoke test coverage for compliance export JSON and CSV paths.

v1.2.1 (2026-02-08)

Changed:

  • Subdomain homepage now shows the relevant notary card (refund/cancel/return/trial).
  • Version metadata is consistent across server.json, MCP initialize, and /.well-known/*.

v1.2.0 (2026-02-02)

Added:

  • Cancel Notary MCP (cancel.decide.fyi) — cancellation penalty checker
  • Return Notary MCP (return.decide.fyi) — return eligibility checker
  • Trial Notary MCP (trial.decide.fyi) — free trial terms checker
  • Hostname-based middleware routing for all subdomains
  • Policy source files and daily checking for cancel, return, and trial policies
  • Systems/Agents mode framing on landing page
  • MCP catalog with cards for all 4 servers

Fixed:

  • Daily policy checker: added contents:write permission and fixed shell logic
  • Removed dead Cloudflare email-decode scripts causing 404s

v1.1.0 (2026-02-01)

Added:

  • Expanded from 64 to 100 supported vendors
  • Daily policy-check GitHub Action (cron at 08:00 UTC)
  • Policy source URLs tracked in rules/policy-sources.json
  • MCP vendor enum in inputSchema for agent discoverability

Fixed:

  • ERR_IMPORT_ATTRIBUTE_MISSING crash on Vercel (Node 22 import attributes)

v1.0.0 (2026-01-15)

Added:

  • Initial release with REST API and MCP server
  • Support for 9 vendors

Free API (Default: No Auth)

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.

Policy Fetch Hook (for policy checker browser-hook lane)

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):

  • Secret POLICY_CHECK_BROWSER_HOOK_URL = deployed endpoint URL (example: https://decide-1.vercel.app/api/policy-fetch-hook)
  • Secret POLICY_CHECK_BROWSER_HOOK_TOKEN = same token as runtime env
  • Variable POLICY_CHECK_FETCH_LANES_DEFAULT = browser_hook,direct,zendesk_api,mirror

Questions? decidefyi@gmail.com or @decidefyi on X

Links


Built with love by the decide.fyi team

Reviews

No reviews yet

Sign in to write a review