Cal MCP Server
Cal MCP Server
대출 기관 데이터라는 진짜 무기를 갖춘 모기지 MCP 서버. 도매 대출 기관 166곳 이상 · 색인된 프로그램 문서 1,400개 이상 · 계약금 지원 프로그램 250개 이상 · 50개 주. 모기지 업계 최초로 대출 브로커가 접근할 수 있는 매트릭스 데이터를 뒤에 둔 Model Context Protocol 서버입니다 — 계산기가 아닌, 금리 스크래퍼가 아닙니다.
@askcal/mcp-server는 askcal.io의 AI 모기지 플랫폼인 Cal을 모든 Model Context Protocol 클라이언트에 노출합니다: Claude Desktop, Cursor, Continue, Goose, Zed, Cody, 직접 만든 에이전트까지. 대출 담당자(LO), 브로커, 부동산 중개인, 일반 차입자들은 AI 어시스턴트에게 다음과 같은 질문을 할 수 있습니다:
"캘리포니아 주 앨러미다 카운티의 1‑유닛 기준 2026년 컨포밍 대출 한도는 얼마인가요?"
"캘리포니아에서 712‑FICO, 80% LTV, 140만 달러 대출, 아직 종전 주택이 매물에 올라 있는 경우 이용 가능한 도매 점보 대출 기관의 상위 Top 5는 어디인가요?"
"캘리포니아 오렌지 카운티에서 700‑FICO 첫 구매자에게 적합한 DPA 프로그램은 무엇인가요?"
"Plaza Home Mortgage — 현재 적용되는 마스터 신용 가이드라인 문서는 무엇이고, 북캘리포니아 담당 AE는 누구인가요?"
"580 미만 FHA 파일에 대한 구조화 플레이북을 보여 주세요."
…그리고 Cal은 현재 매트릭스 PDF, FHFA / HUD / VA 출처 문서, 현역 브로커가 정리한 내부 전수 지식에 근거한 답변을 돌려줍니다.
왜 중요한가
모기지 업계는 10년을 ‘모두가 Encompass를 쓴다’는 최근 시대에 있었습니다. AI가 이 워크플로우에 접근하지 못한 이유는 원천 데이터가 막혀 있고, 쪼개저 있고, 유효기간이 끝나기 때문입니다. Cal의 데이터 라이브러리 — 브로커 포털을 크롤링해 매주 색인을 만들어언제나 최신으로 유지 — 어떤 모지기 AI라도 실제로 유용하게 만드는 데이터 레이어입니다. 이 MCP 서버가 바로 그 데이터를 MCP 위에 구축된 모든 에이전트 플랫폼에 전달하는 통로입니다.
여러분이 LO라면, PDF를 뒤지느라 답을 구하던 질문들을 이제 클로드(또는 Cursor, 또는 자체 제작 에이전트)에게 물어보고 — 출처 인용과 함께 시작 몇 초 만에 답을 받을 수 있다는 뜻입니다.
Related MCP server: Repliers MCP Server
도구
이 서버는 여덟 가지 도구를 제공합니다:
이름 | 목적 |
| FHFA 컨퍼밍 대출 한도, FHA 대출 한도, VA 보증료, FHA MIP, 기관 DTI 상한. 카운티 단위. 50개 주 + 워싱턴 DC. |
| 시나리오 인지형 도매 대출 기관 검색. FICO / LTV / 대출 금액 / 주 / 점유 형태를 주면 점수, 조건충족 사유, 차단 요소들과 함께 순위를 매겨 상위 5개(또는 |
| 특정 대출 기관의 전체 기록 — 프로그램, 주(州) 라이선, AE 연례처, 브로커 포털 URL, 상태, 최근 매트릭스 날짜. |
| 특정 대출 기관의 색인된 매트릭스 / 핸드북 / 오버레이 목록. 마스터 → 현재 → 대체(구)순으로 정렬됨. 각 문서에는 추출된 짧은 요약이 포함됩니다. |
| 주 / 카운티 / 도시 / 첫 구매자(FTHB) / 유형별 계약금 지원 프로그램. 제공처 URL과 함께 최대 25개 프로그램으로 순위 반환. |
| 내부정보(옆经验) 인텔 — 강점, 주의점, 속도 관련 메모, 선호하는 시나리오, 피해야 할 시나리오, AE 담당자. |
| 난이도 높은 시나리오들의 대처 플레이북: 기존 주택 처분 예정, ITIN/외국인 차입자, 580 미만 FHA, 리모델링, 슈퍼 점보, 그리고 최근 매트릭스 인용 규칙. |
| ValueGuard 비교 매매 사례 평가. 대상 주택(가격+면적)과 comps 기 4개 이상 넣으면 산출된 시장 가치, 하한/상한 범위, 과대/과소 평가 판단, 신뢰 수준, 사용된 비교 사물 목록을 돌려줍니다. 아파트 가격을 초만에 반박할 수 있습니다. |
도구 표면은 Cal 자체의 내부 도구 사용 스키마를 그대로 반영하므로, 해당 도구들을 호출하는 어떤 모델(Claude Sonnet, Opus, Haiku, GPT‑4o, Gemini 등)이든 Cal 자신과 똑같은 응답 형태를 받습니다.
설치
Claude Desktop (macOS / Windows)
이 내용을 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS) 또는 %AppData%\Claude\claude_desktop_config.json(Windows)파일에 추가하세요:
{
"mcpServers": {
"cal": {
"command": "npx",
"args": ["-y", "@askcal/mcp-server"],
"env": {
"CAL_API_TOKEN": "your-token-here"
}
}
}
}Claude Desktop을 다시 시작하세요. 그러면 cal 도구가 슬래시(/) 점거 메뉴에 나타납니다.
Cursor
Settings → MCP → Add Server로 이동한 다음, 같은 JSON을 붙여넣기하세요.
Continue / VS Code
~/.continue/config.json → mcpServers 블록에 같은 형태로 추가하세요.
로컬 개발 (클론 + 링크)
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].토큰 받기
CAL_API_TOKEN은 불투명한 베어러 토큰입니다. 세션 토큰이 아는 장기 유효한 API 키를 사용하세요. /auth/login에서 발급되는 세션은 토큰은 8시간 후 만료됩니다. 즉, 오늘 잘 작동했던 MCP 클라이언트 설정이 내일은 401을 반환할 수 있습니다.
권장 — 장기 유효 API 키 (cal_live_…)
api.askcal.io에서 가입하세요(키가 없다면 access 요청을 하세요 — 브로커 LO는 자동 승인됩니다). 그런 다음:
# 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"}'응답에는 cal_live_로 시작하는 key 필드가 포함되어 있습니다. 지금복사 하세요 — 이 입력은가지를 보여주지 않고 2회만 표시됩니다. it를 CAL_API_TOKEN으로 사용하세요. 이 키는 만료되지 않으며, DELETE /auth/api-keys/<id>로 언제든 폐기할 수 있습니다(GET /auth/api-keys로 키를 조회할 수 있습니다).
차선 — 세션 토큰
도구 호출을 빠르게 시험해만 보려면 /auth/token 세션 토큰도 동작합니다(8시간 TTL). 긴 시간 동안 쓸 MCP 설정에는 세션 토큰을 넣지 마세요.
v0.2 프리뷰
MCP 클라이언트가 인증 동의 흐름을 직접 수행할 수 있도록 OAuth 2.1 + PKCE가 로드 되에 올라와 있습니다. 그 전까지는 위의 API 키 방식을 권장합니다.
동작 확인
설치 후 MCP 클라이언트에게 물어보세요:
"What's the 2026 conforming loan limit in Alameda County CA?"
그러면 다음과 같은 답변을 받아야 합니다:
$1,229,100 (FHFA 2026 Conforming Loan Limits, announced 2025‑11‑26).
High‑balance HCOL county. Anything above this is a jumbo loan.그렇지 않다면 다음을 점검하세요:
토큰이 만료되지 않았는지 — Cal 세션 토큰은 기본 24시간 동안 실행.
/auth/login으로 새로고침하세요.네트워크로
https://api.askcal.io에 도달되었는지.MCP 클라이언트가 설정을 잘 불러왔는지 — 설정을 변경 후 클라이언트를 재시작하세요.
설정
환경 변수 | 필수 | 기본값 | 참고 설명 |
| 예 | — |
|
| 아니요 |
| 프로덕션이 아닌 여러 Cal 인스턴스를 테스트하는 경우에만 변경합니다. |
데이터 범위
호출 범위는 토큰에 연결된 달러에 묶여 있습니다. 정리된 승인 대출 기관 목록(curatedlist)을 가진 브로커 LO로는 결과가 실제 이용 가능한 대출 기관들로만 필터링됩니다. Cal이 다른 승인 목록 정보를 유출하지 않습니다. 창업자의 데뮤 목록은 166개 대출 기관으로 가장 넓은 편입니다.
라이선스
MIT. 래퍼 코드는 오픈 소스로 제공됩니다. Cal의 정리된 대출 기관 라이브러리, DPA 프로그램 데이터, 대출 기관 인텔은 구체용 자산이며 API 뒤에만 존재합니다.
Cal 소개
Cal은 askcal.io가 서비스하지 AI 모기지 플랫폼으로, 17년 경력의 업계 전문가(NMLS 275073)가 현직 브로커를 위해 만들었습니다. 이 버전의 운영 상태:
도매 대출 기관 160곳, 색인된 프로그램 문서 1,424개, DPA 프로그램 250개, 50개 주
파일럿에 4팀 LO, 소프트 런칭 후 24시간 만에 342건의 질문 응완
로드맵
v0.1 – 7가지 도구, API 키 인증, stdio 전송, npm + GitHub.
v0.2 (현재) – Value 해야 할
cal_valuation포함 총 8가지 도구; askcal.io API를 가록도록 바꿨습니다.v0.3 – PKCE가 적용된 OAuth 2.1. Claude Desktop
.dxt번들. Optimal MCP 컴패니언 서버.v0.4 – 스트리밍 HTTP 전송. 공공 기관 MCP들 (Fannie Selling Guide, Freddie Guide, FHA Handbook 4000.1, 이자 HUD 员) `.
v0.5 – Encompass MCP 컴패니언(LOS 읽기/쓰기). DocuSign MCP 컴패니언. 한 번의 프롬프트로 CRM + 이메일 + 캘린더 + 견적 + 라이브러리가 연결.
기여하기
이슈와 PR을 환영합니다. 아래 로드맵이 우선순위이며, 어떤 작업을 나가는 맡을 경우 먼저 이슈를 열어 서로 조정되지 않도록 하unding 있시기 조정.
연락처
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
1 tool update
v0.2.0- Added
cal_valuation
7 tool updates
v0.1.1- First observed
cal_dpa_search - First observed
cal_fact_lookup - First observed
cal_lender_details - First observed
cal_lender_documents - First observed
cal_lender_intel - First observed
cal_scenario_pattern - First observed
cal_search_lenders
TDQS
Scored across 8 tools
The lender-related tools are carefully separated into details, documents, and intel, so the core set is easy to navigate. Some overlap exists between cal_search_lenders and cal_scenario_pattern since both can produce a lender shortlist, though their descriptions provide clear sequencing guidance.
All tools share the cal_ prefix and use lowercase snake_case, which gives the set a unified feel. However, naming style is not fully uniform: some are verb-led like cal_search_lenders and cal_fact_lookup, while others are noun-led like cal_lender_details and cal_scenario_pattern.
Eight tools is a well-scoped size for a mortgage decision-support server covering lender search, DPA, facts, scenarios, and valuation. Each tool serves a distinct workflow and none feels redundant or extraneous.
The set covers the lender workflow thoroughly: search, details, documents, and qualitative intel, plus DPA, facts, scenario playbooks, and valuation. The main gap is that cal_valuation requires the caller to supply comparable listings, and there is no companion tool to fetch comps, which can leave agents without a complete valuation path.
Maintenance
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 gradedqualityBmaintenanceProvides AI assistants access to real-time MLS data via the Repliers API, enabling natural language property search, market statistics, and listing details.284 npm18MIT- 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 gradedqualityBmaintenanceEnables AI agents to access live Zillow property data, Zestimates, and listings for over 160 million U.S. homes.3MIT