DeepStack MCP server
by mcauduro0
README.md
# DeepStack MCP server
The Model Context Protocol server behind [DeepStack](https://deepstack.ltd), an independent publication on the money behind AI. For each argument about AI capital (capex, credit, power, chips, the labs), DeepStack publishes the strongest case on each side with dated, sourced claims, takes a side (the DeepStack Call), and writes down the test that will settle it: the event, the date, the rule, and the probability the Call gave "yes" before the date. When the date comes, the result is published, whichever way it went.
This server lets any MCP client read that record.
- **Endpoint:** `https://mcp.deepstack.ltd/mcp` (Streamable HTTP, JSON-RPC 2.0)
- **Authentication:** none. Read-only. Free.
- **Registry:** `io.github.mcauduro0/deepstack` in the [official MCP Registry](https://registry.modelcontextprotocol.io)
- **Docs:** [deepstack.ltd/mcp](https://deepstack.ltd/mcp/)
Every answer is the published analysis as text, cites the canonical `deepstack.ltd` URL of each item it names, and ends with "Analysis and opinion, not investment advice." No model runs at request time.
## Tools
| Tool | Use it when the user asks |
|---|---|
| `deepstack_search` | where informed investors disagree on a topic, a company, a person or a question |
| `deepstack_story` | for one Part read in full: the question, both sides, the Call, what would change it, the next dated test |
| `deepstack_sides` | for the bull and bear case, or who disagrees with a thesis, with every claim attributed and dated |
| `deepstack_docket` | what will settle a dispute and when: the dated tests, their rules and the Call's probability |
| `deepstack_results` | what resolved and how the Call fared |
| `deepstack_entity` | what the voices argued about a company or what a person argued |
| `deepstack_tape` | for the macro figures the notes are tested against, each with its producer and date |
| `deepstack_counter` | for the strongest published case against a thesis or a claim |
All tools carry `readOnlyHint: true`.
## Connect a client
Configuration files for each client are in [`clients/`](clients/).
**Claude (claude.ai and the desktop app).** Settings, Connectors, *Add custom connector*. Name it DeepStack and use the URL `https://mcp.deepstack.ltd/mcp`, with no OAuth.
**Claude Code**
```
claude mcp add --transport http deepstack https://mcp.deepstack.ltd/mcp
```
**Cursor, Windsurf and other editors** (`mcp.json`)
```json
{ "mcpServers": { "deepstack": { "url": "https://mcp.deepstack.ltd/mcp" } } }
```
**VS Code** (`.vscode/mcp.json`)
```json
{ "servers": { "deepstack": { "type": "http", "url": "https://mcp.deepstack.ltd/mcp" } } }
```
**Any client, by hand**
```
curl -s https://mcp.deepstack.ltd/mcp -H 'content-type: application/json' -H 'accept: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"deepstack_docket","arguments":{}}}'
```
## Limits and what is kept
- 60 requests per minute per session (the `Mcp-Session-Id` that `initialize` issues), else per address; 30 `initialize` calls per minute per address.
- The questions asked through the tools are kept as text, with the date, the tool, the number of results and the name the calling program gives itself, to learn which disputes readers ask about. No address, user agent or cookie is kept. Details: [deepstack.ltd/privacy](https://deepstack.ltd/privacy/).
- Terms: [deepstack.ltd/terms](https://deepstack.ltd/terms/).
## How it works
A Cloudflare Worker in plain JavaScript (ES modules, no bundler, no npm dependencies). It reads DeepStack's public static API at [`https://deepstack.ltd/api/v1/`](https://deepstack.ltd/api/v1/index.json) with a ten-minute cache and answers from it. The same JSON is open to any program; this server makes it answerable in a conversation.
```
src/index.js router, CORS, cache, rate limit, the questions store
src/mcp.js JSON-RPC (initialize, ping, tools/list, tools/call) and the eight tools
src/lib.js pure helpers: keyword index and ranking, excerpts, formatting
src/stats.js aggregates for the owner's admin route
src/events.js per-day counts of the site's named controls
schema.sql the D1 tables
server.json the MCP Registry manifest
```
Run the tests with Node 20 or later:
```
npm test
```
To run your own copy you need a Cloudflare account: create a D1 database, put its id in `wrangler.toml`, apply `schema.sql`, set the `ADMIN_TOKEN` secret, and `npx wrangler deploy`. Point `API_BASE` at any host that serves the same JSON shape.
This repository mirrors the server that runs at `mcp.deepstack.ltd`. The publication itself, its data pipeline and its editorial process are not part of it.
## License
The code is MIT-licensed (see [LICENSE](LICENSE)). The content the server returns belongs to DeepStack and is governed by the [terms](https://deepstack.ltd/terms/).
Analysis and opinion, not investment advice.
This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues