EMMA MCP
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@EMMA MCPshow me California's upcoming municipal bond issues for next month"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
EMMA MCP — Custom Muni-Finance Agent for Blaylock Van
NYU Stern Consulting Capstone · Spring 2026 · Marco Figueroa, Justin Ganjian, Andrew Kay, Isaac Mizrahi, Roshan Raja · Professor Marciano
What this is
A custom MCP (Model Context Protocol) server that lets Claude read the muni-bond new-issue market directly from the MSRB's EMMA website. This is the Tier-4 example on our capstone tier ladder — a firm-owned connector to a data source that no vendor covers.
EMMA — the Electronic Municipal Market Access site operated by the Municipal Securities Rulemaking Board — is the official public book of record for every muni bond sold in the United States. New-issue calendars, Official Statements, CUSIP-level details, recent trade prices: all on EMMA. It has no public API.
This MCP exposes 18 tools and 2 resources (a CLAUDE.md rules file and an EMMA_ABBREVIATIONS.md glossary) that Claude auto-loads on connect. Once installed, a banker can ask Claude natural-language questions like "pull every outstanding Rady Children's Hospital bond and download the most recent OS" and Claude executes the full chain — search → issuer lookup → issue details → PDF download → text extraction — in about 20 seconds.
For the full pitch and why it matters to Blaylock, see USAGE.md → Why this exists.
Related MCP server: IsoFinancial-MCP
Prerequisites
You need four things on your laptop. If any are missing, the install instructions below cover it.
Requirement | What it is | Install check |
Claude Desktop | Anthropic's native macOS/Windows client (the MCP host) | |
Python 3.10+ | Runtime for the server | Mac: |
uv | Python package manager (handles the venv automatically) |
|
Playwright Chromium | Headless browser the server drives EMMA with | Installed by one command below |
Install — 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.Wire it into Claude Desktop (Mac)
Open Claude Desktop → Settings → Developer → Edit Config. That opens
claude_desktop_config.json.Add an
emmaentry inside themcpServersobject. Use the absolute path to the.venv/bin/pythonthatuv syncjust created and the absolute path toserver.py:
{
"mcpServers": {
"emma": {
"command": "/Users/YOURNAME/emma-mcp/.venv/bin/python",
"args": ["/Users/YOURNAME/emma-mcp/server.py"]
}
}
}Save, fully quit Claude Desktop (
Cmd+Q, not just close the window), and reopen it.In a new chat, the hammer icon in the composer should now list EMMA tools. That's the tell.
Install — 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.Wire it into Claude Desktop (Windows)
Open
%APPDATA%\Claude\claude_desktop_config.jsonin a text editor. (Paste that path into the Explorer address bar — Windows resolves%APPDATA%toC:\Users\YOU\AppData\Roaming.)Use forward slashes or double backslashes in the JSON paths — Windows single backslashes break JSON:
{
"mcpServers": {
"emma": {
"command": "C:/emma-mcp/.venv/Scripts/python.exe",
"args": ["C:/emma-mcp/server.py"]
}
}
}Save, fully quit Claude Desktop (right-click tray icon → Quit), reopen.
Check the hammer icon in the composer for EMMA tools.
First prompt — the 60-second verification
Open a new Claude Desktop chat and paste:
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.
You should see Claude call get_new_issue_calendar with state="NY", get ~10-25 rows back in a few seconds, and format them as a table with EMMA URLs. If that works, every other tool works the same way.
For a more impressive demo, try:
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.
That runs the full five-tool chain end-to-end in about 20 seconds.
More demo prompts in USAGE.md.
Troubleshooting
Claude Desktop doesn't show EMMA tools after restart.
Confirm the JSON is valid (
python3 -m json.tool < claude_desktop_config.json— no output = good).Confirm both paths in the config are absolute and exist. Relative paths and
~do not work.Fully quit Claude Desktop (
Cmd+Q/ tray Quit) — closing the window keeps it running.Check Claude Desktop's MCP logs at
~/Library/Logs/Claude/mcp*.log(Mac) or%APPDATA%\Claude\logs\mcp*.log(Windows) for a specific error.
playwright install chromium hangs or fails.
First-time install downloads ~150 MB and takes 1-2 min on a home connection. Be patient.
Behind a corporate proxy, set
HTTPS_PROXYandHTTP_PROXYbefore running.
Claude calls a tool and it returns "EMMA disclaimer loop" or times out.
EMMA sets a CUSIP disclaimer cookie on first visit. The server pre-seeds it (
Disclaimer6=msrborg) but very rarely EMMA changes the cookie name. Restart Claude Desktop to reset the browser context. If it persists, EMMA may be down — checkhttps://emma.msrb.orgin a regular browser.
A returned table shows cusip_hash: ABC123… instead of a 9-digit CUSIP.
This is intentional, not a bug. EMMA renders CUSIPs as image tags (CGS licensing rule), so the server cannot read them off HTML. The Official Statement PDF is the authoritative CUSIP source. Use
download_official_statementthenextract_pdf_text— the cover and inside-cover carry the real CUSIPs.
"Rady Children's" search finds Franklin OH and Pittsburgh PA children's hospitals but not Rady.
This is a known EMMA quirk, not a server bug. Rady's bonds file under a California conduit (CHFFA / CPFA) with "RADY CHILDRENS" only in the obligor-in-parens portion, which EMMA's QuickSearch does index but weakly. Try
emma_quick_search {query: "rady"}or search the conduit directly:search_issuers_by_state {state: "CA", contains: "health care facilities"}. Full obligor lookup playbook inUSAGE.md→ The conduit cheat sheet.
Server starts but Claude says "no tools available."
You likely edited
server.pyand there's a Python syntax error. Runuv run python server.pyin a terminal — any error prints to stderr. Fix and restart Claude Desktop.
What's in this folder
File / folder | What it is |
| The MCP server itself — ~1,500 lines, Python, Playwright. 18 tools, 2 resources. |
| Blaylock compliance rules. Loaded into every EMMA session as MCP resource |
| EMMA's telegraphic issuer-name abbreviations (HOSP, AUTH, SR, CMNTY, etc.) + conduit cheat sheet. Loaded as resource |
| This file. |
| Extensive reference: the 18 tools, the canonical workflow chain, sample banker prompts, caveats. |
| Python dependency manifest. |
| One-shot driver used during slide preparation — calls the MCP directly so we could screenshot outputs. Not needed to run the server. |
| Companion script that batch-downloaded OS PDFs for the capstone's Tier 2 (Cowork) demo. Not needed to run the server. |
| Sample Official Statements downloaded via the MCP during testing. Keep or delete — the folder auto-recreates on first |
The one-line version
We built the EMMA MCP that no vendor ships, wired it into Claude via the same protocol as every marketplace connector, and governed it with a plain-markdown rules file a banker can read and edit. That is what Tier 4 looks like when a firm actually owns its own tool.
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. Dates show when Glama detected each change.
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
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
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.
- UnifAPIOAuthcom.unifapi
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
- AlicenseBqualityAmaintenanceMCP server for the BoondManager API, enabling Claude to search, create, and modify records across 36 domains with 158 tools.218215019Apache 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.8MIT

city-data-mcpofficial
FlicenseNot gradedqualityCmaintenanceAn 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.-- FlicenseNot gradedqualityCmaintenanceA 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.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ark9164-create/blaylock-emma-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server