Compound Interesting
Source-backed US market data for agents: SEC Form 4 insider trades, House and Senate trade disclosures with committee-jurisdiction overlap, 13F holdings and a cross-signal consensus on 4,600+ tickers. Every record links the filing it came from, so an agent can cite instead of assert. 16 tools; free key, and get_demo_composite works with no key.
Hosted MCP Server
npx add-mcp 'https://api.compoundinterest.ing/mcp'Installs into Claude Code, Codex, Cursor and more
Documentation
Connect it
claude mcp add --transport http compoundinterest https://api.compoundinterest.ing/mcp \
--header "Authorization: Bearer YOUR_KEY"
{
"mcpServers": {
"compoundinterest": {
"type": "http",
"url": "https://api.compoundinterest.ing/mcp",
"headers": {
"Authorization": "Bearer YOUR_KEY"
}
}
}
}
No key yet? Call get_demo_composite without one to see the shape of the data first.
What you can ask
- “Which senators and representatives traded NVDA recently?”list_congress_trades
- “Are insiders buying or selling at PLTR, and which filings say so?”list_insider_trades
- “Find bullish names where at least four independent signals agree.”rank_consensus
- “Screen healthcare for companies carrying a risk flag.”screen
- “What does every signal say about AMD right now?”get_composite
- “Is the macro energy balance tightening or loosening?”get_signal
The tools (16)
- get_compositeEverything the platform knows about one ticker in a single record: the cross-signal consensus, each contributing dimension with its direction and provenance, and risk flags. Start here for any question about a specific company.
- get_demo_compositeA single fixed demo ticker, callable without an API key, so the data shape can be inspected before signing up. Returns only the demo ticker regardless of input. For real tickers use get_composite, which requires a free key.No key required.
- get_evidenceThe primary documents a ticker's signals were derived from — insider Form 4s, Congressional disclosures, institutional holdings and macro series, each with the filing it came from. Use this to cite a claim rather than assert it. Paid keys only, and slower than the other tools because it is computed on demand.
- get_house_ratingThe platform's own buy/hold/sell rating for a ticker, with the reasoning behind it. A judgement about the stock, not a recommendation to any reader.
- get_consensusWhether the independent actors this platform tracks — insiders, Congress, institutions, the model — agree on one ticker, with the per-dimension breakdown that produced the verdict.
- rank_consensusThe names where independent actors agree most strongly, ranked. Use this to find candidates rather than to check one you already have in mind.
- screenFilter the whole equity universe and return matching tickers with their scores. The bulk discovery tool: use it for questions of the form 'which companies have X'. To rank by cross-signal agreement instead, use rank_consensus.
- get_monthly_activityRank ticker activity aggregated from available published filings by transaction date for the current UTC month through today. Includes coverage metadata and unknown-value counts; this is not total market activity. Free keys receive up to 10 names; paid/internal keys up to 20.
- list_insider_tradesCorporate insider buys and sells from SEC filings, newest first, each linked to the filing it came from.
- list_congress_tradesDisclosed House and Senate trades, newest first, each linked to its disclosure. Committee overlap is reported as oversight, never as an accusation.
- list_positioningHow large holders are positioned, newest first. Net figures can reflect hedges and cannot be read as a directional view on their own.
- get_historic_movesThe historical distribution of 5-day and 1-month returns for a ticker, sampled over the last 5 years: mean, standard deviation, percentiles, a histogram, and the worst drawdowns with their dates. Use it to say whether a move is unusual FOR THIS NAME rather than in the abstract. Every number is a fraction: 0.0821 means 8.21%.
- list_equity_perpFunding rate and open interest for the ~51 US single names listed on a 24/7 perpetual futures venue, ranked by notional. This is the ONLY source here that moves outside US market hours, so it is what to check overnight and at weekends. High positive funding means longs are paying to hold — crowded, squeeze-fragile. The mark price is a venue mark, NOT the stock price.
- get_equity_perpFunding and open interest for a single name on the 24/7 perpetual venue. Most tickers are NOT listed there — only about 51 of ~5,400 — and a 'not listed' answer means no venue coverage, never that positioning is flat or zero.
- search_tickersResolve a company name or partial symbol to tickers the platform covers. Use this first when the user names a company rather than a symbol.
- get_signalA whole-market gauge rather than a per-company one. 'macro' is the market-regime read, 'energy' the macro energy balance, 'crypto' crypto positioning and funding. Use these for the backdrop a single name is trading against.
Or call it over HTTP
Base https://api.compoundinterest.ing/v1
Auth Authorization: Bearer YOUR_API_KEY
1 unit per read, plus 1 per 5 rows returned on list routes.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.compoundinterest.ing/v1/composite/NVDA"
const res = await fetch(
"https://api.compoundinterest.ing/v1/composite/NVDA",
{ headers: { Authorization: "Bearer YOUR_API_KEY" } },
);
const data = await res.json();
import requests
r = requests.get(
"https://api.compoundinterest.ing/v1/composite/NVDA",
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
data = r.json()
GET/v1/composite/{ticker}1 unit
Everything known about one ticker: the cross-signal consensus, every contributing dimension with its direction and provenance, and risk flags.
GET/v1/entity/{entity_id}1 unit
The same composite, addressed by entity_id instead of ticker. Skips the symbol lookup.
GET/v1/entity/batch1 unit
Many composites in one request, by entity_id.
- eidsComma-separated entity_ids, up to 50.
Charged per id REQUESTED, not per id found.
GET/v1/house-rating/{ticker}1 unitpaid
The house buy/hold/sell call and the reasoning behind it.
GET/v1/consensus?ticker={ticker}1 unit
Whether independent actors agree on one ticker, with the per-dimension breakdown.
GET/v1/consensus1 + 1 per 5 rows (6 for 25 rows)
Tickers ranked by consensus strength.
- directionbullish, bearish, mixed or neutral.
- min_agreementMinimum agreement score, 0-1.
- min_signalsMinimum number of dimensions that voted.
- limitRows to return. Free keys cap at 10, paid at 500.
GET/v1/feed/{insiders|congress|positioning}1 + 1 per 5 rows (6 for 25 rows)
Recent records for one of the three feeds, newest first, each linked to the filing or disclosure it came from.
- entity_idRestrict to one entity.
- sinceISO date; only records on or after it.
- cursorEcho next_cursor from the previous page.
- limitRows to return. Free keys cap at 20, paid at 200.
GET/v1/universe1 + 1 per 5 rows (6 for 25 rows)
The directory of covered entities, without scores.
- namespacee.g. equity.
Free keys cap at 100 rows, paid at 10,000.
GET/v1/search1 unit
Resolve a company name or partial symbol to tickers we cover.
- qName or partial symbol.
GET/v1/signal/{macro|energy|crypto}1 unit
A market-level gauge rather than a per-company one: the regime read, the energy balance, crypto positioning.
GET/v1/screen1 + 1 per 5 rows (6 for 25 rows)
Filter the universe on signal criteria and return matching tickers with their scores.
- sectorRestrict to one sector.
- ratingRestrict to one house rating. Requires a paid key.
- stateRestrict to one overall state.
- min_confidenceMinimum model confidence, 0-1.
- min_completenessMinimum data completeness, 0-1.
- flaggedPass 1 for entities carrying a risk flag.
- sortconfidence, data_completeness, consensus_strength or house_rating_confidence (paid key required for house_rating_confidence).
- orderasc or desc.
- limitRows to return. Free keys cap at 10, paid at 500.
GET/v1/evidence/{ticker}10 unitspaid
The primary documents a ticker's signals were derived from — insider Form 4s, Congressional disclosures, institutional holdings, macro series — each with its filing.
Computed on demand, so slower than every other route. Cached for an hour.
GET/v1/equity-perp1 + 1 per 5 rows (6 for 25 rows)
Funding and open interest for the ~51 US names on a 24/7 perpetual venue, ranked by notional. The only surface here that moves outside US market hours.
- limitRows to return. Free keys cap at 10, paid at 500.
perp_mark_price is a venue mark, NOT the stock price.
GET/v1/equity-perp/{ticker}1 unit
The same, for one ticker.
404 not_listed is the normal case — only ~51 of ~5,400 names are on the venue.
GET/v1/historic-moves/{ticker}1 unit
The historical distribution of 5-day and 1-month returns over 5 years: mean, standard deviation, percentiles, a histogram, and the worst drawdowns with dates.
Every number is a FRACTION: 0.0821 means 8.21%.
GET/v1/events1 + 1 per 5 rows (6 for 25 rows)
Dated, source-linked catalysts resolved to a company — OFAC sanctions, EPA and FDA enforcement, federal awards. Newest first; pass entity_id for one company.
- entity_idRestrict to one company, e.g. equity:WMT.
- limitRows to return, 1-200 (default 30).
GET/v1/activity/monthly/{insiders|congress}1 + 1 per 5 rows (6 for 25 rows)
Per-ticker insider or Congressional activity aggregated from published filings for the current UTC month through today.
- monthOptional YYYY-MM; only the current UTC month is supported. Defaults to the current UTC month.
Aggregates by transaction date before limiting to 10 names for free keys or 20 for paid/internal keys. Covers available published filings, not total market activity. Missing-value and undated-record counts are explicit; the generation is the last completed apply, not an atomic publication guarantee.
GET/v1/macro-series/{entity_id}1 unit
Observations for one macro series, newest first, with its provider and unit. The unit encodes SCALE — usd_millions means the value is already expressed in millions.
- limitObservations to return, 1-5000 (default 2000).
Questions
What is the Compound Interesting MCP server?
A remote Model Context Protocol server that gives an AI agent direct access to source-backed market intelligence: corporate insider filings, Congressional trade disclosures, institutional positioning, market-level gauges and a cross-signal consensus across roughly 4,600 US tickers.
Which clients does it work with?
Any MCP client that speaks Streamable HTTP and can send an Authorization header — Claude Code, Cursor, VS Code and Claude Desktop among them. It is stateless, so there is nothing to keep running locally.
Is it free?
Yes. A free key covers 100 units of reads a day, where one read is one unit plus one per five rows returned. You can also call the demo tool with no key at all to see the data shape first.
Where does the data come from?
Primary public sources — SEC filings for insider transactions, House and Senate disclosures for Congressional trades, institutional filings for positioning, and published series for macro. Records carry the document they came from, so an agent can cite rather than assert.
Is this investment advice?
No. It reports what public filings and disclosures show. It does not tell anyone what to buy or sell, and Compound Interesting is not a registered investment adviser.
Email and password. No card, no trial. The same key works for the MCP server, the CLI and the HTTP API.