Skip to main content
Glama
agentladle

agentladle/mcp-sec

by agentladle

AgentLadle MCP SEC

English | 中文 | 📺 Watch Demo

🇨🇳/🇭🇰 Cloud-hosted MCP for A-share & HK listed companies (Past 3 years annual & latest interim reports). Read more | Get API Key

A MCP (Model Context Protocol) server that provides tools for discovering, downloading, parsing, and searching U.S. SEC financial reports.

It enables AI assistants (Claude, Cursor, etc.) to access SEC EDGAR data through 6 structured tools — from discovering available filings to keyword-searching within their pages.

Features

  • 6 MCP tools for SEC financial data: state-driven retrieval (search directly, fallback to download/parse only when needed)

  • Professional SEC document parsing using edgartools — accurate page-break detection and structured node-tree extraction for iXBRL filings

  • Local keyword search with TF + position-boost scoring, zero external dependencies

  • Idempotent — already-downloaded/parsed files are automatically skipped

  • Zero-config install — one line to add to your MCP client, no clone or manual setup needed

  • Pure Python, cross-platform (Windows / macOS / Linux)

Related MCP server: mcp-edgar

Prerequisites

Note: After installing uv, restart your terminal and MCP client (e.g. Cherry Studio) to ensure the uv command is recognized.

Quick Start

Add to your MCP client configuration (Claude Desktop, Cursor, etc.):

{
  "mcpServers": {
    "mcp-sec": {
      "command": "uvx",
      "args": ["agentladle-mcp-sec"],
      "env": {
        "SEC_EMAIL": "your@email.com"
      }
    }
  }
}

That's it. uvx will automatically download the package and its dependencies from PyPI — no clone, no manual install, no path configuration.

⚠️ SEC Email Requirement: Replace your@email.com with your real email. The SEC requires a valid email in the User-Agent header. Using a fake email may result in your IP being blocked.

Alternative: pip install

If you prefer managing the environment yourself:

pip install agentladle-mcp-sec

Then configure:

{
  "mcpServers": {
    "mcp-sec": {
      "command": "agentladle-mcp-sec",
      "env": {
        "SEC_EMAIL": "your@email.com"
      }
    }
  }
}

Alternative: Run from source (local development)

Clone the repository and run directly:

git clone https://github.com/agentladle/mcp-sec.git

Then configure your MCP client:

{
  "mcpServers": {
    "mcp-sec": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/mcp-sec", "agentladle-mcp-sec"],
      "env": {
        "SEC_EMAIL": "your@email.com"
      }
    }
  }
}

Replace /path/to/mcp-sec with the actual path to the cloned repository.

Data Flow

SEC EDGAR API                     Local Files (~/.agentladle/mcp-sec/data/)
──────────────                    ──────────────────────────────
company_tickers.json   ──→       company_tickers.json         (ticker→CIK mapping)
                                     │
SEC Submissions API    ──→        html/{TICKER_FORM_DATE}/    (Tool 2: primary + HTML exhibits)
                                     │
