The evidence

Insider trades

Form 4 insider transactions for one company, newest first: who, role, code (P buy, S sell, A grant, M exercise, F tax), shares and dollar value.

TOOLget_insider_trades
Server
https://mcp.optimistfi.com/mcp
Authentication
None
Access
Read-only: it changes nothing
Example call
curl https://mcp.optimistfi.com/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"get_insider_trades","arguments":{"entity":"NVDA","limit":3}}}'

When a model calls it

Models choose a tool from its description. This is the one the server publishes:

Form 4 insider transactions for one company, newest first: who, role, code (P buy, S sell, A grant, M exercise, F tax), shares and dollar value. Use when the user asks: are insiders buying X; did X's CEO sell; insider activity at X. Not for: Congress → get_congress_trades. Args: entity; start; end; limit.
  • are insiders buying X
  • did X's CEO sell
  • insider activity at X

For something else: get_congress_trades.

Parameters

entitystringrequired

The company: a ticker (AAPL, BRK.B), a company name (Apple) or an SEC CIK.

startstring

Earliest transaction date, YYYY-MM-DD.

endstring

Latest transaction date, YYYY-MM-DD.

limitintegerdefault 25

Most transactions, newest first to return.

Response

A real response to the example call, trimmed: lists cut to two items, long text cut short. The result's content holds the answer as JSON text; parsed, it reads:

result.content · parsed
[
  {
    "entity": {
      "figi": "BBG000BBJQV0",
      "cik": "0001045810",
      "ticker": "NVDA",
      "name": "NVIDIA CORP"
    },
    "type": "insider_trade",
    "direction": "backward",
    "event_time": "2026-09-21",
    "as_of": "2026-09-23",
    "confidence": "confirmed",
    "source": {
      "name": "SEC EDGAR Form 4",
      "url": "https://www.sec.gov/Archives/edgar/data/1045810/000169684126000014/",
      "license": "public"
    },
    "data": {
      "insider_name": "Teter Timothy S.",
      "insider_title": "EVP, General Counsel and Sec",
      "txn_code": "S",
      "acquired_disposed": "D",
      "shares": 12483,
      "price": 222.19,
      "value": 2773597.77,
      "shares_owned_after": 2687660,
      "transaction": "open-market sale",
      "direction": "sold",
      "insider_display_name": "Timothy S. Teter (EVP, General Counsel and Sec)"
    }
  },
  {
    "entity": {
      "figi": "BBG000BBJQV0",
      "cik": "0001045810",
      "ticker": "NVDA",
      "name": "NVIDIA CORP"
    },
    "type": "insider_trade",
    "direction": "backward",
    "event_time": "2026-09-21",
    "as_of": "2026-09-23",
    "confidence": "confirmed",
    "source": {
      "name": "SEC EDGAR Form 4",
      "url": "https://www.sec.gov/Archives/edgar/data/1045810/000169684126000014/",
      "license": "public"
    },
    "data": {
      "insider_name": "Teter Timothy S.",
      "insider_title": "EVP, General Counsel and Sec",
      "txn_code": "S",
      "acquired_disposed": "D",
      "shares": 13478,
      "price": 223.05,
      "value": 3006267.9,
      "shares_owned_after": 2692159,
      "transaction": "open-market sale",
      "direction": "sold",
      "insider_display_name": "Timothy S. Teter (EVP, General Counsel and Sec)"
    }
  },
  "… 2 more"
]

Fields are explained in Reading a response.

Errors

A call the server cannot run (a missing or invalid argument) comes back with isError: true and the reason in words. A company or market the server cannot match comes back as a result naming what was not found. See Errors and limits.
ScoutJUST THIS STORY

LET’S MAKE THIS USEFUL · 1 OF 5

How would you like me to explain this?

Tell me what you want from this read. Start with a quick note, then adjust the details. Your other stories stay as they are.

We’ll remember your view of this story. The published article stays unchanged.

THIS STORY’S READING VIEWStandard · The whole picture

Clear explanations with context. Both sides of the evidence.