Skip to main content
Glama
pgeneralpl

edgar-entity-mcp

by pgeneralpl

edgar-entity-mcp

CI License: MIT

Source: https://github.com/pgeneralpl/edgar-entity-mcp · Issues: https://github.com/pgeneralpl/edgar-entity-mcp/issues · MCP Registry name: io.github.pgeneralpl/edgar-entity-mcp

US company research for AI agents, from official public data. One MCP server that covers SEC EDGAR (filings, XBRL financials, Form 4 insider trades, cross-company comparisons) and state Secretary of State business-entity registries (NY, CO, OR, CT, PA). Responses are compact JSON with source URLs, sized to keep token use low.

  • Analysts: "Compare TSLA, F and GM revenue for CY2023", "What did insiders sell at Apple this month?", "Summarize the latest 10-K risk factors."

  • Founders / sales / diligence: "Is Acme Widgets LLC an active Colorado entity? Who is its registered agent?"

  • Researchers: clean 10-K/10-Q sections as text, normalized financial time series with the XBRL tag used for each metric.

No API keys are needed for the data. SEC asks you to identify yourself with a User-Agent (see SEC User-Agent).

npx -y edgar-entity-mcp        # stdio MCP server

Tools

Tool

What it does

Source

search_company

Ticker/name → CIK matches, fuzzy-ranked (share classes merged)

company_tickers_exchange.json

get_company_profile

Name, tickers, exchanges, SIC + industry, state of incorporation, FYE, EIN, addresses, former names, latest 10-K/10-Q

data.sec.gov/submissions

list_filings

Filings by form type + date range, with accession, dates, primary-document and index URLs; reads older history pages when needed

data.sec.gov/submissions

get_filing_document

Primary document converted to clean text (tables kept as rows); 10-K/10-Q item extraction (1, 1A, 7, 7A, 8…); max_chars/offset paging

www.sec.gov/Archives

get_financials

Normalized revenue, gross profit, operating income, net income, EPS (basic/diluted), assets, liabilities, equity, cash, long-term debt, operating cash flow, capex, FCF, shares outstanding; annual or quarterly; deduped by fiscal period; reports the tag used

XBRL companyfacts

get_xbrl_concept

Full history of any XBRL concept/unit for one company

XBRL companyconcept

compare_companies

One concept across all filers for a calendar period (rank or filter by tickers)

XBRL frames

get_insider_trades

Form 4/4A parsed: reporter, role/title, code + plain meaning, shares, price, value, A/D, owned after, derivative details; buy/sell summary

Form 4 XML

lookup_business_entity

Search SoS registries by name or entity id; normalized status, type, formation date, jurisdiction, addresses, registered agent

NY/CO/OR/CT/PA open data (Socrata)

list_supported_states

Coverage, dataset ids, update cadence and license per state

—

Also included: a company_research_brief prompt that runs the whole workflow, and an edgar-entity://data-sources resource (licenses).

Every tool takes company as a ticker (AAPL), CIK (320193) or unambiguous name. Errors come back as {"error":{"code","message","hint"}} with isError: true. Ambiguous names return candidate CIKs.

Example calls and real outputs (live data, trimmed)

get_financials {"company":"AAPL","limit":1}

{"cik":"0000320193","name":"Apple Inc.","period_type":"annual","currency":"USD",
 "periods":[{"fy":2025,"fp":"FY","period_end":"2025-09-27","period_start":"2024-09-29","form":"10-K","filed":"2025-10-31",
   "accession":"0000320193-25-000079","revenue":416161000000,"gross_profit":195201000000,"operating_income":133050000000,
   "net_income":112010000000,"eps_basic":7.49,"eps_diluted":7.46,"operating_cash_flow":111482000000,"capex":12715000000,
   "total_assets":359241000000,"total_liabilities":285508000000,"stockholders_equity":73733000000,"cash":35934000000,
   "long_term_debt":78328000000,"shares_outstanding":14776353000,"free_cash_flow":98767000000}],
 "tags_used":{"revenue":["us-gaap:RevenueFromContractWithCustomerExcludingAssessedTax"],"net_income":["us-gaap:NetIncomeLoss"],"...":[]},
 "source_url":"https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json"}

period_type:"quarterly" returns 3-month values. 10-Q cash-flow lines are year-to-date, so quarters are derived by differencing, and Q4 is derived as FY minus 9M. For example, MSFT FY25 Q4 revenue comes out at $76.441B, which matches the reported figure. Each derived value is listed in notes.

get_insider_trades {"company":"TSLA","limit":5}

