EMMA MCP
EMMA MCP — Blaylock Van을 위한 맞춤형 지방채 금융 에이전트
NYU Stern 컨설팅 캡스톤 · 2026년 봄 · Marco Figueroa, Justin Ganjian, Andrew Kay, Isaac Mizrahi, Roshan Raja · Marciano 교수
소개
Claude가 MSRB의 EMMA 웹사이트에서 직접 지방채 신규 발행 시장 정보를 읽을 수 있게 해주는 맞춤형 MCP(Model Context Protocol) 서버입니다. 이는 캡스톤 계층 사다리의 Tier-4 예시로, 어떤 벤더도 다루지 않는 데이터 소스에 대한 기업 소유 커넥터입니다.
EMMA(Municipal Securities Rulemaking Board에서 운영하는 Electronic Municipal Market Access 사이트)는 미국에서 판매되는 모든 지방채에 대한 공식 공공 기록부입니다. 신규 발행 일정, 공식 성명서(Official Statements), CUSIP 수준의 세부 정보, 최근 거래 가격 등이 모두 EMMA에 있습니다. 이 사이트는 공개 API를 제공하지 않습니다.
이 MCP는 Claude가 연결 시 자동으로 로드하는 18개의 도구와 2개의 리소스(CLAUDE.md 규칙 파일 및 EMMA_ABBREVIATIONS.md 용어집)를 노출합니다. 설치가 완료되면, 은행원은 Claude에게 *"Rady Children's Hospital의 모든 미상환 채권을 가져와서 가장 최근의 OS를 다운로드해줘"*와 같은 자연어 질문을 할 수 있으며, Claude는 검색 → 발행자 조회 → 발행 세부 정보 → PDF 다운로드 → 텍스트 추출로 이어지는 전체 체인을 약 20초 만에 실행합니다.
전체적인 설명과 Blaylock에게 중요한 이유는 USAGE.md → Why this exists를 참조하십시오.
Related MCP server: IsoFinancial-MCP
사전 요구 사항
노트북에 다음 네 가지가 필요합니다. 누락된 항목이 있으면 아래 설치 지침에서 다룹니다.
요구 사항 | 설명 | 설치 확인 |
Claude Desktop | Anthropic의 기본 macOS/Windows 클라이언트 (MCP 호스트) | |
Python 3.10+ | 서버용 런타임 | Mac: |
uv | Python 패키지 관리자 (venv 자동 처리) |
|
Playwright Chromium | 서버가 EMMA를 구동하는 헤드리스 브라우저 | 아래 명령어로 설치 |
설치 — Mac
# 1. Unzip this folder somewhere sensible
cd ~/Downloads
unzip emma-mcp.zip -d ~/emma-mcp
cd ~/emma-mcp
# 2. If you don't have uv:
brew install uv
# 3. Create the venv + install dependencies (one command)
uv sync
# 4. Install the headless browser Playwright drives
uv run playwright install chromium
# 5. Smoke-test the server (optional — confirms it boots)
uv run python server.py
# You should see the server start and wait on stdin.
# Press Ctrl+C to stop.Claude Desktop에 연결 (Mac)
Claude Desktop → Settings → Developer → Edit Config를 엽니다. 그러면
claude_desktop_config.json이 열립니다.mcpServers객체 내부에emma항목을 추가합니다.uv sync가 방금 생성한.venv/bin/python에 대한 절대 경로와server.py에 대한 절대 경로를 사용하십시오:
{
"mcpServers": {
"emma": {
"command": "/Users/YOURNAME/emma-mcp/.venv/bin/python",
"args": ["/Users/YOURNAME/emma-mcp/server.py"]
}
}
}저장 후 Claude Desktop을 완전히 종료(
Cmd+Q, 창만 닫지 마십시오)하고 다시 엽니다.새 채팅에서 작성 창의 망치 아이콘을 클릭했을 때 EMMA 도구가 나열되어야 합니다. 이것이 연결 확인 방법입니다.
설치 — Windows
# 1. Unzip this folder, e.g. to C:\emma-mcp
cd C:\emma-mcp
# 2. If you don't have Python: install from python.org (3.10 or later).
# Check "Add Python to PATH" during install.
# 3. Install uv
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
# 4. Create the venv + install deps
uv sync
# 5. Install Playwright's Chromium
uv run playwright install chromium
# 6. Smoke-test
uv run python server.py
# Ctrl+C to stop.Claude Desktop에 연결 (Windows)
텍스트 편집기에서
%APPDATA%\Claude\claude_desktop_config.json을 엽니다. (해당 경로를 탐색기 주소 표시줄에 붙여넣으면 Windows가%APPDATA%를C:\Users\사용자명\AppData\Roaming으로 확인합니다.)JSON 경로에는 슬래시(/) 또는 이중 백슬래시(\)를 사용하십시오. Windows의 단일 백슬래시는 JSON을 깨뜨립니다:
{
"mcpServers": {
"emma": {
"command": "C:/emma-mcp/.venv/Scripts/python.exe",
"args": ["C:/emma-mcp/server.py"]
}
}
}저장 후 Claude Desktop을 완전히 종료(트레이 아이콘 우클릭 → Quit)하고 다시 엽니다.
작성 창의 망치 아이콘에서 EMMA 도구를 확인하십시오.
첫 번째 프롬프트 — 60초 검증
새 Claude Desktop 채팅을 열고 다음을 붙여넣으십시오:
Use the EMMA MCP to pull the upcoming new-issue calendar for the next week. Filter to NY state only. Return a clean table with issuer, par, dated, and sector.
Claude가 state="NY"와 함께 get_new_issue_calendar를 호출하고, 몇 초 내에 약 10-25개의 행을 가져와 EMMA URL이 포함된 표 형식으로 정리하는 것을 볼 수 있습니다. 이것이 작동하면 다른 모든 도구도 동일하게 작동합니다.
더 인상적인 데모를 보려면 다음을 시도하십시오:
Find Rady Children's Hospital on EMMA, pull their outstanding bonds, get the most recent issue's details, download the Official Statement, and summarize the rating language and use of proceeds from the first 10 pages.
이 작업은 전체 5단계 도구 체인을 약 20초 만에 끝까지 실행합니다.
더 많은 데모 프롬프트는 USAGE.md에 있습니다.
문제 해결
재시작 후 Claude Desktop에 EMMA 도구가 표시되지 않음.
JSON이 유효한지 확인하십시오 (
python3 -m json.tool < claude_desktop_config.json— 출력 없음 = 정상).구성의 두 경로가 모두 절대 경로이며 존재하는지 확인하십시오. 상대 경로와
~는 작동하지 않습니다.Claude Desktop을 완전히 종료하십시오 (
Cmd+Q/ 트레이 Quit — 창을 닫는 것만으로는 계속 실행됩니다).~/Library/Logs/Claude/mcp*.log(Mac) 또는%APPDATA%\Claude\logs\mcp*.log(Windows)에서 Claude Desktop의 MCP 로그를 확인하여 특정 오류를 찾으십시오.
playwright install chromium이 멈추거나 실패함.
최초 설치 시 약 150MB를 다운로드하며 가정용 인터넷 연결에서 1-2분 정도 소요됩니다. 기다려 주십시오.
기업 프록시 환경인 경우 실행 전에
HTTPS_PROXY및HTTP_PROXY를 설정하십시오.
Claude가 도구를 호출했는데 "EMMA disclaimer loop"가 반환되거나 시간 초과됨.
EMMA는 첫 방문 시 CUSIP 면책 조항 쿠키를 설정합니다. 서버가 이를 미리 시드(
Disclaimer6=msrborg)하지만, 드물게 EMMA가 쿠키 이름을 변경할 수 있습니다. Claude Desktop을 재시작하여 브라우저 컨텍스트를 재설정하십시오. 문제가 지속되면 EMMA가 다운되었을 수 있습니다. 일반 브라우저에서https://emma.msrb.org를 확인하십시오.
반환된 표에 9자리 CUSIP 대신 cusip_hash: ABC123…가 표시됨.
이는 버그가 아니라 의도된 것입니다. EMMA는 CUSIP을 이미지 태그로 렌더링하므로(CGS 라이선스 규칙), 서버가 HTML에서 이를 읽을 수 없습니다. 공식 성명서(Official Statement) PDF가 공식 CUSIP 소스입니다.
download_official_statement를 사용한 다음extract_pdf_text를 사용하십시오. 표지와 안쪽 표지에 실제 CUSIP이 포함되어 있습니다.
"Rady Children's" 검색 시 Franklin OH 및 Pittsburgh PA 어린이 병원은 찾지만 Rady는 찾지 못함.
이는 서버 버그가 아니라 EMMA의 알려진 특성입니다. Rady의 채권은 캘리포니아 도관(CHFFA / CPFA) 하에 파일링되며, EMMA의 QuickSearch는 인덱싱하지만 약하게 인덱싱하는 피연산자 괄호 부분에만 "RADY CHILDRENS"가 포함되어 있습니다.
emma_quick_search {query: "rady"}를 시도하거나 도관을 직접 검색하십시오:search_issuers_by_state {state: "CA", contains: "health care facilities"}. 전체 피연산자 조회 플레이북은USAGE.md→ The conduit cheat sheet를 참조하십시오.
서버는 시작되는데 Claude가 "no tools available"이라고 함.
server.py를 수정하여 Python 구문 오류가 발생했을 가능성이 큽니다. 터미널에서uv run python server.py를 실행하십시오. 오류가 있으면 stderr로 출력됩니다. 수정 후 Claude Desktop을 재시작하십시오.
폴더 구성
파일 / 폴더 | 설명 |
| MCP 서버 본체 — 약 1,500줄, Python, Playwright. 18개 도구, 2개 리소스. |
| Blaylock 규정 준수 규칙. 모든 EMMA 세션에 MCP 리소스 |
| EMMA의 약어 발행자 이름(HOSP, AUTH, SR, CMNTY 등) + 도관 치트 시트. 리소스 |
| 이 파일. |
| 상세 참조: 18개 도구, 표준 워크플로우 체인, 은행원용 샘플 프롬프트, 주의 사항. |
| Python 의존성 매니페스트. |
| 슬라이드 준비 중 사용된 일회성 드라이버 — MCP를 직접 호출하여 출력을 스크린샷으로 찍을 수 있게 함. 서버 실행에는 필요 없음. |
| 캡스톤 Tier 2(Cowork) 데모를 위해 OS PDF를 일괄 다운로드한 보조 스크립트. 서버 실행에는 필요 없음. |
| 테스트 중 MCP를 통해 다운로드된 샘플 공식 성명서. 유지하거나 삭제하십시오. |
한 줄 요약
우리는 어떤 벤더도 제공하지 않는 EMMA MCP를 구축하고, 모든 마켓플레이스 커넥터와 동일한 프로토콜을 통해 Claude에 연결했으며, 은행원이 읽고 편집할 수 있는 일반 마크다운 규칙 파일로 관리했습니다. 이것이 기업이 자신의 도구를 직접 소유할 때의 Tier 4 모습입니다.
Available Tools
18 toolsclassify_sectorA
Classify a muni bond issue description into a sector using the same keyword rules the calendar tool uses. Useful to show Marciano the classifier is deterministic, not a black box.
| Name | Required | Description | Default |
|---|---|---|---|
| description | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description mentions 'same keyword rules' implying deterministic, but lacks details on input constraints, error behavior, or performance. Adequate for a simple 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?
Two sentences, front-loaded with purpose. Every word adds value, no redundancy.
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 tool with one parameter and no output schema, the description covers key aspects: purpose and rationale. Lacks output format info, but completeness is still high given simplicity.
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?
Single parameter 'description' has no schema description. Description only says 'muni bond issue description' without format or examples. Schema coverage is 0%, so description should compensate but doesn't.
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?
Clearly states the action (classify) and resource (muni bond issue description). It also references the deterministic nature and distinguishes from sibling data-retrieval tools.
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?
Provides a specific use case (show Marciano the classifier is deterministic). Does not explicitly state when not to use, but context is clear for a simple classification tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_official_statementA
Download an Official Statement PDF from EMMA to local disk. Pass either a direct PDF URL or an IssueView URL (the tool will resolve it to the PDF link). Returns file path + size. Use when the banker wants the OS to attach to a deck or read offline.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Either a direct .pdf URL or an IssueView/Details/P##### URL | |
| filename | No | Optional filename (without extension) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behaviors: downloading to local disk, resolving IssueView URLs to PDF links, and returning file path and size. Since no annotations are provided, the description carries full burden and does so adequately, though it omits error handling details.
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 extremely concise: two sentences that front-load the purpose and usage. Every sentence adds value with no redundancy or unnecessary detail.
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 lacking an output schema, the description states return values (file path + size). It covers input options and usage guidance comprehensively for a simple download tool.
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 the schema already documents both parameters. The description adds minimal extra information beyond the schema (e.g., clarifying that IssueView URL is accepted). 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 action (download), the resource (Official Statement PDF from EMMA), and the destination (local disk). It also distinguishes from sibling tools like get_official_statement_pdf by focusing on downloading rather than retrieving a link.
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 a specific use case ('Use when the banker wants the OS to attach to a deck or read offline'), giving clear context for when to invoke this tool. It does not explicitly mention when not to use it or alternative tools, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
emma_quick_searchA
START HERE when the user names a specific obligor, issuer, or keyword. Uses EMMA's global quick search (the same box in EMMA's header) which indexes BOTH long-form and obligor-in-parens names — so 'Childrens Hospital' finds 'CALIFORNIA HEALTH FACILITIES FINANCING AUTHORITY (LUCILE SALTER PACKARD CHILDRENS HOSPITAL AT STANFORD)' without needing the conduit-issuer chase. Returns matching issuers (across all states) and matching specific issues. Each issuer row has a URL you can feed into get_issuer_outstanding_bonds.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language search: obligor name, issuer name, CUSIP, state, or keyword | |
| limit | No |
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 the search behavior (indexes both name types, returns matching issuers and issues, includes URLs) and implies a read-only operation. It lacks details on failure modes or rate limits but is transparent 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 concise, front-loaded with the usage hint, and every sentence adds value. 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?
Given the tool's simplicity and lack of output schema, the description adequately explains what is returned (matching issuers, issues, URLs) and how to use the results with sibling tools. It is complete for its purpose.
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?
The description adds meaning to the 'query' parameter with examples and context, going beyond the schema description. The 'limit' parameter is not elaborated, but the schema coverage is 50%, and the description adds value for the main parameter.
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 'START HERE when the user names a specific obligor, issuer, or keyword' and explains that it uses EMMA's global quick search to find both issuers and specific issues. This clearly distinguishes it from sibling tools like get_issuer_outstanding_bonds or search_issuers_by_state.
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 context with 'START HERE' and examples of queries, indicating this is the first tool to try. It does not explicitly state when not to use it, but the context is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_pdf_textA
Extract text from a previously-downloaded OS PDF so you can pull financials, debt service tables, obligor financials, rating language, bond purpose, sources-and-uses, etc. into an Excel model. Works best on OS PDFs saved via download_official_statement.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Absolute path to the saved PDF | |
| pages | No | Page range like '1-20' or '45,46,47' (optional — default: all) | |
| max_chars | No | Cap on returned characters to protect context |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only states the extraction purpose but omits safety information (read-only), limitations (e.g., OCR not supported), or output format. The cap on characters is mentioned in the schema but not in the description.
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 purpose, and contains no redundant information. Every word 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?
The description captures the core use case but lacks details on return values (no output schema) and behavioral constraints. For a simple extraction tool, it is adequate but not 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%, so the baseline is 3. The description does not add new parameter meaning beyond the schema; it focuses on the use case rather than parameter details.
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 'Extract text from a previously-downloaded OS PDF' and lists specific use cases like pulling financials and debt tables, clearly differentiating it from siblings like download_official_statement and get_official_statement_pdf.
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?
It specifies when to use: after downloading via download_official_statement. No explicit exclusions or alternatives are given, but the sibling set does not contain other extraction tools, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendar_summaryA
Aggregate the new-issue calendar by a grouping dimension. Returns count and total par per group, sorted by par descending. Perfect for slides: 'NY leads this week at $1.2B across 8 deals; hospitals and schools dominate the sector mix.'
| Name | Required | Description | Default |
|---|---|---|---|
| group_by | No | state | |
| top_n | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It describes the aggregation behavior, return fields (count and total par), and sorting order. It does not cover edge cases or performance, but the main behavior is transparent.
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 extremely concise with two sentences and a quote. It front-loads the purpose and provides a concrete example, earning every word. No wasted content.
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 adequately explains return structure (count, total par). It covers the tool's purpose. However, it lacks details on how top_n affects results, which is a minor gap. Overall, it's mostly complete for a simple summary tool.
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 0%, so the description must compensate. It mentions 'grouping dimension' but does not explain the group_by parameter or top_n. The enum values are listed in schema but not described, and top_n is entirely omitted. This is a significant gap.
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 it aggregates the new-issue calendar by a grouping dimension and returns count and total par per group, sorted by par descending. It distinguishes from sibling tools like get_new_issue_calendar by focusing on summary.
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 includes a concrete use case ('Perfect for slides'), providing clear context for when to use this tool. It does not explicitly exclude alternatives or mention when not to use, but the example gives sufficient guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issue_detailsA
Full IssueView page for a given IssueView URL — per-CUSIP detail (par at issuance, coupon, maturity, initial offering price, current LT rating, price, yield, and ratings from Fitch, KBRA, Moody's, S&P), the Official Statement PDF link, and recent trade activity. This is the single most information-dense page on EMMA for modeling a specific deal.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_url | Yes | EMMA IssueView URL (https://emma.msrb.org/IssueView/Details/P#####) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It lists the returned data fields and indicates it's a single page, which is helpful. However, it does not disclose idempotency, rate limits, or error behavior, which would be beneficial for a read operation.
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?
Two sentences efficiently deliver the tool's purpose and key details. Every word adds value, and critical information is front-loaded.
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 adequately lists the major data fields returned (ratings, pricing, trade activity, etc.). It is complete for the tool's purpose, though it could mention if the output is an object or array.
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?
The input schema has 100% description coverage for the single parameter, detailing the URL format. The description adds context about the parameter being an IssueView URL and emphasizes per-CUSIP detail, but does not significantly extend beyond the schema's own description.
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 specifies the tool retrieves the full IssueView page with per-CUSIP details, listing specific fields (par, coupon, maturity, etc.). It distinguishes itself as the most information-dense page for modeling a deal, setting it apart from sibling tools.
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 implies use when needing detailed CUSIP-level information but does not explicitly state when not to use or mention alternative tools. Usage context is clear but lacks exclusions or comparisons to siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issuer_outstanding_bondsB
List an issuer's outstanding bond issues from their EMMA profile — issue description, dated date, maturity range. The most reliable drill-down on any issuer.
| Name | Required | Description | Default |
|---|---|---|---|
| issuer_id | No | EMMA issuer GUID (from search_issuers_by_state) | |
| issuer_url | No | Any EMMA issuer URL (from emma_quick_search; can be a QuickSearch/Navigate redirect) | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It only states the function and return fields, omitting important details like read-only nature, authentication requirements, rate limits, or side effects. The lack of transparency for a read-like operation leaves the agent with minimal guidance.
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 sentence that is front-loaded with the action and returns. It contains no unnecessary words and efficiently conveys the core function.
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 tool with no output schema and moderate complexity (3 params, no annotations), the description provides only basic return fields. It lacks details on response structure, pagination, error handling, and ordering. It is minimally viable but has clear gaps in completeness.
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 67% (2 of 3 parameters have descriptions), but the tool description adds no information about parameters. It does not explain the usage difference between issuer_id and issuer_url, nor does it describe the limit parameter's meaning and effect. The description could have compensated, but it did not.
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 verb 'List' and the resource 'an issuer's outstanding bond issues', specifying the fields returned (issue description, dated date, maturity range). It distinguishes from sibling tools like get_issue_details or get_security_details by focusing on outstanding bonds and claiming to be the most reliable drill-down.
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 phrase 'The most reliable drill-down on any issuer' implies when to use it, but there is no explicit guidance on when not to use it or comparisons with alternatives. Usage is implied rather than clearly stated, earning a score of 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_issuer_profileA
Full issuer profile: name, outstanding issues, attempted fetch of Official Statements, Pre-Sale docs, Continuing Disclosures, and Recent Trades. EMMA loads the latter via tab interaction; empty sections are reported honestly rather than guessed at.
| Name | Required | Description | Default |
|---|---|---|---|
| issuer_id | No | EMMA issuer GUID | |
| issuer_url | No | Any EMMA issuer URL (from emma_quick_search) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description effectively discloses behavioral traits: it 'attempts' to fetch documents, reports empty sections honestly, and notes that some data requires tab interaction. This adds significant transparency beyond what annotations would cover.
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 in two sentences, efficiently conveying the tool's purpose and key behavioral traits. It is appropriately front-loaded, but could be slightly more 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 the tool's complexity and lack of output schema, the description provides a good overview of the data included (documents, trades) and behavioral notes. It is fairly complete, though parameter usage guidance would enhance it.
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%, so baseline is 3. The description does not add extra meaning beyond the schema's parameter descriptions (issuer_id and issuer_url). The relationship between parameters is not clarified.
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 that the tool returns a full issuer profile including name, outstanding issues, and multiple document types. It distinguishes this comprehensive tool from siblings like get_issuer_outstanding_bonds or get_recent_official_statements by aggregating multiple data sources.
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 context about how data is loaded (via tab interaction) and the honesty of empty sections, but it does not explicitly state when to use this tool versus alternatives or provide usage caveats.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_pulseA
Snapshot of this week's muni primary market: total par, deal count, top 5 states, top 5 sectors, top 5 lead managers if available, competitive-vs-negotiated split. Built entirely from the live new-issue calendar — one call, boardroom-ready.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
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 states the tool is built from a live calendar, but does not disclose behavioral aspects like performance, caching, or error handling. It mentions 'if available' for lead managers, indicating some data may be missing.
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 extremely concise, using two sentences to convey the content and source. Every sentence adds value without redundancy.
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 zero-parameter tool with no output schema, the description is complete: it enumerates all returned data points (total par, deal count, top states, sectors, lead managers, competitive/negotiated split) and notes conditional availability.
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?
No parameters are defined in the input schema, resulting in 100% schema coverage trivially. The description does not need to add parameter info. Baseline for 0 parameters is 4.
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 provides a snapshot of the week's muni primary market with specific data points like total par, deal count, top states, sectors, and lead managers. It is differentiated from siblings by being a one-call summary, but does not explicitly distinguish from related tools like get_calendar_summary or get_new_issue_calendar.
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 implies usage as a quick summary tool with 'one call, boardroom-ready', but provides no explicit guidance on when to use it versus alternatives, nor any conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_new_issue_calendarA
Upcoming municipal bond issues from MSRB EMMA — the primary competitive-intel tool for any muni banker. Each row is enriched with an inferred sector classification. Multi-axis filters: state, sector, tax_status, bank_qualified, sale_method, description_contains, min_principal, max_principal. Use this to answer questions like 'what hospital deals over $100M are pricing this week?'
| Name | Required | Description | Default |
|---|---|---|---|
| state | No | 2-letter state code | |
| sector | No | Sector name, matched case-insensitive substring. One of: Healthcare / Hospital, Housing, Education / Schools, Water / Sewer / Utility, Transportation, Industrial Development / IDB, Tobacco Settlement, Pension / OPEB, Refunding, General Obligation, Revenue | |
| tax_status | No | 'Tax Exempt', 'Taxable', 'AMT', or 'Subject to AMT' | |
| bank_qualified | No | ||
| sale_method | No | all | |
| description_contains | No | Free-text filter on the issue description. Query is auto-expanded to EMMA abbreviations (hospital→HOSP, authority→AUTH, senior→SR, revenue→REV, etc.) — search in natural English, not telegraphic shorthand. | |
| min_principal | No | ||
| max_principal | No | ||
| limit | No | ||
| offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries burden. Mentions enriched sector classification but does not disclose read-only nature or other behavioral traits like data freshness or rate limits.
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?
Two sentences only, front-loaded with purpose, and efficiently lists filters with an illustrative example. Every word earns its place.
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 10 parameters, no output schema, and no annotations, the description provides adequate context: what the tool does, what the output looks like (enriched rows), and how to filter. Minor omission: definition of 'upcoming' date range.
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?
Adds significant value beyond the input schema. Explains description_contains auto-expansion and groups filters by use case. Schema coverage is low (40%), but description compensates well for most parameters.
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?
Clearly states it returns upcoming municipal bond issues from MSRB EMMA. Differentiates as 'primary competitive-intel tool' and provides an example query, making the purpose unmistakable.
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?
Implies usage via example questions but does not explicitly state when to use this tool versus alternatives like get_issue_details or emma_quick_search. No exclusion criteria provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_official_statement_pdfA
Given an EMMA IssueView/Details/P##### URL, return the direct Official Statement PDF URL (and issue title). This is the canonical primary-source OS — use it before quoting coupons, maturities, or call features.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_url | Yes | EMMA IssueView URL (https://emma.msrb.org/IssueView/Details/P#####) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses the output (URL and title) but lacks details on failure modes, validation, or any side effects. Adequate for a simple read operation.
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?
Two sentences: first defines action and input, second adds usage guidance. No redundancy or 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 simple tool with one parameter and no output schema, description covers input, output, and usage context. Lacks explicit output format but given simplicity it's nearly 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% with parameter description matching tool description. Description adds minimal value beyond schema, mentioning 'canonical primary-source OS' but no additional parameter semantics.
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 specifies the exact verb (return), resource (Official Statement PDF URL and issue title), and input context (EMMA URL). Clearly distinguishes from siblings like download_official_statement.
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 states this is the canonical primary-source OS and should be used before quoting bond features. Does not mention when not to use or alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_annual_reportsA
Recent issuer annual financial reports filed as continuing disclosures — the source for post-issuance updated obligor financials (revenue, operating income, debt-service coverage).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| issuer_contains | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It notes the source and type of data (post-issuance updated obligor financials), adding context beyond the tool name. However, it does not mention safety (read-only), rate limits, or response format, leaving gaps.
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?
A single sentence that is front-loaded with the core purpose and includes specific financial terms, making it efficient and easy to scan. Every word earns its place.
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 retrieval tool without an output schema, the description provides reasonable context about what the reports contain. However, it lacks details on pagination, default limit, or how results are ordered, and does not compensate for the missing parameter explanations.
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 0%, so the description must explain parameters. It does not mention 'limit' or 'issuer_contains' at all. The parameter names are somewhat self-explanatory, but the description adds no semantic value 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 it retrieves recent issuer annual financial reports for post-issuance obligor financials, using specific financial terms (revenue, operating income, debt-service coverage). This distinguishes it from sibling tools like get_recent_continuing_disclosures or get_recent_official_statements.
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 implies use for obtaining updated financials but provides no explicit guidance on when to use this versus similar tools (e.g., get_recent_continuing_disclosures). No alternatives or exclusions are mentioned, which is a gap given the number of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_continuing_disclosuresA
Recent continuing-disclosure filings (audited financials, material events, rating changes, quarterly operating data). Each row has a direct link to the filed PDF. This is where post-issuance credit work lives — ratings today, not at issuance; updated obligor financials for modeling.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| disclosure_contains | No | Filter disclosure description (auto-expanded for EMMA abbreviations) | |
| issuer_contains | No | Filter issuer name (auto-expanded for EMMA abbreviations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides some behavioral context: auto-expansion for EMMA abbreviations and direct PDF links. However, it does not disclose how recent the filings are, pagination behavior, or any side effects. The disclosure is adequate but incomplete.
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 two concise sentences with no redundant information. It front-loads the core purpose and follows with behavioral context, making it lean and effective.
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 the three parameters and no output schema, the description covers the purpose and some behavior but omits details about response structure, ordering, or pagination. It is sufficient for basic usage but lacks completeness for an agent to fully understand the output.
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 67% (two params have descriptions about auto-expansion). The tool description adds no further parameter details. While the schema already covers some meaning, the description misses the opportunity to elaborate, e.g., on the 'limit' parameter's effect.
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 specifies the tool returns recent continuing-disclosure filings and lists examples (audited financials, material events, rating changes, quarterly operating data). It distinguishes from sibling tools by focusing on post-issuance credit work and PDF links, setting it apart from similar document retrieval tools like get_recent_annual_reports.
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 implies use for post-issuance credit analysis but does not explicitly state when to use this tool over alternatives like get_recent_annual_reports or get_recent_official_statements. No exclusions or alternative recommendations are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_official_statementsA
List the EMMA Recent Official Statements grid — the 10 most recently filed OS documents across the muni market, with issuer, series, dated date, and a link back to the issuer. Feed a row's issue_url into get_official_statement_pdf to grab the PDF URL.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries burden. It states '10 most recently filed' but the limit parameter (default 10) suggests it can return more or fewer. This inconsistency reduces transparency. No mention of authentication, rate limits, or mutability.
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?
Two sentences, each purposeful. First describes output, second gives workflow hint. No fluff, front-loaded with key 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?
For a simple list tool with one parameter and no output schema, description covers output fields and link usage. Lacks explanation of limit parameter effect, pagination, or error conditions. Could be more self-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 coverage is 0%, so description must compensate. It mentions '10 most recently filed' implying default behavior, but does not explicitly clarify that limit controls the count. Partially adds meaning but ambiguous.
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 lists the 10 most recent official statements across the muni market, specifying returned fields (issuer, series, dated date, link). It distinguishes from sibling tools like get_official_statement_pdf and get_recent_annual_reports.
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 a clear usage hint: feed a row's issue_url into get_official_statement_pdf for PDF URL. It implies when to use (to get recent OS documents) but lacks explicit alternatives or exclusions for similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_preliminary_statementsA
Recent Preliminary Official Statements (POS) — pre-pricing documents filed right before a deal comes to market. This is the leading edge of the new-issue pipeline. Each row links to the filing PDF and the issuer page.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| issuer_contains | No | Filter issuer (auto-expanded for abbreviations) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions output (links to PDF and issuer page) but fails to state read-only nature, authentication requirements, rate limits, or any side effects. The description adds minimal behavioral context beyond the obvious 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, well-structured, defines acronym POS, and efficiently conveys purpose and output. Every sentence earns its place with no redundancy.
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 and zero annotations, the description adequately explains that results are rows linking to PDFs and issuer pages. However, it could benefit from specifying ordering or date range to be fully complete, but the current level is sufficient for a simple query tool.
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 50% (only issuer_contains has a description), but the tool description does not mention or clarify the parameters at all. It adds no value over the schema, leaving the agent to infer parameter usage from the schema alone. For 50% coverage, the description should compensate.
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 retrieves 'Recent Preliminary Official Statements (POS)' — pre-pricing documents filed before a deal comes to market. It specifies they are the leading edge of the new-issue pipeline, distinguishing it from siblings like get_recent_official_statements (final documents).
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 implies usage for pre-pricing documents but does not explicitly contrast with alternatives such as get_recent_official_statements or get_new_issue_calendar. The context suggests when to use, but no direct when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_recent_salesA
Most actively traded muni CUSIPs right now from EMMA's /TradeData grid — description, coupon, maturity, high/low price & yield, trade count, total trade amount, and a link to each security's EMMA detail page. Use this to gauge live-market color for comparable deals.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
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 data source (EMMA's /TradeData grid) and the returned fields, but does not mention behavior such as idempotency, data freshness, or whether the operation is read-only. It is not contradictory but lacks deeper behavioral context.
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 sentence followed by a usage statement, which is concise and front-loaded with the most important information. It could be structured more cleanly, but there is no wasted 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 tool with one parameter and no output schema, the description adequately explains the data source, purpose, and returned fields. It does not mention ordering of results or that the limit parameter controls result count, but the context 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?
The input schema has one parameter ('limit') with zero schema description coverage, and the description does not mention the limit parameter at all. The agent must infer its meaning from the parameter name alone, which is insufficient.
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 that the tool retrieves 'most actively traded muni CUSIPs right now from EMMA's /TradeData grid' and enumerates the returned fields (description, coupon, maturity, prices, yield, trade count, amount, link). This distinguishes it from siblings like 'get_market_pulse' or 'get_security_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 phrase 'Use this to gauge live-market color for comparable deals' provides clear context for when to use the tool. While it does not explicitly exclude alternatives, the specific purpose is well-defined and implicit in the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_detailsA
Pull security-level fields for a 9-digit CUSIP: issuer, coupon, maturity, dated date, par. CUSIPs that are redeemed / matured / pre-refunded return a clear 'no records' response — try a currently-outstanding CUSIP from get_issuer_outstanding_bonds.
| Name | Required | Description | Default |
|---|---|---|---|
| cusip | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the response behavior for invalid/outstanding CUSIPs, but without annotations, more details on authentication, rate limits, or format errors would improve transparency. The current disclosure is adequate but basic.
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?
Two sentences, no filler, essential information front-loaded. Every sentence serves a purpose: stating the action, listing fields, and providing usage guidance.
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 single-parameter tool with no output schema, the description covers input constraints, response behavior for edge cases, and references a sibling tool. It is mostly complete, though more details on the response structure would help.
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?
The schema provides no description for cusip (0% coverage). The description compensates by specifying it must be a 9-digit CUSIP and implying it should be outstanding, adding crucial context beyond the schema's type-only constraint.
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 pulls specific security-level fields (issuer, coupon, maturity, dated date, par) for a 9-digit CUSIP. It distinguishes from sibling tools like get_issuer_outstanding_bonds by noting when to use that alternative.
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 tells when not to use (redeemed/matured/pre-refunded CUSIPs) and directs to the alternative get_issuer_outstanding_bonds for currently-outstanding CUSIPs. This provides clear decision guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_issuers_by_stateA
List municipal issuers for a state (all 9k+ rows, not just page 1) and filter by name. Feed the issuer_id into get_issuer_outstanding_bonds or get_issuer_profile to drill down. IMPORTANT: the contains filter auto-expands your query into every EMMA abbreviation variant (hospital→HOSP, authority→AUTH, children→CHLDN, senior→SR, community→CMNTY, etc.) — always search in natural English, never in the telegraphic form. For hospital/senior-living/charter-school obligors, search the CONDUIT, not the obligor: e.g. CHLA bonds are filed under CALIFORNIA PUB FIN AUTH HEALTH CARE FACS REV — found by searching contains="health care facilities". See the emma://rules/EMMA_ABBREVIATIONS.md resource for the full variant map and conduit cheat sheet.
| Name | Required | Description | Default |
|---|---|---|---|
| state | Yes | 2-letter state code | |
| contains | No | Case-insensitive name filter | |
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals important traits: the tool returns all rows (not paginated), the contains filter auto-expands to abbreviation variants, and conduit search rules. It is transparent about these behaviors.
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 relatively long but well-structured. It front-loads the main purpose, then provides usage guidance, warnings, and examples. Every sentence adds value, though it could be slightly more concise without losing critical details.
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 the complexity (3 params, no output schema, no annotations), the description covers the tool's purpose, parameter behavior, usage context, and links to downstream tools. It lacks explicit mention of the output format, but the sibling tools and the purpose imply the issuer_id and other fields.
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?
The schema coverage is 67% (state and contains described, limit not), but the description adds substantial value beyond the schema. It explains how the contains filter works (auto-expansion, natural English requirement) and gives conduit examples, which is critical context that the schema alone does not provide.
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 function: 'List municipal issuers for a state' and differentiates it from siblings by noting that results include all rows (not just page 1) and that the output can be fed into get_issuer_outstanding_bonds or get_issuer_profile.
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 on when to use this tool (to list issuers for a state and filter by name) and when not to use it (for hospital/senior-living/charter-school obligors, search the conduit instead). It also gives detailed examples and references an external resource for abbreviation variants.
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.
18 tool updates
v0.1.0- First observed
classify_sector - First observed
download_official_statement - First observed
emma_quick_search - First observed
extract_pdf_text - First observed
get_calendar_summary - First observed
get_issue_details - First observed
get_issuer_outstanding_bonds - First observed
get_issuer_profile - First observed
get_market_pulse - First observed
get_new_issue_calendar - First observed
get_official_statement_pdf - First observed
get_recent_annual_reports - First observed
get_recent_continuing_disclosures - First observed
get_recent_official_statements - First observed
get_recent_preliminary_statements - First observed
get_recent_sales - First observed
get_security_details - First observed
search_issuers_by_state
TDQS
Scored across 18 tools
Each tool has a distinct purpose with detailed descriptions. For example, 'download_official_statement' vs 'get_official_statement_pdf' vs 'extract_pdf_text' are clearly separated. No two tools overlap in functionality; agents can unambiguously choose the right tool.
Names follow a consistent verb_noun pattern (e.g., 'classify_sector', 'download_official_statement', 'get_calendar_summary'). While not all use the same verb (mix of 'get_', 'search_', 'extract_'), the structure is uniform and clear, earning a 4 for minor deviation from a single prefix.
With 18 tools, the server covers a wide range of municipal bond data operations without being excessive. Each tool addresses a specific need, from searching issuers to extracting PDF text, making the count well-scoped for the domain.
The tool surface is comprehensive, covering search, issuer details, calendar, documents, and market data. Minor gaps exist, such as lack of historical trade analytics or advanced filtering, but core workflows are fully supported.
Related MCP Connectors
MCP server giving Claude AI access to 22+ NYC public-record databases for real estate due diligence
The Octagon MCP server provides specialized AI-powered financial research and analysis by integrating with the Octagon Market Intelligence API. It enables users to analyze public market data (SEC filings, earnings transcripts, financial metrics, and stock data for 8000+ companies), private market data (3M+ companies, 500k+ funding rounds, 2M+ M&A/IPO transactions), and conduct deep research including web scraping capabilities. The server also features autonomous research agents that search hundreds of sources and return fully cited reports in approximately one minute.
Hosted MCP server for live public-data APIs and Skills for AI agents.
75 MCP tools: SEC financials, FRED economics, IRS 990, FDA, FX, UK Companies House.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for the BoondManager API, enabling Claude to search, create, and modify records across 36 domains with 158 tools.238197 npm21Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn enhanced MCP server providing comprehensive financial market data endpoints for quantitative trading analysis, including SEC filings, FINRA short volume, earnings, news, and Google Trends. It features meta-tools that consolidate multiple data sources into single efficient calls, optimizing for AI agents with iteration budgets.30 PyPI8MIT

city-data-mcpofficial
AlicenseAqualityDmaintenanceAn MCP server that gives Claude deep access to US public data -- demographics, economics, crime, employment, weather, housing, transit, schools, budgets, and more across 30+ cities for government intelligence workflows.28MIT- FlicenseNot gradedqualityDmaintenanceA production-grade MCP server enabling Claude to perform comprehensive NJ real estate workflows including property search, valuation, neighborhood intelligence, investment analysis, and agent tools via 20 tools and 15+ data sources.-