MCP Prompts
edgar.tools ships five recipe prompts alongside its tool catalog. A prompt is a server-defined instruction template your AI client materializes — you supply a few arguments, and the server returns a structured workflow text that tells the AI exactly which tools to call and how to compose the output.
Prompts are the "click-to-run" surface for cross-tool analysis. Where tools are individual function calls, prompts are recipes that chain tools into a synthesis-shaped output — a position thesis, a peer comparison table, a portfolio pulse summary. Same MCP transport as tools; different verb: prompts/list and prompts/get instead of tools/list and tools/call.
All five prompts are Analyst tier. They consume the Analyst aggregation tools (position_intel, peer_facts, portfolio_events) and Pro-tier signals (material_events, financial_snapshot, financial_trends).
Quick reference
| Prompt | Arguments | What it produces | Tools called |
|---|---|---|---|
position_thesis | ticker, lookback? | Single-name thesis: Setup, Catalysts, Risk Deltas, Ownership Signal, View + Confidence | position_intel, optionally material_events |
peer_comparison | ticker, peers, dimension | Peer table + Spread paragraph + Outliers list along one dimension | peer_facts |
portfolio_pulse | tickers, since? | Themes paragraph, Top 3 Material Events, Quiet Names | portfolio_events |
earnings_postmortem | ticker, since? | Headline, Beats and Misses, Guide Changes, Red Flags | material_events, financial_snapshot, financial_trends |
filing_red_flags | ticker, lookback? | Ranked Alerts list with severity tags | position_intel |
The full system prompt for each recipe lives in src/lib/mcp-tier-map.ts (MCP_PROMPT_DESCRIPTIONS). The text is deterministic — same args produce the same recipe text on every call.
How to invoke a prompt
In Claude Desktop or Claude.ai: type / to open the slash-command palette. Prompts appear under the edgar namespace — /edgar:position_thesis, /edgar:peer_comparison, etc. Fill in the arguments, hit return, and Claude runs the recipe end-to-end.
In ChatGPT and other MCP clients: invoke prompts through whatever surface the client exposes (most show a "Prompts" tab on the connector). The arguments behave like form fields.
For custom agents (Anthropic SDK, OpenAI Agents SDK, LangGraph), call prompts/list to discover available recipes and prompts/get with the prompt name and an argument map. The server returns the rendered text, which you then feed to your agent loop as a user message.
Recipes
position_thesis
Build a structured investment thesis for one ticker. Combines recent 8-K catalysts, 10-K risk-factor diffs, and ownership flow (insider clusters + 13F net change).
| Argument | Required | Description |
|---|---|---|
ticker | Yes | Ticker, CIK, or company name |
lookback | No | Catalyst/insider window (e.g. 90d, 6m, 1y). Default 90d |
Output sections: Setup · Catalysts · Risk Deltas · Ownership Signal · View (with explicit Confidence + rebuttal line).
Try it: /edgar:position_thesis ticker=NVDA lookback=90d
The recipe instructs the model to cite an accession number on every numeric or dated claim, and to write "No material change" rather than invent a section that has no signal.
peer_comparison
Compare one target ticker against 1–10 peers along a single dimension. Returns a markdown table plus narrative spread and outlier callouts.
| Argument | Required | Description |
|---|---|---|
ticker | Yes | Target ticker, CIK, or company name |
peers | Yes | Comma-separated peer tickers (1–10) |
dimension | Yes | One of: financial_snapshot, insider_activity, ownership, 8k_items |
Output sections: Comparison (table with per-row accession citations) · Spread (one paragraph on leader/laggard/middle) · Outliers (>2× median or missing data).
Try it: /edgar:peer_comparison ticker=ARCC peers=MAIN,BXSL,PSEC,OBDC dimension=financial_snapshot
portfolio_pulse
Summarize cross-portfolio material events. Identifies recurring themes across the names and ranks the top 3 by materiality.
| Argument | Required | Description |
|---|---|---|
tickers | Yes | Comma-separated tickers/CIKs |
since | No | ISO 8601 date (YYYY-MM-DD) lower bound. Default 30 days ago |
Output sections: Themes (clustered paragraphs) · Top 3 Material Events · Quiet Names (skipped if every ticker had activity).
Try it: /edgar:portfolio_pulse tickers=MAIN,ARCC,BXSL,PSEC since=2026-04-01
earnings_postmortem
Post-mortem an earnings cycle. Pulls the 2.02 earnings release, current ratios, and multi-year trend to surface beats, misses, guide changes, and trajectory red flags.
| Argument | Required | Description |
|---|---|---|
ticker | Yes | Ticker, CIK, or company name |
since | No | ISO 8601 date lower bound. Default 90 days ago |
Output sections: Headline · Beats and Misses · Guide Changes · Red Flags.
Try it: /edgar:earnings_postmortem ticker=NFLX since=2026-02-11
If no 2.02 earnings release falls in the window, the recipe stops with "No earnings release in window" rather than fabricate a postmortem.
filing_red_flags
Surface adverse filing signals over a window. Combines new 10-K risk factors, insider selling clusters, 13F outflows, and 8-K item-code patterns (including same-code clusters that signal governance or operational concentration).
| Argument | Required | Description |
|---|---|---|
ticker | Yes | Ticker, CIK, or company name |
lookback | No | Window (e.g. 180d, 6m). Default 180d |
Output: A single ## Alerts section, ranked by severity (high → medium → low). Each alert is one line: N. [severity] <signal type> — <summary> (accession).
Try it: /edgar:filing_red_flags ticker=NVDA lookback=90d
Severity examples:
- High: going-concern language, 4.02 non-reliance, insider cluster >5% of float sold, ≥3 same-code 8-K cluster on operational/governance items.
- Medium: net institutional outflow >10% of holders, material-litigation risk factor, 2-event same-code cluster on operational/governance items.
- Low: routine risk-factor rewording, insider sales <1% of float, same-code cluster on informational items (7.01 Reg FD, 9.01 exhibits).
If no adverse signals appear, the recipe writes "No adverse signals in the <window> window." and stops.
Discovery via the protocol
Recipe discovery follows MCP spec exactly:
// Request — list available prompts (tier-filtered server-side)
{ "jsonrpc": "2.0", "id": 1, "method": "prompts/list" }
// Response — only prompts your tier can call
{
"result": {
"prompts": [
{ "name": "position_thesis", "description": "...", "arguments": [...] },
{ "name": "peer_comparison", "description": "...", "arguments": [...] }
]
}
}// Request — materialize a prompt with arguments
{
"jsonrpc": "2.0", "id": 2, "method": "prompts/get",
"params": {
"name": "position_thesis",
"arguments": { "ticker": "NVDA", "lookback": "90d" }
}
}
// Response — rendered recipe text the client feeds as a user message
{
"result": {
"messages": [
{ "role": "user", "content": { "type": "text", "text": "Build an investment thesis for NVDA over..." } }
]
}
}Cross-tier prompts/get calls return a tier_denied envelope identical to the tool-call shape — see MCP Tiers for the structure.
To summarize
- Five recipe prompts, all Analyst tier. Same MCP transport as tools.
- Prompts compose tools; they do not perform server-side inference. Your AI client runs the tool calls and synthesizes the output.
- Every recipe enforces accession-number citation discipline and refuses to fabricate when data is missing.
- New prompts ship into the same
MCP_PROMPT_DESCRIPTIONSregistry — Free and Pro tiers will inherit Analyst recipes that fit those tiers over time.
What's next
- MCP Tools — the 23 tools recipes invoke
- MCP Tiers — which tools and prompts live at which tier
- MCP Workflows — natural-language example conversations
- AI plugin landing — visual tier ladder + setup walkthroughs