Skip to main content
Glama

Secedgar Company Search

secedgar_company_search
Read-onlyIdempotent

Find companies and retrieve entity info with optional recent filings. Entry point for most EDGAR workflows — resolves tickers, names, or CIKs to entity details, with accession numbers in the result feeding secedgar_get_filing for document content. When a date or form filter carries the scan past the recent submissions window, the full filtered filing history is also staged as df_ — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.

Input Schema

NameRequiredDescriptionDefault
formsNoFilter filings to specific form types (e.g., ["10-K", "10-Q", "8-K"]), matched exactly (case-insensitive) — list an amendment such as "10-K/A" to include it. Without this, returns all form types.
queryYesCompany ticker symbol (e.g., "AAPL", "VOO"), name (e.g., "Apple"), or CIK number (e.g., "320193"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds; a multi-class share ticker resolves in either form ("BRK-B" or "BRK.B"). Name search matches current and former names, preferring a name the query matches exactly over one it only starts or appears in. The corporate suffix (Inc, Corp, Co, Ltd, PLC, LLC, LP, N.V., S.A., AG, SE) can be left off ("Apple" finds "Apple Inc."; "Rio Tinto" lists both the Ltd and the PLC) or spelled out ("Beacon Financial Corporation" finds "Beacon Financial Corp"), but a suffix you include must match — Corp, Inc, Co, and Ltd stay distinct from each other, since separate registrants differ only by which one they use.
filed_afterNoOnly include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches filings that predate the recent window — the last year or 1,000 filings, whichever holds more (e.g. a company's 2005 10-K).
filed_beforeNoOnly include filings filed on or before this date (YYYY-MM-DD). Use alone or with filed_after; together they bound the archive-page scan.
filing_limitNoMaximum number of filings to return in the inline list; when more match, the notice names where the rest are. Capped at 50: a larger value, up to 1000, returns what 50 returns.
include_filingsNoInclude recent filings in the response. Set to false for entity-info-only lookups.

Output Schema

NameRequiredDescriptionDefault
capNoThe inline limit applied: `filing_limit`, at most 50.
cikNoCentral Index Key, zero-padded to 10 digits.
sicNoSIC industry code.
nameNoSEC-conformed company name.
errorNoPresent when the call failed. Absent on success.
shownNoNumber of filings returned inline.
noticeNoGuidance when no filings matched the forms filter, or when the inline list withheld some — naming the dataframe, a larger filing_limit, or a secedgar_search_filings call to page through the rest.
datasetNoDataframe of the full filtered history (recent window plus archive pages), staged only when the scan went past the recent window and the history exceeds the inline list (filing_limit, at most 50).
filingsNoRecent filings, filtered by forms if specified.
tickersNoAssociated ticker symbols.
class_idNoSEC fund class ID (e.g. "C000092055"), present alongside series_id.
exchangesNoExchanges where listed.
series_idNoSEC fund series ID (e.g. "S000002839"), when the query resolved via a fund ticker (ETF or mutual fund).
truncatedNoTrue when more filings matched than the inline list holds.
total_filingsNoFilings matching the filter across everything scanned; can exceed the inline list.
fiscal_year_endNoFiscal year end (MM-DD, e.g. "09-26"). Absent when SEC records none (e.g., private or pre-IPO entities).
sic_descriptionNoHuman-readable SIC description.
state_of_incorporationNoState of incorporation (US two-letter code, e.g. "DE"). Absent for many foreign filers and individuals.
history_scanned_throughNoOldest filing date the scan reached (YYYY-MM-DD); nothing older was examined. Archive pages past the recent window (last year or 1,000 filings) are read only for a date filter or an under-filled form filter. Absent when nothing was scanned.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / filing_limit / description
      Previous value: -"Maximum number of filings to return in the inline list. The list holds at most 50; a larger value returns 50, and the notice names where the rest are."New value: +"Maximum number of filings to return in the inline list; when more match, the notice names where the rest are. Capped at 50: a larger value, up to 1000, returns what 50 returns."
  2. Changed1 schema field changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query. `multiple_matches`: Query is ambiguous and matches several companies. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. `sec_unreachable`: The last of three attempts to reach SEC EDGAR got no HTTP response — the connection failed, or no response headers arrived within 15 seconds. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query. `multiple_matches`: Query is ambiguous and matches several companies. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. `sec_unreachable`: SEC EDGAR gave no complete, readable response — on the last attempt made (the third, or an earlier one once this call's 40-second budget for SEC failures ran out) the connection failed, no response headers arrived within 15 seconds, or the body broke off or stalled for 15 seconds, each wait capped at what was left of that budget; a 200 body was not the JSON SEC serves; or earlier SEC failures had spent that budget, so the request was never sent. Other values are possible when a failure originates below the handler."
  3. Changed2 schema fields changed
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query. `multiple_matches`: Query is ambiguous and matches several companies. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query. `multiple_matches`: Query is ambiguous and matches several companies. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. `sec_unreachable`: The last of three attempts to reach SEC EDGAR got no HTTP response — the connection failed, or no response headers arrived within 15 seconds. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "no_match",
      -  "multiple_matches",
      -  "rate_limited"
      -]New value: +[
      +  "no_match",
      +  "multiple_matches",
      +  "rate_limited",
      +  "sec_unreachable"
      +]
  4. Changed7 schema fields changed
    • changedInput schema / properties / filing_limit / description
      Previous value: -"Maximum number of filings to return in the inline list."New value: +"Maximum number of filings to return in the inline list. The list holds at most 50; a larger value returns 50, and the notice names where the rest are."
    • changedInput schema / properties / filing_limit / maximum
      Previous value: -50New value: +1000
    • changedOutput schema / properties / cap / description
      Previous value: -"The `filing_limit` that was applied."New value: +"The inline limit applied: `filing_limit`, at most 50."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Dataframe of the full filtered history (recent window plus archive pages), staged only when the scan went past the recent window and the history exceeds filing_limit."New value: +"Dataframe of the full filtered history (recent window plus archive pages), staged only when the scan went past the recent window and the history exceeds the inline list (filing_limit, at most 50)."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no filings matched the forms filter, or when filing_limit withheld some."New value: +"Guidance when no filings matched the forms filter, or when the inline list withheld some — naming the dataframe, a larger filing_limit, or a secedgar_search_filings call to page through the rest."
    • changedOutput schema / properties / total_filings / description
      Previous value: -"Filings matching the filter across everything scanned; can exceed filing_limit."New value: +"Filings matching the filter across everything scanned; can exceed the inline list."
    • changedOutput schema / properties / truncated / description
      Previous value: -"True when more filings matched than `filing_limit` allowed into the inline list."New value: +"True when more filings matched than the inline list holds."
  5. Changed13 schema fields changed
    • changedInput schema / properties / query / description
      Previous value: -"Company ticker symbol (e.g., \"AAPL\", \"VOO\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds; a multi-class share ticker resolves in either form (\"BRK-B\" or \"BRK.B\"). Name search matches current and former names, and the corporate suffix does not have to match the registry's form (\"Beacon Financial Corporation\" finds \"Beacon Financial Corp\") — but Corp, Inc, Co, and Ltd stay distinct from each other, since separate registrants differ only by which one they use."New value: +"Company ticker symbol (e.g., \"AAPL\", \"VOO\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds; a multi-class share ticker resolves in either form (\"BRK-B\" or \"BRK.B\"). Name search matches current and former names, preferring a name the query matches exactly over one it only starts or appears in. The corporate suffix (Inc, Corp, Co, Ltd, PLC, LLC, LP, N.V., S.A., AG, SE) can be left off (\"Apple\" finds \"Apple Inc.\"; \"Rio Tinto\" lists both the Ltd and the PLC) or spelled out (\"Beacon Financial Corporation\" finds \"Beacon Financial Corp\"), but a suffix you include must match — Corp, Inc, Co, and Ltd stay distinct from each other, since separate registrants differ only by which one they use."
    • changedOutput schema / properties / class_id / description
      Previous value: -"SEC fund class ID (e.g. \"C000092055\"). Present when the query resolved via a fund ticker (ETF or mutual fund)."New value: +"SEC fund class ID (e.g. \"C000092055\"), present alongside series_id."
    • changedOutput schema / properties / dataset / description
      Previous value: -"Canvas dataframe holding the full filtered filing history (recent + archive pages), registered only when the scan reached beyond the recent window and the history exceeds filing_limit. Query the complete history — filings by form by year — with secedgar_dataframe_query; the inline `filings` list stays capped at filing_limit."New value: +"Dataframe of the full filtered history (recent window plus archive pages), staged only when the scan went past the recent window and the history exceeds filing_limit."
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) for secedgar_dataframe_describe, then secedgar_dataframe_query."
    • changedOutput schema / properties / dataset / properties / truncated / description
      Previous value: -"True when the archive scan hit its page cap before exhausting the manifest — older matching filings exist beyond the dataframe."New value: +"True when the archive scan hit its page cap, so older matching filings exist beyond the dataframe."
    • changedOutput schema / properties / filings / items / properties / accession_number / description
      Previous value: -"Filing accession number, dash format (e.g., 0000320193-23-000106). Pass to secedgar_get_filing."New value: +"Accession number, dash format (e.g., 0000320193-23-000106). Pass to secedgar_get_filing."
    • changedOutput schema / properties / filings / items / properties / report_date / description
      Previous value: -"Period of report (YYYY-MM-DD). Absent for filings without a reporting period (proxy statements, ownership reports)."New value: +"Period of report (YYYY-MM-DD). Absent for forms without one (proxy statements, ownership reports)."
    • changedOutput schema / properties / fiscal_year_end / description
      Previous value: -"Fiscal year end (MM-DD format, e.g., \"09-26\"). Absent for filers SEC records no fiscal year end for (e.g. private or pre-IPO entities)."New value: +"Fiscal year end (MM-DD, e.g. \"09-26\"). Absent when SEC records none (e.g., private or pre-IPO entities)."
    • changedOutput schema / properties / history_scanned_through / description
      Previous value: -"Oldest filing date reached by the scan (YYYY-MM-DD). Filings older than this were not examined: the recent window holds the last year or 1,000 filings, whichever is more, and older filings live in archive pages fetched only when a date filter or an under-filled form filter requires them. Absent when no filings were scanned."New value: +"Oldest filing date the scan reached (YYYY-MM-DD); nothing older was examined. Archive pages past the recent window (last year or 1,000 filings) are read only for a date filter or an under-filled form filter. Absent when nothing was scanned."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when include_filings=true but no filings matched the forms filter, or when filing_limit withheld some."New value: +"Guidance when no filings matched the forms filter, or when filing_limit withheld some."
    • changedOutput schema / properties / series_id / description
      Previous value: -"SEC fund series ID (e.g. \"S000002839\"). Present when the query resolved via a fund ticker (ETF or mutual fund)."New value: +"SEC fund series ID (e.g. \"S000002839\"), when the query resolved via a fund ticker (ETF or mutual fund)."
    • changedOutput schema / properties / state_of_incorporation / description
      Previous value: -"State of incorporation (US two-letter code, e.g. \"DE\"). Omitted for some entities, including many foreign filers and individuals."New value: +"State of incorporation (US two-letter code, e.g. \"DE\"). Absent for many foreign filers and individuals."
    • changedOutput schema / properties / total_filings / description
      Previous value: -"Total filings matching the filter across everything scanned (recent window + any archive pages), which may exceed filing_limit and the inline list."New value: +"Filings matching the filter across everything scanned; can exceed filing_limit."
  6. Changed2 schema fields changed
    • changedInput schema / properties / filed_after / description
      Previous value: -"Only include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches filings that predate the ~1000-filing recent window (e.g. a company's 2005 10-K)."New value: +"Only include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches filings that predate the recent window — the last year or 1,000 filings, whichever holds more (e.g. a company's 2005 10-K)."
    • changedOutput schema / properties / history_scanned_through / description
      Previous value: -"Oldest filing date reached by the scan (YYYY-MM-DD). Filings older than this were not examined: the recent window caps at ~1000 filings, and older filings live in archive pages fetched only when a date filter or an under-filled form filter requires them. Absent when no filings were scanned."New value: +"Oldest filing date reached by the scan (YYYY-MM-DD). Filings older than this were not examined: the recent window holds the last year or 1,000 filings, whichever is more, and older filings live in archive pages fetched only when a date filter or an under-filled form filter requires them. Absent when no filings were scanned."
  7. Changed6 schema fields changed
    • removedInput schema / properties / form_types
      Removed value: -{
      -  "description": "Filter filings to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]). Without this, returns all form types.",
      -  "items": {
      -    "type": "string"
      -  },
      -  "type": "array"
      -}
    • addedInput schema / properties / forms
      Added value: +{
      +  "description": "Filter filings to specific form types (e.g., [\"10-K\", \"10-Q\", \"8-K\"]), matched exactly (case-insensitive) — list an amendment such as \"10-K/A\" to include it. Without this, returns all form types.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query `multiple_matches`: Query is ambiguous and matches several companies Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query. `multiple_matches`: Query is ambiguous and matches several companies. `rate_limited`: SEC is rate-limiting this server's IP — SEC answered 429, or the call was refused without being sent while the cool-down after one runs. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "no_match",
      -  "multiple_matches"
      -]New value: +[
      +  "no_match",
      +  "multiple_matches",
      +  "rate_limited"
      +]
    • changedOutput schema / properties / filings / description
      Previous value: -"Recent filings, filtered by form_types if specified."New value: +"Recent filings, filtered by forms if specified."
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when include_filings=true but no filings matched the form_types filter, or when filing_limit withheld some."New value: +"Guidance when include_filings=true but no filings matched the forms filter, or when filing_limit withheld some."
  8. Changed1 schema field changed
    • changedOutput schema / properties / dataset / properties / name / description
      Previous value: -"Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query."New value: +"Dataframe handle (df_XXXXX_XXXXX) — inspect its columns with secedgar_dataframe_describe, then query it with secedgar_dataframe_query."
  9. Changed1 schema field changed
    • changedInput schema / properties / query / description
      Previous value: -"Company ticker symbol (e.g., \"AAPL\", \"VOO\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds. Name search matches current and former names."New value: +"Company ticker symbol (e.g., \"AAPL\", \"VOO\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds; a multi-class share ticker resolves in either form (\"BRK-B\" or \"BRK.B\"). Name search matches current and former names, and the corporate suffix does not have to match the registry's form (\"Beacon Financial Corporation\" finds \"Beacon Financial Corp\") — but Corp, Inc, Co, and Ltd stay distinct from each other, since separate registrants differ only by which one they use."
  10. Changed10 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • addedOutput schema / anyOf
      Added value: +[
      +  {
      +    "not": {
      +      "required": [
      +        "error"
      +      ]
      +    },
      +    "required": [
      +      "cik",
      +      "name",
      +      "tickers",
      +      "exchanges",
      +      "sic",
      +      "sic_description"
      +    ]
      +  },
      +  {
      +    "required": [
      +      "error"
      +    ]
      +  }
      +]
    • addedOutput schema / properties / cap
      Added value: +{
      +  "description": "The `filing_limit` that was applied.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / error
      Added value: +{
      +  "additionalProperties": {},
      +  "description": "Present when the call failed. Absent on success.",
      +  "properties": {
      +    "code": {
      +      "description": "JSON-RPC error code for this failure.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "data": {
      +      "additionalProperties": {},
      +      "properties": {
      +        "reason": {
      +          "description": "Machine-readable failure mode. Declared by this tool: `no_match`: No company matches the query `multiple_matches`: Query is ambiguous and matches several companies Other values are possible when a failure originates below the handler.",
      +          "examples": [
      +            "no_match",
      +            "multiple_matches"
      +          ],
      +          "type": "string"
      +        },
      +        "recovery": {
      +          "additionalProperties": {},
      +          "description": "Actionable next step for the caller.",
      +          "properties": {
      +            "hint": {
      +              "type": "string"
      +            }
      +          },
      +          "required": [
      +            "hint"
      +          ],
      +          "type": "object"
      +        },
      +        "retryable": {
      +          "description": "Whether retrying may succeed.",
      +          "type": "boolean"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "message": {
      +      "description": "Human-readable description of what went wrong.",
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "code",
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when include_filings=true but no filings matched the form_types filter."New value: +"Guidance when include_filings=true but no filings matched the form_types filter, or when filing_limit withheld some."
    • addedOutput schema / properties / shown
      Added value: +{
      +  "description": "Number of filings returned inline.",
      +  "type": "number"
      +}
    • addedOutput schema / properties / truncated
      Added value: +{
      +  "description": "True when more filings matched than `filing_limit` allowed into the inline list.",
      +  "type": "boolean"
      +}
    • removedOutput schema / required
      Removed value: -[
      -  "cik",
      -  "name",
      -  "tickers",
      -  "exchanges",
      -  "sic",
      -  "sic_description"
      -]
  11. Changed6 schema fields changed
    • addedInput schema / properties / filed_after
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "YYYY-MM-DD",
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Only include filings filed on or after this date (YYYY-MM-DD). A date filter routes the scan into the older submissions archive pages, so it reaches filings that predate the ~1000-filing recent window (e.g. a company's 2005 10-K)."
      +}
    • addedInput schema / properties / filed_before
      Added value: +{
      +  "anyOf": [
      +    {
      +      "const": "",
      +      "type": "string"
      +    },
      +    {
      +      "description": "YYYY-MM-DD",
      +      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      +      "type": "string"
      +    }
      +  ],
      +  "description": "Only include filings filed on or before this date (YYYY-MM-DD). Use alone or with filed_after; together they bound the archive-page scan."
      +}
    • changedInput schema / properties / filing_limit / description
      Previous value: -"Maximum number of filings to return."New value: +"Maximum number of filings to return in the inline list."
    • addedOutput schema / properties / dataset
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "Canvas dataframe holding the full filtered filing history (recent + archive pages), registered only when the scan reached beyond the recent window and the history exceeds filing_limit. Query the complete history — filings by form by year — with secedgar_dataframe_query; the inline `filings` list stays capped at filing_limit.",
      +  "properties": {
      +    "expires_at": {
      +      "description": "ISO 8601 expiry timestamp.",
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "Dataframe handle (df_XXXXX_XXXXX) — pass to secedgar_dataframe_query.",
      +      "type": "string"
      +    },
      +    "row_count": {
      +      "description": "Rows materialized in the dataframe.",
      +      "type": "number"
      +    },
      +    "truncated": {
      +      "description": "True when the archive scan hit its page cap before exhausting the manifest — older matching filings exist beyond the dataframe.",
      +      "type": "boolean"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "row_count",
      +    "expires_at",
      +    "truncated"
      +  ],
      +  "type": "object"
      +}
    • addedOutput schema / properties / history_scanned_through
      Added value: +{
      +  "description": "Oldest filing date reached by the scan (YYYY-MM-DD). Filings older than this were not examined: the recent window caps at ~1000 filings, and older filings live in archive pages fetched only when a date filter or an under-filled form filter requires them. Absent when no filings were scanned.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / total_filings / description
      Previous value: -"Total filings matching the filter (may exceed filing_limit)."New value: +"Total filings matching the filter across everything scanned (recent window + any archive pages), which may exceed filing_limit and the inline list."
  12. Changed5 schema fields changed
    • changedInput schema / properties / query / description
      Previous value: -"Company ticker symbol (e.g., \"AAPL\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup. Name search does fuzzy matching."New value: +"Company ticker symbol (e.g., \"AAPL\", \"VOO\"), name (e.g., \"Apple\"), or CIK number (e.g., \"320193\"). Ticker is the fastest lookup and works for equities, ETFs, and mutual funds. Name search matches current and former names."
    • addedOutput schema / properties / class_id
      Added value: +{
      +  "description": "SEC fund class ID (e.g. \"C000092055\"). Present when the query resolved via a fund ticker (ETF or mutual fund).",
      +  "type": "string"
      +}
    • changedOutput schema / properties / fiscal_year_end / description
      Previous value: -"Fiscal year end (MM-DD format, e.g., \"09-26\" for September 26)."New value: +"Fiscal year end (MM-DD format, e.g., \"09-26\"). Absent for filers SEC records no fiscal year end for (e.g. private or pre-IPO entities)."
    • addedOutput schema / properties / series_id
      Added value: +{
      +  "description": "SEC fund series ID (e.g. \"S000002839\"). Present when the query resolved via a fund ticker (ETF or mutual fund).",
      +  "type": "string"
      +}
    • changedOutput schema / required
      Previous value: -[
      -  "cik",
      -  "name",
      -  "tickers",
      -  "exchanges",
      -  "sic",
      -  "sic_description",
      -  "fiscal_year_end"
      -]New value: +[
      +  "cik",
      +  "name",
      +  "tickers",
      +  "exchanges",
      +  "sic",
      +  "sic_description"
      +]
  13. Changed1 schema field changed
    • addedOutput schema / properties / notice
      Added value: +{
      +  "description": "Guidance when include_filings=true but no filings matched the form_types filter.",
      +  "type": "string"
      +}
  14. Changed1 schema field changed
    • changedOutput schema / properties / fiscal_year_end / description
      Previous value: -"Fiscal year end (MMDD format)."New value: +"Fiscal year end (MM-DD format, e.g., \"09-26\" for September 26)."
  15. Changed4 schema fields changed
    • changedOutput schema / properties / filings / items / properties / accession_number / description
      Previous value: -"Filing accession number."New value: +"Filing accession number, dash format (e.g., 0000320193-23-000106). Pass to secedgar_get_filing."
    • changedOutput schema / properties / filings / items / properties / description / description
      Previous value: -"Filing description."New value: +"SEC-provided filing description. Absent when SEC published none."
    • changedOutput schema / properties / filings / items / properties / filing_date / description
      Previous value: -"Date filed."New value: +"Date the filing was submitted (YYYY-MM-DD)."
    • changedOutput schema / properties / filings / items / properties / report_date / description
      Previous value: -"Period of report."New value: +"Period of report (YYYY-MM-DD). Absent for filings without a reporting period (proxy statements, ownership reports)."
  16. Changed1 schema field changed
    • changedOutput schema / properties / state_of_incorporation / description
      Previous value: -"State of incorporation."New value: +"State of incorporation (US two-letter code, e.g. \"DE\"). Omitted for some entities, including many foreign filers and individuals."
  17. Changed1 schema field changed
    • addedOutput schema / properties / filings / items / description
      Added value: +"One filing record with form type, dates, and primary document."
  18. First observed

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and open-world traits, so the description correctly spends its space elsewhere: the non-obvious behavior that a filtered scan stages the full filing history as a df_<id> artifact and where accession numbers flow next. This is genuine behavioral context an agent cannot infer from annotations or schema; only the 'recent window' boundary definition is delegated to the parameter docs.

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?

Three sentences, front-loaded with the core purpose before the workflow handoffs. Every clause earns its place: purpose, downstream consumption of accession numbers, and the conditional dataframe staging path.

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?

With six well-documented parameters, annotations covering safety, and an output schema handling return shape, the description supplies exactly what is missing: the entry-point positioning and the df_<id> side effect. It stops short of noting result limits or that entity-only lookups should set include_filings=false, which the schema covers but the narrative could reinforce.

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% and the parameter descriptions are already unusually detailed (query resolution rules, suffix matching, the 50-cap on filing_limit). The description adds little parameter-level meaning beyond naming that accession numbers appear in results and that date/form filters trigger archive scanning, both of which are echoed in the schema. 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?

States a specific verb and resource ('Find companies and retrieve entity info with optional recent filings') and adds scope ('resolves tickers, names, or CIKs to entity details'). It also positions itself relative to siblings, naming secedgar_get_filing as the downstream consumer of accession numbers, so an agent can distinguish this lookup from search_filings or get_snapshot.

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 frames itself as the 'Entry point for most EDGAR workflows' and explains the conditional handoff to secedgar_dataframe_describe/query when a date or form filter pushes the scan past the recent window. It does not name when to prefer secedgar_search_filings or secedgar_compare_companies instead, so the alternative routing is incomplete rather than absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.