Skip to main content
Glama
SudiptoHaldar

SEC EDGAR MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_EDGAR_PAGE_CAPNoLargest page list_filings_by_year and list_form_types return; must be an integer between 1 and 1000.100
MCP_EDGAR_LOG_LEVELNoLog level; accepted values are DEBUG, INFO, WARNING, ERROR, CRITICAL.INFO
MCP_EDGAR_USER_AGENTNoSEC fair-access identification with a maintainer contact; must be non-empty and contain '@'. Set your own product name and e-mail.mcp-server-edgar/<version> (sudiptokanti@yahoo.com)
MCP_EDGAR_TIMEOUT_SECONDSNoHTTP timeout for SEC requests; must be a number greater than 0.30
MCP_EDGAR_TICKER_MAP_TTL_SECONDSNoCache lifetime of the SEC ticker map; must be an integer greater than or equal to 0. 0 means no cache.86400
MCP_EDGAR_MAX_REQUESTS_PER_SECONDNoRequest ceiling; the SEC allows at most 10 requests per second and the server cannot be set higher. Must be an integer between 1 and 10.10
MCP_EDGAR_SUBMISSIONS_TTL_SECONDSNoCache lifetime of a company's submissions; must be an integer greater than or equal to 0.3600

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_latest_filingA

Newest SEC filing for a stock ticker, with official EDGAR links.

Resolves the ticker to its SEC CIK and returns the filing with the latest filing_date (the date the SEC received it). forms restricts the search to exact form types, case-insensitive: ["10-K"] matches 10-K but not 10-K/A; omit it to consider every form. report_date (the period the filing covers) is returned as context only, so a 10-K filed in January 2026 for the fiscal year ending September 2025 has a 2026 filing_date.

Args: ticker: Stock ticker symbol, e.g. "AAPL". Case and surrounding whitespace are ignored; BRK.B and BRK-B are equivalent. forms: Optional list of SEC form types, e.g. ["10-K", "10-Q"]. cik: Optional SEC CIK (1-10 digits, string or integer) to pick one issuer when a previous call returned "ambiguous"; it must be listed under ticker.

Returns: A JSON object whose status is one of: - "ok": company {cik, name, ticker, exchange}, forms (normalised list or null), filing {form, filing_date, report_date, accession_number, filing_url, primary_document_url} or null when the company has no filing of those forms; filing_url (the filing index page) is always present, primary_document_url may be null. - "not_found": no SEC issuer is listed under ticker. - "ambiguous": several issuers share the ticker; candidates lists them (cik, name, ticker, exchange) and none is chosen; call again with the chosen cik. - "invalid_input": field names the rejected argument (ticker, forms or cik). - "upstream_error": SEC EDGAR did not answer; retryable tells whether a retry may help and retry_after_seconds when (may be null). Every object carries a one-line message.

Example: get_latest_filing("AAPL", ["10-K"]) returns Apple's most recent annual report.

list_filings_by_yearA

Filings a company submitted to the SEC during one calendar year, newest first, paged.

year selects filings by filing_date, the date the SEC received the filing, not by report_date (the period the filing covers): a 10-K for the fiscal year ending September 2025 that was filed in January 2026 belongs to year=2026. forms restricts the list to exact form types, case-insensitive (["10-K"] matches 10-K but not 10-K/A). Older years are served from the SEC's history files automatically.

Args: ticker: Stock ticker symbol, e.g. "AAPL"; case and surrounding whitespace are ignored. year: Calendar year of the filing date, 1993 or later; a future year returns an empty list. forms: Optional list of SEC form types, e.g. ["10-K", "10-Q"]; omit it for every form. limit: Page size (default 100); larger values are clamped to the server's cap. offset: Filings to skip, for paging; pass the previous result's next_offset. cik: Optional SEC CIK (1-10 digits, string or integer) to pick one issuer when a previous call returned "ambiguous"; it must be listed under ticker.

Returns: A JSON object whose status is one of: - "ok": company {cik, name, ticker, exchange}, year, forms, limit (the effective page size), offset, total_count, returned_count, next_offset (null on the last page), filings (newest first; each has form, filing_date, report_date, accession_number, filing_url, primary_document_url). An empty year is "ok" with total_count 0. - "not_found": no SEC issuer is listed under ticker. - "ambiguous": several issuers share the ticker; candidates lists them; call again with the chosen cik. - "invalid_input": field names the rejected argument (ticker, year, forms, limit, offset or cik). - "upstream_error": SEC EDGAR did not answer; retryable says whether to retry. Every object carries a one-line message. Page with offset=next_offset until null.

Example: list_filings_by_year("AAPL", 2025, ["10-K", "10-Q"]) lists Apple's 2025 reports.

list_form_typesA

EDGAR form types (submission-type codes) filed in recent quarters, most common first.

Use this to learn which values the forms argument of get_latest_filing and list_filings_by_year accepts: form is exactly the code EDGAR uses (10-K, 10-K/A, SCHEDULE 13G/A, 424B2, NPORT-P). The list is a snapshot bundled with the server (see catalogue.generated_on and catalogue.quarters); filings counts filings of that type over those quarters; description and topics come from the SEC Forms List when the form number is known, otherwise null. Amendments end with /A. No request is made to the SEC.

Args: query: Optional case-insensitive text matched against the code and description ("10-K" lists 10-K, 10-K/A, 10-KT, ...; "/A" lists amendments). limit: Maximum entries per page (default 100; clamped to the server's cap). offset: Entries to skip, for paging; pass the previous result's next_offset.

Returns: A JSON object whose status is one of: - "ok": query, limit, offset, total_count, returned_count, next_offset (null on the last page), catalogue {generated_on, quarters, sources}, form_types (each: form, description, amendment, filings, topics). - "invalid_input": field names the rejected argument (query, limit or offset). Every object carries a one-line message.

Example: list_form_types("13G") lists the Schedule 13G submission types and their counts.

Prompts

Interactive templates invoked by user choice

NameDescription
review_latest_filingGuide a review of a company's latest SEC filing (by ticker) using get_latest_filing.
review_filings_by_yearGuide a review of a company's SEC filings in a calendar year via list_filings_by_year.
explain_form_typesExplain EDGAR form types, optionally those matching a query, using list_form_types.

Resources

Contextual data attached and managed by the client

NameDescription
form_types_catalogueEvery EDGAR submission-type code filed in recent quarters, with counts (snapshot).

TDQS

A4.6/5.0

Scored across 3 tools

Disambiguation4/5

The three tools target distinct operations: newest filing, per-year paged listing, and a form-type reference catalogue. There is mild overlap in that a 'latest filing' could be approximated by a year listing with limit=1, but the descriptions make the boundaries (single newest vs. paged by calendar year vs. metadata lookup) clear enough that misselection is unlikely.

Naming Consistency5/5

All three names follow a consistent snake_case verb_object pattern (get_latest_filing, list_filings_by_year, list_form_types). The prepositional qualifier in list_filings_by_year is a parameter hint rather than a convention break, and the resource nouns are coherent.

Tool Count4/5

Three tools is on the lean side, but the domain (filing discovery) is narrow and each tool earns its place: latest filing, historical listing, and form-type validation. It sits at the low end of the healthy 3-15 range rather than being padded or trivial.

Completeness3/5

Coverage of filing discovery is good and uniform (status/error/ambiguity handling is consistent across calls), but there are notable gaps: no company lookup by name, no date-range query beyond a single calendar year, and no way to retrieve filing document content (only URLs). Agents must leave the server to read a filing, which is a real dead end for many workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues