{
  "version": 1,
  "generatedAt": "2026-09-27T13:44:49.252Z",
  "flows": [
    "institution/discovery",
    "shopping/comparison",
    "deposit/ALM",
    "monitoring/alerts",
    "affordability",
    "refinance"
  ],
  "count": 25,
  "capabilities": [
    {
      "id": "credit-union-directory",
      "title": "Browse credit unions by state",
      "description": "List credit unions by state with rate availability, member count, reported location count, and stable profile identifiers.",
      "flow": "institution/discovery",
      "tier": "Free",
      "route": {
        "method": "GET",
        "path": "/credit-unions",
        "operationId": "getCreditUnions"
      },
      "mcpTool": "list_credit_unions",
      "inputs": [
        {
          "name": "state",
          "required": false,
          "unit": "2-letter state code"
        }
      ]
    },
    {
      "id": "eligibility-coverage",
      "title": "Cite the eligibility dataset",
      "description": "Enterprise Routes coverage: institutions with live verbatim-evidenced rules and their share of the active fleet, rules by kind, counties and employers named, verification and freshness, with a dated quotable headline.",
      "flow": "institution/discovery",
      "tier": "Enterprise",
      "route": {
        "method": "GET",
        "path": "/v1/eligibility/coverage",
        "operationId": "getEligibilityCoverage"
      },
      "mcpTool": "get_eligibility_coverage",
      "inputs": []
    },
    {
      "id": "eligibility-fact-extraction",
      "title": "Extract confirmed eligibility facts from prose",
      "description": "Enterprise Routes extractor: turns a person’s own words into the typed facts accepted by eligibility discovery. It never returns an eligibility decision; facts that need confirmation stay flagged for the human.",
      "flow": "institution/discovery",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/facts",
        "operationId": "extractEligibilityFacts"
      },
      "mcpTool": "extract_eligibility_facts",
      "inputs": [
        {
          "name": "text",
          "required": true,
          "description": "The person’s own words. Never place this value in shell arguments; pass it through stdin."
        },
        {
          "name": "supplied_facts",
          "required": false,
          "description": "Already confirmed fields to preserve while extracting additional candidates."
        }
      ]
    },
    {
      "id": "eligibility-discovery",
      "title": "Find credit unions a person may be able to join",
      "description": "Enterprise Routes membership discovery from confirmed geography, employer, association, school, military, family, occupation, property, and facility facts. Unknown is never rejection; every positive result retains published evidence.",
      "flow": "institution/discovery",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/search",
        "operationId": "findEligibleCreditUnions"
      },
      "mcpTool": "find_eligible_credit_unions",
      "inputs": [
        {
          "name": "home_zip",
          "required": false,
          "unit": "5-digit US ZIP code"
        },
        {
          "name": "employer",
          "required": false,
          "description": "Confirmed employer name; resolve ambiguous organizations first."
        },
        {
          "name": "associations",
          "required": false,
          "description": "Confirmed association memberships."
        },
        {
          "name": "school",
          "required": false,
          "description": "Confirmed school plus relationship."
        },
        {
          "name": "military_status",
          "required": false,
          "description": "Confirmed military relationship."
        },
        {
          "name": "occupation",
          "required": false,
          "description": "Confirmed occupation."
        }
      ]
    },
    {
      "id": "reachable-offers",
      "title": "Find rates this person can reach",
      "description": "Enterprise graph-first routing across the complete active credit-union fleet. Returns reachable-now, reachable-after-action, unresolved, and no-published-offer buckets. Reachable results require a verified membership path and a fresh, evidenced published rate. Published pricing is not approval or guaranteed final availability.",
      "flow": "shopping/comparison",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/reachable-offers",
        "operationId": "findReachableOffers"
      },
      "mcpTool": "find_reachable_offers",
      "inputs": [
        {
          "name": "person",
          "required": true,
          "description": "Confirmed geography, employer, association, school, military, family, occupation, and related membership facts."
        },
        {
          "name": "product.product_type",
          "required": true,
          "description": "Loan or deposit product family."
        },
        {
          "name": "product.amount",
          "required": false,
          "unit": "USD"
        },
        {
          "name": "product.balance",
          "required": false,
          "unit": "USD"
        },
        {
          "name": "product.term_months",
          "required": false,
          "unit": "months"
        },
        {
          "name": "limit",
          "required": false,
          "unit": "1-50 results per bucket"
        }
      ]
    },
    {
      "id": "personal-access-catalog",
      "title": "Discover access across products",
      "description": "Evaluate one confirmed person across 1-19 explicit loan or deposit selectors using one exhaustive eligibility snapshot. Membership, suitability, published pricing, underwriting, and approval remain separate; this is not an approval or commitment.",
      "flow": "shopping/comparison",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/access-catalog",
        "operationId": "getPersonalAccessCatalog"
      },
      "mcpTool": "get_personal_access_catalog",
      "inputs": [
        {
          "name": "person",
          "required": true,
          "description": "Confirmed membership facts."
        },
        {
          "name": "products",
          "required": true,
          "description": "1-19 unique, explicit loan or deposit selectors."
        },
        {
          "name": "limit_per_product",
          "required": false,
          "unit": "1-10 detail rows"
        },
        {
          "name": "total_limit",
          "required": false,
          "unit": "1-100 detail rows"
        }
      ]
    },
    {
      "id": "personal-access-catalog-compare",
      "title": "Compare access catalogs for two confirmed profiles",
      "description": "Compares two people across identical explicit products using one immutable exhaustive eligibility graph snapshot. Reports evidence-linked access, path, and published-price changes without savings, underwriting, approval, or denial claims.",
      "flow": "shopping/comparison",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/access-catalog/compare",
        "operationId": "comparePersonalAccessCatalogs"
      },
      "mcpTool": "compare_personal_access_catalogs",
      "inputs": [
        {
          "name": "baseline_person",
          "required": true,
          "description": "Confirmed facts before the change."
        },
        {
          "name": "candidate_person",
          "required": true,
          "description": "Confirmed facts after the change."
        },
        {
          "name": "products",
          "required": true,
          "description": "The identical 1-19 explicit selectors evaluated for both people."
        },
        {
          "name": "limit_per_product",
          "required": false,
          "unit": "1-10 detail rows"
        },
        {
          "name": "total_limit",
          "required": false,
          "unit": "1-100 detail rows"
        }
      ]
    },
    {
      "id": "eligibility-entity-search",
      "title": "Browse or search canonical eligibility organizations",
      "description": "Browse or search employers, associations, schools, and places of worship named by positive conditions in current active eligibility publications. Query-less browse is ranked by graph connectivity, not popularity or recommendation. Organization discovery is not a personal eligibility verdict.",
      "flow": "institution/discovery",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/entities/search",
        "operationId": "searchEligibilityEntities"
      },
      "mcpTool": "search_eligibility_entities",
      "inputs": [
        {
          "name": "query",
          "required": false,
          "description": "Organization label or prefix, 2-120 characters. Omit to browse most-connected active-publication organizations."
        },
        {
          "name": "types",
          "required": false,
          "description": "employer, association, school, and/or worship."
        },
        {
          "name": "limit",
          "required": false,
          "unit": "1-10 results"
        }
      ]
    },
    {
      "id": "eligibility-entity-resolve",
      "title": "Resolve eligibility organization identities",
      "description": "Resolve caller-held organization labels to unique normalized-exact canonical ids; ambiguous and prefix-only candidates remain suggestions.",
      "flow": "institution/discovery",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/entities/resolve",
        "operationId": "resolveEligibilityEntities"
      },
      "mcpTool": "resolve_eligibility_entities",
      "inputs": [
        {
          "name": "inputs",
          "required": true,
          "description": "Up to 50 typed organization labels."
        },
        {
          "name": "candidate_limit",
          "required": false,
          "unit": "1-10 suggestions per input"
        }
      ]
    },
    {
      "id": "reachable-offers-compare",
      "title": "Explain what one confirmed fact changes",
      "description": "Compare a baseline and candidate person against one exhaustive graph snapshot and exact product request, preserving source proof and unknown-safe semantics.",
      "flow": "shopping/comparison",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/reachable-offers/compare",
        "operationId": "compareReachableOffers"
      },
      "mcpTool": "compare_reachable_offers",
      "inputs": [
        {
          "name": "baseline_person",
          "required": true,
          "description": "Confirmed person facts before the change."
        },
        {
          "name": "candidate_person",
          "required": true,
          "description": "Confirmed person facts after the change."
        },
        {
          "name": "product",
          "required": true,
          "description": "One exact product request."
        },
        {
          "name": "limit",
          "required": false,
          "unit": "1-50 results per delta bucket"
        }
      ]
    },
    {
      "id": "eligibility-access-envelopes",
      "title": "Inspect documented access for deposit products",
      "description": "Return non-personal membership-access metadata and current evidence for exact deposit products. Only source-proven open or explicitly joinable paths become actions.",
      "flow": "deposit/ALM",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/access-envelopes",
        "operationId": "getEligibilityAccessEnvelopes"
      },
      "mcpTool": "get_product_access_envelopes",
      "inputs": [
        {
          "name": "products",
          "required": true,
          "description": "Up to 50 exact institution, product type, product name, term, balance, and audience references."
        }
      ]
    },
    {
      "id": "eligibility-cohort-evaluate",
      "title": "Evaluate a supplied profile panel",
      "description": "Evaluate up to 10 named profiles against one pinned graph and shared product read. Aggregate output describes only that supplied panel and is never a population or conversion estimate.",
      "flow": "deposit/ALM",
      "tier": "Enterprise",
      "route": {
        "method": "POST",
        "path": "/v1/eligibility/cohort/evaluate",
        "operationId": "evaluateEligibilityCohort"
      },
      "mcpTool": "evaluate_eligibility_cohort",
      "inputs": [
        {
          "name": "profiles",
          "required": true,
          "description": "Up to 10 uniquely named profiles with confirmed facts."
        },
        {
          "name": "product",
          "required": true,
          "description": "One exact product request for the complete panel."
        },
        {
          "name": "limit",
          "required": false,
          "unit": "1-200 deduplicated aggregate rows"
        }
      ]
    },
    {
      "id": "eligibility-changes",
      "title": "Track active eligibility publication changes",
      "description": "Read a bounded cursor feed of active-publication replacements and aggregate created, confirmed, and retained rule counts for downstream cache invalidation.",
      "flow": "monitoring/alerts",
      "tier": "Enterprise",
      "route": {
        "method": "GET",
        "path": "/v1/eligibility/changes",
        "operationId": "getEligibilityChanges"
      },
      "mcpTool": "get_eligibility_changes",
      "inputs": [
        {
          "name": "since",
          "required": true,
          "unit": "ISO 8601 date-time"
        },
        {
          "name": "cursor",
          "required": false,
          "description": "Opaque cursor returned by the prior page."
        },
        {
          "name": "limit",
          "required": false,
          "unit": "1-200 changes"
        }
      ]
    },
    {
      "id": "credit-union-nearby",
      "title": "Find nearby credit unions",
      "description": "Find credit unions ordered by approximate distance to each institution's closest NCUA-reported branch for a five-digit ZIP.",
      "flow": "institution/discovery",
      "tier": "Free",
      "route": {
        "method": "GET",
        "path": "/credit-unions/nearby",
        "operationId": "getNearbyCreditUnions"
      },
      "mcpTool": "find_credit_unions_near_zip",
      "inputs": [
        {
          "name": "zip",
          "required": true,
          "unit": "5-digit US ZIP code"
        },
        {
          "name": "max_results",
          "required": false,
          "unit": "1-25 results",
          "description": "MCP response limit; REST returns up to 25 matches."
        }
      ]
    },
    {
      "id": "credit-union-profile",
      "title": "Inspect a credit union profile",
      "description": "Get current rates, membership eligibility, and source-labelled NCUA institution, service, and branch facts for one credit union.",
      "flow": "institution/discovery",
      "tier": "Free",
      "route": {
        "method": "GET",
        "path": "/credit-unions/{state}/{slug}",
        "operationId": "getCreditUnionProfile"
      },
      "mcpTool": "get_credit_union",
      "inputs": [
        {
          "name": "state",
          "required": true,
          "unit": "2-letter state code"
        },
        {
          "name": "slug",
          "required": true,
          "description": "Stable URL slug returned by directory or nearby discovery."
        }
      ]
    },
    {
      "id": "nearby-product-rates",
      "title": "Find product rates near a ZIP",
      "description": "Rank current product-matched rates from credit unions in the nearby-branch set by published APR, with source-labelled approximate distance.",
      "flow": "institution/discovery",
      "tier": "Free",
      "route": {
        "method": "GET",
        "path": "/v1/rates/nearby",
        "operationId": "getNearbyProductRates"
      },
      "mcpTool": "find_product_rates_near_zip",
      "inputs": [
        {
          "name": "zip",
          "required": true,
          "unit": "5-digit US ZIP code"
        },
        {
          "name": "product_type",
          "required": true,
          "description": "mortgage, mortgage_arm, auto_loan, heloc, personal_loan, student_loan, equipment_loan, or credit_card"
        },
        {
          "name": "term_months",
          "required": false,
          "unit": "months"
        },
        {
          "name": "vehicle_condition",
          "required": false,
          "description": "new, used, certified_pre_owned, or cpo"
        },
        {
          "name": "max_offers",
          "required": false,
          "unit": "1-8 results"
        }
      ]
    },
    {
      "id": "rate-shopping",
      "title": "Rate shopping & product comparison",
      "description": "Rank evidence-backed US credit-union mortgage, refinance, auto, HELOC, personal, student, credit-card, or equipment offers for a confirmed scenario. Use the capability schema for the nested DecisionRequest body.",
      "flow": "shopping/comparison",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/decisions",
        "operationId": "createDecision"
      },
      "mcpTool": "compare_products",
      "inputs": [
        {
          "name": "decision_type",
          "required": true,
          "description": "Must be financing."
        },
        {
          "name": "context",
          "required": true,
          "description": "Request id and confirmed geography under context.geo, including a 2-letter state and optional ZIP."
        },
        {
          "name": "product_request",
          "required": true,
          "description": "Nested product_type, intent, amount, term_months, audience, rate_type, and product-specific details."
        },
        {
          "name": "borrower",
          "required": false,
          "description": "Optional confirmed borrower inputs such as credit_score, income_annual, DTI, and employment status."
        },
        {
          "name": "current_offer",
          "required": false,
          "description": "Optional current quote for refinance or savings comparisons, including paired rate and APR when known."
        },
        {
          "name": "preferences",
          "required": false,
          "description": "Optional ranking preferences and max_providers."
        }
      ]
    },
    {
      "id": "explain-ranking",
      "title": "Explain rate ranking",
      "description": "Explain why offers ranked the way they did for a given borrower scenario, factor by factor.",
      "flow": "shopping/comparison",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/explain-ranking",
        "operationId": "explainRanking"
      },
      "mcpTool": "explain_ranking",
      "inputs": [
        {
          "name": "decision_type",
          "required": true,
          "description": "Must be financing."
        },
        {
          "name": "context",
          "required": true,
          "description": "Request id and confirmed geography under context.geo."
        },
        {
          "name": "product_request",
          "required": true,
          "description": "The same nested product request accepted by rate-shopping."
        },
        {
          "name": "borrower",
          "required": false,
          "description": "Optional confirmed borrower inputs."
        },
        {
          "name": "current_offer",
          "required": false,
          "description": "Optional current quote."
        },
        {
          "name": "preferences",
          "required": false,
          "description": "Optional ranking preferences."
        }
      ]
    },
    {
      "id": "affordability",
      "title": "Home affordability estimate",
      "description": "Compute max monthly payment, max loan amount, and max home price from income, debts, and DTI caps.",
      "flow": "affordability",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/affordability",
        "operationId": "affordability"
      },
      "mcpTool": "estimate_affordability",
      "inputs": [
        {
          "name": "annual_income",
          "required": true,
          "unit": "USD/year"
        },
        {
          "name": "monthly_debts",
          "required": true,
          "unit": "USD/month"
        },
        {
          "name": "down_payment",
          "required": true,
          "unit": "USD"
        },
        {
          "name": "state",
          "required": false,
          "unit": "2-letter state code"
        },
        {
          "name": "credit_score",
          "required": false,
          "unit": "FICO"
        }
      ]
    },
    {
      "id": "max-loan",
      "title": "Maximum loan amount",
      "description": "Surface the affordability annuity engine to compute the largest loan a borrower qualifies for.",
      "flow": "affordability",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/affordability",
        "operationId": "affordability"
      },
      "mcpTool": "max_loan",
      "inputs": [
        {
          "name": "annual_income",
          "required": true,
          "unit": "USD/year"
        },
        {
          "name": "monthly_debts",
          "required": true,
          "unit": "USD/month"
        },
        {
          "name": "state",
          "required": false,
          "unit": "2-letter state code"
        }
      ]
    },
    {
      "id": "refinance-break-even",
      "title": "Refinance break-even",
      "description": "Given a current loan and refinance costs, compute break-even months and lifetime savings against live rates.",
      "flow": "refinance",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/refinance-break-even",
        "operationId": "refinanceBreakEven"
      },
      "mcpTool": "refinance_break_even",
      "inputs": [
        {
          "name": "current_balance",
          "required": true,
          "unit": "USD"
        },
        {
          "name": "current_rate",
          "required": true,
          "unit": "annual %"
        },
        {
          "name": "state",
          "required": true,
          "unit": "2-letter state code"
        },
        {
          "name": "closing_costs",
          "required": false,
          "unit": "USD"
        }
      ]
    },
    {
      "id": "rate-monitoring",
      "title": "Rate monitoring",
      "description": "Create a monitor that watches rates for a market segment and fires webhooks/alerts on material changes.",
      "flow": "monitoring/alerts",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/monitors",
        "operationId": "createMonitor"
      },
      "mcpTool": "create_monitor",
      "inputs": [
        {
          "name": "name",
          "required": true
        },
        {
          "name": "state",
          "required": true,
          "unit": "2-letter state code"
        },
        {
          "name": "product_type",
          "required": true,
          "description": "e.g. 30-year-fixed"
        },
        {
          "name": "webhook_url",
          "required": false,
          "unit": "https URL"
        }
      ]
    },
    {
      "id": "rate-alerts",
      "title": "Consumer rate alerts",
      "description": "Subscribe a consumer (double-opt-in email) to alerts when a target rate is reached in their market.",
      "flow": "monitoring/alerts",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/alerts",
        "operationId": "rateAlerts"
      },
      "mcpTool": "subscribe_rate_alert",
      "inputs": [
        {
          "name": "email",
          "required": true
        },
        {
          "name": "state",
          "required": true,
          "unit": "2-letter state code"
        },
        {
          "name": "product_type",
          "required": true,
          "description": "e.g. 30-year-fixed"
        },
        {
          "name": "target_rate",
          "required": false,
          "unit": "annual %"
        }
      ]
    },
    {
      "id": "deposit-beta",
      "title": "Deposit beta (ALM)",
      "description": "Estimate deposit betas for treasury/ALM teams — how deposit pricing tracks the policy rate over time.",
      "flow": "deposit/ALM",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/deposit-beta",
        "operationId": "getDepositBeta"
      },
      "mcpTool": "get_deposit_beta",
      "inputs": [
        {
          "name": "product",
          "required": true,
          "description": "Deposit product: savings, cd, share_certificate, money_market, or ira_cd."
        },
        {
          "name": "state",
          "required": false,
          "unit": "2-letter state code"
        }
      ]
    },
    {
      "id": "deposit-benchmarks",
      "title": "Deposit benchmarks",
      "description": "Benchmark deposit rates (savings, money-market, CDs) across credit unions for ALM/treasury comparison.",
      "flow": "deposit/ALM",
      "tier": "Free",
      "route": {
        "method": "POST",
        "path": "/v1/deposit-rates",
        "operationId": "getDepositRates"
      },
      "mcpTool": "get_deposit_benchmarks",
      "inputs": [
        {
          "name": "product",
          "required": false,
          "description": "MCP input. For REST, send this value as product_category. Allowed values include savings, cd, share_certificate, money_market, ira_cd, ira, and share_savings."
        },
        {
          "name": "state",
          "required": false,
          "unit": "2-letter state code"
        }
      ]
    }
  ]
}