headless-records-mcp
This server provides structured, non-advisory access to public SEC Form 4 insider filing data via the Headless Records API. Here's what you can do:
Check data freshness (
get_freshness): Retrieve the freshness status of the watched-ticker universe, indicating how up-to-date the SEC filing coverage is, with a configurable freshness window (1–168 hours).Assess insider activity (
assess_insider_activity): Get a deterministic, factual summary of reported SEC Form 4 insider trading activity for a specific ticker over a chosen time period (30, 90, or 180 days), without any investment recommendations or trading signals.Retrieve filing provenance (
get_filing_provenance): Look up the source provenance of a specific imported SEC Form 4 filing by accession number, including the source document URL, retrieval timestamp, and SHA-256 hash.
All interactions are non-advisory and confined to publicly available SEC Form 4 data from a bounded, watched-ticker universe, and do not constitute financial advice.
Click on "Deploy 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., "@headless-records-mcpassess insider activity for AAPL"
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.
Headless Records MCP Server
A local Model Context Protocol (MCP) stdio server that gives agents structured, non-advisory access to public SEC Form 4 insider filing data via the hosted Headless Records API.
The server is a thin wrapper: it validates tool input, calls https://api.headlessrecords.dev, and returns the API's JSON responses as formatted text. It does not call SEC directly, does not connect to a database, and does not run ingestion jobs.
Full API documentation: headlessrecords.dev · OpenAPI spec
Safety and Scope
Responses summarize public SEC Form 4 filing data from a bounded, watched-ticker universe. They do not imply full-market coverage.
Output is not financial advice. The server provides no buy, sell, hold, bullish, bearish, price prediction, alpha, trading signal, or investment recommendation guidance.
API caveats, methodology notes, request IDs, timestamps, and source provenance are preserved in tool output so agents can show context rather than over-compress results.
Related MCP server: sec-edgar-mcp
Requirements
Node.js 20 or later (uses the built-in
fetch)A Headless Records API key (
hr_live_prefix) — request design partner accessNo key yet? Try the open preview endpoint:
curl https://api.headlessrecords.dev/v1/ticker/TSLA/previewInstall and Build
npm install
npm run buildThe compiled server is written to dist/index.js.
Configuration
The server is configured entirely through environment variables read from the process. Export them in your shell or set them in your MCP client config. (.env.example is a reference file only; the server does not auto-load .env.)
Required:
HEADLESS_RECORDS_API_KEY— your API key, sent as theX-API-Keyheader.
Optional:
HEADLESS_RECORDS_API_BASE_URL— defaults tohttps://api.headlessrecords.dev.HEADLESS_RECORDS_TIMEOUT_MS— per-request timeout, defaults to10000.
Do not commit real API keys.
Running
Run from source:
HEADLESS_RECORDS_API_KEY=hr_live_REPLACE_ME npm startRun the built stdio server:
HEADLESS_RECORDS_API_KEY=hr_live_REPLACE_ME node /absolute/path/to/dist/index.jsMCP Client Configuration
Example configuration for Cursor, Claude Desktop, or any MCP client, after npm run build:
{
"mcpServers": {
"headless-records": {
"command": "node",
"args": ["/absolute/path/to/dist/index.js"],
"env": {
"HEADLESS_RECORDS_API_KEY": "hr_live_REPLACE_ME"
}
}
}
}Tools
get_freshness
Returns freshness status for the configured watched-ticker universe.
{
"freshness_window_hours": 24
}freshness_window_hours(optional integer, 1–168, default24)
Calls GET /v1/freshness.
assess_insider_activity
Returns a deterministic, non-advisory summary of reported SEC Form 4 insider activity for a ticker. Tickers are normalized to uppercase before the API call.
{
"ticker": "TSLA",
"period": "90d",
"freshness_window_hours": 24
}ticker(required string)period(optional, one of30d,90d,180d, default90d)freshness_window_hours(optional integer, 1–168, default24)
Calls GET /v1/insider-activity/{ticker}/assessment.
get_filing_provenance
Returns source provenance for an imported SEC Form 4 filing, including the source document URL, retrieval timestamp, and SHA-256 hash when available.
{
"accession_number": "0000001001-26-000123"
}accession_number(required string)
Calls GET /v1/provenance/filing/{accession_number}.
Error Behavior
Tool errors are returned as structured JSON with a stable code field:
Missing, invalid, or revoked API keys surface as
unauthorized(HTTP 401).Rate limits surface as
rate_limited(HTTP 429), includingretry_afterwhen the API provides it.Timeouts, network failures, and invalid responses surface as
timeout,network_error, andinvalid_json.API request IDs are preserved in error output when available.
Raw
hr_live_...API keys are redacted from all error text.
Development
npm testTests run with Vitest and use mocked HTTP; they never call the live API.
Known Limitations
Local stdio server only; this is not a hosted remote MCP server.
Requires a valid
HEADLESS_RECORDS_API_KEYand inherits the API's per-key rate limits.Coverage is bounded to the watched-ticker universe and imported filings; it does not fetch SEC data live.
Does not manage watched tickers, billing, or authentication flows.
Returns formatted JSON text; it does not transform API output into advice.
Available Tools
3 toolsassess_insider_activityB
Return a deterministic, non-advisory summary of reported public SEC Form 4 insider activity for a ticker. This uses bounded watched-ticker and imported-filing coverage and does not provide buy, sell, hold, bullish, bearish, price prediction, alpha, trading signal, or investment recommendation guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| period | No | 90d | |
| ticker | Yes | ||
| freshness_window_hours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides substantive behavioral disclosure: it is 'deterministic,' 'non-advisory,' and explicitly states what it does NOT provide (buy, sell, hold, etc.). It mentions coverage limitations. This goes well beyond basic transparency, though it could add details on error handling 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?
The description is two sentences with no filler. The first sentence front-loads the core purpose, and the second sentence effectively clarifies limitations. Every word serves a purpose, achieving high conciseness.
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?
Despite the clear purpose, the description lacks completeness: no output schema exists, and the summary format is not described. The three parameters are left unexplained, and there is no guidance on parameter interactions or expected behavior. Important context about the 'bounded' coverage is vague.
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 description does not explain any of the three parameters (ticker, period, freshness_window_hours). Schema coverage is 0%, and the description adds no meaning beyond the input schema. For example, it doesn't describe how 'period' affects the summary or what 'freshness_window_hours' controls.
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 returns a 'deterministic, non-advisory summary of reported public SEC Form 4 insider activity for a ticker.' It specifies the resource (insider activity) and verb (return summary), and distinguishes from investment advice. However, it does not explicitly differentiate from sibling tools, though they appear unrelated.
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 SEC Form 4 insider activity but does not provide explicit guidance on when to use versus alternatives. It notes that the tool uses 'bounded watched-ticker and imported-filing coverage' and does not offer recommendations, which partially clarifies scope. No direct when-not or sibling comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_filing_provenanceB
Return source provenance for an imported SEC Form 4 filing, including source document URL, retrieval timestamp, and SHA-256 hash when available. This summarizes public SEC filing data provenance and does not provide buy, sell, hold, price prediction, or investment recommendation guidance.
| Name | Required | Description | Default |
|---|---|---|---|
| accession_number | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool summarizes 'public SEC filing data provenance', implying a read-only operation. It includes a disclaimer about not providing investment advice. However, it does not explicitly declare read-only status, rate limits, or authentication requirements.
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 consists of two sentences with no redundancy. The first sentence provides the core purpose, and the second adds a necessary disclaimer. Every word serves a 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?
Given the absence of annotations, output schema, and parameter descriptions, the description is incomplete. It mentions return fields (URL, timestamp, hash) but does not address error handling, format, or how the parameter is used. The agent may not be able to reliably invoke the tool.
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 has one required string parameter 'accession_number' with minLength 1, but the description does not explain its meaning, format, or how it relates to provenance. With 0% schema description coverage, the description should clarify the parameter, but it fails to do so.
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 'Return' and the resource 'source provenance for an imported SEC Form 4 filing'. It specifies what is included (URL, timestamp, hash). It distinguishes from siblings like 'assess_insider_activity' and 'get_freshness' by focusing on provenance.
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 no guidance on when to use this tool versus the sibling tools. It does not mention prerequisites, constraints, or specific contexts. The agent would need to infer usage from the tool name and sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_freshnessC
Return freshness status for the configured Headless Records watched ticker universe. This summarizes public SEC filing data coverage status, does not imply full-market coverage, and the watched ticker coverage is bounded.
| Name | Required | Description | Default |
|---|---|---|---|
| freshness_window_hours | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that coverage is not full-market and bounded, adding context beyond the name. However, lacks mention of read-only nature, authentication requirements, or error behavior. Annotations are absent, so description carries full burden but falls short.
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 with no fluff. First sentence delivers primary purpose, second adds important caveats. Efficient and well-structured.
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 no output schema, description does not describe return format or example output. Also missing parameter guidance. Only covers purpose and a single caveat, leaving significant gaps for agent decision-making.
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% and description does not mention the single parameter (freshness_window_hours). No additional meaning provided beyond what the schema already states.
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 returns freshness status for a specific universe (Headless Records watched ticker universe) and distinguishes from siblings by focusing on coverage status rather than insider activity or filing provenance.
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?
No guidance on when to use this tool vs alternatives (assess_insider_activity, get_filing_provenance). No explicit usage conditions or 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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
assess_insider_activity - First observed
get_filing_provenance - First observed
get_freshness
TDQS
Scored across 3 tools
Each tool targets a distinct aspect: insider activity summary, filing provenance, and data freshness. No overlap.
All tools follow a consistent verb_noun pattern with snake_case: assess_insider_activity, get_filing_provenance, get_freshness.
3 tools is slightly below typical range, but the scope is narrow and each tool serves a clear purpose. No unnecessary tools.
Core functions are covered, but missing features like listing tickers or raw filing data. The bounded nature partly justifies the gaps.
Maintenance
Related MCP Connectors
SEC EDGAR filings for AI agents: company lookup, filings, financials, insider trades. No keys.
SEC EDGAR filings for AI agents: company lookup, filings, financials, insider trades. No keys.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
US government data as clean JSON for AI agents: SAM.gov contract opportunities, USAspending awards, Grants.gov grants, House STOCK Act trades, and SEC EDGAR filings (Form 4 insider trades, 8-K events, 13F holdings, 13D/G stakes, XBRL fundamentals, 10-K/10-Q sections). 19 read-only tools. Data is as fresh as each source publishes; congressional trades lag up to 45 days and report dollar ranges (House only). Free tier, no card.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables LLMs to access SEC EDGAR data: search filings, extract sections, pull structured financials, and track insider transactions.24 npmMIT
- AlicenseNot gradedqualityDmaintenanceHosted MCP server that gives AI agents real-time access to SEC EDGAR filings search, 10-K/8-K reading, XBRL financial facts, and insider-trade (Form 4) alerts.11 npm1MIT
- AlicenseNot gradedqualityBmaintenanceProvides access to SEC EDGAR 13F institutional holdings, Form 4 insider trading, and smart money convergence signals for AI agents via the Model Context Protocol.27 npm2MIT
- FlicenseNot gradedqualityDmaintenanceAn always-on engine that watches SEC EDGAR for insider trading (Form 4) and material event (8-K) filings, alerting users through AI agents via MCP tools.-