orchard-data-mcp 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/server.mjs +34 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "orchard-data-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "MCP server for orchard-data: pay-per-call market data for AI agents via x402 (USDC on Base). ML regime forecasts + live-verified track record from a real trading system, catalyst radar, quotes, macro, options expected move.",
|
|
5
5
|
"mcpName": "io.github.letom1176-spec/orchard-data-mcp",
|
|
6
6
|
"repository": {
|
package/server.mjs
CHANGED
|
@@ -50,7 +50,7 @@ async function callPaid(path) {
|
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
52
|
|
|
53
|
-
const server = new McpServer({ name: "orchard-data", version: "1.
|
|
53
|
+
const server = new McpServer({ name: "orchard-data", version: "1.2.0" });
|
|
54
54
|
|
|
55
55
|
server.registerTool(
|
|
56
56
|
"list_products",
|
|
@@ -105,5 +105,38 @@ server.registerTool(
|
|
|
105
105
|
async ({ symbol }) => callPaid(`/api/expected-move?symbol=${encodeURIComponent(symbol)}`),
|
|
106
106
|
);
|
|
107
107
|
|
|
108
|
+
server.registerTool(
|
|
109
|
+
"run_backtest",
|
|
110
|
+
{
|
|
111
|
+
description:
|
|
112
|
+
"Honest backtest of an entry rule on up to 10y of real daily bars ($0.10). No look-ahead (next-open fills), slippage charged, train/test halves scored separately, buy&hold + SPY baselines always printed, noise flagged as noise. Entry rules: rsi2_below, rsi14_below, ibs_below, dip_from_high20, down_days, sma_cross_up, gap_down.",
|
|
113
|
+
inputSchema: {
|
|
114
|
+
symbol: z.string().describe("Ticker, e.g. SPY, NVDA"),
|
|
115
|
+
entry: z.enum(["rsi2_below", "rsi14_below", "ibs_below", "dip_from_high20", "down_days", "sma_cross_up", "gap_down"]),
|
|
116
|
+
threshold: z.number().describe("Rule threshold, e.g. 10 for rsi2_below, 0.15 for ibs_below"),
|
|
117
|
+
hold_days: z.number().optional().describe("Max hold in trading days (1-30), default 5"),
|
|
118
|
+
stop_pct: z.number().optional().describe("Optional stop loss %"),
|
|
119
|
+
target_pct: z.number().optional().describe("Optional profit target %"),
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
async ({ symbol, entry, threshold, hold_days, stop_pct, target_pct }) => {
|
|
123
|
+
const p = new URLSearchParams({ symbol, entry, threshold: String(threshold) });
|
|
124
|
+
if (hold_days != null) p.set("hold_days", String(hold_days));
|
|
125
|
+
if (stop_pct != null) p.set("stop_pct", String(stop_pct));
|
|
126
|
+
if (target_pct != null) p.set("target_pct", String(target_pct));
|
|
127
|
+
return callPaid(`/api/backtest?${p}`);
|
|
128
|
+
},
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
server.registerTool(
|
|
132
|
+
"get_symbol_dossier",
|
|
133
|
+
{
|
|
134
|
+
description:
|
|
135
|
+
"One-call deep context on a US ticker ($0.02): live quote, 1y technicals (trend, SMA distances, realized vol, 52w position, multi-horizon returns), options-implied expected move, market regime context, and news-catalyst hits from a live trading system's AI scanner. Replaces ~6 separate calls.",
|
|
136
|
+
inputSchema: { symbol: z.string().describe("Ticker, e.g. NVDA, SPY") },
|
|
137
|
+
},
|
|
138
|
+
async ({ symbol }) => callPaid(`/api/symbol-dossier?symbol=${encodeURIComponent(symbol)}`),
|
|
139
|
+
);
|
|
140
|
+
|
|
108
141
|
const transport = new StdioServerTransport();
|
|
109
142
|
await server.connect(transport);
|