Stock Atlas

Query US company data from SEC filings: financial statements, company-reported KPIs, guidance, EPS, dividends and daily prices for about 4,000 companies since 2010, with full SQL.

Hosted MCP Server

npx add-mcp 'https://stockatlas.com/mcp'

Installs into Claude Code, Codex, Cursor and more

Documentation

Stock Atlas documentation

Stock Atlas is a remote MCP server for US public-company and ETF data built from SEC filings: quarterly and annual fundamentals, company KPIs, guidance, daily prices and ETF distributions, from 2010 to 2026. Connect it to Claude and ask in plain English, or call its tools from your own code.

Access

Using the data needs a Stock Atlas account on the free trial or a paid plan. Sign in with your email or Google; no card or password is needed. Your 14-day trial starts with your first query and includes 10,000 requests, 500 query-seconds and 250,000 rows returned. There is one free trial per person. Sign in or create an account.

Connect

Server URL: https://stockatlas.com/mcp

claude.ai, Claude Desktop and Claude mobile

  1. In Claude, open Settings → Connectors and choose Add custom connector.
  2. Name it Stock Atlas, paste the server URL, and leave the advanced settings empty.
  3. Choose Connect. Claude opens stockatlas.com: sign in, then approve.

The connection uses OAuth 2.0, so no API key is needed. You can disconnect Claude at any time from your dashboard.

Claude Code

Create an API key on your dashboard, then:

claude mcp add --transport http stock-atlas https://stockatlas.com/mcp \
  --header "Authorization: Bearer $STOCK_ATLAS_API_KEY"

Other MCP clients

Any client that supports Streamable HTTP: the same URL, with the key in an Authorization: Bearer header. Keys are never accepted in the URL.

Python quick start

From Python you call Stock Atlas with the official MCP SDK. Install it, and pandas for the tables:

pip install "mcp>=2.3" pandas

Put an API key from your dashboard in an environment variable:

export STOCK_ATLAS_API_KEY="your-key"

[!note] Note Keep the key out of your code, chat messages and screenshots. Anyone holding it can use your plan's allowance; if one leaks, delete it on your dashboard and create another.

Save this as stock_atlas.py. call runs one tool and returns its result; frame turns a result into a DataFrame.

import asyncio
import os

import pandas as pd
from mcp import ClientSession
from mcp.client.streamable_http import create_mcp_http_client, streamable_http_client

URL = "https://stockatlas.com/mcp"
API_KEY = os.environ["STOCK_ATLAS_API_KEY"]

async def _call(tool, arguments):
    headers = {"Authorization": f"Bearer {API_KEY}"}
    async with create_mcp_http_client(headers=headers) as http:
        async with streamable_http_client(URL, http_client=http) as (read, write, *_):
            async with ClientSession(read, write) as session:
                await session.initialize()
                result = await session.call_tool(tool, arguments)
                if result.is_error:
                    raise RuntimeError(result.content[0].text)
                return result.structured_content

def call(tool, **arguments):
    """Run one Stock Atlas tool and return its result as a dict."""
    return asyncio.run(_call(tool, arguments))

def frame(result):
    """A tool result as a pandas DataFrame."""
    return pd.DataFrame(result["rows"], columns=result["columns"])

Your first query: Apple's revenue for the last five fiscal years, each with the 10-K it was reported in.

from stock_atlas import call, frame

result = call("get_financials", ticker="AAPL", metric_id="revenue", period_type="FY", limit=5)
df = frame(result)
df["revenue_bn"] = (df.value / 1e9).round(1)
print(df[["fiscal_year", "period_end", "revenue_bn", "sec_filing"]])
fiscal_year  period_end  revenue_bn sec_filing
0         2025  2025-09-27       416.2       10-K
1         2024  2024-09-28       391.0       10-K
2         2023  2023-09-30       383.3       10-K
3         2022  2022-09-24       394.3       10-K
4         2021  2021-09-25       365.8       10-K

Every tool returns columns and rows, plus a few fields of its own; here sec_filing_url holds the EDGAR link to each 10-K. Each call opens its own session, which keeps the helper short; a long-running program can keep one session open and call several tools on it.

Next: Examples shows the other tools at work, and the Tools reference lists every argument.