Stock Market MCP Server: Give Claude Stock Data, No API Key
Add a free stock market MCP server to Claude Code, Cursor or VS Code in one command: live 0–100 stock scores, a nightly screener and quotes. No API key.
The short answer: add the StocksScores MCP server. It is a remote server at https://api.stocksscores.com/mcp, free, with no API key and no account. In Claude Code it is one command:
claude mcp add --transport http stocksscores https://api.stocksscores.com/mcp
Claude can then call three tools: score one stock, screen the scored universe, and list the current top scorers. Every number is a 0–100 score where higher means more bullish. Setup for Claude Desktop, Cursor, VS Code and plain curl follows, then prompts that work, the limits (ten calls a day), and when the REST API is the better tool.
What is an MCP server, in two lines?
The Model Context Protocol is an open standard for connecting AI applications to outside tools and data; its own documentation compares it to a USB-C port for AI apps. An MCP server publishes a list of tools with typed arguments, and the model decides when to call them.
A server reaches the client in one of two ways defined in the transport spec: stdio, where the client launches the server as a local subprocess, or Streamable HTTP, where the server lives at a URL and receives JSON-RPC messages over POST. A remote HTTP server needs nothing installed on your machine, which is why the setup below is a single line.
Which stock market MCP servers exist?
Finance MCP servers fall into four rough kinds. They answer different questions, so pick by what you want the model to do with the data.
| Kind | Example | Credentials | What the model gets |
|---|---|---|---|
| Data vendor, hosted | Alpha Vantage's official server at mcp.alphavantage.co | Alpha Vantage API key | The vendor's quotes, history, fundamentals and indicators |
| Data vendor, run locally | Massive (formerly Polygon.io), open-source mcp_massive, marked experimental | Massive API key | The vendor's full REST API through search, call and SQL-query tools |
| Brokerage | Servers from brokers and community projects | Account login | Your positions and balances, sometimes order entry |
| Analysis layer | StocksScores | None | Computed 0–100 scores, a screener over nightly scores, a quote |
There are also many community wrappers around free or unofficial quote sources. Quality varies; read the code before handing one a key.
Raw-data servers are the right pick when you want the model to compute something itself: pull five years of daily bars, measure a drawdown, read an income statement. An analysis-layer server is the right pick when you want a judgement that has already been computed and can be checked: one call returns a composite score and the sub-scores behind it (the engine runs 120 scorers), instead of the model improvising its own read of a chart. The two combine without conflict, since an MCP client can hold several servers at once.
How do I install the StocksScores MCP server?
The server speaks Streamable HTTP with plain JSON responses: no authentication, no session, no SSE stream. Any client that accepts a remote MCP URL can use it.
Claude Code
claude mcp add --transport http stocksscores https://api.stocksscores.com/mcp
claude mcp list
The second command should show stocksscores as connected. By default the server is registered for the current project only; add --scope user to make it available everywhere.
Cursor and other clients that read an mcpServers file
Most JSON-configured clients use this shape, and Claude Code's project-level .mcp.json takes it as written:
{
"mcpServers": {
"stocksscores": {
"type": "http",
"url": "https://api.stocksscores.com/mcp"
}
}
}
In Cursor it goes in ~/.cursor/mcp.json for all projects or .cursor/mcp.json for one. Cursor's documentation shows remote entries keyed on url alone; if your version rejects the type line, remove it.
VS Code
VS Code reads .vscode/mcp.json, and its top-level key is servers, not mcpServers:
{
"servers": {
"stocksscores": {
"type": "http",
"url": "https://api.stocksscores.com/mcp"
}
}
}
Claude Desktop and claude.ai
Remote servers go in through the interface, not the config file: Settings → Connectors → Add custom connector, name it StocksScores, paste the URL and leave the OAuth fields empty. Anthropic's help article on custom connectors lists them on every plan, with Free accounts limited to one. Then enable the connector for the chat you are in.
claude_desktop_config.json is for local stdio servers. If you would rather keep everything in that file, the mcp-remote npm package bridges a remote URL to stdio:
{
"mcpServers": {
"stocksscores": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.stocksscores.com/mcp"]
}
}
}
ChatGPT and other clients
ChatGPT accepts remote MCP servers in its developer mode, where "No authentication" is one of the connector options. Which plans include developer mode has changed over time, so check your own settings. Any other client that supports Streamable HTTP takes the same URL.
Test it from a terminal
Listing the tools is part of the handshake and is not metered:
curl -s https://api.stocksscores.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
A real tool call counts against the daily quota:
curl -s https://api.stocksscores.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"top_scores","arguments":{"limit":5}}}'
GET /mcp returns 405 on purpose. The spec allows a server to answer GET with 405 when it offers no SSE stream, and this one never streams.
What do the three tools return?
| Tool | Arguments | Returns | Freshness |
|---|---|---|---|
get_stock_analysis | symbol (required) | Composite 0–100 score, the three pillars (technical, fundamental, news), the technical score per timeframe from 5-minute to 3-month, every sub-score, the current quote | Computed live, cached two hours |
screen_stocks | minScore, maxScore, sector, limit (default 25, max 200) | Compact rows, best first: symbol, score, the three pillars, price, sector | Last night's batch |
top_scores | limit (default 10) | The highest-scoring symbols right now, same row shape | Last night's batch |
Two filters change what "best" means. top_scores applies an investability cut: per its tool description, it skips stocks under $5, under $1B market cap, or with a risk grade above 7. screen_stocks has no such cut, but its feed drops symbols whose fundamental score is missing or built on less than 40% of the fundamental weight, which removes closed-end funds, preferred lines and pre-merger shells.
The sector argument must match exactly. The names in the feed are Technology, Healthcare, Financial Services, Industrials, Consumer Cyclical, Consumer Defensive, Energy, Basic Materials, Real Estate, Communication Services and Utilities.
What a response looks like
Here is get_stock_analysis for AAPL, trimmed to the fields most prompts use, values rounded. These came from a live call on October 8, 2026; the figures change daily.
{
"symbol": "AAPL",
"quote": { "regularMarketPrice": 336.67, "trailingPE": 38.61, "priceToBook": 45.74 },
"scores": {
"math": {
"grandTotal": 61.99,
"technical": {
"1d": { "total": 63.79 },
"1mo": { "total": 74.7 },
"total": 67.82
},
"fundamental": {
"returnOnEquity": 100,
"profitMargins": 96,
"priceToBookRatio": 0,
"total": 56.16
},
"news": {
"newsSentiment": 44.16,
"articleSentimentLastDay": null,
"total": 48.2
}
}
}
}
Three things to read off it. The composite, grandTotal, is the technical and fundamental totals weighted equally; the news total is reported beside them but carries no weight. Every sub-score runs in the same direction, higher is more bullish, so Apple's price-to-book of about 46 scores 0 while its return on equity scores 100: the scale is flipped for metrics where low is good. And missing data is null, never zero; a pillar with no data drops out and the composite rests on the one that remains, so a gap does not drag the score down. How 0–100 stock scores work covers the weighting, and the financial ratios cheat sheet explains what the fundamental inputs measure.
The full response carries every sub-score, with the technical ones repeated for each of eight timeframes, and runs to roughly 20 KB of JSON. Shipping the parts is deliberate: it lets the model explain a score instead of asserting one, the point made in explainable AI in stock analysis. The cost is several thousand tokens of context per call.
What can I ask it?
You do not name the tools; the model picks them from their descriptions. Each of these prompts maps onto one call:
| Prompt to paste | What the model calls |
|---|---|
| "Score MSFT and tell me which pillar is pulling the composite down." | get_stock_analysis({"symbol": "MSFT"}) |
| "Is NVDA's short-term technical picture different from its monthly one?" | get_stock_analysis({"symbol": "NVDA"}), then reads the per-timeframe scores |
| "List Healthcare stocks scoring 70 or higher." | screen_stocks({"minScore": 70, "sector": "Healthcare"}) |
| "Which Technology names score below 30, and is it the technicals or the fundamentals?" | screen_stocks({"maxScore": 30, "sector": "Technology"}) |
| "Show the ten highest-scoring stocks and the weakest pillar for each." | top_scores({"limit": 10}) |
| "Compare AAPL and GOOGL on fundamentals." | Two get_stock_analysis calls, so two of your ten |
Prompts that work less well: anything that needs price history ("chart TSLA since 2020"), funds ("score SPY" comes back refused, with the reason that it is not a common stock), and loops ("score every stock in the S&P 500"), which hit the quota on the eleventh symbol. For a broad list, ask for a screen with a high limit instead: one call, up to 200 rows. If screening is new to you, how to use a stock screener covers which filters are worth setting.
What are the limits?
- Ten tool calls a day, one per minute, per IP. The handshake (
initialize,notifications/initialized,tools/list) is not counted. A throttled call comes back as an ordinary tool result markedisError, not an HTTP 429, so the model reads the message and tells you instead of failing silently. For a higher allowance, email [email protected]. - US common stock only. Listed in the US, priced above $1, market cap above $25M. ETFs, indices, funds, OTC and foreign listings are rejected with the reason stated.
- Two clocks.
get_stock_analysiscomputes live and caches for two hours.screen_stocksandtop_scoresread the nightly batch, which starts at 21:30 UTC, after the US close. A screen run during the trading day reflects the previous night's scores. - No history, no statements, no orders. The tools return scores and a quote. There is no OHLC series and no filings text, and all three tools are read-only, so nothing can place a trade.
- Context weight. About 20 KB per analysis. Three or four stocks in one conversation is comfortable; twenty is not, and the quota stops you first anyway.
When is the REST API the better tool?
The MCP server is for conversation: a handful of questions, answered with reasons. Anything you would put in a loop belongs on the public REST API at https://api.stocksscores.com. It serves the same numbers, needs no key, and allows 1,000 requests per 10 minutes per IP.
curl -s 'https://api.stocksscores.com/api/analysis/scores?symbol=AAPL'
curl -s 'https://api.stocksscores.com/api/analysis/fundamental?symbol=AAPL'
curl -s 'https://api.stocksscores.com/api/analysis/news?symbol=AAPL'
curl -s 'https://api.stocksscores.com/api/analysis/technical?symbol=AAPL&interval=1d'
curl -s 'https://api.stocksscores.com/api/analysis/all'
/api/analysis/all is the nightly screener feed for the whole scored universe in one response. It is large (about 30 MB when this was written), so fetch it once a day and filter locally. Claude Code can combine the two routes: it can run curl itself, so you can ask it to save the nightly feed to a file and analyse it with a short script, which costs no MCP calls at all. The free stock API with no key covers the endpoints in more detail.
To check a number by eye, the free analysis page draws the same scores, no sign-up: AAPL on StocksScores. The paid tier ($29.99 a month, 7-day free trial) adds an AI analyst chat, top-score lists, trade ideas, portfolios and alerts. Neither the MCP server nor the REST API requires it.
FAQ
Is the StocksScores MCP server really free?
Yes. No key, no account, no card. The cost is the quota: ten tool calls a day per IP.
Which clients does it work with?
Any MCP client that supports remote Streamable HTTP servers. Claude Code, Claude Desktop, claude.ai, Cursor and VS Code are covered above; clients that only run local stdio servers can reach it through mcp-remote.
Why does GET /mcp return 405?
Because the server offers no SSE stream. Under the MCP spec, GET on the endpoint either opens a stream or returns 405 Method Not Allowed. All traffic here is POST.
How fresh are the scores?
A single-stock analysis is computed live and cached for two hours. Screens and top lists come from the nightly re-score of the whole universe, which starts at 21:30 UTC.
Can Claude place trades through it?
No. All three tools only read. There is no brokerage connection and no order endpoint.
What happens when I run out of calls?
The tool returns an error result that says so, and the model relays it. Switch to the REST API for bulk work, or email [email protected] for a larger allowance.
StocksScores scores are information, not investment advice.