← FXAbsolute How-to

Connect Cursor to Market Data

Published 2026-08-17 · Updated 2026-08-28 · FXAbsolute

Cursor speaks MCP, which means it can query real market data directly instead of you pasting CSV into the chat. Below is the exact configuration, verified on 17 August 2026 — plus an honest note about what "live" does and does not mean here, because the phrase promises more than this or any similar server delivers.

What is actually live, and what is not

Worth settling before you configure anything, because the answer changes whether this is useful to you.

CapabilityAvailable?
Historical candles, 2021–2026, 15 instrumentsYes — 28.4M one-minute bars
Server-side aggregation and session statisticsYes
Driving a trader's open chart in the browserYesfxa_connect_chart
Real-time streaming quotesNo
Placing live broker ordersNo

So: this is a historical archive with a live bridge to your own chart, not a market data feed. If you need streaming prices to trade against, you need a broker API, and no free MCP server will substitute for one. If you want an agent that can reason over years of real price history and interact with the chart you are looking at, this is exactly that.

Install

A sparse clone, because the full repository carries roughly 543 MB of candle data you do not need — the server fetches data over HTTPS and caches it locally instead.

git clone --depth 1 --filter=blob:none --sparse https://github.com/varsansri/fxabsolute
cd fxabsolute && git sparse-checkout set mcp
cd mcp && npm install

Verified on 17 August 2026: that clone is 806 KB, and the full tool smoke suite passes against live data in 13.4 seconds.

Note the absolute path of the mcp directory — you need it in the next step. pwd will print it.

The Cursor configuration

Cursor reads MCP servers from a JSON file. There are two scopes, and picking the right one saves confusion later:

ScopeFileUse when
Global~/.cursor/mcp.jsonYou want it in every project
Project.cursor/mcp.json in the repoOnly this project needs it, or you want it committed for a team

The entry itself is the same either way:

{
  "mcpServers": {
    "fxabsolute": {
      "command": "node",
      "args": ["/absolute/path/to/fxabsolute/mcp/src/index.js"]
    }
  }
}
Use an absolute path. A relative path is the single most common reason this fails silently — Cursor does not necessarily resolve it against the directory you expect, and the server simply never starts. Paste the output of pwd from the mcp directory and append /src/index.js.

If the file already exists, add fxabsolute alongside your other servers inside the existing mcpServers object rather than replacing it.

Real candles in Cursor, no API key 28.4 million one-minute bars over MCP with server-side aggregation and no request cap — an 806 KB install.
Start free — no account →

Verify it works

Restart Cursor, then check the MCP settings pane — the server should appear with its tools listed. If it does not, the two usual causes are a relative path and a missing npm install.

The fastest functional test is to ask something the model could not possibly answer from training data, so a plausible-sounding hallucination is easy to spot:

Using the fxabsolute tools, which UTC hour has the widest
average range on EURUSD, and how many bars is that based on?

A correct answer names 14:00 UTC at about 2.83 pips, from roughly 80,000 bars in that bucket, against a quietest hour of 21:00 at 0.73 pips. If the model answers without citing a sample size, or gives round numbers, it is guessing rather than calling the tool.

You can also confirm the server independently, outside Cursor:

cd mcp && npm run smoke

The tools you now have

ToolWhat it answers
fxa_instrumentsWhat is available and over what date range
fxa_candlesRaw bars at any timeframe
fxa_session_scanHow London, New York or Tokyo behave
fxa_bucket_statsStatistics grouped by hour or weekday
fxa_level_touchesHow often a level was touched, and held
fxa_connect_chartDrive a trader's open chart in the browser
fxa_wait_for_message / fxa_replyTwo-way conversation with the chart session

The design point worth understanding: aggregation happens server-side. Asking which hour is most volatile touches 1.9 million bars — as pasted CSV that is millions of tokens, and the model would have to do the arithmetic itself. Over MCP the server computes it and returns 24 rows. The token comparison across all four delivery methods is here.

The half your agent cannot do Replay the same archive bar by bar in your browser and build the pattern recognition yourself. Free, no account.
Open the free backtester →

What to actually ask it

Cursor's strength here is that it writes and runs code, so the useful pattern is let the agent fetch and compute, and review its reasoning rather than trusting a narrative answer.

Two habits that separate useful output from confident nonsense: always ask for the sample size, and always ask it to state its definitions. Most wrong answers in this domain come from an unstated definition of "touch" or "gap" rather than from bad arithmetic.

And the part an agent cannot do for you: recognising a setup in real time is a trained human skill. FXAbsolute replays the same archive bar by bar in a browser, free with no account, so the agent handles the statistics and you build the screen time.

The Cursor config, in full

Cursor reads MCP servers from a JSON config. Since the server is published on npm, the entry is three lines and needs no local checkout:

{
  "mcpServers": {
    "fxabsolute": { "command": "npx", "args": ["-y", "fxabsolute-mcp"] }
  }
}

Restart Cursor, and the ten fxa_* tools become available to the agent. The same block works unchanged in Claude Desktop and Windsurf — it is the standard stdio form.

One thing to know about the first call: the server fetches the instrument file it needs on demand and caches it under ~/.cache/fxabsolute-mcp. The first question about a given instrument therefore takes a few seconds and roughly 38 MB; every question after it is local and instant. Nothing is fetched for instruments you never ask about.

Frequently asked questions

How do I add a forex data MCP server to Cursor?

Add {"mcpServers":{"fxabsolute":{"command":"npx","args":["-y","fxabsolute-mcp"]}}} to Cursor's MCP config and restart. The package is published on npm, so no clone or build step is needed, and it requires no API key.

How do I connect Cursor to market data?

Install an MCP server, then add it to Cursor's mcp.json — either ~/.cursor/mcp.json for all projects or .cursor/mcp.json within a project. For FXAbsolute, sparse-clone the repository (about 806 KB), run npm install in the mcp directory, then add an entry with command "node" and args pointing to the absolute path of mcp/src/index.js.

Where does Cursor store MCP server configuration?

In mcp.json, at ~/.cursor/mcp.json for global scope covering every project, or .cursor/mcp.json inside a repository for project scope. Project scope is useful when you want the configuration committed so a team shares it. Both use the same mcpServers object structure.

Why is my Cursor MCP server not showing up?

The two most common causes are a relative rather than absolute path in args, which makes the server fail to start silently, and forgetting to run npm install in the server directory. Restart Cursor after editing mcp.json, and verify the server independently by running its smoke tests from a terminal.

Does this give Cursor live real-time prices?

No. It provides historical candle data — 28,412,683 one-minute bars across 15 instruments spanning 2021 to 2026 — plus a bridge that lets an agent drive a trader's open chart in the browser. It does not stream real-time quotes and cannot place broker orders. For streaming prices you need a broker API.

Does the FXAbsolute MCP server need an API key?

No. There is no API key and no request cap. Candle data is fetched over HTTPS from fxabsolute.com and cached locally at roughly 38 MB per instrument, downloaded lazily and only once. This differs from services such as Alpha Vantage, whose free tier requires a key and permits 25 requests per day.

How do I verify the MCP server is actually being used?

Ask a question the model could not answer from training data and require a sample size in the reply — for example which UTC hour has the widest average range on EURUSD. The correct answer is 14:00 UTC at about 2.83 pips from roughly 80,000 bars, against 0.73 pips at 21:00. Round numbers with no sample size indicate guessing.

Give Cursor five years of real candles

No API key, no request cap, 806 KB to install — and the same archive replays in your browser for the practice an agent cannot do.

Open FXAbsolute →