{
  "markdown": "# Fillfolio MCP\n\nRead-only [Model Context Protocol](https://modelcontextprotocol.io) (MCP) access to [Fillfolio](https://fillfolio.com), a portfolio net worth tracker for stocks, ETFs, funds, crypto, currency, cash, and liabilities.\n\nConnect Claude, Cursor, ChatGPT, or another MCP host to a paid Fillfolio account. The client can read portfolio summaries, holdings, cost basis, cash and debt, activity, and exact asset details. It cannot trade, move money, change holdings, or see credentials.\n\n**Product docs:** [fillfolio.com/mcp](https://fillfolio.com/mcp)  \n**MCP endpoint:** `https://fillfolio.com/api/mcp`  \n**OAuth client ID:** `HfY4RTp08YeBNRYm`  \n**Official MCP Registry:** [`com.fillfolio/mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=com.fillfolio%2Fmcp)\n\nFillfolio MCP returns the same normalized portfolio already in your account: brokerage holdings, wallet balances, manual lots, cash, credit-card debt, and net worth. Responses include freshness and unavailable FX-rate states. Provider APIs are not called from an MCP request. Revoke access in Fillfolio Settings. Tokens are never displayed.\n\n## Connect\n\nUse Streamable HTTP. Put tokens in the `Authorization: Bearer` header only. Query-string tokens are rejected.\n\nPaste the Fillfolio MCP OAuth client ID as a public PKCE client and leave the secret blank. Dynamic client registration is off. Do not send ChatGPT or Claude metadata URLs as `client_id`. Request Clerk OIDC scopes (`openid`, `email`, `profile`, `offline_access`). Fillfolio copies `mcp:read` and the tool scopes onto the grant after it accepts the token.\n\n| Surface | URL |\n| --- | --- |\n| Product docs | [https://fillfolio.com/mcp](https://fillfolio.com/mcp) |\n| MCP | `https://fillfolio.com/api/mcp` |\n| OAuth client ID | `HfY4RTp08YeBNRYm` |\n| Server card | `https://fillfolio.com/.well-known/mcp/server-card.json` |\n| Server card alias | `https://fillfolio.com/.well-known/mcp.json` |\n| OAuth protected resource | `https://fillfolio.com/.well-known/oauth-protected-resource/api/mcp` |\n| Auth notes | [https://fillfolio.com/auth.md](https://fillfolio.com/auth.md) |\n| Official MCP Registry | [`com.fillfolio/mcp`](https://registry.modelcontextprotocol.io/v0.1/servers?search=com.fillfolio%2Fmcp) |\n\nCursor example (`~/.cursor/mcp.json` or project MCP config):\n\n```json\n{\n  \"mcpServers\": {\n    \"fillfolio\": {\n      \"url\": \"https://fillfolio.com/api/mcp\"\n    }\n  }\n}\n```\n\nIf Cursor asks for an OAuth client ID, use `HfY4RTp08YeBNRYm` and leave the secret blank, then sign in.\n\nClaude Code:\n\n```bash\nclaude mcp add --transport http --client-id HfY4RTp08YeBNRYm --callback-port 1455 fillfolio https://fillfolio.com/api/mcp\n```\n\nCodex (`~/.codex/config.toml`):\n\n```toml\n[mcp_servers.fillfolio]\nurl = \"https://fillfolio.com/api/mcp\"\n```\n\nIf Codex asks for an OAuth client ID, use `HfY4RTp08YeBNRYm` and leave the secret blank, then sign in.\n\nChatGPT and Claude web: add a Streamable HTTP connector at `https://fillfolio.com/api/mcp`, paste the same client ID, leave the secret blank, then sign in with Fillfolio.\n\nClaude Desktop and other local MCP hosts can use a Streamable HTTP bridge such as `mcp-remote`:\n\n```json\n{\n  \"mcpServers\": {\n    \"fillfolio\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"mcp-remote\", \"https://fillfolio.com/api/mcp\"]\n    }\n  }\n}\n```\n\nUse the same OAuth client ID if the bridge asks for one.\n\n## Tools\n\n| Tool | Scope | Purpose |\n| --- | --- | --- |\n| `get_portfolio_summary` | `portfolio:read` | Net worth, holdings value, cash, debt, and return availability |\n| `list_portfolios` | `portfolio:read` | Portfolios for the authenticated user |\n| `list_holdings` | `holdings:read` | Stocks, ETFs, funds, crypto, currency, and other holdings with cost-basis availability |\n| `list_cash_and_liabilities` | `accounts:read` | Cash and liabilities without account numbers |\n| `list_activity` | `activity:read` | Buys, sells, and other activity in a bounded date range |\n| `get_asset` | `holdings:read` | One canonical asset and its holdings across portfolios |\n\nInput and output shapes are in [`contract/tools.json`](contract/tools.json).\n\nEvery successful tool result is wrapped as:\n\n```json\n{\n  \"asOf\": \"2026-09-03T12:00:00.000Z\",\n  \"partial\": false,\n  \"missing\": [],\n  \"data\": {}\n}\n```\n\n`partial` and `missing` describe unavailable currency conversion. They are not errors.\n\nHolding `source` values are `manual`, `brokerage`, or `wallet`. Date ranges on `list_activity` cannot exceed 366 days. Pagination uses `cursor` plus `limit` (1 to 100, default 50).\n\n## Transport limits\n\n[`src/transport.ts`](src/transport.ts) is the public request-bounding helper used by the hosted server:\n\n- JSON only, no MCP batches\n- 1 MB request body\n- 2 MB response body\n- bounded object depth and node count\n\n## License\n\nMIT. See [LICENSE](LICENSE).\n",
  "bytes": 4811,
  "sha": "f91a504edebc5ca8da4a8be39519bf6baca94e46c84b9fc00ea41630a0032a79",
  "repo_slug": "fillfolio/portfolio-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_fillfolio_mcp_f27ab697/readme"
}