{"cik":"0001318605","name":"Tesla, Inc.","filings_returned":5,
 "summary":{"open_market_buys":{"count":0,"shares":0,"value":0},"open_market_sales":{"count":19,"shares":34620.25,"value":13321733}},
 "code_legend":{"F":"Shares withheld to pay exercise price or taxes","M":"Exercise or conversion of derivative (exempt)","S":"Open market or private sale"},
 "filings":[{"form":"4","filed":"2026-09-09","accession":"0001104659-26-106432","reporter":"Taneja Vaibhav","roles":"Officer",
   "officer_title":"Chief Financial Officer","transactions":[
     {"security":"Common Stock","date":"2026-09-08","code":"S","shares":2605.75,"price":360.134,"value":938419.17,
      "acquired_disposed":"D","shares_owned_after":25972.25,"ownership":"D"}],
   "url":"https://www.sec.gov/Archives/edgar/data/1318605/000110465926106432/tm2625055d1_4seq1.xml"}],"has_more":true}

get_filing_document {"url":"https://www.sec.gov/Archives/edgar/data/320193/000032019325000079/aapl-20250927.htm","section":"1A","max_chars":3000}

{"url":"…/aapl-20250927.htm","kind":"html","section":{"id":"1A","title":"Risk Factors"},"total_chars":68118,"offset":0,"next_offset":3000,
 "text":"Item 1A.  Risk Factors\nThe following summarizes factors that could have a material adverse effect on the Company’s business…"}

compare_companies {"tag":"Revenues","period":"CY2023","companies":["TSLA","F","GM"]}

{"concept":"us-gaap:Revenues","unit":"USD","period":"CY2023","companies_reporting":2679,"results":[
 {"rank":12,"cik":"0000037996","name":"Ford Motor Co","val":176191000000,"end":"2023-12-31"},
 {"rank":13,"cik":"0001467858","name":"GENERAL MOTORS COMPANY","val":171842000000,"end":"2023-12-31"},
 {"rank":23,"cik":"0001318605","name":"Tesla, Inc.","val":96773000000,"end":"2023-12-31"}],
 "source_url":"https://data.sec.gov/api/xbrl/frames/us-gaap/Revenues/USD/CY2023.json"}

Balance-sheet (instant) concepts need an I suffix, e.g. {"tag":"Assets","period":"CY2024Q4I"}.

lookup_business_entity {"name":"Newmont Corporation","states":["CO"]}

{"results":[{"state":"CO","entity_id":"20021056790","name":"Newmont Corporation","status":"Good Standing",
  "type":"Foreign Profit Corporation (FPC)","formed":"2002-03-08","jurisdiction":"DE",
  "principal_address":"6900 East Layton Ave, Suite 700, Denver, CO, 80237, US",
  "registered_agent":{"name":"CORPORATION SERVICE COMPANY","address":"1900 W Littleton Blvd, Littleton, CO, 80120"},
  "details_url":"https://www.coloradosos.gov/biz/BusinessEntityDetail.do?masterFileId=20021056790",
  "source_url":"https://data.colorado.gov/resource/4ykn-tg5h.json?entityid=20021056790"}],
 "by_state":{"CO":{"count":1,"query_url":"…"}}}

Other quick examples:

  • search_company {"query":"berkshire"} → BERKSHIRE HATHAWAY INC, CIK 0001067983, tickers BRK-B, BRK-A

  • list_filings {"company":"AAPL","forms":["10-K"],"date_to":"2010-12-31","limit":2} → the 2010 10-K and 10-K/A, read from older history pages

  • get_xbrl_concept {"company":"TSLA","tag":"ResearchAndDevelopmentExpense","forms":["10-K"],"framed_only":true}

  • lookup_business_entity {"entity_id":"0783036","states":["CT"]} → THE TRAVELERS COMPANIES, INC. (Active, foreign stock corp, MN)


Related MCP server: Aegis Gov SEC Filings MCP

Install

Claude Desktop / Claude Code / Cursor / Windsurf / VS Code (stdio via npx)

{
  "mcpServers": {
    "edgar-entity": {
      "command": "npx",
      "args": ["-y", "edgar-entity-mcp"],
      "env": { "SEC_USER_AGENT": "Your Name or Company you@example.com" }
    }
  }
}
  • Claude Desktop: ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).

  • Cursor: ~/.cursor/mcp.json (global) or .cursor/mcp.json (project).

  • Claude Code: claude mcp add edgar-entity -e SEC_USER_AGENT="Your Name you@example.com" -- npx -y edgar-entity-mcp

  • VS Code: .vscode/mcp.json using "servers" in place of "mcpServers".

Remote (Streamable HTTP)

Hosted endpoint (free, no key needed): https://edgar-entity-mcp.vercel.app/mcp · health: https://edgar-entity-mcp.vercel.app/health (add ?deep=1 for a Redis reachability check). The hosted instance uses Upstash Redis for a shared cache and a fleet-wide SEC budget of 8 req/s.

{ "mcpServers": { "edgar-entity": { "url": "https://edgar-entity-mcp.vercel.app/mcp" } } }

For clients that only speak stdio: "command": "npx", "args": ["-y", "mcp-remote", "https://edgar-entity-mcp.vercel.app/mcp"]. If the deployment sets MCP_API_KEYS, send Authorization: Bearer <key> or x-api-key: <key>.

Self-host the HTTP server

