Hesper Atlas for AI agents
A Model Context Protocol endpoint for the public historical replay, row-level static-tail and rolling walk-forward evidence, version provenance, append-only publication commitments and the latest completed end-of-day signal snapshot. The public evidence layer needs no credential; exact forward rows and the current action layer need a subscription.
Short answer: point any MCP client at https://hesperatlas.com/mcp. Nine tools work immediately and cover the full current-rule historical replay, row-level static-tail and rolling walk-forward evidence, version provenance, and SHA-256 commitments for each forward publication. Six more return the latest or frozen end-of-day action layer and use a connected active subscription through OAuth 2.1; API keys remain a developer fallback. Successful data tools identify their data type, source, freshness, calculation route and caveats. Nothing is real-time, and nothing is personalized investment advice.
1Connect
The transport is Streamable HTTP: one stateless POST carrying JSON-RPC 2.0. There is no stream to open, no session to keep and, in the current protocol, no initialize handshake. MCP clients handle the request metadata automatically. A plain HTTP client can discover the server like this:
curl -s https://hesperatlas.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: server/discover' \
-d '{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{
"io.modelcontextprotocol/protocolVersion":"2026-07-28",
"io.modelcontextprotocol/clientInfo":{"name":"curl","version":"1"},
"io.modelcontextprotocol/clientCapabilities":{}}}}'
Every current-protocol request repeats that _meta block and sends matching MCP-Protocol-Version and Mcp-Method headers. A tools/call request also sends Mcp-Name. This makes each request independently routable and prevents a proxy and the application from interpreting different operations.
HTTPS browser agents are supported through CORS preflight. The server echoes the validated origin and allows the MCP, content-type and authorization headers, but never enables cookie credentials: public tools remain anonymous and subscriber tools require an explicit OAuth access token or developer API key.
Subscriber account connection
OAuth-capable clients discover the authorization flow from /.well-known/oauth-protected-resource/mcp. Hesper Atlas implements authorization code with mandatory PKCE S256, exact MCP resource binding, dynamic public-client registration, one-hour access tokens and rotating refresh tokens. The consent page authorizes only signals:read; the token is refused on every account, billing and non-MCP route.
If an anonymous call selects a subscriber tool, its error result carries _meta["mcp/www_authenticate"], so a compatible client can open sign-in and consent instead of asking the user to copy a secret.
Developer API-key fallback
For clients that cannot complete OAuth, create a read-only API key on the account page and add one header. Nothing else changes.
curl -s https://hesperatlas.com/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H 'MCP-Protocol-Version: 2026-07-28' \
-H 'Mcp-Method: tools/call' \
-H 'Mcp-Name: get_signal' \
-H 'Authorization: Bearer hsp_live_...' \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"get_signal","arguments":{"symbol":"NVDA"},"_meta":{
"io.modelcontextprotocol/protocolVersion":"2026-07-28",
"io.modelcontextprotocol/clientInfo":{"name":"curl","version":"1"},
"io.modelcontextprotocol/clientCapabilities":{}}}}'
In an MCP client that takes a remote server URL, add https://hesperatlas.com/mcp as a Streamable HTTP server. Let the client follow OAuth when it asks for a subscriber tool, or set the developer bearer key manually if OAuth is unavailable. Current clients may use server/discover; domain-level discovery metadata also lives at /.well-known/mcp.json. 2025-era clients remain supported through their automatic initialize / notifications/initialized flow.
Using Claude, Cursor, GitHub Copilot or the OpenAI Responses API? The connection guide has current client-specific steps, a one-click Cursor installer, copyable allowlisted configurations and an OpenAI Python example. The canonical registry identity is com.hesperatlas/hesper-atlas.
2Discovery files
| Artifact | Purpose |
|---|---|
/server.json | Versioned manifest prepared for publication to the official MCP Registry. It declares the domain-authenticated name, public Streamable HTTP endpoint, website and icon. |
/.well-known/mcp.json | On-domain discovery document with protocol versions, authentication boundary, public evidence links, registry identity and documentation. |
/.well-known/oauth-protected-resource/mcp | OAuth resource identity, authorization-server location, supported scope and documentation for MCP clients. |
/.well-known/oauth-authorization-server | OAuth authorization, token, registration and revocation endpoints plus the mandatory PKCE S256 capability. |
/agent-evals.json | Model-neutral expected-behavior tasks and prohibited inferences. It is an evaluation contract, not a claimed pass-rate report. |
/.well-known/security.txt | Canonical security-reporting contact and policy link for reviewers and automated scanners. |
3The tools
| Tool | Access | Returns |
|---|---|---|
get_track_record | Free | Headline historical-replay statistics plus a bounded page of the open replay book. Defaults to 10 positions; use open_limit and open_offset to page, or limit 0 for summary only. |
get_ledger_stats | Free | Replay results per year and theme, return distribution, holding periods, ten best and ten worst, closed and open cut on identical buckets. |
get_symbol_record | Free | Every closed round trip today’s engine produces when replayed on one ticker, plus its open replay position. |
list_closed_trades | Free | Closed historical-replay rows, newest first, filterable and paged. |
get_methodology | Free | How the engine decides, what the numbers claim, the known biases. |
list_forward_publications | Free | Append-only publication manifests with stable ids, timestamps, previous-publication links, change counts and SHA-256 commitments. Its summary distinguishes snapshot revisions from distinct market dates and explicitly reports that performance is not calculated from commitments. Exact signal rows require a connected subscriber account. |
get_heldout_evidence | Free | Content-derived run manifest, aggregate summary and paged row-level results for the 152-name chronological static-tail validation artifact, including its reuse caveat. |
get_walk_forward_evidence | Free | Cache-frozen expanding-window annual selections, per-name and per-year out-of-sample comparisons, committed primary-input hashes and weak results without a winners-only filter. artifact selects the per-name audit (default), the class-pooled selection audit, or the model portfolio's monthly walk-forward with past monthly picks. |
get_provenance | Free | The authoritative methodology version, content-derived published-decision and evaluation-pipeline calculation versions, component hashes and attestation limitations. |
get_signal | OAuth | Latest end-of-day bot-safe action and target position, confirmed ownership state, current replay leg, first longer-history entry, risk level and trigger prices. |
list_signals | OAuth | recent_entries for chronological entries; recent_buys only for entries still actionable now, plus recent sells, at risk, opportunities, undervalued, catch-up and on-deck. |
get_market_context | OAuth | Regime, breadth, market heat and the cycle read. |
get_model_portfolio | OAuth | The model book: best N names to own now, risk-weighted. |
get_forward_record | OAuth | Exact immutable rows from one forward publication, with stable signal ids, previous-row links and changed-field classifications. |
get_changes_since | OAuth | Chronological before/after events after a publication cursor; material stance changes by default, with optional mark updates. |
For automation, treat action and suggested_position as authoritative. The confirmed state can still read LONG during the interval after price crosses a published sell line and before the closing-bar engine transition is recorded; in that case the tool returns action: EXIT, recommended_state: FLAT and target position 0. Entry clocks are named explicitly: current_leg matches the public replay window, while first_entry covers the longer active trend.
Calling a subscriber tool anonymously returns a structured subscription payload plus MCP OAuth challenge metadata. A compatible client can connect the user; a model can still explain the price, sign-up URL and free alternatives without inventing a result.
4Trust and provenance fields
Every successful data tool returns a compact trust contract alongside its actual result. Read these fields before presenting a number:
| Field | Meaning |
|---|---|
data_type | One of historical_replay, historical_backtest_validation, historical_rolling_walk_forward_validation, methodology_and_calculation_provenance_manifest, forward_eod_snapshot_commitment_index, forward_eod_snapshot, forward_eod_change_log, current_eod_snapshot, methodology_documentation, or a clearly named mixed response. |
is_live | Real-time/intraday status. It is currently false on every Hesper Atlas tool; “current” means the latest completed end-of-day snapshot. |
as_of / last_updated | The snapshot’s own timestamp and when the derived payload was generated. Replay tools also expose market_data_as_of where the backend can establish it. |
source / provenance | The human-readable source, calculation route, update cadence, and confirmation that raw price history is not included. |
source_url / citation | A stable human-readable source URL plus the data type, as-of value and methodology/calculation versions an agent should carry into a citation. |
methodology_version | A stable, human-assigned version for the documented decision process. The current release is ha-methodology-1.0.0. |
calculation_version | A content-derived identifier for the source files that performed the calculation. Engine and evaluation routes have separate versions so an agent can detect code changes even when the prose methodology version is unchanged. |
caveats / disclaimer | Limitations specific to the result plus the educational, non-personalized-use boundary. Relay both. |
The historical replay applies today’s engine rules retrospectively over up to five years of end-of-day data. It includes winners, losses and open replay positions, but it remains separate from validation and from the append-only forward ledger. get_heldout_evidence exposes all 152 static-tail rows and records that later research reused the tail, so it is validation, not a pristine unseen test. get_walk_forward_evidence is stricter: each annual choice is fit only through the preceding year, then scored on the following calendar year. It deliberately retains names and years where the adaptive selector lagged holding or the champion-free base, rechecks the frozen input files before publication, and embeds the exact component hashes behind its calculation version.
The forward ledger begins when the feature is deployed; there is no retroactive reconstruction. Public callers can inspect each verified commitment and a compact maturity summary: total snapshots, distinct market dates, the first and latest dates, the latest revision, instrument count and change counts. The summary deliberately returns performance_status: not_calculated_from_commitments: a hash proves what was stored, not whether it later made money. Subscribers can retrieve exact frozen rows or ask for changes after a stable publication id. Those hashes detect later alteration within the published chain, but Hesper Atlas has no independent timestamp authority or third-party signer configured; get_provenance says so explicitly. A symbol marked unavailable was absent from that scan snapshot; that alone does not prove it left the universe.
5OAuth and developer keys
OAuth is the consumer connection path. The user signs into Hesper Atlas in their browser, sees the requesting client by name, approves read-only access, and can disconnect that client from the account page. Access tokens live for one hour. Refresh tokens live for 30 days, rotate on every use, and a replayed refresh token revokes its entire token family.
API keys remain available for developer clients that cannot run OAuth. They are shown once, stored only as cryptographic hashes, capped at ten per account and independently revocable.
Both credential types unlock current signals, exact frozen forward rows and change-since queries only at /mcp. Neither can cancel a subscription, change billing, delete an account, create credentials or place trades. OAuth additionally binds every token to the exact https://hesperatlas.com/mcp resource.
6Limits and fair use
- 120 calls per minute per connected OAuth client or API key. Without a credential, 40 per minute per address.
- Every response is served from a completed local snapshot. Nothing an agent can call triggers even a background recomputation. Time-sensitive payloads carry
as_of,last_updatedand data-type fields. - One subscription covers one user's own agents. Republishing the paid signal layer, or fanning it out to third parties, is what the terms call redistribution and it is not covered. The free tools carry no such restriction: quote the replay with its caveats, and please cite it.
7What the API deliberately does not return
No raw price history. Every field is Hesper Atlas's own derived output: signals, dates, returns, statistics. If you need candles, use a market-data vendor; that is their product, not ours.
No personalized advice, from any tool. The engine does not know your portfolio, tax position, horizon or risk tolerance, and its output is an impersonal publication. Every payload carries a disclaimer field for exactly this reason: relay it.