Skip to content
FolioFact

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:

  1. Sign in and open Settings → API keys.
  2. Create a key with a name you'll recognize (e.g. claude-desktop).
  3. Copy the key once — only its fingerprint is stored, so it can't be shown again. Treat it like a password.
  4. Send it with every request as Authorization: Bearer ff_… (the X-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/day

Limits 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.

Send feedback

Optional — only if you'd like a reply.