MCP Integration
Connect any AI assistant to Pulse synthetic market data using the Model Context Protocol.
The Pulse MCP server exposes our market data and backtesting tools as LLM-callable functions via the Model Context Protocol. Ask your AI assistant to analyse spread behaviour, run a TWAP backtest, or profile order book depth — all in natural language.
The MCP server never returns raw market data. All responses are aggregated statistics or backtest results, keeping payloads small and LLM-friendly.
Available tools
The following tools are registered on the MCP server. Your AI assistant will automatically discover them when connected.
| Tool | Description |
|---|---|
| list_calibrated_data | List the instruments and calibrated dates the agent-based model can simulate |
| list_available_data | List every symbol-day in the raw data registry, calibrated or not — what a foundation model can be prompted with |
| list_scenarios | List market scenarios and their default parameters |
| run_simulation | Submit a Monte Carlo simulation job, agent-based (engine="abm") or foundation-model (engine="fm") |
| check_job | Get status of a simulation job |
| list_jobs | List all simulation jobs for the current user |
| get_job_results | Get results for all simulations in a job |
| list_cached_simulations | List cached baseline simulations (free tier) |
| list_sim_files | List available files for a simulation |
| get_mid_price_series | Download mid-price time series for a simulation |
| get_exec_schedule | Download execution schedule for algo simulations |
| get_sim_params | Get simulation configuration parameters |
| get_sim_metrics | Get simulation result metrics |
| get_exec_results | Download execution cost metrics for one algo run |
| run_validation | Submit a Pulse-Check validation job |
| check_validation_job | Get a validation job's status without its results — poll this, not get_validation_job |
| get_validation_job | Get a finished validation job's full results |
| list_validation_jobs | List validation jobs for the current user |
| get_job_logs | Read the engine log for a failed job, to find out why it failed |
| list_fm_models | List the foundation models available, and what each accepts |
Available data
See Download data for the full symbol list, available cached simulations, and output file details.
Discovering symbols and dates
Two tools answer "what can I run?", one per engine. Both catalogs are too large to hand an assistant in one response, so both summarise by default. Each instrument comes back as one row with date_count, first_date and last_date instead of the per-date detail. A symbol or date filter, or include_dates, returns the dates themselves.
list_calibrated_data lists what the agent-based model can simulate. Every instrument and date it returns is calibrated, so it is a valid input to run_simulation with the default engine.
| Argument | Description |
|---|---|
| symbol | Exact ticker, e.g. "700.HK". Returns that instrument's full date detail |
| date | Calibration date "YYYY-MM-DD". Returns the instruments calibrated on it |
| exchange | Exchange protocol, e.g. "hkex_securities" |
| provider | Data provider, e.g. "omd" or "bmll" |
| limit / offset | Page the listing. limit is 1–1000, default 50; offset defaults to 0 |
| include_dates | Return per-date detail for every instrument in the page |
It returns total (matches before paging), returned, limit, offset, truncated and instruments, so the assistant can tell when a listing was cut short and page for the rest.
list_available_data lists the raw data registry: every symbol-day that exists, calibrated or not. That is what a foundation model can be prompted with, and what could be calibrated.
| Argument | Description |
|---|---|
| symbol | Exact symbol, e.g. "700" or "TSCO" |
| q | Case-insensitive substring match over the symbol |
| provider | Data provider, e.g. "bmll" |
| exchange | Exchange protocol, e.g. "lse" or "hkex_securities" |
| date | Trading date "YYYY-MM-DD". Keeps only symbols with data on it |
| model_id | A model from list_fm_models, by model_id or production name. Keeps only the markets it accepts |
| include_calibration_state | Also return which of each symbol's days are already calibrated |
| include_dates | Return every date per symbol instead of the summary |
| limit / offset | Page the listing. limit is 1–200, default 50; offset defaults to 0 |
It returns total, limit, offset and symbols, one entry per {symbol, provider, exchange}.
You rarely need to name these arguments yourself. Asking "which dates can I simulate 700.HK on?" or "what is ready on 2 September 2025?" is enough for the assistant to pick the right tool and filter.
The same ticker can appear under more than one data provider, with different dates and tick sizes — Tencent is 700.HK from omd and 700 from bmll. A date that exists for one will not necessarily exist for the other, so if a simulation is rejected for an unavailable date, check the provider before the date.
Prerequisites
- A Pulse API key — get one from your Dashboard
- Node.js installed (for the
mcp-remotebridge used by Claude Desktop)
Claude Code (CLI)
The quickest way to connect — add the server in one command:
claude mcp add pulse -s user \
--transport http \
https://pulse-mcp.simudyne.com/mcp \
--header "X-API-Key: YOUR_API_KEY"Restart Claude Code and you are ready to go. Ask it to "run a flash crash simulation for 700.HK".
Claude Desktop
1. Open your config file
On macOS it is located at:
~/Library/Application Support/Claude/claude_desktop_config.jsonOn Windows:
%APPDATA%\\Claude\\claude_desktop_config.json2. Add the Pulse MCP server
Paste the following into the mcpServers object, replacing YOUR_API_KEY with your actual key:
{
"mcpServers": {
"pulse": {
"command": "npx",
"args": [
"mcp-remote",
"https://pulse-mcp.simudyne.com/mcp",
"--header",
"X-API-Key: YOUR_API_KEY"
],
"timeout": 300000
}
}
}The timeout is set to 5 minutes (300 000 ms). Some tools like run_simulation submit asynchronous jobs, so you can use check_job to poll for completion. 5 minutes is a safe default for most operations.
3. Restart Claude Desktop
Fully quit Claude Desktop (Cmd+Q on macOS) and reopen it. You should see a tools icon at the bottom of the chat input showing pulse with 20 tools available.
Try asking: "What symbols are available for simulation?"
Any MCP-compatible client
The Pulse MCP server works with any tool that supports the Model Context Protocol — including Cursor, Windsurf, VS Code + GitHub Copilot, Cline, Zed, and many others. To connect, you need three things:
What you need
- MCP server URL —
https://pulse-mcp.simudyne.com/mcp - Your API key — passed as an
X-API-Keyheader with every request - Node.js — required for the
mcp-remotebridge that converts between stdio and HTTP (most desktop clients use stdio under the hood)
Generic configuration
MCP is a client- and model-agnostic protocol, so the same server works regardless of which assistant you use — only the config file location differs between clients. Replace YOUR_API_KEY with your actual key and paste this block into your client's MCP server configuration:
{
"mcpServers": {
"pulse": {
"command": "npx",
"args": [
"mcp-remote",
"https://pulse-mcp.simudyne.com/mcp",
"--header",
"X-API-Key: YOUR_API_KEY"
],
"timeout": 300000
}
}
}If your client supports Streamable HTTP transport directly (e.g. via a url field), you can point it straight at https://pulse-mcp.simudyne.com/mcp and skip the mcp-remote bridge entirely. Pass your API key as an X-API-Key header.