secapi-mcp
OfficialProvides SEC financial data tools within VS Code via GitHub Copilot, enabling AI-assisted analysis of filings, insider trades, and institutional holdings.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@secapi-mcpsearch for Apple's latest 10-Q filing"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
secapi-mcp
Official Model Context Protocol server for secapi.dev.
Expose SEC filings, financial statements, insider trades, and institutional holdings as AI-native tools for Claude, Cursor, ChatGPT, Windsurf, VS Code, and any MCP-compatible client.
AI Client → MCP Tools → secapi.dev REST API → JSON Response → LLMThis server never talks to databases directly — it is a typed, validated interface over the secapi-node SDK.
Features
9 high-level AI tools designed for reasoning, not REST endpoint mirroring
SDK-first architecture — all API calls go through
secapi-nodeZod validation on every tool input
AI-friendly errors with categories, suggestions, and retry hints
Structured JSON responses with metadata and pagination
Extensible tool registry — add new tools in minutes
Production logging — structured, secrets-safe
Full test suite with Vitest
CI/CD with GitHub Actions and Changesets
Related MCP server: Signal8 MCP Server
Installation
npm install -g secapi-mcp
# or
pnpm add -g secapi-mcp
# or run via npx
npx secapi-mcpRequires Node.js 20+.
Quick Start
Get an API key from secapi.dev
Set your environment variable:
export SECAPI_API_KEY="your-api-key"Run the server (stdio transport):
secapi-mcpMCP Client Configuration
Cursor
Add to .cursor/mcp.json (or Cursor Settings → MCP):
{
"mcpServers": {
"secapi": {
"command": "npx",
"args": ["-y", "secapi-mcp"],
"env": {
"SECAPI_API_KEY": "your-api-key"
}
}
}
}Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"secapi": {
"command": "npx",
"args": ["-y", "secapi-mcp"],
"env": {
"SECAPI_API_KEY": "your-api-key"
}
}
}
}VS Code (GitHub Copilot)
Add to your VS Code MCP settings:
{
"mcp": {
"servers": {
"secapi": {
"command": "npx",
"args": ["-y", "secapi-mcp"],
"env": {
"SECAPI_API_KEY": "your-api-key"
}
}
}
}
}Windsurf
Add to Windsurf MCP configuration:
{
"mcpServers": {
"secapi": {
"command": "npx",
"args": ["-y", "secapi-mcp"],
"env": {
"SECAPI_API_KEY": "your-api-key"
}
}
}
}Available Tools
Tool | Description |
| Search SEC filings by ticker/CIK, form type, and date range |
| Get filing metadata and document list for deeper analysis |
| Search companies by name, ticker, or CIK |
| Company profile plus recent filings — ideal research starting point |
| Income statement, balance sheet, or cash flow |
| Financial ratio time series (ROE, margins, liquidity, etc.) |
| Insider buying/selling activity from Form 4 filings |
| Find institutional investors (13F filers) |
| 13F portfolio holdings for a given quarter |
Environment Variables
Variable | Required | Default | Description |
| Yes* | — | API key from secapi.dev |
| Yes* | — | Legacy alias for |
| No |
| API base URL |
| No |
| Request timeout in milliseconds |
| No |
| Retry count for transient failures |
| No |
| Enable debug logging to stderr |
| No |
| User-Agent header |
* One of SECAPI_API_KEY or SEC_API_KEY is required.
Architecture
src/
├── index.ts # stdio entry point
├── server/ # MCP server factory
├── client/ # secapi-node wrapper
├── config/ # Zod-validated configuration
├── errors/ # AI-friendly error categorization
├── logging/ # Structured, secrets-safe logging
├── schemas/ # Shared Zod schemas
├── utils/ # Response formatting
└── tools/
├── registry.ts # Tool registration system
├── types.ts # Tool definition interfaces
├── filings/ # Filing tools
├── companies/ # Company tools
├── financials/ # Financial statement tools
├── insiders/ # Insider trading tools
└── institutions/ # 13F institutional toolsAdding a New Tool
Create a tool definition in the appropriate
src/tools/<domain>/index.ts:
{
name: "my_new_tool",
description: "Clear description for the LLM...",
inputSchema: z.object({ ticker: tickerSchema }),
handler: async (input, { client }) => {
const data = await client.filings.search({ ticker: input.ticker });
return createToolResponse("my_new_tool", data.data, {
pagination: data.pagination,
});
},
}Export the module from
src/tools/index.tsif it's a new domain.
That's it — the registry handles validation, error formatting, and MCP registration.
Development
git clone https://github.com/secapi-dev/secapi-mcp.git
cd secapi-mcp
pnpm install
pnpm test
pnpm buildRun locally:
SECAPI_API_KEY=your-key pnpm startScripts
Script | Description |
| Build to |
| Run Vitest test suite |
| TypeScript type checking |
| ESLint |
| Prettier format |
Troubleshooting
"API key is required" — Set SECAPI_API_KEY in your MCP client config env block.
"Invalid or missing API key" — Verify your key at secapi.dev. Keys are never logged.
"API rate limit exceeded" — Wait and retry, or upgrade your plan.
Server not appearing in Cursor — Restart Cursor after editing MCP config. Check stderr logs with SECAPI_DEBUG=true.
FAQ
Why not mirror REST endpoints 1:1?
AI agents work better with semantic, high-level tools. company_overview is more useful than GET /entities/:id + GET /entities/:id/filings.
Can I self-host?
Yes. Set SECAPI_BASE_URL if using a custom API deployment.
How do I add more tools? See Adding a New Tool. The framework is designed for fast extension.
License
MIT — see LICENSE.
Links
secapi.dev — API platform
secapi-node — TypeScript SDK
Model Context Protocol — MCP specification
Available Tools
9 toolsanalyze_filingA
Retrieve a filing's metadata and list of attached documents (HTML, XBRL, exhibits). Use when you need to understand filing contents before deeper analysis. Requires CIK and accession number.
Examples:
analyze_filing({ cik: "0000320193", accessionNumber: "0000320193-24-000123" })
| Name | Required | Description | Default |
|---|---|---|---|
| cik | Yes | ||
| accessionNumber | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must inform behavior. It states the tool retrieves metadata and documents, implying a read-only operation, but does not disclose potential limitations (e.g., rate limits, pagination) or permissions needed. This is adequate but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with an introductory sentence explaining purpose and when to use, followed by a concrete example. Every sentence is informative and there is no extraneous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool, the description covers the main use case and prerequisites. However, without an output schema, the agent might benefit from knowing what metadata fields are returned or the structure of the documents list. Minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not explain the parameters beyond stating they are required. The example shows a correct format but adds no semantic context about what CIK or accessionNumber represent, leaving the agent to infer from names alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'filing's metadata and list of attached documents'. It distinguishes from sibling tools by framing it as a preliminary step before deeper analysis, which contrasts with siblings like company_financials or insider_trades.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use this tool ('when you need to understand filing contents before deeper analysis') and implies not to use it for searching or financial analysis. It could be improved by explicitly stating that siblings like search_filings or company_financials are for other purposes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_financialsA
Retrieve standardized financial statements for a company — income statement, balance sheet, or cash flow. Uses the latest available filing when no accession number is provided.
Examples:
company_financials({ identifier: "MSFT", statement: "income" })
company_financials({ identifier: "AAPL", statement: "balance" })
| Name | Required | Description | Default |
|---|---|---|---|
| statement | No | Financial statement type: income, balance, or cash_flow | income |
| identifier | Yes | Company ticker or CIK | |
| accessionNumber | No | Optional specific filing accession number |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description clarifies it's a read operation and uses latest filing by default. Does not discuss potential errors or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences plus examples, all essential. Front-loaded with primary action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate given no output schema; mentions standardized statements. Could be more specific about return structure but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description adds minimal parameter-level value beyond restating the enum values and identifier type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Retrieve' with specific resource 'standardized financial statements' and types enumerated. Distinct from siblings like 'analyze_filing' which is broader.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States when no accession number is provided uses latest filing. Examples illustrate usage but does not explicitly contrast with alternative tools for different needs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_overviewB
Get a comprehensive overview of a public company by ticker or CIK, including recent SEC filings. Ideal starting point for company research.
Examples:
company_overview({ identifier: "AAPL" })
company_overview({ identifier: "0000320193", filingLimit: 10 })
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Company ticker (e.g. AAPL) or CIK | |
| filingLimit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description only mentions output includes overview and recent SEC filings. Does not disclose error handling, rate limits, or side effects of input.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences plus two code examples. No wasted words. Front-loaded with purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and only partial param description. Does not explain what fields the overview contains or how SEC filings are presented. Incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers identifier meaning but filingLimit lacks description. Description does not explain filingLimit beyond schema. 50% schema coverage but description adds no param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear verb 'Get' and resource 'comprehensive overview of a public company'. Distinguishes from siblings like company_financials and company_ratios. Examples solidify understanding.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Labels itself as 'ideal starting point' but no explicit when-not-to-use or comparison to alternatives. Advises starting point but lacks exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
company_ratiosB
Get financial ratio time series for a company (profitability, liquidity, leverage, efficiency). Useful for valuation and comparative analysis.
Examples:
company_ratios({ identifier: "AAPL", ratio: "roe" })
company_ratios({ identifier: "GOOGL", limit: 12 })
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| ratio | No | Specific ratio(s) e.g. "roe", "current_ratio". Omit for all available. | |
| identifier | Yes | Company ticker or CIK |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must disclose behavioral traits. It describes the tool as retrieving data but does not explicitly state it is read-only, nor does it mention error handling, data sources, or limitations. The behavioral transparency is inadequate for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences of purpose and two example calls. Every sentence contributes useful information without redundancy, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema, the description does not explain the return format, time period, or pagination. The examples partially compensate, but the information is not fully complete for a typical usage scenario. Adequate but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 2 of 3 parameters with descriptions (67% coverage). The description adds value through examples showing typical usage (e.g., 'identifier: AAPL', 'limit: 12') and clarifies that omitting 'ratio' returns all available ratios. This adds practical meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool retrieves financial ratio time series and lists categories (profitability, liquidity, leverage, efficiency). It effectively communicates the core function but does not explicitly differentiate from siblings like 'company_financials'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions it is 'useful for valuation and comparative analysis', providing a usage context. However, it offers no guidance on when not to use the tool or how it compares to sibling tools, leaving the agent without clear decision criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insider_tradesB
Search insider trading transactions (Form 4 filings) by company ticker. Filter by buy/sell activity, transaction type, and date range. Returns officer and director trades.
Examples:
insider_trades({ ticker: "TSLA", activity: "buying", limit: 10 })
insider_trades({ ticker: "NVDA", activity: "latest" })
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| ticker | Yes | ||
| endDate | No | ||
| activity | No | Filter: all transactions, buying only, selling only, or latest | all |
| minValue | No | Minimum transaction value in USD | |
| startDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It fails to mention read-only nature, pagination, rate limits, data freshness, or behavior on invalid tickers. The description only states it 'returns officer and director trades' without further behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with two short paragraphs and two examples. It front-loads the purpose and filtering options. However, the second sentence about examples could be integrated more smoothly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters and no output schema, the description is incomplete. It lacks information about return format (e.g., fields returned), error handling, pagination, and specifics like date format validation. The tool's complexity merits more detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 33% schema description coverage, the description adds value through examples showing parameter combinations, but does not explain each parameter's meaning beyond the schema. For instance, endDate references startDate but no description; the description doesn't elaborate on date format or minValue usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches insider trading transactions (Form 4 filings) by ticker, with filtering options. It distinguishes itself from broader sibling tools like search_filings by specifying 'insider trades' and 'Form 4'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides example calls indicating typical use cases, but does not explicitly state when to avoid this tool or mention alternative tools for different types of financial data. Usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
institution_holdingsA
Get an institutional investor's 13F portfolio holdings for a given quarter. Shows positions, share counts, and market values. Requires institution CIK.
Examples:
institution_holdings({ cik: "0001067983", quarter: "2024-Q3" })
institution_holdings({ cik: "0001166559", limit: 50, sort: "weight" })
| Name | Required | Description | Default |
|---|---|---|---|
| cik | Yes | Institution CIK (10 digits, zero-padded) | |
| sort | No | Sort holdings by market value, share count, or portfolio weight | value |
| limit | No | ||
| quarter | No | Reporting quarter e.g. "2024-Q3". Defaults to latest available. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the tool is a read operation returning positions, shares, and values, but does not disclose potential limitations like data freshness, rate limits, or error handling. Adequate but could be more exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very concise: one sentence summarizing purpose, then two examples. No redundant text, and critical information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema so description partially explains return fields (positions, shares, market values), but omits full structure, pagination, or error behavior. Acceptable for a simple list tool but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 75% (all parameters described). The description adds examples and clarifies defaults (limit=25, sort='value', quarter=latest), but does not significantly extend schema meaning. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves an institutional investor's 13F portfolio holdings for a given quarter, specifying the data returned (positions, share counts, market values) and the required CIK. This is specific and distinguishes it from siblings like search_institutions or analyze_filing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly requires institution CIK and provides examples of usage. However, it lacks explicit when-not-to-use guidance or comparisons with alternatives, though the examples and resource specificity imply its context clearly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_companiesA
Search SEC-registered companies by name, ticker, or CIK. Returns entity metadata including company name, ticker, CIK, and entity type.
Examples:
search_companies({ query: "Apple" })
search_companies({ ticker: "MSFT" })
| Name | Required | Description | Default |
|---|---|---|---|
| cik | No | ||
| page | No | ||
| limit | No | ||
| query | No | ||
| ticker | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description implies read-only behavior but does not explicitly disclose safety, rate limits, or side effects. Adequate for a search tool but lacks full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise with two short paragraphs. Front-loaded purpose. No extraneous text. Slightly more structure (e.g., parameter list) would improve usability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 5 parameters, no output schema, and no annotations, the description is incomplete. Lacks explanation of required fields, error handling, pagination details, and output structure beyond basic fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%. Description partially explains query, ticker, cik parameters via examples but omits page and limit. Does not explain optionality or mutual exclusivity, leaving gaps beyond schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'search', resource 'SEC-registered companies', and specifies return fields (name, ticker, CIK, entity type). Distinct from sibling tools like search_filings or search_institutions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description specifies search criteria (name, ticker, CIK) and provides examples, but does not explicitly differentiate from siblings like search_institutions or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_filingsA
Search SEC EDGAR filings by company ticker or CIK. Filter by form type (10-K, 10-Q, 8-K, etc.) and date range. Use for discovering recent or historical regulatory filings.
Examples:
search_filings({ ticker: "AAPL", form: ["10-K", "10-Q"], limit: 5 })
search_filings({ cik: "0000320193", startDate: "2024-01-01" })
| Name | Required | Description | Default |
|---|---|---|---|
| cik | No | ||
| form | No | ||
| page | No | ||
| limit | No | ||
| ticker | No | ||
| endDate | No | ||
| startDate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior. It does not mention pagination behavior, error handling, rate limits, or that the tool is read-only. The examples show limited context but do not address what happens with empty results or API limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences plus two code examples, all front-loaded and concise. Every sentence adds information, and the examples are helpful for quick understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no output schema, and no annotations, the description covers the core functionality and key parameters but lacks details on pagination, output format, and edge cases. It is adequate for simple use but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so description must compensate. It explains ticker, cik, form, and date range, but omits 'page' and 'limit' entirely from the text (though limit appears in example). The description adds value beyond schema but does not fully cover all 7 parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches SEC EDGAR filings, specifies the identifiers (ticker or CIK) and filters (form type, date range), and distinguishes from sibling tools like search_companies or analyze_filing by focusing on filings discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use for discovering recent or historical regulatory filings' and provides practical examples. However, it does not explicitly contrast with siblings (e.g., when to use analyze_filing instead) or 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.
search_institutionsA
Search institutional investment managers (13F filers) by name or CIK. Returns hedge funds, asset managers, and other institutions that file Form 13F.
Examples:
search_institutions({ query: "Berkshire" })
search_institutions({ query: "Vanguard", limit: 5 })
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| limit | No | ||
| query | No | Institution name search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose all behavioral traits. It does not mention authentication, rate limits, error responses, or behavior for missing results. The optionality of query is unclear from the required field count.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and two examples. Purpose is front-loaded, and every sentence adds value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a search tool with 3 parameters, no output schema, and no annotations, the description is adequate but not complete. It explains the main function and provides examples but lacks details on pagination and output format.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 33% (only query has a description). The description adds meaning for query (name or CIK) but does not explain page or limit. It partially compensates but is incomplete for the two pagination parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches institutional investment managers (13F filers) by name or CIK, with specific examples. It distinguishes itself from sibling tools like search_companies and search_filings by specifying the resource type.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for searching institutions but does not provide when-not-to-use guidance or alternatives like institution_holdings or analyze_filing. The context is clear but lacks explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
9 tool updates
v0.2.1- First observed
analyze_filing - First observed
company_financials - First observed
company_overview - First observed
company_ratios - First observed
insider_trades - First observed
institution_holdings - First observed
search_companies - First observed
search_filings - First observed
search_institutions
TDQS
Each tool has a clearly distinct purpose: filing analysis, financials, company overview, ratios, insider trades, institutional holdings, and search functions for companies, filings, and institutions. No overlapping responsibilities.
All tool names use snake_case, but there is a mix of verb-first (analyze_filing, search_*) and noun-first (company_*, institution_holdings) patterns. While readable, the inconsistency prevents a perfect score.
With 9 tools, the server covers the essential SEC data retrieval operations without being bloated or too sparse. Each tool serves a well-defined need.
Core SEC filing and company data operations are covered (search, retrieve, analyze). Minor gaps exist, such as direct XBRL data extraction or historical filing comparisons, but the surface is largely complete for common workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
SEC filing intelligence for AI agents. Financials, screening, peer comparison for 5,000+ companies.
Provide AI assistants with real-time access to official SEC EDGAR filings and financial data. Enab…
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceEnables deep analysis of SEC EDGAR filings through universal company search, document content extraction, and advanced filing search capabilities. Provides AI-ready access to business descriptions, risk factors, financial statements, and full-text search across any public company's SEC documents.-

Signal8 MCP Serverofficial
AlicenseAqualityDmaintenanceProvides AI agents with direct access to SEC filing intelligence, company fundamentals, dilution risk scoring, and cross-company analytics for financial research.871951MIT- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to SEC EDGAR filings for retrieving company data, financial statements, and insider transactions with exact precision.MIT
- AlicenseNot gradedqualityCmaintenanceEnables to search and retrieve SEC EDGAR filings, insider transactions, major shareholders, and executive compensation data through natural language.25MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/secapi-dev/secapi-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server