An OpenClaw skill for rates you can act on.
OpenClaw is the open-source personal agent that runs on your own machine and learns new abilities from SKILL.md files. The RateAPI CLI installs that guidance and executes the four-step loop: which credit unions you can join, from your own facts; the best offer among those, with the institution named, an observed date and a link to its own page on every rate; whether a quote you already have is good; and how to watch instead of poll. No credit pull, no paid placement, no invented averages.
Set up
The CLI installs the skill, reuses credentials securely, and gives OpenClaw stable JSON. Review every filesystem change before applying it.
Install the CLI and skill
$OpenClaw terminal# Install the persistent command once, with the human's approvalnpm install --global @rateapi/cli# Preview the exact OpenClaw skill changerateapi install --agent openclaw --dry-run# Apply only after the human approves the previewrateapi install --agent openclaw --apply# Load the machine-readable operating contractrateapi agent --jsonVerify first; authenticate only with approval
$RateAPI CLIrateapi demo --jsonrateapi doctor --json# Only when doctor finds no key and the human approves key creation/storage:printf '%s' '{"email":"[email protected]"}' | \rateapi login --input @- --confirm-key --jsonWhat the skill says
//SKILL.md (head)---name: rateapidescription: Evidence-backed US credit union rates and membership eligibility. Use when the user asks which published products match their confirmed facts, which credit unions they may be able to join, whether a quote is good, or wants to be told when a rate moves.homepage: https://rateapi.dev/agents/openclawmetadata:{ "openclaw": { "requires": { "bins": ["rateapi"] }, "emoji": "🏦" } }---# RateAPI — rates the user can act on... the CLI loop (eligibility → price → sanity-check → watch), approval rules, and MCP fallback.The full file is at/skills/openclaw/rateapi/SKILL.md. It is plain Markdown — read it before you install it, and edit it if your agent should behave differently. Itsrequires.binsentry makes OpenClaw report a missingrateapicommand instead of silently falling back to invented HTTP.Optional: the MCP server too
JS~/.openclaw/openclaw.json// ~/.openclaw/openclaw.json — optional: the same tools over MCP.// OpenClaw spawns MCP servers as stdio child processes; mcp-remote bridges to the// remote streamable-HTTP endpoint and forwards the header.{"mcpServers": {"rateapi": {"command": "npx","args": ["-y", "mcp-remote", "https://mcp.rateapi.dev/mcp?profile=personal", "--header", "x-api-key:${RATEAPI_API_KEY}"],"env": { "RATEAPI_API_KEY": "${RATEAPI_API_KEY}" }}}}The CLI is enough for the loop. Add the bridge only after explicit approval if you want persistent native MCP tools or rich widgets. MCP usesRATEAPI_API_KEYfrom OpenClaw’s environment; it does not read the CLI credential file.
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.
Skills load into OpenClaw’s system prompt, so the agent knows the loop before you ask. Start with the ZIP question and let it ask for the employer.
- 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.A real run, captured 2026-08-28
OpenClaw 2026.7.1 on Gemini 3.1 Pro, captured with the earlier REST skill before CLI-first onboarding shipped. The same endpoints now run through the CLI’s validated JSON contract. Unedited except for length.
- What it did
- Read the skill, then
curl:GET /v1/capabilities→POST /v1/eligibility/search→POST /v1/decisions. Six tool calls, no MCP bridge needed. - Its answer
- “Because you live in Mecklenburg County, you are automatically eligible to join Piedmont Advantage Credit Union… The Best Rate You Are Confirmed Eligible For: 6.284% APR at Piedmont Advantage Credit Union, observed 2026-08-28, per its published page. Other Top Market Rates (Eligibility Unknown/Unconfirmed): 6.073% APR at State Employees’ Credit Union, observed 2026-08-28… Keep in mind that published pricing is not an offer or a commitment to lend.”
- On the quote (second prompt)
- “That 6.625% is actually a very good quote! … it beats 80% of the market. For context, the median rate among North Carolina credit unions is currently around 6.88%. That said, you can do better with an institution where you actually meet the membership requirements… Piedmont Advantage is a clear winner that you can join right now.” — nine calls, ending with
POST /v1/rate-sanity-check.
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
Install @rateapi/cli globally, preview rateapi install --agent openclaw --dry-run, then rerun it with --apply after approval. The CLI writes the skill to the OpenClaw workspace and remains the execution surface, so a stored CLI credential or RATEAPI_API_KEY is reused automatically.
The RateAPI CLI by default. It gives OpenClaw stable JSON, secure local credential reuse, approval gates, and high-level shopping commands without hand-building HTTP requests. Add the MCP bridge only if you explicitly want persistent native tool discovery; use REST directly only for application code or a capability the CLI catalog does not expose.
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.