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.
README
decide.fyi
Decision API + MCP notaries for deterministic system and agent decisions
One-Click Install
Buttons install the Refund Notary server. To add all 4 servers, use the JSON config below.
MCP Servers
| 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.
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/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
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)
| 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.
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 export —
GET /api/compliance-exportreturns a CSV snapshot of tracked sources, hashes, and pending candidate changes (?format=jsonfor machine-readable output). - Versioned rules — Each rules file includes a
rules_versionfield 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-exportendpoint 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, MCPinitialize, 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:writepermission 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
enumin inputSchema for agent discoverability
Fixed:
ERR_IMPORT_ATTRIBUTE_MISSINGcrash 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 inx-decide-proxy-tokenheader 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>orx-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; defaulthttps://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
- Website: https://decide.fyi
- Refund: https://refund.decide.fyi
- Cancel: https://cancel.decide.fyi
- Return: https://return.decide.fyi
- Trial: https://trial.decide.fyi
- X/Twitter: @decidefyi
- MCP Spec: https://modelcontextprotocol.io
Built with love by the decide.fyi team
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
