An open-source, self-hosted mini Bloomberg Terminal for AI agents. Scrapes, stores, and serves SEC filings, institutional holdings, insider trading, congressional trades, short data, economic indicators, and daily stock prices — and exposes it all via MCP so your AI assistant can query it directly.
Powers equibles.com.
| Domain | Data Source | Description |
|---|---|---|
| SEC Filings | SEC EDGAR | 10-K, 10-Q, 8-K annual/quarterly/current reports with full-text search |
| Holdings | SEC 13F-HR | Institutional ownership — who owns what, how much, and trend over time |
| Insider Trading | SEC Form 3/4 | Director, officer, and 10% owner transactions |
| Congressional Trading | House/Senate disclosures | Stock trades by members of Congress |
| Short Data | SEC / FINRA | Fails-to-deliver (SEC), daily short volume and short interest (FINRA) |
| Economic Indicators | FRED (Federal Reserve) | Interest rates, inflation, employment, GDP, yield spreads, and more |
| Stock Prices | Yahoo Finance | Daily OHLCV prices with technical indicators (SMA, RSI, MACD) |
| Futures Positioning | CFTC | Commitments of Traders (COT) data for 30+ futures contracts |
| Market Indicators | CBOE | VIX volatility index (1990+) and put/call ratios by category |
The fastest way to get everything running. Requires Docker.
git clone https://github.com/daniel3303/Equibles.git
cd Equibles
cp .env.example .env
# Edit .env and set SEC_CONTACT_EMAIL (required by SEC EDGAR fair access policy)
docker compose upThis starts:
| Service | Port | Description |
|---|---|---|
| db | 5432 | ParadeDB (PostgreSQL + pgvector + pg_search) |
| web | 8080 | Web portal for browsing data |
| mcp | 8081 | MCP server for AI assistants |
| worker | — | Scrapers (SEC, FINRA, Congress, FRED, Yahoo) |
Data scraping starts automatically. SEC filings, holdings, insider trades, and congressional trades will begin populating within minutes.
All settings can be configured via a .env file in the project root (recommended for Docker) or environment variables.
FINRA Short Data (free API key required):
The FINRA scraper (short volume and short interest) requires a free API key. Without it, the scraper skips gracefully and all other scrapers run normally. Fails-to-deliver data comes from SEC and works without FINRA credentials.
To get a key:
- Create a free account at developer.finra.org
- Go to Teams & Apps and create a new application
- Copy the Client ID and Client Secret
- Set
Finra__ClientIdandFinra__ClientSecretin your.envfile or environment variables
FRED Economic Data (free API key required):
The FRED scraper requires a free API key from the Federal Reserve Bank of St. Louis. Without it, the scraper skips gracefully and all other scrapers run normally.
To get a key:
- Register at fred.stlouisfed.org/docs/api/api_key.html
- Copy the 32-character API key
- Set
Fred__ApiKeyin your.envfile or environment variables
Ticker Filtering (optional):
By default, all tickers are synced. To limit data syncing to specific stocks, set a single ticker list that applies to all scrapers:
# .env — sync only these tickers (applies to all scrapers)
Worker__TickersToSync__0=AAPL
Worker__TickersToSync__1=MSFT
Worker__TickersToSync__2=GOOGLWhen not set, all stocks are synced.
Minimum Sync Date (optional):
By default, all scrapers start from January 2020. Set a more recent date for faster initial sync, or go as far back as 2000-01-01 for more historical data:
# .env — start syncing from 2024 instead of 2020
Worker__MinSyncDate=2024-01-01Embedding (opt-in):
| Setting | Default | Description |
|---|---|---|
Embedding__Enabled |
false |
Set to true to enable vector embedding generation |
Embedding__BaseUrl |
— | Ollama or OpenAI-compatible endpoint (e.g., http://localhost:11434) |
Embedding__ModelName |
— | Model name (e.g., bge-m3) |
Embedding__BatchSize |
10 |
Texts per embedding batch |
Authentication (optional):
| Setting | Default | Description |
|---|---|---|
AUTH_USERNAME |
— | Web portal username (auth disabled if empty) |
AUTH_PASSWORD |
— | Web portal password (auth disabled if empty) |
MCP_API_KEY |
— | MCP server API key (auth disabled if empty) |
When set, the web portal requires login and the MCP server requires Authorization: Bearer <key> header. When unset, everything is open access (default).
The web portal at http://localhost:8080 provides a browser-based interface for exploring data:
- Stocks — Browse and search all tracked companies, view price charts with technical indicators (SMA, RSI, MACD), institutional holdings, short data, SEC filings, insider trading, and congressional trades per stock
- Economy — Browse FRED economic indicators grouped by category (interest rates, inflation, employment, GDP, etc.) with charts and statistics
- Futures — CFTC Commitments of Traders positioning data for 30+ futures contracts (commodities, indices, currencies) with commercial/non-commercial position charts
- Market — CBOE market indicators: VIX volatility index with OHLC charts, put/call ratios (equity, index, total, VIX, ETP)
- Status — System health, worker status, data counts, and error log
The MCP server exposes financial data tools for AI assistants (Claude, ChatGPT, etc.):
- Institutional Holdings — Top holders, ownership history, institution portfolios, institution search
- Insider Trading — Insider transactions, ownership summary, insider search
- SEC Documents — Full-text search, semantic search, document browsing, keyword search within filings
- Economic Indicators — FRED data lookup, latest macro snapshot, indicator search across categories
- Futures Positioning — COT positioning data, latest snapshot across all contracts, contract search
- Market Indicators — VIX historical data, put/call ratios by type (equity, index, total, VIX, ETP)
Add this to your Claude Desktop config file (claude_desktop_config.json):
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"equibles": {
"url": "http://localhost:8081/mcp"
}
}
}Restart Claude Desktop and the Equibles tools will be available. You can then ask questions like "Who are the top institutional holders of AAPL?" or "Search Apple's latest 10-K for revenue growth discussion."
Add the MCP server to Claude Code:
claude mcp add equibles --transport http http://localhost:8081/mcpAdd this to your ChatGPT Desktop config file:
macOS: ~/Library/Application Support/com.openai.chat/mcp.json
Windows: %APPDATA%\com.openai.chat\mcp.json
{
"servers": {
"equibles": {
"url": "http://localhost:8081/mcp"
}
}
}Restart ChatGPT Desktop and the Equibles tools will be available.
In OpenClaw, add an MCP server with the URL http://localhost:8081/mcp (HTTP transport).
Any MCP-compatible client can connect to http://localhost:8081/mcp (HTTP transport).
Vector embeddings enable semantic search over SEC filings (e.g., "find revenue growth discussion in Apple's 10-K"). This requires downloading the Ollama runtime (~2GB) and the BGE-M3 model (~1.2GB).
docker compose --profile embedding upThis adds:
| Service | Port | Description |
|---|---|---|
| embedding | 11434 | Ollama server with BGE-M3 model |
| worker-embedding | — | Worker with embedding generation enabled |
Without the embedding profile, BM25 full-text search via ParadeDB still works out of the box — vector search is purely additive.
See CONTRIBUTING.md for development setup, project architecture, and how to extend the platform.
Daniel Oliveira



