Developers
The federal record, as a tool your agent can call
HillSignal exposes one MCP server. It answers the questions people actually ask about the government and the market: who won this award, what is this agency about to buy, what did this member of Congress trade and where do they hold a board seat, which PAC funds whom, who is buying at this ticker, and how good HillSignal's own calls have been. Every row carries a source URL and a date. Companies are matched to tickers by exact match only; a miss comes back as a miss.
Connect
Server URL, Streamable HTTP, no key needed at the free limit:
https://www.hillsignal.com/api/mcpClaude.ai and Claude Desktop
Settings → Connectors → Add custom connector → paste the URL. For Claude Desktop's config file:
{
"mcpServers": {
"hillsignal": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://www.hillsignal.com/api/mcp"]
}
}
}Cursor, Windsurf, VS Code
In mcp.json:
{
"mcpServers": {
"hillsignal": { "url": "https://www.hillsignal.com/api/mcp" }
}
}ChatGPT
Settings → Connectors → Create (developer mode) → server URL above, no authentication.
Plain HTTP
It is JSON-RPC 2.0 over POST; any language works:
curl -s https://www.hillsignal.com/api/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"search_awards","arguments":{"agency":"Navy","min_amount":100000000,"limit":5}}}'Tools
resolve_entity
Map an organization name (a contract recipient, a subsidiary, a PAC sponsor, a Form D issuer) to its public-company ticker. Exact normalized match against SEC legal names, aliases and the Exhibit 21 subsidiary map; returns the method and a confidence, or the reason for a miss. Never guesses.
args: name
get_entity
One company in the federal record: contracts won, PACs, patents, private raises, members of Congress who hold board seats there, insider trades, and its connections graph. Look up by ticker, entity_id, or a name (resolved exactly).
args: ticker, entity_id, name
search_awards
Search federal contract awards (USAspending, $10M+) by recipient, ticker, awarding agency, keyword, date range or minimum amount. Returns total_matching and pages with offset (up to 50 per call), sorted by date or amount. For "who won the most" questions use award_totals instead, which counts every match.
args: recipient, ticker, agency, keyword, since, until, min_amount, sort, offset, limit
award_totals
Aggregate every matching federal award (same filters as search_awards) into totals per recipient, per resolved ticker, or per awarding agency: award count, total dollars, share, first and last award, largest award. Use this for "who won the most from the Navy this year" and similar questions; it counts all matches, not a page.
args: group_by, recipient, ticker, agency, keyword, since, until, min_amount, limit
search_opportunities
Search SAM.gov notices: Sources Sought and Pre-solicitations (the earliest public signal of a purchase), solicitations and combined synopses. Filter by keyword, NAICS, agency, notice type, date.
args: keyword, naics, agency, notice_type, since, limit
congressional_trades
Stock trades disclosed by members of Congress (House and Senate Periodic Transaction Reports), by member name, ticker, transaction type or date. Returns one row per transaction with the disclosed amount range and the filing PDF.
args: politician, ticker, transaction_type, since, limit
get_politician
A member of Congress: committees, board seats and other positions from annual Financial Disclosures (with resolved tickers), recent stock trades, and top PAC contributors from FEC data. Look up by name or bioguide_id; ambiguous names return candidates.
args: name, bioguide_id
insider_trades
SEC Form 4 insider transactions by ticker or insider name; filter to buys or sells, minimum value, date.
args: ticker, insider, type, min_value, since, limit
search_bills
Full-text search over bills, contract awards and other government events with their analysed sector and ticker exposure. Filter by bill number, ticker, sector, date or event type.
args: query, bill_number, ticker, sector, event_type, since, limit
executive_orders
Executive orders, proclamations and memoranda with affected sectors and tickers.
args: query, sector, since, limit
pac_lookup
Corporate and trade PACs linked to an issuer (by ticker) or by committee name, with their top recipient candidates aggregated from FEC disbursements.
args: ticker, committee_name, limit
pac_totals
Which PACs give the most: contributors to tracked candidates ranked by total dollars (FEC Schedule A), by election cycle, with donor-processing conduits like ActBlue and WinRed separated out. mode=disbursers ranks committees by their own reported disbursements instead. Use for "which PACs donate the most" questions.
args: mode, cycle, query, limit
data_coverage
Row counts and the latest dated row for every dataset behind these tools, plus entity-resolution coverage. Call it when an answer depends on how complete the data is, or before saying something does not exist.
args: none
list_themes
The themes the government is currently funding across bills, contracts, solicitations and filings, each with a permanent page and a verdict.
args: none
get_theme
One theme in full: the setup, the dated chronology with each beat linked to its source record, why it matters, what to watch, and the evidence.
args: theme_id
latest_events
The newest events across every source (awards, trades, filings, bills, orders, themes), with provenance. Optional filters by category, ticker or source id.
args: categories, tickers, sources, limit
track_record
Every forward call HillSignal made since May 2025, verified against SPY 30 days later, with the inclusion rules and the miss rate.
args: none
institutional_holders
Largest institutional holders of a ticker from 13F-HR filings HillSignal has ingested, latest position per institution.
args: ticker, limit
form_d_raises
SEC Form D private placements of $5M and up, by issuer name, resolved ticker, date or minimum amount.
args: query, ticker, since, min_amount, limit
Limits and keys
- Unkeyed: 60 requests a minute per IP, metered. Enough for a person's assistant.
- Keyed: pass Authorization: Bearer hw_live_…. Pro keys are 600 a minute; enterprise 6,000 with the convergence sources. Ask press@hillsignal.com for a key; newsletters that credit “data: HillSignal” get one free.
- Result sets are capped at 25 rows per call; page with since and narrower filters.
- Read-only. Nothing you send is stored beyond the request log used for the meter.
curl -s https://www.hillsignal.com/api/mcp -H 'Authorization: Bearer hw_live_...' -H 'Content-Type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Identifiers
- hs:entity:<uuid> a company, resolved by the same rules everywhere. Page: /entity/<uuid>.
- hs:theme:<id> a government theme with a permanent, cited page: /themes/<id>.
- Members of Congress use their Bioguide id. Awards carry the USAspending award id. Filings carry the SEC accession number. PACs carry the FEC committee id.
Methodology
Entity resolution. An organization name is normalized and matched exactly against SEC legal names, the aliases HillSignal has verified, and the Exhibit 21 subsidiary map (45,000 subsidiary lines from annual reports). There is no fuzzy matching. A name claimed by more than one issuer is refused rather than attributed. Each hit states its method (parent_exact, recipient_alias, recipient_subsidiary, and so on) and a fixed confidence for that method. Coverage per source is published at /api/wire/health.
People. Members resolve by exact name or last name and the tool returns candidates when more than one matches. Board seats and positions come from the annual Financial Disclosure report, Schedule E, extracted per filing with the raw line kept.
Track record. Every directional call is logged when it lands and verified against SPY 30 days later. The page states its inclusion rules and prints rates only where the sample is at least 20. Misses are counted. /track-record.
Freshness. Sources are polled on published schedules; the health endpoint reports capture latency per source and flags stale ones rather than hiding them.
Also available
- The wire: keyed JSON firehose and SSE stream of every source, with provenance.
- RSS: /feed/signals.xml, /feed/trades.xml, /feed/themes.xml.
- /api/public/track-record: the record as JSON, CORS-open.