Documentation
How to connect your AI agent to KeyVex and query the 38 tools. No account, no API key, no OAuth flow — point your MCP client at the endpoint and go. Last updated 2026-05-22.
What is KeyVex
KeyVex is a remote Model Context Protocol (MCP) server that exposes US public financial and government disclosures as agent-native tools. Your AI agent (Claude Desktop, Cursor, or any MCP client) connects once and can query 38 tools across dozens of official US government sources — SEC filings, congressional trades, FEC campaign finance, federal contracts and grants, lobbying, regulatory enforcement, sanctions, macroeconomic indicators, and more.
All data is public-record information sourced directly from US government agencies. KeyVex normalizes and indexes it; KeyVex does not provide investment advice, derived signals, or trading recommendations.
Quickstart
1. There's no signup
KeyVex's MCP endpoint is publicly accessible. No account, no API key, no consent flow. Point your client at the URL below and start calling tools.
2. Configure your MCP client
The KeyVex MCP endpoint is:
https://mcp.keyvex.com
For Claude Desktop, add this to your claude_desktop_config.json:
{
"mcpServers": {
"keyvex": {
"url": "https://mcp.keyvex.com",
"transport": "http"
}
}
}
For Cursor or any other MCP client, follow your client's instructions for adding a remote MCP server URL. KeyVex supports the standard Streamable HTTP transport. No authentication headers are required.
3. Make a query
Ask your agent something that touches KeyVex data:
"Show me the largest congressional trades in the past 30 days
with party and committee context."
The agent will pick the right tools (get_congressional_trades and
get_member_profile), run them in parallel, and synthesize an answer.
4. Verify with curl (optional)
You can hit the endpoint directly without any client. Health check:
curl https://mcp.keyvex.com/
Returns server version, tool count, and the full tool list as JSON. List all tools via MCP:
curl -X POST https://mcp.keyvex.com/ \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
No Authorization header is needed. The response is a JSON-RPC envelope containing the full schema of every tool.
Authentication
Authentication: none. KeyVex's public MCP endpoint is openly accessible. There are no accounts, no API keys, no OAuth flow, and no consent screens. Any MCP client can connect and call any tool.
The endpoint advertises this contract in its health-check response: {"auth":"none",...}.
The reason: every tool serves data already public by federal mandate (SEC filings, USAspending records, congressional disclosures, etc.). There's nothing user-specific to gate on. Removing the auth layer also removes a setup step for the agent developer.
Abuse prevention. Because the endpoint is open, two mechanisms protect it from runaway use:
- A per-IP rate limit caps each calling IP at 60 requests per 60-second sliding window. Exceed it and the endpoint returns HTTP 429 with a
Retry-Afterheader. - A Cloud Run instance cap bounds the worst-case server load even under a coordinated flood.
Future paid tiers (when they ship). Paid tiers — with higher quotas,
priority routing, and dedicated support — will live on a separate URL (e.g., a
/v2 path or sibling subdomain) and will use per-customer Bearer keys we
issue at signup. The public endpoint at mcp.keyvex.com will remain
authless and free.
Tool reference
KeyVex exposes 38 tools. All are read-only. Every tool's full schema (parameters,
filters, response shape) is returned by the MCP tools/list method.
The table below is a one-line summary.
SEC filings & market structure
| get_insider_transactions | SEC Form 4 / 5 — executive insider buys, sells, option exercises, RSU activity |
| get_planned_insider_sales | SEC Form 144 — planned insider sales with 10b5-1 plan flag |
| get_institutional_holdings | SEC Form 13F — quarterly institutional fund holdings |
| get_activist_stakes | SEC Schedule 13D / 13G — activist and 5%+ beneficial ownership |
| get_nport_filings | SEC Form N-PORT — mutual fund monthly portfolio metadata |
| get_fund_holdings | SEC N-PORT primary-document XML — per-security fund holdings + derivatives |
| get_registration_statements | SEC Form S-1 / S-3 — IPO and shelf registration statements |
| get_tender_offers | SEC Schedule TO — third-party + issuer tender offers |
| get_private_placements | SEC Form D — Regulation D exempt offerings |
| get_material_events | SEC Form 8-K — M&A, executive changes, earnings, material events |
| get_proxy_filings | SEC Schedule 14A — proxy statements (DEF 14A annual + merger) |
| get_fundamentals | SEC EDGAR XBRL — income statement, balance sheet, cash flow per filing |
| get_sec_fails_to_deliver | SEC bi-monthly Fails-to-Deliver settlement data |
Congressional activity
| get_congressional_trades | Senate eFD + House Clerk Periodic Transaction Reports (member stock trades) |
| get_member_profile | Current senators, representatives, committee assignments, contact info |
| get_annual_financial_disclosures | Form 278 / Public Financial Disclosure (Senate eFD) |
| get_bills | Congress.gov bills + resolutions (HR / S / HJ / SJ / HC / SC / HR / SRes) |
| get_roll_call_votes | House + Senate roll-call votes |
Campaign finance & influence
| get_fec_candidate_profile | FEC candidates and linked principal committees |
| get_fec_contributions | FEC Schedule A — itemized campaign contributions (≥$200) |
| get_fec_independent_expenditures | FEC Schedule E — super-PAC ads supporting/opposing candidates |
| get_lobbying_filings | Senate LDA — quarterly lobbying registrations and spend |
| get_foreign_agents | DOJ FARA — foreign agent registrations and principal relationships |
Federal awards
| get_federal_contracts | USAspending — federal procurement contract awards |
| get_federal_grants | USAspending — federal grant + assistance awards |
Regulatory & compliance
| get_enforcement_actions | SEC + DOJ + CFTC + OCC + FDIC + FTC enforcement press releases |
| get_ofac_sdn | US Treasury OFAC Specially Designated Nationals sanctions list |
| get_screening_list | US Consolidated Screening List — 12 export-control / sanctions lists |
| get_federal_register_documents | Federal Register — rules, proposed rules, notices, presidential documents |
| get_oig_exclusions | HHS-OIG LEIE — list of excluded healthcare individuals / entities |
| get_consumer_complaints | CFPB Consumer Complaint Database |
| get_product_recalls | FDA (drug / device / food) + CPSC consumer-product recalls |
| get_government_publications | GovInfo — committee reports, public laws, hearings, GAO reports |
Macroeconomic & markets
| get_economic_indicators | BLS + FRED + EIA — employment, CPI, rates, GDP, energy series |
| get_treasury_auctions | US Treasury Bills / Notes / Bonds / TIPS / FRN auctions |
| get_cftc_cot_reports | CFTC Commitments of Traders — weekly futures + options positioning |
unified_search
unified_search is the cross-source meta-tool. Pass one or more identifiers
(ticker, company_name, cusip, company_cik, bioguide_id, recipient_uei) and it
fans out across every applicable tool in parallel, returning a unified envelope.
Useful when you want a full picture of an entity without manually calling 10 tools:
{
"method": "tools/call",
"params": {
"name": "unified_search",
"arguments": { "ticker": "NVDA" }
}
}
The fan-out hits insider transactions, congressional trades, institutional holdings,
activist stakes, federal contracts, material events, fundamentals, and more —
whichever tools match the identifier you passed. get_lobbying_filings
is the one collection deliberately excluded from the fan-out (substring scans on 51K+
filings are too slow to parallelize); call it directly for lobbying queries.
Rate limits
The public endpoint is open but rate-limited per IP to prevent abuse and protect hosting cost:
- 60 requests per 60-second sliding window per IP. If you exceed this, the endpoint returns HTTP 429 with a
Retry-Afterheader indicating how long to wait. - Server-side concurrent instance cap further bounds worst-case load under coordinated traffic. You should never see this unless you're actively trying to flood the server.
For most agent workflows (a few tool calls per user question, occasional batch catch-up) you will never see the rate limit. If your use case legitimately requires sustained higher volume, email contact@keyvex.com — we can discuss a paid tier on a separate URL when those ship.
Data freshness
KeyVex caches normalized data in Firestore. Refresh cadence per source:
- SEC filings (most types): hourly
- SEC Form 4: every 30 minutes
- 13F: every 4 hours
- Congressional trades: daily, 6 AM ET
- FEC contributions, federal contracts, lobbying: daily
- Bills, votes, member profiles: daily
- XBRL fundamentals: weekly
- FARA, OFAC, screening lists, recalls: daily
- Economic indicators: daily
Each tool response includes a scraped_at or last_modified_date
field so you can see exactly when the source was last polled.
Troubleshooting
I get HTTP 429 Too Many Requests
Your IP exceeded the 60-requests-per-minute rate limit. The response body and the
Retry-After header indicate how long to wait. If your legitimate use
case requires higher sustained volume, email
contact@keyvex.com.
A tool returns an empty result set when I expect data
Common causes:
- Filter too narrow. The MCP filter parameters AND together — try widening the date range or removing one filter.
- Source genuinely has no data for that query. Some sources (e.g., FARA, Senate roll-call votes for some sessions) have low overall volume. The empty response is correct.
- Data not yet ingested. If you're querying for events from the last hour, check the refresh cadence — some sources update only daily.
My MCP client is asking for an authentication URL or consent flow
It shouldn't. KeyVex serves auth: none in its health-check response and
does not return a WWW-Authenticate header on any 401 (because we never
return 401 for auth reasons — there's nothing to authenticate). If your client is
forcing an OAuth flow regardless, check the client's MCP server configuration — some
clients default to OAuth discovery and need to be explicitly told the server is
authless. You can also paste a dummy Bearer token if your client requires the field;
we'll ignore it.
Can I get historical data older than what a tool returns by default?
Most tools accept since and until filters. The historical
depth varies by source — for example, SEC Form 4 goes back to the 2003 mandate,
XBRL fundamentals to 2009, FEC contributions to 1980. If a date range returns less
than expected, check the data freshness section.
How do I report a bug or request a feature?
Email contact@keyvex.com with the tool name, the exact query parameters you sent, the response you received, and what you expected. We typically reply within one business day.
Support
Primary support contact: contact@keyvex.com
Founders read this inbox directly. Typical response time is within one business day. For urgent issues (production outage, breaking change), include "URGENT" in the subject.
For privacy, terms, and data-handling questions, see the
privacy policy. For status and version, see the public health
check at https://mcp.keyvex.com/
(returns server version and current tool list as JSON, no authentication required).