
I built a macro MCP for trading agents — the hardest part was deciding when it should refuse to answer
The screenshot is a real example.
I asked FX Context to find historical analogs for the latest US PCE release and show how EURUSD reacted after similar events.
It refused.
The reason was explicit:
- only 6 usable PCE calibration events
- 12 are required
- each event needs at least 3 comparable metrics
So instead of fabricating an analog, it returned what it could verify: the latest PCE release, the absence of a valid pre-release consensus, and the actual EURUSD reaction after the release.
That’s the design philosophy behind FX Context.
It’s an MCP server for FX macro context covering:
- US CPI, NFP and PCE
- Fed, ECB, BOE and BOJ statements
- actual vs. consensus and surprise where provenance is valid
- historical EURUSD / GBPUSD / USDJPY reaction windows
- upcoming macro risks
- historical analogs when there is enough calibration data
A lot of the work has gone into making failure states explicit:
- not enough historical samples → return the actual sample count and threshold
- market closed during a reaction window → return
MARKET_CLOSED - no verified pre-release consensus → say so instead of calculating a fake surprise
- incomplete data → preserve provenance and timestamps rather than silently filling gaps
No predictions and no trade signals.
The goal is to keep the deterministic parts inside the data layer:
event → actual → consensus → surprise → market reaction → agent reasoning
and let the model focus on interpretation.
Known gaps: PCE consensus coverage is still incomplete, PCE historical analogs are calibration-gated, and NFP consensus coverage is patchy.
I’m the author. It’s closed source, free to use, and there’s no signup:
I’m especially interested in feedback on the tool descriptions, response contract, and failure modes — particularly where an agent should refuse to answer instead of trying to infer around missing data.