Agents & API
FolioFact is agent-native: the same public research you see on the site — 13F holdings, fund portfolios, insider activity, and the tracking universe — is queryable by AI agents through the MCP server and the REST API v1. Everything is read-only, rate-limited, and gated by the same entitlements as the website. See what Pro unlocks.
What agents can do
- Search funds, stocks, and investors (
search) - Read fund portfolios and history (
get_fund,fund_holdings,fund_history) - Read stock pages (
get_stock), investor pages (get_investor), and the cross-fund insider feed (insider_feed) - Fetch any public page as markdown (
fetch_page— local public routes only) - Pro: stock financials, full insider history, options, and side-by-side comparisons (
stock_financials,stock_insiders,stock_options,compare_stocks)
The same twelve tools are available over MCP (POST /mcp) and the REST API v1
(/api/v1/*). See the API reference for endpoints, and
/openapi.yaml for the machine-readable contract.
Connect an MCP client
The MCP server is a stateless Streamable HTTP endpoint at
https://foliofact.com/mcp — no session handshake required, every request is
self-contained. Connect it from any MCP client:
Claude Desktop
Open Claude → Settings → Developer → Edit Config and add the server to
claude_desktop_config.json, then restart Claude:
{
"mcpServers": {
"foliofact": {
"url": "https://foliofact.com/mcp"
}
}
}
Claude Code
From your terminal:
claude mcp add foliofact --transport http https://foliofact.com/mcp
Cursor
Add .cursor/mcp.json at your project root:
{
"mcpServers": {
"foliofact": {
"url": "https://foliofact.com/mcp"
}
}
}
opencode
Add a remote server to your opencode.json:
{
"mcp": {
"foliofact": {
"type": "remote",
"url": "https://foliofact.com/mcp"
}
}
}
Create an API key
Anonymous access works with the public tools and the anonymous rate limits. To use your account's entitlements — and the Pro tools, if you're subscribed — create a key in Settings → API keys:
- Sign in and open Settings → API keys.
- Create a key with a name you'll recognize (e.g.
claude-desktop). - Copy the key once — only its fingerprint is stored, so it can't be shown again. Treat it like a password.
- Send it with every request as
Authorization: Bearer ff_…(theX-Api-Key: ff_…header also works).
Keys inherit your account's plan. Revoke any key from the same page; a revoked key stops working immediately.
Tiers & limits
Tier What you get Rate limit Anonymous Public tools, public data 20 req/min, 1,000 req/day Free Public tools with your account's limits 60 req/min, 10,000 req/day Pro Everything, including the four gated tools 300 req/min, 100,000 req/dayLimits are enforced per key (per IP-hash when anonymous); the daily cap is
account-level, so creating extra keys can't bypass it. Exceed a limit and the
server answers 429 with a Retry-After header. Calls to a gated tool without
Pro return a clear error pointing at pricing.
Example queries
"Which funds hold Apple?"
{ "jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": { "name": "search", "arguments": { "query": "Apple" } } }
"What did Berkshire buy this quarter?"
{ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
"params": { "name": "get_fund", "arguments": { "fund_slug": "berkshire-hathaway" } } }
"How did Mohnish Pabrai's fund change?"
{ "jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": { "name": "fund_history", "arguments": { "fund_slug": "pabrai-funds" } } }
Try them in the browser with the MCP Inspector, or drop the same arguments into any of the clients above.