edgartools parsing     ──→        json/*.json                 (Tool 3: parse, page-split)
                                     │
Local TF search        ──→        search results              (Tool 4: keyword search)
Page range read        ──→        page content                (Tool 5: read pages)
TOC lookup             ──→        table of contents           (Tool 6: get TOC)

Tools

#

Tool

Description

1

list_sec_filings

Discover available SEC filings for a company

2

download_sec_report

Download SEC filing; 6-K/8-K include HTML exhibits by default (PDF skipped)

3

parse_sec_report

Parse HTML into page-split JSON using edgartools

4

keyword_search

Full-text keyword search with TF relevance scoring

5

get_report_pages

Read report content by page number range

6

get_report_toc

Get the Table of Contents page(s)

7

lookup_ticker_cik

Diagnostic: look up ticker→CIK mapping when CIK resolution fails

Tool 1: list_sec_filings

List available SEC filings for a company. Use this tool ONLY when the exact year/date is unspecified by the user, or when a download attempt fails due to an invalid date.

Parameter

Type

Required

Description

ticker

string

Stock ticker, e.g. "AAPL"

form

string

Filing type filter, e.g. "10-K". Omit to list all financial report types (10-K, 10-Q, 20-F, 6-K, 8-K, 40-F)

limit

int

Max filings to return, default 5, max 20

Tool 2: download_sec_report

Download a specific SEC filing from EDGAR. For 6-K/8-K, also downloads HTML exhibits by default (PDF exhibits are skipped, not parsed). Idempotent.

Parameter

Type

Required

Description

ticker

string

Stock ticker, e.g. "AAPL"

form

string

Filing type: "10-K", "10-Q", "20-F", "6-K", "8-K"

report_date

string

Report date (fiscal period end date), e.g. "2025-01-31"

include_exhibits

bool

Download HTML exhibits. Default: true for 6-K/8-K, otherwise false. PDFs are never parsed

Tool 3: parse_sec_report

Parse a downloaded HTML filing into page-split JSON. Uses edgartools mark_page_breaks() + parse_html() for professional SEC document parsing.

Parameter

Type

Required

Description

ticker

string

Stock ticker

form

string

Filing type

report_date

string

Report date (fiscal period end date)

Tool 4: keyword_search

Full-text keyword search across all pages. Results ranked by TF + position-boost score.

Parameter

Type

Required

Description

ticker

string

Stock ticker

form

string

Filing type

report_date

string

Report date (fiscal period end date)

keywords

string[]

1–5 search keywords

match_mode

string

"ANY" (default, any keyword matches) / "ALL" (all must match)

max_results

int

Max results to return, default 5, max 50

Tool 5: get_report_pages

Read full page content by page number range.

Parameter

Type

Required

Description

ticker

string

Stock ticker

form

string

Filing type

report_date

string

Report date (fiscal period end date)

start_page

int

Start page number (1-based)

page_count

int

Number of pages to return, default 3, max 5

Tool 6: get_report_toc

Get the Table of Contents page(s). Searches the first 10 pages for "Table of Contents".

Parameter

Type

Required

Description

ticker

string

Stock ticker

form

string

Filing type

report_date

string

Report date (fiscal period end date)

Tool 7: lookup_ticker_cik

Diagnostic tool: look up ticker→CIK mapping. Use only when download_sec_report / list_sec_filings returns CIK not found or Ticker not found. Bypasses the session failed-ticker cache and returns same-CIK alias tickers.

Parameter

Type

Required

Description

ticker

string

Stock ticker, e.g. "BABA"

refresh

bool

Force re-download of company_tickers.json from SEC (default: false)

Configuration

On first run, a default config file is created at ~/.agentladle/mcp-sec/config.yaml:

sec:
  email: ""

paths:
  data_dir: "~/.agentladle/mcp-sec/data"
  html_dir: "~/.agentladle/mcp-sec/data/html"
  json_dir: "~/.agentladle/mcp-sec/data/json"

download:
  delay_between_requests: 0.2
  min_file_size: 5000

The email field is used to build the SEC-compliant User-Agent header (AgentLadleMcpSec {email}). You can configure it in three ways (in order of priority):

  1. Environment variable SEC_EMAIL — recommended, set it in your MCP client JSON config

  2. Config file — edit ~/.agentladle/mcp-sec/config.yaml and set email

  3. Default — if empty, a placeholder email is used (not recommended for production)

⚠️ SEC User-Agent Policy: The SEC requires a real email in the User-Agent header. Using the default placeholder may result in your IP being blocked and can cause intermittent ticker→CIK lookup failures. SEC_EMAIL is required — please configure it.

Data Directory Structure

~/.agentladle/mcp-sec/
├── config.yaml                        # Configuration (auto-created)
└── data/
    ├── company_tickers.json           # ticker→CIK mapping (auto-downloaded & cached)
    ├── html/                          # Downloaded HTML filings
    │   ├── AAPL_10-K_2025-01-31.htm
    │   └── ...
    └── json/                          # Parsed page-split JSON
        ├── AAPL_10-K_2025-01-31.json
        └── ...

File naming convention: {TICKER}_{FORM}_{REPORT_DATE}.htm/json

Example Usage

The tools are designed with an EAFP (Easier to Ask for Forgiveness than Permission) approach. AI assistants should attempt to retrieve data directly and rely on errors to trigger downloads.

Scenario A: File already exists locally (Shortest Path)

User: "Analyze AAPL's latest 10-K management discussion"

1. keyword_search(ticker="AAPL", form="10-K", report_date="2025-01-31", keywords=["management", "discussion"])
   → Returns page snippets matching the keywords immediately.

Scenario B: File missing (Fallback triggered)

User: "What is Tesla's 2024 revenue?"

1. keyword_search(ticker="TSLA", form="10-K", report_date="2024-12-31", keywords=["revenue", "net sales"])
   → Error: File not found.
   
2. download_sec_report(ticker="TSLA", form="10-K", report_date="2024-12-31")
   → Downloads HTML to ~/.agentladle/mcp-sec/data/html/
   
3. parse_sec_report(ticker="TSLA", form="10-K", report_date="2024-12-31")
   → Parses into JSON.
   
4. keyword_search(ticker="TSLA", form="10-K", report_date="2024-12-31", keywords=["revenue", "net sales"])
   → Retries search and returns data.

Tech Stack

Component

Choice

Purpose

MCP Framework

mcp (FastMCP)

MCP server with stdio transport

HTTP Client

httpx

SEC API requests & file downloads

HTML Parsing

edgartools + beautifulsoup4

Professional SEC iXBRL parsing (page-break detection + node tree)

Search

Python built-in

TF + position-boost scoring

Config

pyyaml

YAML configuration file

Project Structure

src/mcp_sec/
├── __init__.py
├── server.py          # MCP Server entry point
├── config.py          # Config loading (~/.agentladle/mcp-sec/config.yaml, singleton cached)
├── models.py          # Data models
├── tools/
│   ├── list_filings.py # Tool 1: list_sec_filings
│   ├── download.py    # Tool 2: download_sec_report
│   ├── parse.py       # Tool 3: parse_sec_report
│   ├── search.py      # Tool 4: keyword_search
│   ├── page.py        # Tool 5: get_report_pages
│   └── toc.py         # Tool 6: get_report_toc
└── services/
    ├── downloader.py  # SEC EDGAR download + ticker→CIK
    ├── parser.py      # HTML→JSON parsing (edgartools)
    └── searcher.py    # Local JSON search + TF scoring

License

MIT

Available Tools

7 tools
download_sec_reportA

Download a SEC report from EDGAR for the specified company, form type, and report date. For 6-K/8-K, also downloads HTML exhibits by default (PDF exhibits are skipped, not parsed).

Args: ticker: Stock ticker symbol, e.g. "AAPL" form: Report type, e.g. "10-K", "10-Q", "20-F", "6-K", "8-K", "40-F" report_date: Report date (fiscal period end date) or fiscal year, e.g. "2023" or "2025-01-31" include_exhibits: Whether to download HTML exhibits. Default: true for 6-K/8-K, false otherwise. PDF exhibits are never parsed.

ParametersJSON Schema
NameRequiredDescriptionDefault
formYes
tickerYes
report_dateYes
include_exhibitsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden. It clearly discloses that PDF exhibits are skipped and never parsed, that HTML exhibits are included by default for 6-K/8-K, and that a successful download must be followed by parse_sec_report. It also notes the pdf_not_supported limitation, providing useful operational transparency.

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?

The description is well organized with purpose, strategy, critical rules, and args. However, there is some redundancy: 'PDF exhibits are skipped, not parsed' appears twice, and the proactive-call warning overlaps with critical rule 1. Still, the structure is clear and all content is relevant.

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?

The description provides fallback triggers, post-download parse requirements, exhibit handling rules, and parameter semantics. An output schema exists, so return value details are not necessary in the description. This is complete enough for an agent to use the tool correctly within the sibling workflow.

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 description coverage is 0%, so the description fully compensates by giving concrete examples: ticker like 'AAPL', form types like '10-K' and '6-K', report_date as fiscal period end date or fiscal year, and include_exhibits with context-dependent defaults plus the note that PDF exhibits are never parsed.

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 uses a specific verb and resource: 'Download a SEC report from EDGAR for the specified company, form type, and report date.' It also mentions exhibit handling for 6-K/8-K, which adds detail and distinguishes this tool from siblings like keyword_search and parse_sec_report.

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?

The <strategy> block explicitly states to invoke this tool 'ONLY as a fallback when keyword_search, get_report_pages, or get_report_toc explicitly returns a "file not found" error' and includes 'Do not proactively call this tool without receiving an error first.' Critical rule 1 reinforces the search-before-download ordering, making the usage conditions unambiguous.

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

get_report_pagesA

Retrieve full page content for a range of pages from a report.

Args: ticker: Stock ticker symbol form: Report type report_date: Report date (fiscal period end date) start_page: Starting page number (1-based) page_count: Number of consecutive pages to return, default 3, max 5

ParametersJSON Schema
NameRequiredDescriptionDefault
formYes
tickerYes
page_countNo
start_pageYes
report_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries full responsibility for behavioral disclosure. It reveals error behavior (returning an error if file is missing, prompting download/parse) and warns about context overflow from excessive page_count. While it does not mention auth needs or rate limits, it addresses key operational risks and dependencies, going beyond a minimal description.

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?

The description is well-structured with sections for strategy, critical rules, and arguments. It is appropriately sized for a tool with 5 parameters and complex usage patterns. Some redundancy exists between the strategy statement and critical rule 1 (both emphasize not using blindly and finding start_page first), but overall it is efficient and scannable.

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?

Given the presence of an output schema, the description need not explain return values. It covers usage context (when to call, prerequisites), error behavior, and page_count limits. It adequately describes all required parameters. Minor gaps include potential edge cases like invalid start_page, but these are not critical for basic invocation. The description provides enough context for successful tool selection and use.

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?

The input schema provides zero descriptions for parameters (0% coverage). The description compensates fully through the 'Args' list, explaining each parameter: ticker, form, report_date (fiscal period end date), start_page (1-based), and page_count (default 3, max 5). This is exactly the meaning the schema would otherwise lack, making the tool usable.

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 opens with a clear and specific action: 'Retrieve full page content for a range of pages from a report.' It identifies the exact resource (report pages) and scope (range, continuous blocks). It also distinguishes itself from sibling keyword_search by explicitly stating that tool is for specific data points, making purpose boundaries obvious.

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?

The <strategy> block provides explicit guidance on when to invoke this tool ('Directly invoke this tool to retrieve large, continuous blocks of text'), when not to use it ('If looking for specific data points, use keyword_search instead'), and prerequisites ('typically called after keyword_search or get_report_toc has provided the starting page'). Critical rules reinforce the need to determine start_page first, effectively outlining the correct workflow.

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

get_report_tocA

Retrieve the Table of Contents of a report. Also returns structured section metadata (Item numbers and page locations) if available.

Args: ticker: Stock ticker symbol form: Report type report_date: Report date (fiscal period end date)

ParametersJSON Schema
NameRequiredDescriptionDefault
formYes
tickerYes
report_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It reveals error behavior ('if missing, an error will prompt you to download and parse') and performance characteristics ('Reading TOC to find a chapter and then reading pages is much slower than direct keyword search'). It does not cover auth or rate limits, but the output schema exists, so return-value details are not required in the description.

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?

The description is well-structured with strategy and critical rules sections, each sentence earning its place. The Args section is redundant with the schema, but it is short and does not detract significantly. Overall it is appropriately sized for the complexity.

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?

The description provides strong usage guidance, alternatives, error behavior, and performance considerations. It is missing detailed parameter formats, but given the output schema exists and the tool is relatively simple, the description gives enough context for an agent to select and invoke it correctly for most cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the description merely lists parameter names without adding any semantics. It does not define what 'form' values are accepted, what date format 'report_date' expects, or how 'ticker' should be provided. The names are self-explanatory to a domain expert, but the description adds no value beyond the schema itself.

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 opens with a specific verb+resource: 'Retrieve the Table of Contents of a report,' and adds that it returns structured section metadata. It clearly differentiates from siblings by explicitly naming get_report_pages and keyword_search as alternatives for different use cases.

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?

Usage guidelines are explicit and thorough. The strategy block states when to use the tool ('when you need an overview or want to read a specific chapter in its entirety'), and the critical rules give a clear when-not-to-use: 'If you only need to locate specific numbers or singular facts, do NOT use this tool. Use keyword_search instead.' It also advises against using it when performance matters.

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

list_sec_filingsA

List available SEC filings for a company.

User: "Give me Microsoft's latest 10-K details." -> Use list_sec_filings to find the most recent report_date, then proceed.

Args: ticker: Stock ticker, e.g. "AAPL" form: Filing type filter, e.g. "10-K". Omit to list all financial report types. limit: Max number of filings to return, default 5, max 20

ParametersJSON Schema
NameRequiredDescriptionDefault
formNo
limitNo
tickerYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden of behavioral disclosure. It does clarify that this tool is for verifying available dates and is not a mandatory first step, but it does not explicitly state that the operation is read-only, nor does it describe any rate limits, sorting, pagination, or response behavior. For a listing tool this is acceptable 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a summary, strategy, critical rules, examples, and Args. It is longer than necessary, and the strategy/critical_rules sections slightly overlap, but every section serves a distinct purpose and the content is front-loaded with the core purpose first.

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?

Given that an output schema exists, the description covers the essential context: when to use, when to skip, parameter meanings, and example flows. It does not elaborate on return value details, but the output schema presumably handles that. Overall this is a complete, decision-useful description.

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?

Although the input schema has 0% description coverage, the description's 'Args' section fully compensates by explaining each parameter: ticker with an example, form as a filing type filter with the ability to omit, and limit with default and max values. This adds clear meaning beyond the schema's bare type definitions.

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 opens with 'List available SEC filings for a company,' a specific verb+resource statement that clearly distinguishes this tool from siblings like keyword_search and download_sec_report. The examples reinforce the purpose by showing when to list filings versus skipping to search or download.

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?

The description provides explicit when-to-use and when-not-to-use guidance: skip this tool if the user specifies a year/date, and instead go to keyword_search or download_sec_report. It also states the fallback condition (if download fails due to invalid date/missing filing) and includes concrete examples for both skip and use cases.

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

lookup_ticker_cikA

Look up the SEC CIK mapping for a ticker symbol. Diagnostic / recovery tool.

Args: ticker: Stock ticker symbol, e.g. "BABA" refresh: Force re-download of company_tickers.json from SEC (default: false)

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYes
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/5.0
Behavior5/5

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

With no annotations, the description carries full burden and does so well. It discloses that the tool bypasses and can clear the session-level failed-ticker blacklist, explains cache-first behavior via refresh=false, and notes alias retry behavior—all critical operational traits beyond the schema.

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?

The description is longer than minimal but well-structured with a one-line summary, strategy, critical rules, and an example. Every section adds actionable value and the critical rules are front-loaded after the summary, making it easy for an agent to parse.

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?

The description covers trigger conditions, recovery workflow, cache/refresh policy, side effects, and alias retry. Since an output schema exists, it does not need to explain return values, and the included operational guidance makes it complete for this diagnostic tool.

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 0%, but the description fully compensates. It explains 'ticker' with the example 'BABA' and clarifies 'refresh' as 'Force re-download of company_tickers.json from SEC (default: false)', adding practical meaning beyond the bare schema fields.

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 opens with a specific verb+resource: 'Look up the SEC CIK mapping for a ticker symbol.' It also labels the tool as a 'Diagnostic / recovery tool,' clearly distinguishing it from siblings like download_sec_report or list_sec_filings.

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?

The <strategy> section states exactly when to invoke: ONLY when download_sec_report or list_sec_filings returns 'CIK not found' or 'Ticker not found', and explicitly says not to use it as a routine first step. It also provides post-lookup retry guidance and alias handling.

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

parse_sec_reportA

Parse a downloaded HTML report (and HTML exhibits, if present) into a page-split JSON file. Typically called immediately after download_sec_report completes.

Args: ticker: Stock ticker symbol, e.g. "AAPL" form: Report type, e.g. "10-K", "10-Q", "6-K", "8-K" report_date: Report date (fiscal period end date), e.g. "2025-01-31"

ParametersJSON Schema
NameRequiredDescriptionDefault
formYes
tickerYes
report_dateYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the full burden. It discloses the main behavior (parsing to JSON) and sequencing ('typically called immediately after download'), but lacks details on side effects, error handling, or whether existing JSON files are overwritten. However, parsing is inherently non-destructive, and the description does not contradict any 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?

The description is front-loaded with a clear one-sentence summary, followed by concise, well-structured strategy and critical rules sections. The Args list is formatted cleanly with examples, ensuring every line adds value without 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?

An output schema exists, so return values don't need explanation. The description covers purpose, usage conditions, and all parameter semantics, making it quite complete. Minor gaps include a lack of detail on how 'page-split' is structured or how exhibits are handled, but these are likely addressed by the output schema and are not critical.

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 0%, but the description fully compensates by defining each parameter with examples: 'ticker: Stock ticker symbol, e.g. AAPL', 'form: Report type, e.g. 10-K, 10-Q, 6-K, 8-K', and 'report_date: Report date (fiscal period end date), e.g. 2025-01-31.' It even clarifies the specific meaning of report_date, which is absent from 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?

The first sentence clearly states the tool's function: 'Parse a downloaded HTML report (and HTML exhibits, if present) into a page-split JSON file.' This specifies the verb (parse), resource (downloaded HTML report), and output (page-split JSON). The mention of 'immediately after download_sec_report' distinguishes it from sibling tools like search or listing.

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?

The 'strategy' section explicitly lists two specific system states when the tool should be invoked: after a successful download via download_sec_report, or when a retrieval tool returns a parsing error. The 'critical_rules' further states 'Never call this tool preemptively,' providing clear exclusions and naming the prerequisite tool.

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.

  1. 7 tool updatesv0.1.0
    • First observeddownload_sec_report
    • First observedget_report_pages
    • First observedget_report_toc
    • First observedkeyword_search
    • First observedlist_sec_filings
    • First observedlookup_ticker_cik
    • First observedparse_sec_report

TDQS

A4.5/5.0
Disambiguation5/5

Each tool targets a distinct stage of the SEC report lifecycle: discovery (list_sec_filings, lookup_ticker_cik), acquisition (download_sec_report), processing (parse_sec_report), and content access (keyword_search, get_report_pages, get_report_toc). The detailed strategy notes explicitly separate search vs. page reading vs. TOC retrieval, so an agent can reliably select the right tool.

Naming Consistency4/5

Six of seven tools follow a clear verb_noun pattern (download_, parse_, get_, list_, lookup_), but keyword_search breaks the convention by leading with a noun/modifier instead of a verb (e.g., search_keywords would be consistent). Overall the pattern is still predictable and readable.

Tool Count5/5

Seven tools is well-scoped for the server's purpose: a complete pipeline from ticker resolution to full-text search and page retrieval. Each tool covers a distinct function without redundancy, and the count sits comfortably in the ideal 3-15 range.

Completeness5/5

The tooling covers the full lifecycle of SEC report analysis: listing available filings, resolving tickers, downloading, parsing, searching, navigating via TOC, and reading specific page ranges. There are no obvious dead ends; the explicit fallback flow from error-prone tools to download/parse/lookup ensures agents can recover.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Provides access to SEC EDGAR financial data, enabling AI agents to fetch company filings, financial metrics, and narrative sections. It supports natural-language metric searching and extracts structured data from 10-K, 10-Q, and 8-K reports.
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to access SEC EDGAR data: search filings, extract sections, pull structured financials, and track insider transactions.
    22
    MIT
  • A
    license
    Not graded
    quality
    B
    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.
    MIT

Latest Blog Posts

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/agentladle/mcp-sec'

If you have feedback or need assistance with the MCP directory API, please join our Discord server