Skip to main content
Glama

Resolve company to SEC CIK (free)

edgar_resolve_company
Read-onlyIdempotent

Resolve US company tickers, CIKs, or name fragments to official SEC CIK numbers, tickers, and registrant names before fetching EDGAR filings or financial facts.

Instructions

Resolve US company tickers, CIKs or name fragments to official SEC CIK numbers, tickers and registrant names using the SEC public ticker map (company_tickers.json). Use this first when you only need an identifier (e.g. "what is Nvidia's CIK?") or want to confirm which company a name refers to before fetching filings/facts. Next steps: edgar_list_filings for filings, edgar_get_company_facts for financial data. Behavior: read-only HTTP GET to sec.gov, no API token, no cost; the map is cached for 6 hours. Covers SEC registrants with a listed ticker only (no delisted/private filers). RETURNS: {count, items}: one "company_match" row per match (cik zero-padded to 10 digits, ticker, name, match = cik|ticker|name, submissions_url), or an "error" row with code COMPANY_NOT_FOUND. Exact ticker/CIK matches win over name substring matches. WHEN NOT TO USE: not for filings (edgar_list_filings) or financial values (edgar_get_company_facts); other tools already accept tickers/names directly. COST: free - direct sec.gov requests from this MCP server, no APIFY_TOKEN, no Apify billing. PARAMETERS: queries: each string is resolved independently and returns its own rows (or its own COMPANY_NOT_FOUND row), so mixed batches never fail as a whole. Precedence per query: all-digit strings are tried as a CIK first (leading zeros optional; must be in the ticker map), then an exact ticker (case-insensitive; class shares like "BRK-B" use a dash), then a case-insensitive substring of the registrant name; the first rule that matches wins and later rules are not applied. maxMatchesPerQuery caps the rows of every query, but only matters for broad name fragments (e.g. "bank") and for CIKs with several tickers (GOOG/GOOGL); raise it (max 25) to see more candidates, then pass the chosen ticker or cik to the other tools. EXAMPLE: {"queries":["NVDA","apple"]} -> {count:2, items:[{type:"company_match", cik:"0001045810", ticker:"NVDA", name:"NVIDIA CORP", match:"ticker"}, ...]}

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queriesYesRequired. 1-50 strings, 1-200 chars each: a ticker ("NVDA", "BRK-B"), a CIK of 1-10 digits ("1045810" or "0001045810") or a case-insensitive registrant-name fragment ("nvidia"). Example: ["NVDA","apple","320193"]
maxMatchesPerQueryNoOptional integer 1-25, default 5. Max company_match rows returned per query (matters for name fragments and multi-ticker CIKs). Example: 10

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
countYesNumber of rows returned
itemsYesResult rows; each has a "type" field (data rows or machine-readable "error" rows)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.2.2
    • changedInput schema / properties / maxMatchesPerQuery / description
      Previous value: -"Max rows per query for name-fragment searches (default 5)"New value: +"Optional integer 1-25, default 5. Max company_match rows returned per query (matters for name fragments and multi-ticker CIKs). Example: 10"
    • changedInput schema / properties / queries / description
      Previous value: -"1-50 tickers (\"NVDA\"), CIKs (\"1045810\" or zero-padded) or case-insensitive name fragments (\"nvidia\")"New value: +"Required. 1-50 strings, 1-200 chars each: a ticker (\"NVDA\", \"BRK-B\"), a CIK of 1-10 digits (\"1045810\" or \"0001045810\") or a case-insensitive registrant-name fragment (\"nvidia\"). Example: [\"NVDA\",\"apple\",\"320193\"]"
  2. Addedv1.2.1

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare read-only/idempotent/non-destructive, so the bar is lower, yet the description adds real behavioral context: unauthenticated sec.gov GET, 6-hour cache, coverage limited to registrants with a listed ticker (delisted/private filers excluded), COMPANY_NOT_FOUND error, and exact-match-wins resolution rules. Minor deduction because the free/no-token cost point is stated twice rather than adding new information.

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?

Organized with clear labeled sections (Behavior, RETURNS, WHEN NOT TO USE, COST, PARAMETERS, EXAMPLE) and front-loaded, but the free/no-token cost fact is restated in both 'Behavior' and 'COST', adding redundancy in an already long definition.

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 2-param read-only resolver with full schema coverage and an output schema, the description supplies everything else an agent needs: coverage limits, resolution precedence, error shape, cost, and concrete next-step tools. Nothing material is missing.

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?

Schema coverage is 100%, so baseline is 3, but the description goes well beyond the schema by documenting the per-query resolution precedence (all-digit tried as CIK, then exact case-insensitive ticker, then name substring; first match wins and later rules are skipped), the class-share dash convention ('BRK-B'), and that maxMatchesPerQuery only matters for broad fragments and multi-ticker CIKs. This is genuine semantic value the schema does not carry.

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 (resolve) and resource (US company tickers/CIKs/name fragments to SEC CIK, ticker, registrant name) and explicitly distinguishes itself from siblings by naming edgar_list_filings and edgar_get_company_facts. An agent can route correctly without opening any schema.

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?

Gives an explicit 'use this first when you only need an identifier' trigger plus a dedicated WHEN NOT TO USE section naming the alternative tools for filings and financial values. Covers when, when-not, and the alternatives.

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