EMMA MCP
EMMA MCP — Agente personalizado de finanzas municipales para Blaylock Van
NYU Stern Consulting Capstone · Primavera 2026 · Marco Figueroa, Justin Ganjian, Andrew Kay, Isaac Mizrahi, Roshan Raja · Profesor Marciano
Qué es esto
Un servidor MCP (Model Context Protocol) personalizado que permite a Claude leer el mercado de nuevas emisiones de bonos municipales directamente desde el sitio web EMMA de la MSRB. Este es el ejemplo de Nivel 4 en nuestra escala de proyectos capstone: un conector propiedad de la firma para una fuente de datos que ningún proveedor cubre.
EMMA —el sitio de Acceso Electrónico al Mercado Municipal operado por la Junta de Reglamentación de Valores Municipales (MSRB)— es el registro público oficial de cada bono municipal vendido en los Estados Unidos. Calendarios de nuevas emisiones, Declaraciones Oficiales, detalles a nivel de CUSIP, precios de operaciones recientes: todo está en EMMA. No tiene una API pública.
Este MCP expone 18 herramientas y 2 recursos (un archivo de reglas CLAUDE.md y un glosario EMMA_ABBREVIATIONS.md) que Claude carga automáticamente al conectarse. Una vez instalado, un banquero puede hacerle a Claude preguntas en lenguaje natural como "extrae todos los bonos pendientes de Rady Children's Hospital y descarga la OS más reciente" y Claude ejecuta la cadena completa —búsqueda → consulta de emisor → detalles de emisión → descarga de PDF → extracción de texto— en unos 20 segundos.
Para ver la presentación completa y por qué es importante para Blaylock, consulta USAGE.md → Why this exists.
Related MCP server: IsoFinancial-MCP
Requisitos previos
Necesitas cuatro cosas en tu portátil. Si falta alguna, las instrucciones de instalación a continuación lo cubren.
Requisito | Qué es | Verificación de instalación |
Claude Desktop | Cliente nativo de Anthropic para macOS/Windows (el host MCP) | |
Python 3.10+ | Entorno de ejecución para el servidor | Mac: |
uv | Gestor de paquetes de Python (maneja el venv automáticamente) |
|
Playwright Chromium | Navegador sin interfaz que el servidor usa para manejar EMMA | Instalado con un comando a continuación |
Instalación — 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.Conéctalo a Claude Desktop (Mac)
Abre Claude Desktop → Settings → Developer → Edit Config. Eso abrirá
claude_desktop_config.json.Añade una entrada
emmadentro del objetomcpServers. Usa la ruta absoluta al.venv/bin/pythonqueuv syncacaba de crear y la ruta absoluta aserver.py:
{
"mcpServers": {
"emma": {
"command": "/Users/YOURNAME/emma-mcp/.venv/bin/python",
"args": ["/Users/YOURNAME/emma-mcp/server.py"]
}
}
}Guarda, cierra completamente Claude Desktop (
Cmd+Q, no solo cierres la ventana) y vuelve a abrirlo.En un chat nuevo, el icono del martillo en el compositor debería listar las herramientas de EMMA. Esa es la señal.
Instalación — 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.Conéctalo a Claude Desktop (Windows)
Abre
%APPDATA%\Claude\claude_desktop_config.jsonen un editor de texto. (Pega esa ruta en la barra de direcciones del Explorador; Windows resuelve%APPDATA%aC:\Users\TU_USUARIO\AppData\Roaming.)Usa barras inclinadas hacia adelante o barras invertidas dobles en las rutas JSON; las barras invertidas simples de Windows rompen el JSON:
{
"mcpServers": {
"emma": {
"command": "C:/emma-mcp/.venv/Scripts/python.exe",
"args": ["C:/emma-mcp/server.py"]
}
}
}Guarda, cierra completamente Claude Desktop (clic derecho en el icono de la bandeja → Quit), vuelve a abrirlo.
Comprueba el icono del martillo en el compositor para ver las herramientas de EMMA.
Primera instrucción — la verificación de 60 segundos
Abre un nuevo chat de Claude Desktop y pega:
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.
Deberías ver a Claude llamar a get_new_issue_calendar con state="NY", obtener unas 10-25 filas en pocos segundos y formatearlas como una tabla con URLs de EMMA. Si eso funciona, todas las demás herramientas funcionan de la misma manera.
Para una demostración más impresionante, prueba:
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.
Eso ejecuta la cadena completa de cinco herramientas de principio a fin en unos 20 segundos.
Más ejemplos de instrucciones en USAGE.md.
Solución de problemas
Claude Desktop no muestra las herramientas de EMMA después de reiniciar.
Confirma que el JSON es válido (
python3 -m json.tool < claude_desktop_config.json— sin salida = correcto).Confirma que ambas rutas en la configuración son absolutas y existen. Las rutas relativas y
~no funcionan.Cierra completamente Claude Desktop (
Cmd+Q/ Quit en la bandeja) — cerrar la ventana lo mantiene ejecutándose.Revisa los registros MCP de Claude Desktop en
~/Library/Logs/Claude/mcp*.log(Mac) o%APPDATA%\Claude\logs\mcp*.log(Windows) para ver un error específico.
playwright install chromium se bloquea o falla.
La primera instalación descarga ~150 MB y tarda 1-2 minutos en una conexión doméstica. Sé paciente.
Detrás de un proxy corporativo, configura
HTTPS_PROXYyHTTP_PROXYantes de ejecutarlo.
Claude llama a una herramienta y devuelve "EMMA disclaimer loop" o se agota el tiempo de espera.
EMMA establece una cookie de exención de responsabilidad de CUSIP en la primera visita. El servidor la pre-configura (
Disclaimer6=msrborg) pero muy raramente EMMA cambia el nombre de la cookie. Reinicia Claude Desktop para restablecer el contexto del navegador. Si persiste, es posible que EMMA esté caído — compruebahttps://emma.msrb.orgen un navegador normal.
Una tabla devuelta muestra cusip_hash: ABC123… en lugar de un CUSIP de 9 dígitos.
Esto es intencional, no un error. EMMA renderiza los CUSIPs como etiquetas de imagen (regla de licencia CGS), por lo que el servidor no puede leerlos del HTML. El PDF de la Declaración Oficial es la fuente autorizada del CUSIP. Usa
download_official_statementy luegoextract_pdf_text— la portada y la contraportada contienen los CUSIPs reales.
La búsqueda de "Rady Children's" encuentra hospitales infantiles en Franklin OH y Pittsburgh PA pero no Rady.
Esta es una peculiaridad conocida de EMMA, no un error del servidor. Los bonos de Rady se archivan bajo un conducto de California (CHFFA / CPFA) con "RADY CHILDRENS" solo en la parte del obligado entre paréntesis, que la búsqueda rápida de EMMA indexa pero débilmente. Prueba
emma_quick_search {query: "rady"}o busca el conducto directamente:search_issuers_by_state {state: "CA", contains: "health care facilities"}. Guía completa de búsqueda de obligados enUSAGE.md→ The conduit cheat sheet.
El servidor se inicia pero Claude dice "no tools available".
Probablemente editaste
server.pyy hay un error de sintaxis de Python. Ejecutauv run python server.pyen una terminal — cualquier error se imprimirá en stderr. Corrige y reinicia Claude Desktop.
Qué hay en esta carpeta
Archivo / carpeta | Qué es |
| El servidor MCP en sí — ~1,500 líneas, Python, Playwright. 18 herramientas, 2 recursos. |
| Reglas de cumplimiento de Blaylock. Cargado en cada sesión de EMMA como recurso MCP |
| Abreviaturas telegráficas de nombres de emisores de EMMA (HOSP, AUTH, SR, CMNTY, etc.) + hoja de trucos de conductos. Cargado como recurso |
| Este archivo. |
| Referencia extensa: las 18 herramientas, la cadena de flujo de trabajo canónica, ejemplos de instrucciones para banqueros, advertencias. |
| Manifiesto de dependencias de Python. |
| Controlador de un solo uso utilizado durante la preparación de diapositivas — llama al MCP directamente para poder capturar las salidas. No es necesario para ejecutar el servidor. |
| Script complementario que descargó por lotes PDFs de OS para la demostración de Nivel 2 (Cowork) del capstone. No es necesario para ejecutar el servidor. |
| Declaraciones Oficiales de muestra descargadas a través del MCP durante las pruebas. Consérvalas o elimínalas — la carpeta se recrea automáticamente en la primera llamada a |
La versión de una línea
Construimos el EMMA MCP que ningún proveedor ofrece, lo conectamos a Claude mediante el mismo protocolo que cualquier conector de mercado y lo gobernamos con un archivo de reglas en markdown simple que un banquero puede leer y editar. Así es como se ve el Nivel 4 cuando una firma realmente posee su propia herramienta.
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.
Maintenance
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.238599 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.-