Skip to main content
Glama

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.mdWhy 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)

claude.ai/download

Python 3.10+

Runtime for the server

Mac: python3 --version · Win: python --version

uv

Python package manager (handles the venv automatically)

uv --version

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)

  1. Open Claude Desktop → SettingsDeveloperEdit Config. That opens claude_desktop_config.json.

  2. Add an emma entry inside the mcpServers object. Use the absolute path to the .venv/bin/python that uv sync just created and the absolute path to server.py:

{
  "mcpServers": {
    "emma": {
      "command": "/Users/YOURNAME/emma-mcp/.venv/bin/python",
      "args": ["/Users/YOURNAME/emma-mcp/server.py"]
    }
  }
}
  1. Save, fully quit Claude Desktop (Cmd+Q, not just close the window), and reopen it.

  2. 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)

  1. Open %APPDATA%\Claude\claude_desktop_config.json in a text editor. (Paste that path into the Explorer address bar — Windows resolves %APPDATA% to C:\Users\YOU\AppData\Roaming.)

  2. 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"]
    }
  }
}
  1. Save, fully quit Claude Desktop (right-click tray icon → Quit), reopen.

  2. 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_PROXY and HTTP_PROXY before 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 — check https://emma.msrb.org in 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_statement then extract_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 in USAGE.mdThe conduit cheat sheet.

Server starts but Claude says "no tools available."

  • You likely edited server.py and there's a Python syntax error. Run uv run python server.py in a terminal — any error prints to stderr. Fix and restart Claude Desktop.


What's in this folder

File / folder

What it is

server.py

The MCP server itself — ~1,500 lines, Python, Playwright. 18 tools, 2 resources.

CLAUDE.md

Blaylock compliance rules. Loaded into every EMMA session as MCP resource emma://rules/CLAUDE.md.

EMMA_ABBREVIATIONS.md

EMMA's telegraphic issuer-name abbreviations (HOSP, AUTH, SR, CMNTY, etc.) + conduit cheat sheet. Loaded as resource emma://rules/EMMA_ABBREVIATIONS.md.

README.md

This file.

USAGE.md

Extensive reference: the 18 tools, the canonical workflow chain, sample banker prompts, caveats.

pyproject.toml, uv.lock

Python dependency manifest.

_demo_pulse.py

One-shot driver used during slide preparation — calls the MCP directly so we could screenshot outputs. Not needed to run the server.

_fetch_os_pdfs.py

Companion script that batch-downloaded OS PDFs for the capstone's Tier 2 (Cowork) demo. Not needed to run the server.

os_pdfs/

Sample Official Statements downloaded via the MCP during testing. Keep or delete — the folder auto-recreates on first download_official_statement call.


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 tools
classify_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
descriptionYes

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesEither a direct .pdf URL or an IssueView/Details/P##### URL
filenameNoOptional filename (without extension)

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesAbsolute path to the saved PDF
pagesNoPage range like '1-20' or '45,46,47' (optional — default: all)
max_charsNoCap on returned characters to protect context

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.'

ParametersJSON Schema
NameRequiredDescriptionDefault
group_byNostate
top_nNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_urlYesEMMA IssueView URL (https://emma.msrb.org/IssueView/Details/P#####)

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
issuer_idNoEMMA issuer GUID (from search_issuers_by_state)
issuer_urlNoAny EMMA issuer URL (from emma_quick_search; can be a QuickSearch/Navigate redirect)
limitNo

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
issuer_idNoEMMA issuer GUID
issuer_urlNoAny EMMA issuer URL (from emma_quick_search)

TDQS

A3.9/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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?'

ParametersJSON Schema
NameRequiredDescriptionDefault
stateNo2-letter state code
sectorNoSector 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_statusNo'Tax Exempt', 'Taxable', 'AMT', or 'Subject to AMT'
bank_qualifiedNo
sale_methodNoall
description_containsNoFree-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_principalNo
max_principalNo
limitNo
offsetNo

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
issue_urlYesEMMA IssueView URL (https://emma.msrb.org/IssueView/Details/P#####)

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
issuer_containsNo

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
disclosure_containsNoFilter disclosure description (auto-expanded for EMMA abbreviations)
issuer_containsNoFilter issuer name (auto-expanded for EMMA abbreviations)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.9/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
issuer_containsNoFilter issuer (auto-expanded for abbreviations)

TDQS

A3.5/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
cusipYes

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
stateYes2-letter state code
containsNoCase-insensitive name filter
limitNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

  1. 18 tool updatesv0.1.0
    • First observedclassify_sector
    • First observeddownload_official_statement
    • First observedemma_quick_search
    • First observedextract_pdf_text
    • First observedget_calendar_summary
    • First observedget_issue_details
    • First observedget_issuer_outstanding_bonds
    • First observedget_issuer_profile
    • First observedget_market_pulse
    • First observedget_new_issue_calendar
    • First observedget_official_statement_pdf
    • First observedget_recent_annual_reports
    • First observedget_recent_continuing_disclosures
    • First observedget_recent_official_statements
    • First observedget_recent_preliminary_statements
    • First observedget_recent_sales
    • First observedget_security_details
    • First observedsearch_issuers_by_state

TDQS

A3.9/5.0

Scored across 18 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    8
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    A 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

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