Gloom MCP
오픈소스 Bloomberg 스타일 터미널인 Gloom에서 제공하는 호스팅 MCP 서버. Claude, ChatGPT, Cursor 및 Codex를 위한 시세, 재무 데이터, 옵션, SEC 서류, 매크로 및 뉴스를 제공합니다.
호스팅형 MCP 서버
npx add-mcp 'https://api.gloom.sh/mcp'Claude Code, Codex, Cursor 등에 설치됩니다
문서
What it is
Gloom Cloud hosts a Model Context Protocol server at https://api.gloom.sh/mcp. It exposes the research tools Gloom's own assistant uses: quotes, history, financials, holders, analyst research, options, SEC filings and insiders, macro, congressional trades, short interest, options flow, the news wire, the equity diagnostic, and hiring data. With the right access it also reaches your notes, your teams, team watchlists and portfolios, and the brokers you connected in Gloom.
Nothing runs on your machine. It is part of Gloom Pro.
Use it when an agent needs Gloom's data. Use the remote API to drive a running desktop or TUI, and the CLI for one-off reports from a shell.
Connect
Sign in from the client. OAuth clients (Claude Code, claude.ai, Cursor, most recent MCP clients) only need the endpoint. The first call opens a browser tab where you sign in and choose what the client may reach.
claude mcp add --transport http gloom https://api.gloom.sh/mcp
Use a key. For scripts, cron jobs, and clients that cannot open a browser, create a key in Cloud settings, Agents and send it as a bearer token (x-api-key also works). Keys are shown once; make one per agent, up to 10.
claude mcp add --transport http gloom https://api.gloom.sh/mcp \
--header "Authorization: Bearer gloom_mcp_..."
export GLOOM_MCP_KEY=gloom_mcp_...
codex mcp add gloom --url https://api.gloom.sh/mcp --bearer-token-env-var GLOOM_MCP_KEY
{
"mcpServers": {
"gloom": {
"url": "https://api.gloom.sh/mcp",
"headers": { "Authorization": "Bearer gloom_mcp_..." }
}
}
}
Raw HTTP: stateless Streamable HTTP, one JSON reply per POST (GET and DELETE answer 405). Access tokens live two hours; request offline_access for a refresh token.
Access
| Access | Reaches |
|---|---|
| Market data | Market, company, filing, macro, and news tools |
| Read | Plus teams.list, notes.list, notes.get, collections.list, collections.get, and broker tools |
| Read and write | Plus notes.save, collections.add_symbol, collections.remove_symbol |
Keys carry their access and an optional team pin, both fixed at creation; a pinned key sees one team and can omit teamId. Signed-in clients get the same levels through the mcp:read and mcp:write scopes, which you can untick on the consent screen. tools/list only returns what the caller may call. Personal notes are always the account owner's own.
Tools
Every tool is read-only unless listed under write, validates its arguments, and caps its result at 256 KB. limit bounds source rows before the cap.
| Tool | Arguments |
|---|---|
market.search | query, limit |
market.quotes | symbols, exchange?, limit |
market.history | symbol, exchange?, interval, startDate?, endDate?, limit |
market.screener | category, limit |
market.options_chain | symbol, exchange?, expiration?, limit |
market.short_interest | symbol, years, limit |
market.options_flow | limit, symbol?, days?, minPremium? (any filter searches recorded prints instead of the live tape) |
company.profile, company.financials, company.holders, company.analyst_research, company.corporate_actions | symbol, exchange?, limit |
company.statements | symbol, exchange?, period, limit |
sec.filings | ticker, offset, limit |
sec.insider_transactions | ticker, limit |
sec.thirteenf_holders | ticker, quarter? (YYYYQn), offset, limit |
sec.thirteenf_crowding | quarter?, rank (new, exits, increases, decreases), funds, limit |
macro.calendar, macro.yield_curve | limit |
macro.series | seriesId, startDate?, endDate?, limit |
congress.house_trades | year?, member?, ticker?, side?, owner?, assetType?, minAmount?, limit |
congress.senate_trades | year?, member?, ticker?, side?, owner?, assetType?, minAmount?, limit |
news.stories | query?, feed, tickers, topics, limit |
equity.diagnostic | symbol, exchange?, mode, limit |
company.hiring | ticker, roles |
market.hiring_movers | limit |
teams.list | limit |
notes.list | scope (user or team), teamId?, kind? (ticker or quick), limit |
notes.get | id |
notes.save (write) | scope, teamId?, kind, key, title?, content, expectedRevision? |
collections.list | teamId?, limit |
collections.get | teamId?, collectionId, limit |
collections.add_symbol (write) | teamId?, collectionId, symbol, exchange?, quantity?, note? |
collections.remove_symbol (write) | teamId?, collectionId, symbol, exchange? |
portfolio.accounts | none |
portfolio.positions | broker? |
portfolio.performance | broker?, accountId?, since? (YYYY-MM-DD) |
tools/list carries the full JSON schema with enums and defaults. Start with market.search when a ticker is ambiguous.
Notes are keyed: a ticker note by symbol, a quick note by any short name. notes.save replaces the whole note, so read first and pass expectedRevision; a newer edit returns revision_conflict instead of overwriting. Writes reach every team member's terminal immediately. quantity applies to portfolios only.
Brokers
Connect a broker in Gloom and every client with read access reaches it through Gloom. Signing in opens a gloom.sh page that asks for the code Gloom shows, then the broker's own sign-in.
portfolio.accounts, portfolio.positions, and portfolio.performance cover every connected broker in one call and need no Pro. A broker that fails adds a row with error and message, and the result is partial. Performance comes from brokers that report daily history, kept past the broker's own window.
Brokers with their own MCP server also expose their tools:
| Broker | Tools | Writes (read and write access) |
|---|---|---|
| Interactive Brokers | ibkr.*: positions, balances, performance, trades, orders, contract search, prices, alerts, watchlists | Order instructions, alerts, and watchlists, when connected with trading instructions enabled |
| Robinhood | robinhood.*: its read tools, including accounts and equity positions | None |
IBKR keeps one connection per user, so Gloom holds it and your agent reaches IBKR through Gloom instead of connecting on its own. An IBKR order instruction is not an order: IBKR returns a link where you review and submit it yourself.
Results
Each call returns text plus structuredContent with status (ok, partial when a limit or the cap removed rows, or error), rowCount, truncated, asOf, and data. A failed source returns status: "error" with data.error = { code, source, reason }, marked as a tool error.
Plans and limits
Creating keys needs Pro. Any valid key or token can initialize and tools/list; tool calls need Pro, except portfolio.*, and get realtime quotes and the live news wire. Keys allow 120 requests a minute and 5,000 a day; signed-in accounts share the per-minute limit. Every POST counts. Over the limit means 429 with Retry-After. If Pro lapses, keys and connections stay but tool calls are refused until it is back.
Security
Revoking a key applies on the next request. Disconnecting a client revokes its refresh token at once; a token it already holds expires within two hours.