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

PromptArgumentsWhat it producesTools called
position_thesisticker, lookback?Single-name thesis: Setup, Catalysts, Risk Deltas, Ownership Signal, View + Confidenceposition_intel, optionally material_events
peer_comparisonticker, peers, dimensionPeer table + Spread paragraph + Outliers list along one dimensionpeer_facts
portfolio_pulsetickers, since?Themes paragraph, Top 3 Material Events, Quiet Namesportfolio_events
earnings_postmortemticker, since?Headline, Beats and Misses, Guide Changes, Red Flagsmaterial_events, financial_snapshot, financial_trends
filing_red_flagsticker, lookback?Ranked Alerts list with severity tagsposition_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).

ArgumentRequiredDescription
tickerYesTicker, CIK, or company name
lookbackNoCatalyst/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.

ArgumentRequiredDescription
tickerYesTarget ticker, CIK, or company name
peersYesComma-separated peer tickers (1–10)
dimensionYesOne 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.

ArgumentRequiredDescription
tickersYesComma-separated tickers/CIKs
sinceNoISO 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.

ArgumentRequiredDescription
tickerYesTicker, CIK, or company name
sinceNoISO 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).

ArgumentRequiredDescription
tickerYesTicker, CIK, or company name
lookbackNoWindow (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_DESCRIPTIONS registry — Free and Pro tiers will inherit Analyst recipes that fit those tiers over time.

What's next