Grok Bot, with rates it can act on.
Grok Bot is xAI’s always-on agent: you give it a job from the app, it works on a cloud computer whether or not yours is awake, and it takes tools as connectors, plugins and remote MCP servers. Because the hosted bot cannot run a local shell, this is one of the cases where RateAPI starts with MCP: one form, a URL, and a header. Grok Build has a terminal and starts with the RateAPI CLI instead. Once connected, Grok Bot can resolve which credit unions you can join from your own facts, price only those offers with the institution named, an observed date and a link to its own page on every rate, sanity-check a quote you already have, and keep a rate alert running after you close the app.
Set up
Hosted Grok Bot speaks to remote MCP endpoints only, so it cannot use the CLI. Grok Build can—and should.
Get a key
$One requestRATEAPI_ENROLLMENT_ID="${RATEAPI_ENROLLMENT_ID:-$(node -e 'console.log(crypto.randomUUID())')}"; curl -X POST https://api.rateapi.dev/keys \-H "Content-Type: application/json" \-H "Idempotency-Key: $RATEAPI_ENROLLMENT_ID" \-d '{"email": "[email protected]", "source": "grok-bot"}'Add the custom connector
$Grok Bot → Settings → PluginsSettings → Plugins → Add Custom ConnectorName: RateAPIServer URL: https://mcp.rateapi.dev/mcp?profile=personalHeaders: x-api-key: rk_your_key_here# Grok Bot connects to REMOTE MCP servers only. This one is remote, streamable HTTP,# and answers a plain GET at the server root without a key, so you can confirm# reachability before entering the header.The form takes a name, a URL and optional headers. RateAPI also supports OAuth 2.1 for clients that can complete the flow, but the connector form has no place for a client id, so use the header — it is the same credential the REST API uses.Using Grok Build instead?
$Grok Build terminal# Grok Build has a terminal, so start with the RateAPI CLI:npm install --global @rateapi/clirateapi agent --json# Add MCP later only if you explicitly want a persistent native connection.
- Connector
- What you are adding: account-wide access to the RateAPI MCP server. Every Bot can use it.
- Skill
- A packaged workflow invoked with /. Not required — the tool descriptions carry the loop and the rules.
- MCP
- The protocol underneath. Grok Bot: remote HTTP only. Grok Build: stdio and HTTP.
Why an agent needs eligibility before price
The lowest rate in the state and the lowest rate this user can get are different numbers. A real response, captured 2026-08-28 and unedited except for length.
{ "summary": "Shop Around - Better rates available", "resolved_county": { "county": "Mecklenburg", "source": "explicit" }, "top_offers": [ { "rank": 1, "provider": "State Employees' Credit Union", "product": "30-Year Fixed", "rate": "6%", "apr": "6.073%", "points": 0, "monthly_payment": "$2,538", "eligibility": { "status": "unknown", "unknown_reason": "charter_type_not_geo_matchable" }, "eligibility_explanation": { "reason": "Eligibility at State Employees' Credit Union is undetermined; it is not ruled out.", "evidence_url": "https://www.ncsecu.org/join" } }, { "rank": 2, "provider": "Piedmont Advantage Credit Union", "product": "30-Year Fixed", "rate": "6.125%", "apr": "6.284%", "points": 0, "monthly_payment": "$2,595", "eligibility": { "status": "likely_eligible" }, "eligibility_explanation": { "status": "eligible", "reason": "You qualify for membership at Piedmont Advantage Credit Union.", "source": "graph" } }, { "rank": 3, "provider": "Allegacy Credit Union", "product": "30-Year Fixed", "rate": "6.625%", "apr": "6.625%", "points": 0.25, "monthly_payment": "$2,689", "eligibility": { "status": "unknown", "unknown_reason": "low_confidence_record" } } ], "rate_range": { "min": "6.073%", "max": "6.625%" }}// Observed 2026-08-28. Trimmed. The agent leads with #2: it is the best offer behind a door this user can open.// #1 is not ruled out — a state employee would qualify — so the agent asks, rather than hides it.{ "quote": { "rate": 6.625, "apr": 6.625 }, "percentile": 20, "classification": "plausible", "market": { "min": 6.073, "median": 6.8845, "max": 7.197, "count": 40, "as_of": "2026-08-28T04:36:37Z" }, "note": "This quote beats 80% of the 40 live NC 30-year mortgage offers we track (median 6.885%).", "better_offers": [ { "credit_union_name": "State Employees' Credit Union", "apr": 6.073, "apr_delta_bps": 55, "estimated_monthly_savings": 144.23, "can_you_join": "unknown" }, { "credit_union_name": "Piedmont Advantage Credit Union", "apr": 6.284, "apr_delta_bps": 34, "estimated_monthly_savings": 89.52, "can_you_join": "yes" } ], "share_url": "https://rateapi.dev/rate-check?product=mortgage&state=NC&rate=6.625&term=360&zip=28202"}// Observed 2026-08-28. "can_you_join: yes" is the field that turns a percentile into a plan.The first conversation
Prompts that exercise the whole loop. The CLI routes each request through its capability catalog; a persistent MCP connection exposes the corresponding native tools.
Grok Bot keeps working after you close the app, so the fourth prompt — the alert — is the one that plays to its strength.
- 1
- “I live in 28202 and work at Atrium Health. Which credit unions can I actually join, and what is the best 30-year rate among them for a $420k purchase with a 740 score?”
- 2
- “I was quoted 6.625% on a 30-year in North Carolina. Is that good, and can I do better somewhere that will have me?”
- 3
- “Watch NC 30-year rates and tell me when something I can join drops below 6.1%.”
- 4
- “Which credit unions have a branch within 10 miles of 28202, and what do they charge on a 60-month used auto loan?”
rateapi agent --json, then use the narrowest CLI capability for the job. If you later add persistent MCP, connect to https://mcp.rateapi.dev/mcp?profile=personal so the server advertises only the consumer surface (24 of 89 tools, in loop order). The corresponding first-conversation tools are: find_eligible_credit_unions, get_financing_decision, rate_sanity_check, subscribe_rate_alert, find_credit_unions_near_zip, get_eligibility_coverage. Drop ?profile=personal for the full developer registry.What we have and have not verified
Honesty about the evidence behind this page.
- Verified
- The connector path (Settings → Plugins → Add Custom Connector, URL + header, remote-only) and the Grok Build command are taken from xAI’s documentation and current third-party guides. The server itself is remote streamable-HTTP with header auth, which is what the form accepts.
- Run by us
- Not yet — Grok Bot needs a subscription account. The same prompts, run through Hermes Agent and OpenClaw on 2026-08-28 against this server, produced the expected loop (eligibility first, then price, every rate dated); see those pages for the verbatim answers.
- If something differs
- Grok Bot’s v1 connector speaks JSON-RPC over HTTPS without SSE. The server answers plain POST requests, so this should not matter; if it does, tell us and we will fix the server, not the page.
What the agent will and will not do
These constraints ship in every tool description, so the agent inherits them without prompting.
- Every rate is attributed and dated
- “6.284% APR at Piedmont Advantage Credit Union, observed 2026-08-28, per its published rate sheet.” Never a bare number; never a rate outside the freshness window.
- Unknown is never no
- When eligibility cannot be confirmed the agent says so, with the reason, and asks the one question that would resolve it. It does not hide the institution.
- No approvals
- Published pricing is not an offer. Membership first, then the lender underwrites. The agent finds reachable offers and shows the evidence.
- No national average
- Benchmarks are medians across the credit unions tracked, labelled as such.
- Credit unions only
- About 2,950 with fresh rates across 55 states and territories. Not banks, not indices, not non-US lenders — the agent says so rather than guessing.
- No credit pull
- Eligibility is decided from published rules and the user’s own facts. Score, income and debt are never requested to decide who they can join.
Frequently asked
Settings → Plugins → Add Custom Connector. Name it RateAPI, set the server URL to https://mcp.rateapi.dev/mcp?profile=personal (the ?profile=personal suffix narrows the 89-tool registry to the 24-tool consumer surface), and add one header: x-api-key with your RateAPI key. Grok Bot only connects to remote MCP servers over the public internet, which is exactly what this is. There is no OAuth client to configure; the header is the credential.
MCP is the protocol; a connector is Grok Bot’s account-wide installation of an MCP server or first-party integration; a skill is a packaged workflow you invoke with a slash command. RateAPI is added as a custom connector today. Because Grok Bot keeps working on its cloud computer while yours is off, a rate alert it sets keeps being watched after you close the app.
Yes. Grok Build has terminal access, so install @rateapi/cli globally and run rateapi agent --json. Keep using the CLI for RateAPI commands. Add MCP only if you explicitly want a persistent native tool connection; hosted Grok Bot is the no-shell exception and therefore starts with its remote connector.
No. Which credit unions you can join is decided from published membership rules and facts you give the agent — ZIP, employer, school, associations, military status. Rates are published prices, not quotes. Nothing about credit score, income or debt is required, and the agent is told not to ask for it to decide eligibility.
No. Institutions the data cannot decide come back as unknown with a reason, and the agent asks the question that would resolve it. Absence from a result is never presented as a rejection; the institution makes the final membership decision.
A key is required for rate calls; the Free tier covers occasional core Rates use and paid plans add volume. Dedicated eligibility, coverage, and reachable-offer tools are RateAPI Routes and require Enterprise. The capability catalog and agent instructions need no key. No institution pays for placement in any result.