npm run build && PORT=3000 SEC_USER_AGENT="Acme you@acme.com" npm run start:http   # → http://localhost:3000/mcp

Deploy to Vercel

The repo already contains api/mcp.ts and api/health.ts (Vercel Functions with a Web-standard handler built on mcp-handler) and vercel.json, which runs npm run build and rewrites /mcp to /api/mcp and /health to /api/health. npm run smoke:remote -- https://<project>.vercel.app/mcp runs a live check against a deployment.

  1. vercel link then vercel env add SEC_USER_AGENT (and optionally the Upstash / MCP_API_KEYS variables).

  2. Recommended: add the Upstash Redis integration. The cache is then shared across instances, and the SEC rate budget becomes fleet-wide rather than per instance.

  3. vercel deploy --prod. Point clients at https://<project>.vercel.app/mcp.


Environment variables

Var

Default

Purpose

SEC_USER_AGENT

edgar-entity-mcp/<ver> contact@example.com

Set this. SEC requires a descriptive UA with contact info, e.g. "Acme Research jane@acme.com". The server prints a warning to stderr while the default is in use.

SEC_MAX_RPS

8 (max 9)

SEC requests per second, per process

SEC_DISTRIBUTED_RATE_LIMIT

1

With Upstash configured, also caps SEC calls across all instances, using a per-second Redis counter

SOCRATA_APP_TOKEN

–

Optional app token for state portals (higher throttling limits)

UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN

–

