REPORT: QTSurfer MCP Setup and Integration
Date: 2026-08-12
========================================
WHAT WORKED
-
Installation
- Native qtsurfer-mcp binary installed via install.sh
-
Registration in Claude Code
- claude mcp add with "user" scope
- "qtsurfer" server available across all projects
-
Broken domain diagnosis
- api.qtsurfer.com was tried first because it's the binary's built-in
default (--url default) and the domain documented in the mcp-java
README's example Claude Code config
- It turned out to be a dead Vercel deployment
(header x-vercel-error: DEPLOYMENT_NOT_FOUND)
- Found the correct, live domain: api.qtsurfer.net (found empirically
by trying the .net TLD as a hypothesis after .com failed — this
domain is NOT mentioned anywhere in the mcp-java or strategy-skills
documentation; worth flagging to QTSurfer as a doc gap)
- Reconfigured the server with --url pointing to api.qtsurfer.net
-
Authentication
- The API key worked correctly against the .net domain
- Final status: Connected
-
Data exploration
- list_exchanges -> Binance
- list_instruments -> 1,872 pairs available
BTC/USDT with data from 2026-03-30 to 2026-08-12
-
Strategy authoring
- Cloned the QTSurfer/strategy-skills repo (git clone; npx skills add
was blocked by the permission classifier)
- Built EmaCrossoverStrategy: 9/21 EMA crossover using CrossDetector
-
Bug found and fixed
- The first sweep failed because a @StrategyProperty without an
explicit JavaBean setter cannot be swept
- Added setFastPeriod / setSlowPeriod / setWindowSeconds
- This is not documented in the official skill
========================================
WHAT FAILED
-
Backtest 6FEFDG2wYsejzk4hiOc10O
BTC/USDT, 3 days (2026-08-10 -> 2026-08-12)
Result: got stuck in EXECUTING indefinitely (10+ min with no state
change). There is no cancel operation for individual backtests
(only for sweeps). Abandoned.
-
Sweep swp_76ef979908fd2f3b (66 runs)
Error: NoSuchMethodException: setSlowPeriod
Cause: missing JavaBean setters on the strategy
-
Sweep swp_024500d618deac2a (window 2026-08-11 -> 2026-08-12, 1 day)
Error: "Tiered data not ready for BTC/USDT: 24 missing hours"
Cause: window sitting right at the most recent edge of available data
-
Sweep swp_41006933b729575d (window 2026-08-04 -> 2026-08-05, 1 day)
Same tiering error, despite being far from the recent edge.
Conclusion: a 1-day window appears insufficient for data
warm-up/tiering, regardless of how recent it is.
-
Sweep swp_1d2af950d3c9055b (66 runs, 4-day window 07-01 -> 07-05)
Passed data validation and went RUNNING, but did not advance past
0/66 runs for several minutes. Cancelled manually.
-
Sweep swp_eb838ace9300f186 (6 runs, same window 07-01 -> 07-05)
Error: "prepared dataset must contain at least one ticker"
Likely cause: dataset cache left in a bad state by the previous
cancelled sweep on the same window/instrument.
-
Sweep swp_0e2f88ff0d1ae06f (6 runs, new window 06-01 -> 06-05)
Passed data preparation (RUNNING) but also never advanced past 0/6.
Cancelled by the user.
========================================
CONCLUSION
MCP server connectivity and configuration ended up fully functional:
connection, authentication, and the instrument catalogue all worked
without issues.
The recurring problem was on the QTSurfer execution engine/backend
side: no run ever reached completion, neither the individual backtest
nor any sweep, regardless of date window or grid size. This suggests
the engine's compile-and-execute pipeline was slow or degraded on the
day of testing.
Recommendation: report this to the QTSurfer team, or retry later.
========================================
NOT YET TESTED
Of the 11 tools exposed by the qtsurfer MCP server, 9 were exercised
(list_exchanges, list_instruments, submit_backtest, get_job_status,
submit_sweep, get_sweep_status, cancel_sweep, list_jobs, version).
Two remain untested because they require a completed run:
- get_equity_curve: needs a jobId from a COMPLETED backtest
- get_sweep_sensitivity: needs a sweep with leaderboard rows
version was called separately and confirmed:
qtsurfer-mcp 0.10.0
API: https://api.qtsurfer.net/v1
========================================
RELEVANT FILES
Fixed strategy (with setters): EmaCrossoverStrategy.java (kept in the
session scratchpad)
MCP configuration (claude mcp get qtsurfer):
Args: --url https://api.qtsurfer.net/v1
Scope: user
REPORT: QTSurfer MCP Setup and Integration
Date: 2026-08-12
========================================
WHAT WORKED
Installation
Registration in Claude Code
Broken domain diagnosis
default (--url default) and the domain documented in the mcp-java
README's example Claude Code config
(header x-vercel-error: DEPLOYMENT_NOT_FOUND)
by trying the .net TLD as a hypothesis after .com failed — this
domain is NOT mentioned anywhere in the mcp-java or strategy-skills
documentation; worth flagging to QTSurfer as a doc gap)
Authentication
Data exploration
BTC/USDT with data from 2026-03-30 to 2026-08-12
Strategy authoring
was blocked by the permission classifier)
Bug found and fixed
explicit JavaBean setter cannot be swept
========================================
WHAT FAILED
Backtest 6FEFDG2wYsejzk4hiOc10O
BTC/USDT, 3 days (2026-08-10 -> 2026-08-12)
Result: got stuck in EXECUTING indefinitely (10+ min with no state
change). There is no cancel operation for individual backtests
(only for sweeps). Abandoned.
Sweep swp_76ef979908fd2f3b (66 runs)
Error: NoSuchMethodException: setSlowPeriod
Cause: missing JavaBean setters on the strategy
Sweep swp_024500d618deac2a (window 2026-08-11 -> 2026-08-12, 1 day)
Error: "Tiered data not ready for BTC/USDT: 24 missing hours"
Cause: window sitting right at the most recent edge of available data
Sweep swp_41006933b729575d (window 2026-08-04 -> 2026-08-05, 1 day)
Same tiering error, despite being far from the recent edge.
Conclusion: a 1-day window appears insufficient for data
warm-up/tiering, regardless of how recent it is.
Sweep swp_1d2af950d3c9055b (66 runs, 4-day window 07-01 -> 07-05)
Passed data validation and went RUNNING, but did not advance past
0/66 runs for several minutes. Cancelled manually.
Sweep swp_eb838ace9300f186 (6 runs, same window 07-01 -> 07-05)
Error: "prepared dataset must contain at least one ticker"
Likely cause: dataset cache left in a bad state by the previous
cancelled sweep on the same window/instrument.
Sweep swp_0e2f88ff0d1ae06f (6 runs, new window 06-01 -> 06-05)
Passed data preparation (RUNNING) but also never advanced past 0/6.
Cancelled by the user.
========================================
CONCLUSION
MCP server connectivity and configuration ended up fully functional:
connection, authentication, and the instrument catalogue all worked
without issues.
The recurring problem was on the QTSurfer execution engine/backend
side: no run ever reached completion, neither the individual backtest
nor any sweep, regardless of date window or grid size. This suggests
the engine's compile-and-execute pipeline was slow or degraded on the
day of testing.
Recommendation: report this to the QTSurfer team, or retry later.
========================================
NOT YET TESTED
Of the 11 tools exposed by the qtsurfer MCP server, 9 were exercised
(list_exchanges, list_instruments, submit_backtest, get_job_status,
submit_sweep, get_sweep_status, cancel_sweep, list_jobs, version).
Two remain untested because they require a completed run:
version was called separately and confirmed:
qtsurfer-mcp 0.10.0
API: https://api.qtsurfer.net/v1
========================================
RELEVANT FILES
Fixed strategy (with setters): EmaCrossoverStrategy.java (kept in the
session scratchpad)
MCP configuration (claude mcp get qtsurfer):
Args: --url https://api.qtsurfer.net/v1
Scope: user