bluerate API and MCP server for AI agents

Let your agent find licensed US mortgage loan officers listed on bluerate.ai by state, city, ZIP code, loan type or language. It is free and needs no key. Each result links to the loan officer’s bluerate profile, where the user can read reviews and ask for a callback.

WhatWhere
MCP server (streamable HTTP)https://api.bluerate.ai/mcp
REST APIhttps://api.bluerate.ai/v1
OpenAPI 3.1 descriptionhttps://api.bluerate.ai/v1/openapi.json
Summary for language modelshttps://www.bluerate.ai/llms.txt

Connect over MCP

The MCP server has three tools, search_loan_officers, get_loan_officer and request_callback. It needs no sign-in: wherever your client asks for authentication, choose none.

Claude Code

claude mcp add --transport http bluerate https://api.bluerate.ai/mcp

Claude (web and desktop)

Settings → Connectors → Add custom connector, then paste https://api.bluerate.ai/mcp.

ChatGPT

With developer mode turned on (Settings → Apps & Connectors → Advanced settings), create a connector with the server URL https://api.bluerate.ai/mcp and no authentication.

Cursor

In ~/.cursor/mcp.json:

{
  "mcpServers": {
    "bluerate": { "url": "https://api.bluerate.ai/mcp" }
  }
}

VS Code

In .vscode/mcp.json:

{
  "servers": {
    "bluerate": { "type": "http", "url": "https://api.bluerate.ai/mcp" }
  }
}

Anything else

Any client that speaks MCP over streamable HTTP works. To try the tools by hand, run npx @modelcontextprotocol/inspector and connect to https://api.bluerate.ai/mcp. A plain JSON-RPC call also works:

curl https://api.bluerate.ai/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
       "params":{"name":"search_loan_officers","arguments":{"state":"TX","loanType":"va"}}}'

get_loan_officer

GET https://api.bluerate.ai/v1/loan-officers/{nmls}, or the MCP tool with nmls. Returns the fields search does, plus about, up to 3 reviews and the loan officer’s faqs.

curl "https://api.bluerate.ai/v1/loan-officers/1234567?client=my-agent"

request_callback

POST https://api.bluerate.ai/v1/callback-requests with a JSON body, or the MCP tool with the same arguments: nmls (required), and optionally borrowerName, state and loanPurpose (purchase, refinance, cash_out).

It returns confirmationUrl, a bluerate page for the user that works once and for 24 hours. There the user enters their own phone number and email, agrees to be contacted and submits; the loan officer then calls them. Give the user the link. Do not ask the user for their phone number or email: the API does not accept them, so that the consent to be called is given by the user, on bluerate.

curl -X POST "https://api.bluerate.ai/v1/callback-requests?client=my-agent" \
  -H 'Content-Type: application/json' \
  -d '{"nmls": "1234567", "borrowerName": "Jane Doe", "state": "CA", "loanPurpose": "purchase"}'
{
  "confirmationUrl": "https://www.bluerate.ai/loan-officer/alex-rivera-nmls-1234567/callback?t=…&utm_source=agent&utm_medium=my-agent&utm_campaign=api&utm_content=callback",
  "expiresAt": "2026-11-10T18:30:00Z",
  "loanOfficer": {
    "name": "Alex Rivera",
    "nmls": "1234567",
    "company": "Example Home Loans",
    "url": "https://www.bluerate.ai/loan-officer/alex-rivera-nmls-1234567?utm_source=agent&utm_medium=my-agent&utm_campaign=api"
  },
  "instructions": "Give confirmationUrl to the user. …"
}

What comes back

FieldMeaning
asOfWhen the daily snapshot was taken (UTC). Every answer has it.
sourceWhere the data comes from. Every answer has it.
urlThe loan officer’s bluerate profile, where the user reads reviews and asks for a callback. Show it to the user.
callbackUrlThe loan officer’s bluerate profile with its own call-back form. Works without another call.
requestCallback, callbackHelpHow to call request_callback for this loan officer, and one sentence on when to.
nmlsNMLS ID, digits only. Pass it to get_loan_officer.
total, returned, moreResultsUrlHow many match, how many came back (at most 10), and the full list on bluerate.
rating, sponsoredrating is always null for now (profiles carry no star rating). sponsored is always false: the order does not depend on payment.
about, reviews, faqsget_loan_officer only: the loan officer’s introduction, up to 3 client reviews and their own FAQs.
error.code, error.message, error.hintOn errors. hint says in one sentence what to send instead.

Answers never include phone numbers, email addresses or street addresses. To reach a loan officer, send the user to url or callbackUrl.

A bad request gets a 400 with a hint the model can act on:

{
  "error": {
    "code": "invalid_parameter",
    "message": "\"Atlantis\" is not a US state code.",
    "hint": "Pass state as a two-letter US state code, for example state=CA for California or state=TX for Texas."
  }
}

Other errors: 404 not_found (no loan officer with that NMLS ID on bluerate) and 503 snapshot_unavailable (try again in a few minutes). Over MCP the same errors come back as tool results marked isError.

Limits

Without a key: 60 requests a minute per IP address. Over the limit you get a 429 with error.code rate_limited and Retry-After: 60; wait a minute and try again. Answers can be cached for 5 minutes (Cache-Control: public, max-age=300); the data changes once a day. Free keys with higher limits are on the way; until then, write to support@zeitro.com if you need more.

Data and disclaimer

The data comes from loan officer profiles on bluerate.ai, copied once a day; asOf says when. Loan officers supply their own profiles, NMLS IDs, licensed states, loan types and languages. Results are ordered by whether the loan officer shows rates on bluerate, then by name, and never by payment. Loan officers can ask to be left out of these answers.

bluerate is a marketplace, not a lender. A listing is not an endorsement, an offer to lend or a rate quote. Check a loan officer’s license on NMLS Consumer Access. Use of the API is subject to the Terms of Use and Privacy Policy. Do not copy the whole list or use it for unsolicited contact.