Enables the Redis cache (Vercel's KV_REST_API_URL/KV_REST_API_TOKEN also work). Without them the cache is an in-memory LRU.

MCP_API_KEYS

–

Comma-separated keys. When set, the HTTP endpoint returns 401 to requests without a valid key.

USAGE_LOG

–

1 logs per-call usage JSON (tool, latency, ok, response size, key prefix) to stderr

MEMORY_CACHE_MB / REDIS_MAX_VALUE_BYTES / HTTP_TIMEOUT_MS

128 / 900000 / 25000

Tuning

SEC User-Agent and rate limits

SEC's fair-access policy caps clients at 10 requests/second and requires a declared User-Agent. SEC may block clients without one (HTTP 403 "Undeclared Automated Tool"). This server:

  • sends SEC_USER_AGENT on every SEC request;

  • spaces requests through a global limiter at ~8 req/s by default (measured: 41 requests in 5.0s while parsing 40 Form 4s);

  • retries 429/5xx with exponential backoff and respects Retry-After;

  • deduplicates identical in-flight requests and caches with TTLs: tickers 24h, submissions 10 min, companyfacts/concepts 6h, frames 12h, filing documents 30 days (filings are immutable), state searches 1h.

Monetization hooks (no billing yet)

  • HTTP gate: MCP_API_KEYS (static keys), or createHttpHandler({ verifyKey: async (k) => lookup(k) }) for keys stored in a database. Keys are checked with mcp-handler's withMcpAuth and return RFC 9728-style 401 responses.

  • Per-call metering: setUsageHooks({ beforeCall, afterCall }) (exported from the package). beforeCall receives {tool, transport, apiKey, clientId}; throwing from it rejects the call with UNAUTHORIZED, which covers quotas and credits. afterCall receives {ok, ms, errorCode, responseChars}, which is enough for pay-per-call or per-token pricing.

  • Suggested tiers: free (stdio or keyless HTTP, cached), Pro (API key, higher limits, bulk/paginated exports), Team (webhooks for new filings or insider trades).

Data sources & licenses

The code is MIT-licensed. The server ships no data and fetches everything live. Full details are in DATA_SOURCES.md and LICENSES/.

Source

Dataset

Coverage

License (commercial use)

SEC EDGAR

submissions, XBRL APIs, Archives

All EDGAR filers

US gov public information; SEC policy (yes)

New York DOS

n9v6-gdp6 Active Corporations

Active entities only, monthly

OPEN-NY Terms (yes)

Colorado SOS

4ykn-tg5h Business Entities

All entities + status, daily

Public Domain + CO ToS disclaimer (yes)

Oregon SOS

tckn-sxa6 Active Businesses

Active only, weekly

Public domain by statute, ORS 276A.368 (yes)

Connecticut SOTS

n7gp-d28j Business Master

All + status, daily

Public Domain, CT terms (yes)

Pennsylvania DOS

xvd7-5r2c Registered Businesses

Current registrations, monthly

Public Domain U.S. Government (yes)

Colorado disclaimer: The data made available here has been modified for use from its original source, which is the State of Colorado. THE STATE OF COLORADO MAKES NO REPRESENTATIONS OR WARRANTY AS TO THE COMPLETENESS, ACCURACY, TIMELINESS, OR CONTENT OF ANY DATA MADE AVAILABLE THROUGH THIS SITE. THE STATE OF COLORADO EXPRESSLY DISCLAIMS ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. The data is subject to change as modifications and updates are complete. It is understood that the information contained in the Web feed is being used at one's own risk.

Delaware, the most common state of incorporation, has no open bulk dataset, so it is not covered. CA and FL are on the roadmap (see list_supported_states). This server provides informational data only and is not investment, legal or credit advice. It is not a consumer reporting agency, and its output must not be used for FCRA-regulated decisions.

Architecture

src/
  core/      config, cache (memory LRU | Upstash | tiered), rate limiter, fetch+retry, usage hooks, errors
  sec/       tickers (fuzzy), submissions, documents (HTML→text, item extraction), financials, xbrl (concept/frames), insider (Form 4)
  states/    registry (per-state dataset config + normalizers), socrata (SoQL builder, ranking)
  tools.ts   zod schemas + tool handlers (transport-agnostic)
  server.ts  registers tools/prompt/resource on an McpServer (shared by both transports)
  stdio.ts   npm bin  → serveStdio()
  http/      handler.ts (mcp-handler + API-key auth) · node-server.ts (local/self-host)
api/mcp.ts   Vercel Function

Built on the official MCP TypeScript SDK v2 (@modelcontextprotocol/server, the successor to the @modelcontextprotocol/sdk v1 package, and a requirement of mcp-handler 2.x). It serves the 2026-07-28 protocol and falls back automatically for 2025-era clients, over both stdio and HTTP.

Development

npm install
npm run check        # typecheck + eslint + vitest (offline unit tests)
npm run smoke:e2e    # build + live smoke over stdio (all tools, real SEC/state data) + HTTP + Vercel-function e2e
npm run validate:registry   # validate server.json against the MCP Registry schema
npx @modelcontextprotocol/inspector --cli node dist/stdio.js --method tools/list

Roadmap

  • More states: FL (Sunbiz bulk files), CA (bizfile API, needs a key), WA/TX where open data allows; NY inactive entities (the "All Filings" dataset)

  • Officers/directors (CT principals dataset; PA officer rows; DEF 14A)

  • EDGAR full-text search (efts.sec.gov) and 8-K item-level event feed

  • 13F holdings, 13D/G ownership, S-1/IPO tracking

  • Webhooks/subscriptions for new filings and insider trades (MCP events)

  • Segment and geographic revenue (XBRL dimensions via the Financial Statement datasets)

  • MCPB bundle for one-click Claude Desktop install (a manifest.json is included and validated)

  • Hosted plan: API keys, quotas and usage dashboard (the hooks already exist)

License

MIT for the code (see LICENSE). Data remains subject to each source's terms (see DATA_SOURCES.md).

Available Tools

10 tools
compare_companiesCross-company comparison (XBRL frames)A
Read-onlyIdempotent
Inspect

Compare one XBRL concept across ALL reporting companies for a calendar period (SEC frames API), e.g. rank by revenue for CY2024, or compare specific companies. Period: CY2024 (annual duration), CY2024Q2 (quarter), CY2024Q4I (instant, required for balance-sheet items like Assets). Pass companies to filter to specific tickers/CIKs; otherwise returns the top limit by value.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYese.g. 'Revenues', 'NetIncomeLoss', 'Assets'
unitNoUSD, USD-per-shares, shares, pureUSD
limitNo
orderNodesc
periodYesCY2024, CY2024Q3, or CY2024Q4I
taxonomyNous-gaap
companiesNoTickers or CIKs to include (default: all)

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive, open-world behavior, so safety is covered. The description adds useful behavior: period formats, that CY2024Q4I is required for instant balance-sheet items, and the default return rule (top limit by value unless companies filters). It omits error handling, rate limits, and authentication 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?

Single tightly written paragraph, front-loads purpose, then period formats, then filter and default return behavior. No redundant or filler sentences.

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 7-parameter read-only comparison tool with no output schema, the description covers purpose, period formats, filtering, and default return ordering adequately. It leaves output structure and taxonomy/unit nuances to the schema, but core invocation requirements are clear.

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?

Schema coverage is 57%, and the description adds meaning beyond the schema for period syntax, tag examples, companies filtering, and limit/order return behavior. It does not clarify unit, taxonomy, or order defaults, which remain schema-only.

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: comparing one XBRL concept across all reporting companies for a calendar period. It gives concrete examples (rank by revenue for CY2024; compare specific companies) and distinguishes cross-company scope from siblings like get_xbrl_concept. An agent can identify the tool without opening the schema.

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 clear context: use for cross-company comparison of a single XBRL concept, with examples and period syntax. It explains filtering behavior via companies or the default top-limit ranking. However, it does not name alternatives such as get_xbrl_concept or get_financials, nor state when not to use this tool.

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

get_company_profileCompany profile (EDGAR)A
Read-onlyIdempotent
Inspect

Company profile from SEC EDGAR submissions: legal name, tickers, exchanges, SIC code + industry, state of incorporation, fiscal year end, EIN, filer category, business/mailing addresses, former names, latest 10-K/10-Q. Use it to orient before deeper research.

ParametersJSON Schema
NameRequiredDescriptionDefault
companyYesTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already carry the full safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is low. The description adds the data-provenance detail ('from SEC EDGAR submissions') and the scope of returned fields, though it says nothing about pagination, 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, zero waste, with the resource/scope front-loaded and the usage cue at the end. Nothing extraneous or duplicated.

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?

With no output schema, the description takes on the burden of describing the return payload and does so thoroughly via the field list. An agent has enough to decide whether the tool returns what it needs before calling.

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?

There is only one parameter and schema coverage is 100%, so the schema already documents the accepted forms (ticker/CIK/name) and only 3 is warranted as a baseline. The description adds no semantics beyond what the schema's parameter description already states.

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+resource ('Company profile from SEC EDGAR submissions') and enumerates the concrete payload (name, tickers, SIC, EIN, former names, latest 10-K/10-Q). This clearly separates it from siblings like search_company or list_filings without the agent 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 Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use it to orient before deeper research' gives clear when-to-use context for this lookup-style tool. It does not, however, name the alternative (search_company) for ambiguous inputs or state when-not to use it, so it stops short of full routing guidance.

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

get_filing_documentRead a filing documentA
Read-onlyIdempotent
Inspect

Fetch an SEC filing's primary document (HTML converted to clean text, tables preserved as aligned rows). Identify it by url (any www.sec.gov/Archives document URL from list_filings) or by company + accession. Optionally extract one 10-K/10-Q item via section (e.g. '1' Business, '1A' Risk Factors, '7' MD&A, '7A' Market Risk, '8' Financial Statements; for 10-Q: '1' Financial Statements, '2' MD&A, '1A' Risk Factors). Long text is paged: use max_chars and the returned next_offset.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoDocument URL on www.sec.gov/Archives
offsetNo
companyNoTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.
sectionNoItem id to extract, e.g. '1A', '7', 'Item 7A'
accessionNoAccession number, e.g. 0000320193-24-000123
max_charsNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare the safe-read profile (readOnly, idempotent, non-destructive), so the bar is low, yet the description adds real behavioral detail: output is clean text with aligned tables, long text is paged, and next_offset is returned for continuation. It does not mention rate limits or auth, but the paging and format disclosure are genuine value-add.

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?

Three sentences, front-loaded with the core action and format, then identification, then section extraction, then paging. Dense but every clause earns its place; the section examples are long but load-bearing.

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?

No output schema exists, but the description supplies the return contract (clean text, aligned tables, next_offset for paging), which is the key missing piece. For a six-parameter zero-required read tool it is nearly complete, with only edge cases like precedence when both url and company are supplied left unstated.

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?

With 67% schema coverage the description meaningfully compensates: it enumerates real section ids with human labels ('1' Business, '1A' Risk Factors, '7' MD&A, etc.) including 10-Q variants, which the terse schema entry ('Item id to extract') does not, and it explains the max_chars/next_offset paging contract. The `offset` parameter itself is left unexplained, keeping it below a 5.

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 (Fetch/Read) and resource (an SEC filing's primary document) and adds the exact transformation applied (HTML converted to clean text, tables preserved as aligned rows). This clearly distinguishes it from siblings like list_filings, which enumerates filings rather than reading one.

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?

Gives concrete identification routes (a www.sec.gov/Archives `url` from list_filings, or `company` + `accession`) and ties itself to the list_filings sibling. It stops short of stating when NOT to use it or how it differs from get_financials/get_xbrl_concept for structured data, so no explicit exclusions are present.

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

get_financialsNormalized financials (XBRL)A
Read-onlyIdempotent
Inspect

Key financial metrics normalized from SEC XBRL companyfacts, one row per fiscal period (deduped; as-filed values from the filing that reported the period). Metrics: revenue, gross_profit, operating_income, net_income, eps_basic, eps_diluted, operating_cash_flow, capex, total_assets, total_liabilities, stockholders_equity, cash, long_term_debt, shares_outstanding, free_cash_flow (derived). Revenue tries common tags in order (Revenues, RevenueFromContractWithCustomerExcludingAssessedTax, SalesRevenueNet, ...) and tags_used reports which was used. period_type 'quarterly' returns 3-month values (cash-flow quarters derived from YTD; Q4 derived as FY minus 9M). Values are raw (e.g. 391035000000 = $391.0B).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of most recent periods
companyYesTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.
metricsNoSubset of metrics to return (default all)
period_typeNoannual

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is low, yet the description adds substantial unsurfaced behavior: dedup policy, 'as-filed values from the filing that reported the period', the ordered tag-fallback chain with tags_used reporting, and the quarterly derivation rules (cash-flow quarters from YTD; Q4 = FY minus 9M).

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?

Dense but nearly every clause carries unique information; purpose and grain are front-loaded. It reads as one long block rather than separated sentences, which slightly hurts scannability of the derivation rules.

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?

No output schema exists, and the description discharges that burden by naming the returned fields (tags_used), the row grain, the value units, and the period derivation logic. Nothing an agent needs to interpret the result 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 75% and the description compensates where it matters most: it explains period_type='quarterly' semantics in depth (derived 3-month values, Q4 derivation) and clarifies raw value scaling (391035000000 = $391.0B), which the schema does not state anywhere.

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 ('Key financial metrics normalized from SEC XBRL companyfacts'), enumerates the exact 15 metrics returned, and pins the row grain ('one row per fiscal period'). The 'normalized' framing implicitly separates it from the raw-concept sibling get_xbrl_concept, so an agent can route without opening schemas.

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?

Usage is only implied: the tag-fallback and quarterly-derivation notes tell the agent what to expect, but there is no explicit statement of when to pick this over get_xbrl_concept or compare_companies, and no exclusions (e.g. non-XBRL filers, foreign issuers).

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

get_insider_tradesInsider trades (Form 4)A
Read-onlyIdempotent
Inspect

Recent insider transactions for a company (issuer) from SEC Form 4 / 4/A XML: reporter name, role and officer title, transaction date, code with plain-English meaning (P=open-market buy, S=sale, A=grant, M=option exercise, F=tax withholding, G=gift...), shares, price, value, acquired/disposed, shares owned after, direct/indirect, plus a summary of open-market buys vs sales. limit counts filings (each filing can hold several transactions).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of most recent Form 4 filings to parse
companyYesTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.
date_toNoYYYY-MM-DD
date_fromNoYYYY-MM-DD
include_footnotesNoInclude footnote text (10b5-1 plan details, price ranges)
transaction_codesNoOnly these codes, e.g. ['P','S'] for open-market trades
include_amendmentsNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower. The description still adds real context beyond them: it discloses the XML source, the inclusion of Form 4/A, and — most usefully — that `limit` counts filings rather than transactions, which the annotations do not express.

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?

Purpose is front-loaded and every clause carries information, with the caveat about `limit` counting filings placed as a useful trailing clarification. The long field enumeration is dense but justified since there is no output schema to carry it.

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 no output schema, the description thoroughly compensates by enumerating the returned fields and the buy/sell summary, and the parameters are well documented. What is missing is guidance on when to choose this tool versus assembling insider data from other filing tools, and any pagination/volume behavior.

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?

Schema description coverage is 86%, so the schema already documents most parameters and a baseline of 3 applies. The description nonetheless adds meaning beyond the schema by spelling out the plain-English meaning of the transaction codes (P/S/A/M/F/G), which the schema only gestures at with an example.

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 names a precise verb+resource ('Recent insider transactions for a company (issuer)') and pins the exact source (SEC Form 4 / 4/A XML). It enumerates the returned fields, making the tool's scope unmistakable and clearly distinct from every sibling in the list.

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?

Usage is only implied — the tool is obviously the direct path for insider trades, but the description never states when to prefer it over siblings like list_filings plus get_filing_document, nor any prerequisites. The one routing hint ('use search_company first if unsure') lives in the schema, not the description.

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

get_xbrl_conceptXBRL concept historyA
Read-onlyIdempotent
Inspect

All reported values of one XBRL concept for one company (SEC companyconcept API), newest first, deduped by period. Use for any tag not in get_financials, e.g. us-gaap:ResearchAndDevelopmentExpense, us-gaap:LongTermDebt, dei:EntityCommonStockSharesOutstanding. framed_only=true keeps only SEC's one-fact-per-calendar-period values (cleanest time series).

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesConcept name, case-sensitive, e.g. 'ResearchAndDevelopmentExpense'. 'us-gaap:Tag' form also accepted.
unitNoe.g. USD, shares, USD/shares, pure. Default: USD if present else first unit
formsNoOnly facts from these forms, e.g. ['10-K']
limitNo
companyYesTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.
taxonomyNous-gaap
framed_onlyNo

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already establish the safe-read profile (readOnlyHint, idempotentHint, destructiveHint=false, openWorldHint). The description adds non-trivial behavior beyond them: results are 'newest first, deduped by period,' and framed_only filters to one-fact-per-calendar-period values for the cleanest time series. It stops short of covering pagination or the source API's quirks, so not quite a 5.

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, followed by routing and the framed_only behavior. Every sentence carries distinct information 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?

With no output schema, the description usefully discloses ordering and dedup behavior for the returned series. For a 7-parameter tool it leaves pagination (limit) and unit-default behavior to the schema, but the essentials for calling it correctly are present.

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?

Schema coverage is 57% (tag, unit, forms, company documented; limit/taxonomy/framed_only not). The description compensates for the most opaque parameter (framed_only) by explaining its semantics and value, and supplies example tags. limit and taxonomy remain unexplained in both places, keeping this below a 5.

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+resource: retrieving all reported values of one XBRL concept for one company. It explicitly differentiates from the sibling get_financials ('Use for any tag not in get_financials') and gives concrete tag examples, so an agent can distinguish it without opening the 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?

Names the alternative explicitly ('for any tag not in get_financials') and gives the condition that selects this tool. It also explains when to set framed_only, providing a clear usage rule rather than leaving intent to inference.

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

list_filingsList SEC filingsA
Read-onlyIdempotent
Inspect

List a company's EDGAR filings newest-first, filtered by form type and filing-date range. Each row has form, accession, filed date, report period, primary document URL and filing index URL. Amendments (e.g. 10-K/A) are included when filtering by the base form unless include_amendments=false. Older history pages are fetched automatically when needed. Common forms: 10-K, 10-Q, 8-K, DEF 14A, S-1, 4, 13D/G (SC 13D), 20-F, 6-K.

ParametersJSON Schema
NameRequiredDescriptionDefault
formsNoForm types to include, e.g. ['10-K','10-Q']. Omit for all.
limitNo
offsetNoSkip this many matching filings (pagination)
companyYesTicker (AAPL), CIK (320193 or 0000320193), or company name. Names must resolve unambiguously; use search_company first if unsure.
date_toNoFiled on/before (YYYY-MM-DD)
date_fromNoFiled on/after (YYYY-MM-DD)
include_amendmentsNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive). The description adds real behavioral context: newest-first ordering, the exact fields per row, amendment inclusion semantics tied to base-form filtering, and automatic fetching of older history pages for pagination.

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?

Purpose and ordering are front-loaded, followed by compact detail on row contents, amendment behavior, and supported forms. Slightly dense but each sentence carries information; the common-forms list earns its place as enum-free guidance.

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?

With no output schema, the description steps in to enumerate the returned fields and describe pagination behavior, so an agent knows both what it gets back and how older results are surfaced. Nothing essential for correct invocation is missing.

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?

Schema coverage is 71%, and the description compensates by explaining form-type filtering, date-range filtering, and the include_amendments behavior (amendments matched to base forms). It also confirms implicit pagination fetching, though limit/offset themselves are left to 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?

States a specific verb (List) and resource (a company's EDGAR filings) with scope (company-level, newest-first) and the primary filtering dimensions. An agent can immediately tell this is the filings-listing tool, distinct from get_filing_document or get_financials.

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 through 'filtered by form type and filing-date range' and the common-form list, but never states when to use this versus sibling tools like get_filing_document or get_financials, nor any explicit exclusions. The 'use search_company first if unsure' hint lives in the schema, not here.

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

list_supported_statesSupported state registries & licensesA
Read-onlyIdempotent
Inspect

List the state business-entity registries supported by lookup_business_entity, with dataset ids, coverage caveats, update frequency, and license/commercial-use terms.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further and discloses the substantive content of the response: dataset ids, coverage caveats, update frequency, and license/commercial-use terms — exactly the caveats an agent needs before relying on the data.

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 front-loaded sentence that names the action, the resource, the related tool, and the payload contents with no filler or repetition.

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?

There is no output schema, so the description carries the burden of describing returns, and it enumerates the key fields (dataset ids, caveats, update frequency, license terms). It stops short of describing structure (e.g., grouping, ordering, counts), a minor but real gap.

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 tool takes zero parameters (empty object schema), so the baseline is 4; there is no parameter semantics to explain and the description does not need to compensate for any coverage 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?

States a specific verb ('List') and resource ('state business-entity registries'), and ties it directly to the sibling tool lookup_business_entity, so an agent can immediately distinguish this reference/catalog tool from the company lookup tools around it.

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 makes clear this is the catalog consulted for what lookup_business_entity covers, including coverage caveats and licensing constraints, which is the key usage context. It does not explicitly state when *not* to use it, but for a zero-parameter reference tool the intended invocation point is unambiguous.

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

lookup_business_entityState business-entity registry lookupA
Read-onlyIdempotent
Inspect

Search Secretary of State business-entity registries (official open data) by entity name and/or state entity id. Supported: NY, CO, OR, CT, PA (NY, OR and PA list active entities only; CO and CT include dissolved entities with status). Returns normalized name, entity id, status, type, formation date, jurisdiction, principal/mailing address, registered agent where available, and source URLs. Use for private companies, subsidiaries, LLCs, and verifying legal entity names. Call list_supported_states for coverage and licenses.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoEntity name or fragment, e.g. 'Tiffany and Company'
limitNoMax results per state
matchNocontains
statesNoDefault: all supported states
entity_idNoState entity id (NY DOS ID, CO entity id, OR registry number, CT account number, PA filing number). Usually combine with a single state.
active_onlyNoExclude dissolved/inactive entities (CO, CT)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the read-only/idempotent/open-world profile, and the description adds meaningful extras: which states list only active entities (NY/OR/PA) vs. include dissolved ones (CO/CT), and that source URLs are returned. Adds real value beyond the annotations, though it doesn't mention rate limits or pagination.

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, each carrying distinct load: search axes, coverage/active-state nuance, and return fields plus the sibling pointer. Front-loaded and no filler.

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?

With no output schema, the description compensates by enumerating returned fields (name, id, status, type, formation date, jurisdiction, addresses, registered agent, source URLs). Combined with coverage notes and the list_supported_states pointer, an agent has what it needs to call correctly.

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?

Schema coverage is already high (~83%), so baseline is 3. The description adds semantics on the active_only behavior by tying it to which states include dissolved entities, and clarifies the entity-name/state-id search axes beyond the schema text.

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 (search) and resource (Secretary of State business-entity registries), scopes it to name and/or state entity id, and enumerates coverage. It is clearly distinguishable from siblings like search_company by its official-registry framing.

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?

Says use for private companies, subsidiaries, LLCs, and legal-name verification, and routes the agent to list_supported_states for coverage. Clear when-to-use, though it doesn't explicitly state when to prefer search_company or get_company_profile over this.

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

search_companySearch SEC registrantsA
Read-onlyIdempotent
Inspect

Find SEC-registered public companies by ticker or name (fuzzy). Returns CIK (the SEC id used by every other tool), name, tickers, exchange and a match score (100 = exact ticker). Source: SEC company_tickers_exchange.json (companies with a listed ticker).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesTicker or company name, e.g. 'MSFT', 'berkshire', 'Tesla Inc'

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive), so the bar is lower, yet the description still adds real behavior: matching is fuzzy, a match score of 100 means an exact ticker hit, and the corpus is limited to companies with a listed ticker from company_tickers_exchange.json. That source limitation is a genuinely useful scope disclosure not present in the annotations.

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, zero filler, front-loaded with the action and immediately followed by the return contract. Every clause (fuzzy, CIK, match score, source file) carries information an agent needs.

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 no output schema, the description correctly enumerates return fields (CIK, name, tickers, exchange, match score) and names the data source and its coverage boundary. It stops short of explaining limit behavior or what an empty/low-score result means, which are the remaining gaps for a two-parameter search 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 description coverage is 50%: the query parameter is documented in the schema with the same ticker/name examples, while limit (1-25, default 5) is undocumented in both schema and description. The description adds only the fuzzy-matching nuance for query, so it neither compensates for the undocumented limit nor goes meaningfully 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?

States a specific verb+resource ('Find SEC-registered public companies') plus the accepted key types (ticker or name, fuzzy). It also distinguishes itself from siblings by noting the returned CIK is 'the SEC id used by every other tool', which positions it as the lookup entry point relative to get_company_profile and lookup_business_entity.

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 implies the correct workflow by explaining that the returned CIK feeds every other tool, so an agent can infer this is the search step preceding profile/filing calls. It does not, however, explicitly state when to prefer it over lookup_business_entity or get_company_profile, so the alternative-selection guidance is inferred rather than stated.

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.

  1. 10 tool updatesv0.1.0
    • First observedcompare_companies
    • First observedget_company_profile
    • First observedget_filing_document
    • First observedget_financials
    • First observedget_insider_trades
    • First observedget_xbrl_concept
    • First observedlist_filings
    • First observedlist_supported_states
    • First observedlookup_business_entity
    • First observedsearch_company

TDQS

A4.4/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource and action: company search vs. profile, filing listing vs. primary-document retrieval, normalized financials vs. arbitrary XBRL concepts vs. cross-company comparison, insider trades, and state registry lookup. Overlap among the financial tools is explicitly resolved in the descriptions (e.g., use get_xbrl_concept for tags not covered by get_financials).

Naming Consistency5/5

All tool names use snake_case with a predictable verb_noun structure (search_company, get_company_profile, list_filings, get_financials, etc.). Verb variety appropriately matches the operation without introducing stylistic inconsistency.

Tool Count5/5

The set contains 10 tools, well within the ideal range for a focused research server. Each tool covers a distinct part of the SEC/entity research workflow, with no obvious redundancy or thinness.

Completeness4/5

Core company research is well covered: discovery, profile, filings, primary documents, financials, XBRL concepts, comparisons, insider trades, and state registry lookup. Minor gaps remain for non-primary filing exhibits and institutional ownership/13F data, though agents can work around most needs.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Provides access to SEC filings and detailed XBRL financial data for all publicly traded U.S. companies. It enables users to search for company info, retrieve historical metrics like revenue and assets, and compare financial performance across different industries.
    6
    1
    -
  • A
    license
    A
    quality
    B
    maintenance
    Query SEC EDGAR for company filings, financial data, and executive disclosures. Search by company name or ticker, retrieve 10-K/10-Q/8-K filings, and extract structured financials — backed by the official SEC EDGAR API, built for AI agents.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Give your AI agent live SEC EDGAR data: company financials, insider trades, 8-K events, 13F holdings, and the raw filings stream — all normalized to clean JSON, every number traceable back to its sec.gov source filing.
    8
    49 PyPI
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to research US public company filings, financials, and insider transactions using SEC EDGAR data, with no API keys required. Provides tools for company lookup, recent filings, full-text search, financial facts, and insider activity.
    5
    MIT