Cal MCP Server
The Cal MCP Server connects MCP-compatible AI clients (Claude Desktop, Cursor, etc.) to a comprehensive mortgage data platform with 166+ wholesale lenders, 1,400+ indexed program documents, and 250+ DPA programs across all 50 states.
cal_fact_lookup– Retrieve authoritative mortgage facts (FHFA conforming loan limits, FHA limits, VA funding fees, FHA MIP rates, agency DTI caps) at the county level, with source citations.cal_search_lenders– Find and rank wholesale lenders suited to a specific loan scenario (FICO, LTV, loan amount, state, occupancy, product type), with qualifying reasons and blockers.cal_lender_details– Get a full lender record: programs offered, state licenses, AE contacts, broker portal URL, status, and recent matrix dates.cal_lender_documents– List indexed matrices, handbooks, and overlay documents for a lender, sorted by authority and currency, each with an extracted summary.cal_dpa_search– Search down-payment assistance programs by state, county, city, first-time homebuyer status, and program type (grant, forgivable, deferred, second loan, MCC).cal_lender_intel– Access qualitative "tribal knowledge" on a lender: strengths, watch-outs, speed notes, preferred/avoided scenarios, AE contacts, and recent overlay shifts not yet in PDFs.cal_scenario_pattern– Get structuring playbooks for complex scenarios (departing residence, ITIN/foreign national, sub-580 FHA, renovation, super-jumbo >$1M).cal_valuation– Run a comparable-sales valuation to receive an indicated market value, floor/ceiling range, over/under-priced verdict, confidence level, and list-price rebuttal.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Cal MCP ServerTop 5 lenders for a 700 FICO, 80% LTV in Texas"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Cal MCP Server
The mortgage MCP server, with a real lender data moat. 166+ wholesale lenders · 1,400+ indexed program documents · 250+ down‑payment‑assistance programs · 50 states. First Model Context Protocol server in the mortgage industry with broker‑accessible matrix data behind it — not a calculator, not a rate scraper.
@askcal/mcp-server exposes Cal — the AI mortgage platform at askcal.io — to any Model Context Protocol client: Claude Desktop, Cursor, Continue, Goose, Zed, Cody, your own agent. Loan officers, brokers, real‑estate agents, and consumer borrowers can ask their AI assistant questions like:
"What's the 2026 conforming loan limit in Alameda County, CA, for a 1‑unit?"
"Top 5 wholesale jumbo lenders in California for a 712‑FICO, 80% LTV, $1.4M loan with a departing residence still listed."
"What DPA programs in Orange County California work for a first‑time buyer with 700 FICO?"
"Plaza Home Mortgage — what's their current master credit guideline document, and which AE covers Northern California?"
"Show me the structuring playbook for a sub‑580 FHA file."
…and Cal returns answers grounded in current matrix PDFs, FHFA / HUD / VA source documents, and tribal‑knowledge intel curated by working brokers.
Why this matters
The mortgage industry has spent a decade in the "everybody buys Encompass" era. AI hasn't touched the workflow because the source data is gated, fragmented, and expires. Cal's library — built from broker‑portal scrapes, indexed weekly, kept current — is the data layer that makes any mortgage AI actually useful. This MCP server is how that data reaches every agent platform built on top of MCP.
If you're an LO, this means asking Claude (or Cursor, or your own agent) the same questions you used to dig through PDFs to answer — and getting an answer in seconds with a source citation.
Related MCP server: Repliers MCP Server
Tools
The server exposes eight tools:
Name | Purpose |
| FHFA conforming loan limits, FHA loan limits, VA funding fee, FHA MIP, agency DTI caps. County‑level. 50 states + DC. |
| Scenario‑aware wholesale‑lender finder. Pass FICO / LTV / loan amount / state / occupancy → ranked top 5 (or top 15 with |
| Full record for one lender — programs, state licenses, AE contact, broker portal URL, status, recent matrix dates. |
| List indexed matrices / handbooks / overlays for a lender. Sorted master → current → superseded. Each doc includes a short extracted summary. |
| Down‑payment‑assistance programs by state / county / city / FTHB / type. Up to 25 ranked programs with provider URLs. |
| Tribal‑knowledge intel — strengths, watch‑outs, speed notes, scenarios they love, scenarios to avoid, AE contacts. Pass |
| Structuring playbooks for hard scenarios: departing residence, ITIN / foreign national, sub‑580 FHA, renovation, super‑jumbo, plus the matrix‑freshness citation rule. |
| ValueGuard comparable-sales valuation. Pass the subject (price + sqft) and 4+ comps, get the indicated market value, a floor/ceiling range, an over/under-priced verdict, a confidence level, and the comps used. A list-price rebuttal in seconds. |
The tool surface mirrors Cal's internal tool‑use schema, so any model (Claude Sonnet, Opus, Haiku, GPT‑4o, Gemini, …) that calls them gets the same shape Cal itself uses.
Install
Claude Desktop (macOS / Windows)
Add this to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"cal": {
"command": "npx",
"args": ["-y", "@askcal/mcp-server"],
"env": {
"CAL_API_TOKEN": "your-token-here"
}
}
}
}Restart Claude Desktop. The cal tools appear in the slash menu.
Cursor
Settings → MCP → Add Server, then paste the same JSON.
Continue / VS Code
~/.continue/config.json → mcpServers block, same shape.
Local dev (clone + link)
git clone https://github.com/askcal/cal-mcp-server.git
cd cal-mcp-server
npm install
npm run build
# Then point your MCP client at dist/index.js with `node` as the command
# and an absolute path in args[0].Getting a token
CAL_API_TOKEN is an opaque bearer token. Use a long‑lived API key, not a session token — session tokens from /auth/login expire after 8 hours, which means an MCP client config that worked today returns 401 tomorrow.
Recommended — long‑lived API key (cal_live_…)
Sign up at api.askcal.io (request access if you don't have a key yet — broker LOs are auto‑approved). Then:
# 1. Get a short‑lived session token from /auth/login
SESSION=$(curl -s -X POST https://api.askcal.io/auth/login \
-H "Content-Type: application/json" \
-H "Origin: https://askcal.io" \
-d '{"email":"<your-email>","password":"<your-password>","portal":"team"}' \
| sed -n 's/.*"token":"\([^"]*\)".*/\1/p')
# 2. Mint a long‑lived API key
curl -X POST https://api.askcal.io/auth/api-keys \
-H "Content-Type: application/json" \
-H "Origin: https://askcal.io" \
-H "Authorization: Bearer $SESSION" \
-d '{"label":"my-claude-desktop"}'The response includes a key field starting with cal_live_. Copy it now — it's only shown once. Use it as CAL_API_TOKEN. The key has no expiry; revoke it any time with DELETE /auth/api-keys/<id> (list yours with GET /auth/api-keys).
Fallback — session token
If you just want to try a tool call quickly, the session token from /auth/login works too (8‑hour TTL). Don't put one in a long‑lived MCP config.
v0.2 preview
OAuth 2.1 with PKCE is on the roadmap so MCP clients can run the consent flow themselves. Until then, the API key flow above is the recommended path.
Verify it works
After installing, ask your MCP client:
"What's the 2026 conforming loan limit in Alameda County CA?"
You should get back something like:
$1,229,100 (FHFA 2026 Conforming Loan Limits, announced 2025‑11‑26).
High‑balance HCOL county. Anything above this is a jumbo loan.If you don't, check:
The token isn't expired — Cal session tokens last 24 hours by default. Refresh via
/auth/login.Network can reach
https://api.askcal.io.Your MCP client picked up the config — restart it after editing.
Configuration
Env var | Required | Default | Notes |
| yes | — | Bearer token from |
| no |
| Override only if you're testing against a Cal instance other than production. |
Data scope
Calls are scoped to the list tied to your token. If you're a broker LO with a curated approved‑lender list, results are filtered to lenders you can actually use. Cal will not leak across approved lists. The founder's demo list is the broadest, at 166 lenders.
License
MIT. The wrapper code is open. Cal's curated lender library, DPA program data, and lender intel are proprietary and remain behind the API.
About Cal
Cal is the AI mortgage platform at askcal.io, built by a 17‑year industry veteran (NMLS 275073) for working brokers. Production state at this release:
166 wholesale lenders, 1,424 indexed program documents, 250 DPA programs, 50 states
4 LOs in pilot, 342 questions answered in the first 24 hours of soft‑launch
Roadmap
v0.1 - 7 tools, API-key auth, stdio transport, npm + GitHub.
v0.2 (current) - ValueGuard valuation (
cal_valuation), 8 tools total; repointed to the askcal.io API.v0.3 - OAuth 2.1 with PKCE.
.dxtClaude Desktop bundle. Optimal Blue MCP companion server.v0.4 - Streamable HTTP transport. Public agency MCPs (Fannie Selling Guide, Freddie Guide, FHA Handbook 4000.1, VA Handbook 26-7, FHFA limits, HUD AMI).
v0.5 - Encompass MCP companion (LOS read/write). DocuSign MCP companion. One prompt fires across CRM + email + calendar + pricing + library.
Contributing
Issues and PRs welcome. The roadmap above is the priority order; if you want to take a piece, open an issue first so we don't dual‑track.
Contact
Chris Black · NMLS 275073 · chris@askcal.io
Available Tools
8 toolscal_dpa_searchA
Find Down Payment Assistance (DPA) programs for a borrower's state, county, FTHB status, and program type. Returns up to 25 ranked programs with provider URLs, eligibility, amount, and program type (grant / forgivable / deferred / second / MCC). Use this for any "DPA in ", "first-time buyer help in ", grant, forgivable second, MCC, or any city/county/state housing-finance-agency program question.
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | Optional city name (lowercase). Filters to city-level programs. | |
| fthb | No | Filter to first-time-homebuyer-only programs. Omit to include both FTHB and non-FTHB. | |
| type | No | Optional program-type filter. | |
| state | No | Two-letter US state code (e.g. "CA"). Use "ALL" or omit for national programs. | |
| county | No | Optional county name (lowercase). Filters to programs that explicitly cover that county. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It states the tool returns up to 25 ranked programs with specific fields, which is informative. However, it does not mention authentication needs, rate limits, or any side effects, but these are not critical for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first defines purpose and output, second gives usage examples. No wasted words, front-loaded with key info.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters (all optional) and no output schema. The description covers what is returned and the filtering logic. It does not mention error cases or pagination, but for a search tool, the level of detail is sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter well-described (e.g., state: 'Two-letter US state code...'). The description provides overarching context but adds little to individual parameter meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool finds Down Payment Assistance programs with specific filters (state, county, FTHB, type). It lists returned fields (URLs, eligibility, amount, program type). This distinguishes it from sibling tools like cal_fact_lookup or cal_lender_details, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly lists example queries ('DPA in <state>', 'first-time buyer help in <county>') and program types (grant, MCC, etc.), providing clear when-to-use guidance. It implies when not to use by focusing on DPA, and sibling tools cover other areas.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_fact_lookupA
Look up authoritative 2026 mortgage facts: FHFA conforming loan limits, FHA loan limits, VA funding fee schedule, FHA MIP rates, and agency DTI caps. Use this whenever you need a specific dollar amount, percentage, or threshold — never quote these from training-data memory because the values reset annually and FHFA/FHA limits are different programs. Returns the requested value with a source citation (FHFA, HUD, VA, Fannie/Freddie). Coverage: all 50 US states + DC, all county-level limits, 1-4 unit properties.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | Two-letter US state code (e.g. "CA", "NY"). Required for conforming and FHA loan limits. | |
| units | No | Number of units (1-4). Defaults to 1 for loan limits. | |
| county | No | County name. Lowercase with underscores (e.g. "alameda", "los_angeles", "santa_clara"). Required for loan limits. Cal accepts spaces or underscores; both work. | |
| category | Yes | Which fact to look up. "conforming_loan_limit" = FHFA limit for conventional / Fannie / Freddie loans. "fha_loan_limit" = HUD/FHA limit (different program from FHFA). "va_funding_fee" = current VA funding fee table. "fha_mip" = current FHA MIP rates (upfront + annual). "agency_dti_cap" = baseline DTI caps per program. | |
| va_use_count | No | For va_funding_fee — which fee schedule to look up. | |
| va_down_payment_pct | No | For va_funding_fee — down payment % (used to pick the bracket). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format ('value with source citation'), scope ('all 50 US states + DC, all county-level limits, 1-4 unit properties'), and the fact that values reset annually. It does not mention error handling or rate limits, but for a read-only lookup this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph of 4 sentences, front-loaded with purpose and a list of facts. Every sentence adds value: purpose, usage rule, return format, and coverage. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a lookup tool with no output schema, the description adequately explains what is returned (value with source citation) and the extent of coverage. It names the authoritative sources (FHFA, HUD, VA, Fannie/Freddie). The 6 parameters are fully covered by schema descriptions and the extra context in the description makes it complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by clarifying formatting conventions (e.g., 'lowercase with underscores' for county, 'both work' for spaces/underscores), default behavior for units, and the purpose of each parameter (e.g., va_down_payment_pct is for bracket selection). This goes beyond the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with specific verbs ('look up') and resources ('authoritative 2026 mortgage facts'). It explicitly lists the fact categories (FHFA limits, FHA limits, VA fees, etc.), distinguishing this from sibling tools like cal_scenario_pattern or cal_search_lenders, which are about scenario analysis or lender search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Use this whenever you need a specific dollar amount, percentage, or threshold — never quote these from training-data memory'. It also warns about the difference between FHFA and FHA programs, and specifies coverage (all 50 states, county-level). This helps the agent decide when to invoke this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_lender_detailsA
Fetch the full record for a specific wholesale lender — programs offered, state licenses, account-executive contact, broker portal URL, status, and recent matrix dates. Use this after cal_search_lenders to get contact details + portal info before recommending the lender to an LO.
| Name | Required | Description | Default |
|---|---|---|---|
| lenderSlug | Yes | Canonical lowercase-with-dashes slug (e.g. "plaza-home-mortgage", "uwm", "carrington"). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes a fetch operation without side effects, but does not explicitly state that it is read-only or safe. The behavioral implications are inferred but not confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action, and contains no extraneous information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description lists key return fields, providing adequate context. However, it does not mention pagination, error conditions, or rate limits. Given the low complexity, this is sufficient but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter. The description does not add any additional meaning beyond what is in the schema (e.g., format or usage hints). Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool fetches the full record for a specific wholesale lender, listing concrete data fields (programs, licenses, contact, portal URL, status, matrix dates). It clearly distinguishes from the sibling cal_search_lenders by specifying the use case after that search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Use this after cal_search_lenders to get contact details + portal info before recommending the lender to an LO.' It implies a sequential workflow, though it does not explicitly state when not to use it or alternatives beyond the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_lender_documentsA
List indexed matrix / handbook / overlay documents for a lender. Returns each doc's filename, effective date, product category, authority (master vs. supplement), superseded flag, and a short extracted summary. Sorted: master → current → superseded last. Use this to verify program details or cite a specific matrix version when answering an LO question.
| Name | Required | Description | Default |
|---|---|---|---|
| lenderSlug | Yes | Canonical lowercase-with-dashes slug (matches cal_lender_details). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral burden. It states returns and sorting but does not explicitly disclose that the operation is read-only or lacks side effects. The implied read behavior is clear, but explicit declaration would improve transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, using two well-structured sentences. The first sentence enumerates outputs and sorting, the second provides usage guidance. No superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with one parameter and no output schema, the description covers purpose, usage context, returned fields, and sorting order. It lacks details about potential empty results or data freshness, but is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage for the single parameter 'lenderSlug', the baseline is 3. The tool description does not add additional meaning beyond the schema, which already explains the slug format. No further parameter semantics are provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: listing indexed documents for a lender, specifying what fields are returned and the sort order. It distinguishes itself from sibling tools by focusing on documents (matrices, handbooks, overlays) rather than lender details or fact lookups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context for when to use this tool: 'to verify program details or cite a specific matrix version when answering an LO question.' However, it does not mention when not to use it or suggest alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_lender_intelA
Tribal-knowledge intelligence on a specific wholesale lender — strengths, watch-outs, speed notes, scenarios they love, scenarios to avoid, AE contacts, recent overlay shifts not yet in PDFs. Use this AFTER cal_lender_details when the user asks "is this lender any good for X?", "fastest path", "what gets denied", or any qualitative question about working with the lender. Pass an intent to narrow the response and save tokens — e.g. intent="scenariosTheyLove" returns just that field.
| Name | Required | Description | Default |
|---|---|---|---|
| intent | No | Narrow the response to one section. Defaults to "all" (full record). Prefer a narrow intent for hard scenarios — e.g. for "is X good for departing residence?" pass "scenariosTheyLove". | |
| lenderSlug | Yes | Canonical lowercase-with-dashes slug. Match what cal_lender_details uses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so description carries the burden. It explains the tool returns intelligence data and that passing intent can save tokens. While it doesn't disclose potential limitations like data freshness, the behavioral context is adequate for a read-only intelligence tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single paragraph is concise but well-structured: begins with purpose, then usage guidelines, then parameter advice. Every sentence adds value with no redundancy. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return content (strengths, watch-outs, etc.) and how to narrow response via intent. It covers all needed context for an agent to select and invoke the tool correctly, including relationship to sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with good base descriptions. The description adds significant value: explains intent parameter with enum values and default, gives example usage ('e.g. intent="scenariosTheyLove"'), and clarifies that lenderSlug must match cal_lender_details. This goes well beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool provides tribal-knowledge intelligence on a wholesale lender, listing specific aspects like strengths, watch-outs, speed notes, and AE contacts. It distinguishes from sibling tools by specifying usage after cal_lender_details and targeting qualitative questions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use after cal_lender_details, for qualitative questions like 'is this lender any good for X?' or 'fastest path'. Provides examples of when to pass an intent to narrow response and save tokens, offering clear when-to-use and when-to-avoid guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_scenario_patternA
Fetch a structuring playbook for a recognized hard mortgage scenario — departing residence with property still listed, ITIN / foreign national, sub-580 FHA, renovation (203k / reno-perm), super-jumbo > $1M — or the matrix-freshness citation rule. Each pattern returns the recommended lender shortlist + the specific guideline to apply. Call this FIRST when the LO's question matches one of these patterns — it gives you the playbook before any lender search.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | Yes | "departing-residence" = jumbo + departing PITI + 30%+ down. "itin-foreign-national" = ITIN borrower or non-resident alien. "sub-580-fha" = FHA below the 580 minimum FICO. "renovation" = 203k / reno-perm / construction-to-perm. "super-jumbo" = loan amount over $1M. "matrix-freshness" = the citation rule for quoting any lender matrix. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden for behavioral disclosure. It explains the tool returns a playbook (lender shortlist + guideline) and is read-only in nature. While it doesn't explicitly state no side effects, the description is transparent about its output and purpose.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the tool's purpose and followed by a list of examples. Every word earns its place with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple lookup tool with one enum parameter and no output schema, the description adequately covers what the tool does, what it returns, and when to use it. Some might prefer an explicit note about no side effects, but overall it is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with enum values described in the schema. The description reinforces that each pattern corresponds to a specific playbook but doesn't add significant new meaning beyond the schema's own descriptions. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches a structuring playbook for recognized hard mortgage scenarios. It lists specific patterns and explains the output (lender shortlist + guideline). This distinguishes it from sibling tools by positioning it as a first step before lender searches.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this FIRST when the LO's question matches one of these patterns' and implies not to use it for other questions. It provides clear context for when to invoke this tool vs alternatives like cal_search_lenders.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_search_lendersA
Search Cal's scoped wholesale-lender library for programs that fit a loan scenario. Returns lenders ranked best-first with score, qualifying reasons, and any blockers (state license gaps, FICO/LTV overlays). Use this for any "who does X?" or "which lender for Y?" question — pass as much scenario detail as you have (FICO, LTV, loan amount, occupancy) and Cal will rank against the live library. Defaults to top 5; pass expand=true for top 15.
| Name | Required | Description | Default |
|---|---|---|---|
| ltv | No | Loan-to-value as a percentage (e.g. 80 for 80% LTV). | |
| fico | No | Borrower FICO. Used to filter out lenders whose floor is higher. | |
| state | No | Two-letter US state code (e.g. "CA"). Optional but improves ranking. | |
| expand | No | Return top 15 instead of the default top 5. | |
| category | Yes | Product category. One of: DSCR, Non-QM, Jumbo, Conventional, FHA, VA, Bank-Statement, ITIN, HELOC, USDA, Reverse, Renovation. Required. | |
| occupancy | No | Property occupancy. | |
| loanAmount | No | Loan amount in USD. Used to filter against lender min/max bounds. | |
| subProgram | No | Optional product sub-type (e.g. "DPA", "HomeReady", "203k", "Bank-Statement-12mo"). | |
| includeBlocked | No | Include lenders that have blockers in the result (default false). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that results are ranked best-first with score, qualifying reasons, and blockers (state license gaps, FICO/LTV overlays). It mentions use of a live library and default behavior. However, it does not state whether the operation is read-only or idempotent, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of three concise sentences with no wasted words. The first sentence front-loads the purpose, the second provides usage guidance, and the third explains defaults. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description explains what is returned (lenders ranked with score, reasons, blockers) and mentions defaults and expansion. It is mostly complete for a search tool, though it could specify the output structure (e.g., list of objects) and whether results are real-time or cached.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have descriptions in the schema (100% coverage), so baseline is 3. The description adds context by grouping parameters as scenario details (FICO, LTV, loan amount, occupancy) and mentioning defaults for expand and includeBlocked, but it does not provide significant additional meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search Cal's scoped wholesale-lender library for programs that fit a loan scenario,' specifying the verb (search), resource (wholesale-lender library), and purpose (fit a loan scenario). It distinguishes itself from sibling tools like cal_lender_details and cal_dpa_search by focusing on lender discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool for 'who does X?' or 'which lender for Y?' questions and recommends passing as much scenario detail as possible. It provides context on defaults (top 5, expand for top 15) but does not explicitly state when not to use it or list alternatives, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cal_valuationA
ValueGuard: run a comparable-sales valuation on a subject property and return a list-price rebuttal. Given the subject (address, list price, square footage) and at least 4 comparable listings, returns the indicated market value with a floor/ceiling range, a verdict (overpriced / at market / underpriced), a confidence level, the percent the list price sits above or below market, and the comps used. Use this for "is this list price fair", "what is this home worth", appraisal-gap or list-price-rebuttal questions. The caller must supply the comparable listings; this tool does not fetch comps.
| Name | Required | Description | Default |
|---|---|---|---|
| opts | No | Optional tuning: K (number of nearest comps, default 6) and lotCap/bathFlat/poolFlat adjustment overrides. Omit for defaults. | |
| subject | Yes | The subject property. Include address (or id), price (list price, number), and sqft (number). Optional: lotSqft, beds, baths, pool, year, zip. | |
| listings | Yes | At least 4 comparable listings, each an object with the same shape as subject (address/price/sqft, optional lotSqft/beds/baths/pool/year/zip). More comps = higher confidence. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full weight. It describes the output (market value, range, verdict, confidence, percent above/below, comps used) and inputs. It does not mention any side effects, but the tool is clearly analytical and non-destructive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise paragraphs. The first paragraph defines the tool's action and outputs; the second gives usage guidance and requirements. Every sentence is necessary and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description thoroughly covers the return values. It also details the input structure and constraints (min 4 comps, optional fields). For a tool with nested objects and optional parameters, this is fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant context: explains 'opts' as tuning parameters, notes 'listings' requires at least 4, and states that more comps increase confidence. This goes beyond the schema's field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a comparable-sales valuation and returns a list-price rebuttal. It explicitly lists inputs and outputs, distinguishing it from sibling tools which are unrelated (e.g., lender searches).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit use cases: 'is this list price fair', 'what is this home worth', appraisal-gap or list-price-rebuttal questions. It also clarifies what the tool does not do (fetch comps) and what the caller must supply.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a uniquely defined purpose covering distinct aspects of mortgage lending: DPA programs, factual lookups, lender details, documents, intelligence, scenario patterns, and lender search. There is no overlap or ambiguity.
All tools follow the 'cal_' prefix and a descriptive pattern. Most are verb_noun (e.g., search_lenders, fact_lookup) while some are noun_noun (e.g., lender_details, lender_intel). The pattern is mostly consistent but not perfectly uniform.
With 7 tools, the server is well-scoped for its domain. Each tool covers a necessary function without redundancy, providing a focused yet comprehensive offering for a mortgage lending assistant.
The tool set covers the core workflows of a loan officer: finding lenders, getting details and documents, qualitative intelligence, DPA programs, factual thresholds, and scenario playbooks. There are no obvious gaps for its intended purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Broker-only credit/lending discovery shim for AI agents
Loan & mortgage calculator, compound interest, ROI, crypto prices, FX conversion for AI agents.
Connect AI agents to financial institution origination, analytics, and compliance workflows.
Crypto yield data for AI agents: lending, savings, staking, borrowing & stablecoin rates. 18 tools.
Related MCP Servers
- FlicenseDqualityCmaintenanceProvides access to RateSpot.io mortgage rate APIs, enabling AI assistants to fetch real-time mortgage rates, compare loan products, calculate payments, and access comprehensive lending information.7

Repliers MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceProvides AI assistants access to real-time MLS data via the Repliers API, enabling natural language property search, market statistics, and listing details.22517MIT- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to parse and analyze mortgage documents (Loan Estimates & Closing Disclosures), converting them into structured MISMO-compliant JSON and checking for TRID compliance violations.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to look up real estate agents, search MLS listings, submit buyer/seller leads, and access proprietary seller-intent signals in SC and GA.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/askcal/cal-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server