Content
# decide.fyi Decision API
> Deterministic Decision API engine powering workflow applications, stable MCP notary remotes, decision memo packets, and execution gates
[](https://decide.fyi)
[](https://modelcontextprotocol.io)
[](https://decide.fyi)
**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.
## Production Determinism Boundary
Binding production verdicts should use a versioned declarative rulebook:
Runtime architecture: see [`docs/RULEBOOK_RUNTIME_ARCHITECTURE.md`](docs/RULEBOOK_RUNTIME_ARCHITECTURE.md).
Machine-readable schema: [`https://api.decide.fyi/schemas/rulebook-v1.schema.json`](https://api.decide.fyi/schemas/rulebook-v1.schema.json).
Active runtime manifest: [`https://api.decide.fyi/manifests/rulebook-runtime-v1.json`](https://api.decide.fyi/manifests/rulebook-runtime-v1.json).
Downstream application binding: [`decide_application_binding_v1`](docs/APPLICATION_BINDING_V1.md).
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.
```json
{
"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`](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:
```bash
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:
```bash
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:
```bash
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:
- [Ecosystem constitution](docs/ECOSYSTEM_CONSTITUTION.md)
- [Application binding contract](docs/APPLICATION_BINDING_V1.md)
- [Rulebook v1 contract](docs/RULEBOOK_V1.md)
- [Rulebook compatibility policy](docs/RULEBOOK_COMPATIBILITY_POLICY.md)
- [Rulebook migration examples](docs/RULEBOOK_MIGRATION_EXAMPLES.md)
- [Rulebook migration manifest](docs/RULEBOOK_MIGRATION_MANIFEST_V1.md)
## One-Click Install
[](cursor://anysphere.cursor-deeplink/mcp/install?name=refund-decide&config=eyJ1cmwiOiAiaHR0cHM6Ly9yZWZ1bmQuZGVjaWRlLmZ5aS9hcGkvbWNwIn0=) [](https://insiders.vscode.dev/redirect/mcp/install?name=refund-decide&config=%7B%22type%22%3A%20%22http%22%2C%20%22url%22%3A%20%22https%3A//refund.decide.fyi/api/mcp%22%7D) [](#connect-via-mcp-claude-desktop--windsurf--other-clients) [](#connect-via-mcp-claude-desktop--windsurf--other-clients) [](#connect-via-mcp-claude-desktop--windsurf--other-clients) [](#connect-via-mcp-claude-desktop--windsurf--other-clients)
> Buttons install the **Refund Notary** server. To add all 4 servers, use the [JSON config below](#connect-via-mcp-claude-desktop--windsurf--other-clients).
## Stable MCP Remotes
| Server | Domain | Tool | Verdicts |
|--------|--------|------|----------|
| **Refund Notary** | [refund.decide.fyi](https://refund.decide.fyi) | `refund_eligibility` | ALLOWED / DENIED / UNKNOWN |
| **Cancel Notary** | [cancel.decide.fyi](https://cancel.decide.fyi) | `cancellation_penalty` | FREE_CANCEL / PENALTY / LOCKED / UNKNOWN |
| **Return Notary** | [return.decide.fyi](https://return.decide.fyi) | `return_eligibility` | RETURNABLE / EXPIRED / NON_RETURNABLE / UNKNOWN |
| **Trial Notary** | [trial.decide.fyi](https://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.
## Quick Start
### Connect via MCP (Claude Desktop / Windsurf / other clients)
```json
{
"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
```bash
# 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:
```bash
npx vercel dev
```
In a separate terminal:
```bash
# Handler-level smoke checks (no running server required)
npm run smoke
# MCP endpoint checks (requires a running server)
npm run mcp:check
# Self-contained local MCP check; starts/stops vercel dev on localhost:3000
npm run mcp:check:local
# 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
```
---
## Zendesk Workflow Orchestrators
Use workflow endpoints when you want one request to return:
- decision classification (`yes | no`) 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
```json
{
"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:
```json
{
"decision_override": "yes"
}
```
### Response (example)
```json
{
"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`
```json
{"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`
```json
{"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`
```json
{"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`
```json
{"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-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.
**Changed:**
- Landing pages now position Decide as the Decision API engine and frame Policy MCP Notaries as one reference application.
### 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.
For first-customer handoff and keyed production verification, see [`docs/FIRST_CUSTOMER_RUNBOOK.md`](docs/FIRST_CUSTOMER_RUNBOOK.md).
### 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:
```json
{
"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? [support@decide.fyi](mailto:support@decide.fyi) or [@decidefyi on X](https://x.com/decidefyi)
## Links
- **Website:** [https://decide.fyi](https://decide.fyi)
- **Policy alerts:** [https://www.decide.fyi/resources/policy-alerts](https://www.decide.fyi/resources/policy-alerts)
- **Refund:** [https://refund.decide.fyi](https://refund.decide.fyi)
- **Cancel:** [https://cancel.decide.fyi](https://cancel.decide.fyi)
- **Return:** [https://return.decide.fyi](https://return.decide.fyi)
- **Trial:** [https://trial.decide.fyi](https://trial.decide.fyi)
- **X/Twitter:** [@decidefyi](https://x.com/decidefyi)
- **MCP Spec:** [https://modelcontextprotocol.io](https://modelcontextprotocol.io)
---
Decide is the API engine. Applications prove the primitive.
MCP Config
Below is the configuration for this MCP Server. You can copy it directly to Cursor or other MCP clients.
mcp.json
Connection Info
You Might Also Like
No recommendations available