datafye-mcp-api 2.0.15
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/dist/client.d.ts +21 -0
- package/dist/client.js +78 -0
- package/dist/client.js.map +1 -0
- package/dist/environment.d.ts +21 -0
- package/dist/environment.js +36 -0
- package/dist/environment.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/altdata.d.ts +3 -0
- package/dist/tools/altdata.js +47 -0
- package/dist/tools/altdata.js.map +1 -0
- package/dist/tools/broker.d.ts +3 -0
- package/dist/tools/broker.js +64 -0
- package/dist/tools/broker.js.map +1 -0
- package/dist/tools/crypto-backtest.d.ts +3 -0
- package/dist/tools/crypto-backtest.js +180 -0
- package/dist/tools/crypto-backtest.js.map +1 -0
- package/dist/tools/crypto.d.ts +3 -0
- package/dist/tools/crypto.js +99 -0
- package/dist/tools/crypto.js.map +1 -0
- package/dist/tools/deployment.d.ts +3 -0
- package/dist/tools/deployment.js +39 -0
- package/dist/tools/deployment.js.map +1 -0
- package/dist/tools/environment.d.ts +3 -0
- package/dist/tools/environment.js +16 -0
- package/dist/tools/environment.js.map +1 -0
- package/dist/tools/stocks-backtest.d.ts +3 -0
- package/dist/tools/stocks-backtest.js +248 -0
- package/dist/tools/stocks-backtest.js.map +1 -0
- package/dist/tools/stocks.d.ts +3 -0
- package/dist/tools/stocks.js +150 -0
- package/dist/tools/stocks.js.map +1 -0
- package/dist/util.d.ts +9 -0
- package/dist/util.js +14 -0
- package/dist/util.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../util.js";
|
|
3
|
+
export function registerCryptoTools(server, envManager) {
|
|
4
|
+
const client = () => envManager.getClient();
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Reference
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
server.tool("get_crypto_securities", "Get the securities master (symbol, name, exchange) for the crypto dataset.", {
|
|
9
|
+
date: z
|
|
10
|
+
.string()
|
|
11
|
+
.optional()
|
|
12
|
+
.describe("Date (yyyy-MM-dd). Omit for current date."),
|
|
13
|
+
exchanges: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("Comma-separated exchange filter"),
|
|
17
|
+
}, async ({ date, exchanges }) => {
|
|
18
|
+
return toolResult(await client().get("/crypto/reference/securities", { date, exchanges }));
|
|
19
|
+
});
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Live — Tick Data
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
server.tool("get_crypto_latest_trade_time", "Get the timestamp of the last crypto trade received by the live feed.", {}, async () => {
|
|
24
|
+
return toolResult(await client().get("/crypto/live/trades/latest-time"));
|
|
25
|
+
});
|
|
26
|
+
server.tool("get_crypto_latest_trades", "Get the last crypto trade for each requested symbol from the live feed.", {
|
|
27
|
+
symbols: z
|
|
28
|
+
.string()
|
|
29
|
+
.describe("Comma-separated symbols (e.g. X:BTC-USD,X:ETH-USD)"),
|
|
30
|
+
}, async ({ symbols }) => {
|
|
31
|
+
return toolResult(await client().get("/crypto/live/trades/latest", { symbols }));
|
|
32
|
+
});
|
|
33
|
+
server.tool("get_crypto_latest_quote_time", "Get the timestamp of the last crypto quote received by the live feed.", {}, async () => {
|
|
34
|
+
return toolResult(await client().get("/crypto/live/quotes/latest-time"));
|
|
35
|
+
});
|
|
36
|
+
server.tool("get_crypto_top_of_book", "Get the current top-of-book bid/ask quote for each requested crypto symbol.", {
|
|
37
|
+
symbols: z
|
|
38
|
+
.string()
|
|
39
|
+
.describe("Comma-separated symbols (e.g. X:BTC-USD,X:ETH-USD)"),
|
|
40
|
+
}, async ({ symbols }) => {
|
|
41
|
+
return toolResult(await client().get("/crypto/live/quotes/top-of-book", { symbols }));
|
|
42
|
+
});
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Live — Aggregates
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
server.tool("get_crypto_live_agg_latest_time", "Get the timestamp of the last trade received by the crypto live aggregates subsystem.", {}, async () => {
|
|
47
|
+
return toolResult(await client().get("/crypto/live/agg/trades/latest-time"));
|
|
48
|
+
});
|
|
49
|
+
server.tool("get_crypto_live_ohlcs", "Get crypto OHLC candles for the current trading day.", {
|
|
50
|
+
frequency: z
|
|
51
|
+
.enum(["Minute"])
|
|
52
|
+
.describe("Candle frequency (currently only Minute for live)"),
|
|
53
|
+
symbol: z.string().describe("Symbol to fetch (e.g. X:BTC-USD)"),
|
|
54
|
+
}, async ({ frequency, symbol }) => {
|
|
55
|
+
return toolResult(await client().get("/crypto/live/agg/ohlcs", { frequency, symbol }));
|
|
56
|
+
});
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// History
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
server.tool("get_crypto_historical_ohlcs", "Get historical crypto OHLC candles. For Second/Minute frequency, from and to must be within the same day.", {
|
|
61
|
+
frequency: z
|
|
62
|
+
.enum(["Second", "Minute", "Hour", "Day"])
|
|
63
|
+
.describe("Candle frequency"),
|
|
64
|
+
symbols: z
|
|
65
|
+
.string()
|
|
66
|
+
.describe("Comma-separated symbols (e.g. X:BTC-USD,X:ETH-USD)"),
|
|
67
|
+
from: z
|
|
68
|
+
.string()
|
|
69
|
+
.describe("Start timestamp inclusive (yyyy-MM-DDThh:mm:ss)"),
|
|
70
|
+
to: z
|
|
71
|
+
.string()
|
|
72
|
+
.describe("End timestamp inclusive (yyyy-MM-DDThh:mm:ss)"),
|
|
73
|
+
}, async ({ frequency, symbols, from, to }) => {
|
|
74
|
+
return toolResult(await client().get("/crypto/history/ohlcs", {
|
|
75
|
+
frequency,
|
|
76
|
+
symbols,
|
|
77
|
+
from,
|
|
78
|
+
to,
|
|
79
|
+
}));
|
|
80
|
+
});
|
|
81
|
+
server.tool("get_crypto_top_gainers", "Get crypto assets that gained at or above a threshold percentage.", {
|
|
82
|
+
date: z.string().describe("Date (yyyy-MM-dd)"),
|
|
83
|
+
gainThreshold: z
|
|
84
|
+
.number()
|
|
85
|
+
.describe("Minimum gain percentage (e.g. 2 = 2%)"),
|
|
86
|
+
maxCount: z
|
|
87
|
+
.number()
|
|
88
|
+
.int()
|
|
89
|
+
.optional()
|
|
90
|
+
.describe("Max results (0 or omit for all)"),
|
|
91
|
+
}, async ({ date, gainThreshold, maxCount }) => {
|
|
92
|
+
return toolResult(await client().get("/crypto/history/top-gainers", {
|
|
93
|
+
date,
|
|
94
|
+
gainThreshold,
|
|
95
|
+
maxCount,
|
|
96
|
+
}));
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/tools/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../util.js";
|
|
3
|
+
export function registerDeploymentTools(server, envManager) {
|
|
4
|
+
const client = () => envManager.getClient();
|
|
5
|
+
server.tool("ping", "Health check for the Datafye environment. Optionally filter by dataset (SIP, Synthetic, Crypto), service (Reference, Feed, Agg, History), or system name. Returns service health status.", {
|
|
6
|
+
dataset: z
|
|
7
|
+
.enum(["SIP", "Synthetic", "Crypto"])
|
|
8
|
+
.optional()
|
|
9
|
+
.describe("Filter to a specific dataset"),
|
|
10
|
+
service: z
|
|
11
|
+
.enum(["Reference", "Feed", "Agg", "History"])
|
|
12
|
+
.optional()
|
|
13
|
+
.describe("Filter to a specific service within the dataset"),
|
|
14
|
+
system: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Check health of a specific system by name (mutually exclusive with dataset)"),
|
|
18
|
+
}, async ({ dataset, service, system }) => {
|
|
19
|
+
return toolResult(await client().get("/health/ping", { dataset, service, system }));
|
|
20
|
+
});
|
|
21
|
+
server.tool("get_deployed_datasets", "Get the list of datasets deployed in this environment (e.g. SIP, Synthetic, Crypto).", {}, async () => {
|
|
22
|
+
return toolResult(await client().get("/deployment/datasets"));
|
|
23
|
+
});
|
|
24
|
+
server.tool("get_deployed_systems", "Get the list of systems deployed in this environment (e.g. datafye-sip-system, datafye-api-system).", {}, async () => {
|
|
25
|
+
return toolResult(await client().get("/deployment/systems"));
|
|
26
|
+
});
|
|
27
|
+
server.tool("get_deployed_symbols", "Get the map of dataset to allowed symbols. An asterisk (*) means all symbols are allowed.", {}, async () => {
|
|
28
|
+
return toolResult(await client().get("/deployment/symbols"));
|
|
29
|
+
});
|
|
30
|
+
server.tool("get_deployment_descriptor", "Get the deployment descriptor (YAML configuration) used to provision this environment.", {
|
|
31
|
+
pretty: z
|
|
32
|
+
.boolean()
|
|
33
|
+
.optional()
|
|
34
|
+
.describe("If true, returns raw YAML; otherwise a JSON wrapper"),
|
|
35
|
+
}, async ({ pretty }) => {
|
|
36
|
+
return toolResult(await client().get("/deployment/descriptor", { pretty }));
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=deployment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment.js","sourceRoot":"","sources":["../../src/tools/deployment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,UAAU,uBAAuB,CACrC,MAAiB,EACjB,UAA8B;IAE9B,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAE5C,MAAM,CAAC,IAAI,CACT,MAAM,EACN,0LAA0L,EAC1L;QACE,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;aACpC,QAAQ,EAAE;aACV,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;aAC7C,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,6EAA6E,CAC9E;KACJ,EACD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QACrC,OAAO,UAAU,CACf,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CACjE,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,sFAAsF,EACtF,EAAE,EACF,KAAK,IAAI,EAAE;QACT,OAAO,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;IAChE,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,qGAAqG,EACrG,EAAE,EACF,KAAK,IAAI,EAAE;QACT,OAAO,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,2FAA2F,EAC3F,EAAE,EACF,KAAK,IAAI,EAAE;QACT,OAAO,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC/D,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,2BAA2B,EAC3B,wFAAwF,EACxF;QACE,MAAM,EAAE,CAAC;aACN,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,qDAAqD,CAAC;KACnE,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;QACnB,OAAO,UAAU,CAAC,MAAM,MAAM,EAAE,CAAC,GAAG,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../util.js";
|
|
3
|
+
export function registerEnvironmentTools(server, envManager) {
|
|
4
|
+
server.tool("connect", "Connect to a Datafye environment by URL. Use this when the environment is running outside the default network (e.g. on the host machine or a remote cloud). The URL should point to the REST API base (e.g. https://myfoundry-foundry-dev-api.datafye.io).", {
|
|
5
|
+
url: z
|
|
6
|
+
.string()
|
|
7
|
+
.describe("Base URL of the Datafye REST API (e.g. http://localhost:7776 or https://myfoundry-foundry-dev-api.datafye.io)"),
|
|
8
|
+
}, async ({ url }) => {
|
|
9
|
+
const result = envManager.connect(url);
|
|
10
|
+
return toolResult(result);
|
|
11
|
+
});
|
|
12
|
+
server.tool("status", "Get the current connection status — shows which Datafye environment URL is active.", {}, async () => {
|
|
13
|
+
return toolResult(envManager.getStatus());
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/tools/environment.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,UAAU,wBAAwB,CACtC,MAAiB,EACjB,UAA8B;IAE9B,MAAM,CAAC,IAAI,CACT,SAAS,EACT,4PAA4P,EAC5P;QACE,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,CACP,+GAA+G,CAChH;KACJ,EACD,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAChB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvC,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,QAAQ,EACR,oFAAoF,EACpF,EAAE,EACF,KAAK,IAAI,EAAE;QACT,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../util.js";
|
|
3
|
+
const datasetParam = z
|
|
4
|
+
.enum(["SIP", "Synthetic"])
|
|
5
|
+
.optional()
|
|
6
|
+
.describe("Dataset (default: SIP)");
|
|
7
|
+
export function registerStocksBacktestTools(server, envManager) {
|
|
8
|
+
const client = () => envManager.getClient();
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Clear backtest state (shared across all datasets)
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
server.tool("clear_backtest_state", "Clear all backtest state in the Foundry environment. Call this before starting a new backtest to ensure a clean slate. Typical workflow: 1) fetch history, 2) clear state, 3) start replay.", {}, async () => {
|
|
13
|
+
return toolResult(await client().del("/backtest/state"));
|
|
14
|
+
});
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// Tick History Fetch
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
server.tool("start_stocks_tick_fetch", "Start fetching tick history (trades and/or quotes) from the data provider for backtest replay. Foundry only.", {
|
|
19
|
+
dataset: datasetParam,
|
|
20
|
+
date: z.string().describe("Start date (yyyy-MM-dd)"),
|
|
21
|
+
symbols: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("Comma-separated symbols. Omit for all."),
|
|
25
|
+
noTrades: z
|
|
26
|
+
.boolean()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("Exclude trade data (default: false)"),
|
|
29
|
+
noQuotes: z
|
|
30
|
+
.boolean()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("Exclude quote data (default: false)"),
|
|
33
|
+
numDays: z
|
|
34
|
+
.number()
|
|
35
|
+
.int()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe("Number of days from start date (default: 1)"),
|
|
38
|
+
sortByExchangeTs: z
|
|
39
|
+
.boolean()
|
|
40
|
+
.optional()
|
|
41
|
+
.describe("Sort by exchange timestamp (default: true)"),
|
|
42
|
+
}, async ({ dataset, date, symbols, noTrades, noQuotes, numDays, sortByExchangeTs }) => {
|
|
43
|
+
return toolResult(await client().startBacktestHistoryFetch("stocks", "ticks", {
|
|
44
|
+
dataset,
|
|
45
|
+
date,
|
|
46
|
+
symbols,
|
|
47
|
+
noTrades,
|
|
48
|
+
noQuotes,
|
|
49
|
+
numDays,
|
|
50
|
+
sortByExchangeTs,
|
|
51
|
+
}));
|
|
52
|
+
});
|
|
53
|
+
server.tool("check_stocks_tick_fetch", "Check whether a stocks tick history fetch is currently running.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
54
|
+
return toolResult(await client().checkBacktestHistoryFetch("stocks", "ticks", { dataset }));
|
|
55
|
+
});
|
|
56
|
+
server.tool("cancel_stocks_tick_fetch", "Cancel a running stocks tick history fetch.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
57
|
+
return toolResult(await client().cancelBacktestHistoryFetch("stocks", "ticks", { dataset }));
|
|
58
|
+
});
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Quote History Fetch
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
server.tool("start_stocks_quote_fetch", "Start fetching quote history from the data provider. Use this if your algo only needs quotes. Otherwise prefer tick history (includes both). Foundry only.", {
|
|
63
|
+
dataset: datasetParam,
|
|
64
|
+
date: z.string().describe("Start date (yyyy-MM-dd)"),
|
|
65
|
+
symbols: z
|
|
66
|
+
.string()
|
|
67
|
+
.optional()
|
|
68
|
+
.describe("Comma-separated symbols. Omit for all."),
|
|
69
|
+
numDays: z
|
|
70
|
+
.number()
|
|
71
|
+
.int()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Number of days (default: 1)"),
|
|
74
|
+
format: z
|
|
75
|
+
.enum(["Binary", "Json", "Csv"])
|
|
76
|
+
.optional()
|
|
77
|
+
.describe("Output format (default: Binary — use Binary for replay)"),
|
|
78
|
+
sortByExchangeTs: z
|
|
79
|
+
.boolean()
|
|
80
|
+
.optional()
|
|
81
|
+
.describe("Sort by exchange timestamp (default: true)"),
|
|
82
|
+
groupBySymbol: z
|
|
83
|
+
.boolean()
|
|
84
|
+
.optional()
|
|
85
|
+
.describe("Group output files by symbol (default: false)"),
|
|
86
|
+
}, async ({ dataset, date, symbols, numDays, format, sortByExchangeTs, groupBySymbol }) => {
|
|
87
|
+
return toolResult(await client().startBacktestHistoryFetch("stocks", "quotes", {
|
|
88
|
+
dataset,
|
|
89
|
+
date,
|
|
90
|
+
symbols,
|
|
91
|
+
numDays,
|
|
92
|
+
format,
|
|
93
|
+
sortByExchangeTs,
|
|
94
|
+
groupBySymbol,
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
server.tool("check_stocks_quote_fetch", "Check whether a stocks quote history fetch is currently running.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
98
|
+
return toolResult(await client().checkBacktestHistoryFetch("stocks", "quotes", { dataset }));
|
|
99
|
+
});
|
|
100
|
+
server.tool("cancel_stocks_quote_fetch", "Cancel a running stocks quote history fetch.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
101
|
+
return toolResult(await client().cancelBacktestHistoryFetch("stocks", "quotes", { dataset }));
|
|
102
|
+
});
|
|
103
|
+
// ---------------------------------------------------------------------------
|
|
104
|
+
// Trade History Fetch
|
|
105
|
+
// ---------------------------------------------------------------------------
|
|
106
|
+
server.tool("start_stocks_trade_fetch", "Start fetching trade history from the data provider. Use this if your algo only needs trades. Otherwise prefer tick history (includes both). Foundry only.", {
|
|
107
|
+
dataset: datasetParam,
|
|
108
|
+
date: z.string().describe("Start date (yyyy-MM-dd)"),
|
|
109
|
+
symbols: z
|
|
110
|
+
.string()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe("Comma-separated symbols. Omit for all."),
|
|
113
|
+
numDays: z
|
|
114
|
+
.number()
|
|
115
|
+
.int()
|
|
116
|
+
.optional()
|
|
117
|
+
.describe("Number of days (default: 1)"),
|
|
118
|
+
format: z
|
|
119
|
+
.enum(["Binary", "Json", "Csv"])
|
|
120
|
+
.optional()
|
|
121
|
+
.describe("Output format (default: Binary — use Binary for replay)"),
|
|
122
|
+
sortByExchangeTs: z
|
|
123
|
+
.boolean()
|
|
124
|
+
.optional()
|
|
125
|
+
.describe("Sort by exchange timestamp (default: true)"),
|
|
126
|
+
groupBySymbol: z
|
|
127
|
+
.boolean()
|
|
128
|
+
.optional()
|
|
129
|
+
.describe("Group output files by symbol (default: false)"),
|
|
130
|
+
}, async ({ dataset, date, symbols, numDays, format, sortByExchangeTs, groupBySymbol }) => {
|
|
131
|
+
return toolResult(await client().startBacktestHistoryFetch("stocks", "trades", {
|
|
132
|
+
dataset,
|
|
133
|
+
date,
|
|
134
|
+
symbols,
|
|
135
|
+
numDays,
|
|
136
|
+
format,
|
|
137
|
+
sortByExchangeTs,
|
|
138
|
+
groupBySymbol,
|
|
139
|
+
}));
|
|
140
|
+
});
|
|
141
|
+
server.tool("check_stocks_trade_fetch", "Check whether a stocks trade history fetch is currently running.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
142
|
+
return toolResult(await client().checkBacktestHistoryFetch("stocks", "trades", { dataset }));
|
|
143
|
+
});
|
|
144
|
+
server.tool("cancel_stocks_trade_fetch", "Cancel a running stocks trade history fetch.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
145
|
+
return toolResult(await client().cancelBacktestHistoryFetch("stocks", "trades", { dataset }));
|
|
146
|
+
});
|
|
147
|
+
// ---------------------------------------------------------------------------
|
|
148
|
+
// OHLC History Fetch
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
server.tool("start_stocks_ohlc_fetch", "Start fetching OHLC history at a given frequency from the data provider. Foundry only.", {
|
|
151
|
+
dataset: datasetParam,
|
|
152
|
+
date: z.string().describe("Start date (yyyy-MM-dd)"),
|
|
153
|
+
symbols: z
|
|
154
|
+
.string()
|
|
155
|
+
.optional()
|
|
156
|
+
.describe("Comma-separated symbols. Omit for all."),
|
|
157
|
+
numDays: z
|
|
158
|
+
.number()
|
|
159
|
+
.int()
|
|
160
|
+
.optional()
|
|
161
|
+
.describe("Number of days (default: 1)"),
|
|
162
|
+
frequency: z
|
|
163
|
+
.enum(["Second", "Minute", "Hour", "Day"])
|
|
164
|
+
.describe("OHLC frequency"),
|
|
165
|
+
adjusted: z
|
|
166
|
+
.boolean()
|
|
167
|
+
.optional()
|
|
168
|
+
.describe("Fetch split-adjusted data (default: false)"),
|
|
169
|
+
}, async ({ dataset, date, symbols, numDays, frequency, adjusted }) => {
|
|
170
|
+
return toolResult(await client().startBacktestHistoryFetch("stocks", "ohlcs", {
|
|
171
|
+
dataset,
|
|
172
|
+
date,
|
|
173
|
+
symbols,
|
|
174
|
+
numDays,
|
|
175
|
+
frequency,
|
|
176
|
+
adjusted,
|
|
177
|
+
}));
|
|
178
|
+
});
|
|
179
|
+
server.tool("check_stocks_ohlc_fetch", "Check whether a stocks OHLC history fetch is currently running.", {
|
|
180
|
+
dataset: datasetParam,
|
|
181
|
+
frequency: z
|
|
182
|
+
.enum(["Second", "Minute", "Hour", "Day"])
|
|
183
|
+
.describe("OHLC frequency to check"),
|
|
184
|
+
}, async ({ dataset, frequency }) => {
|
|
185
|
+
return toolResult(await client().checkBacktestHistoryFetch("stocks", "ohlcs", {
|
|
186
|
+
dataset,
|
|
187
|
+
frequency,
|
|
188
|
+
}));
|
|
189
|
+
});
|
|
190
|
+
server.tool("cancel_stocks_ohlc_fetch", "Cancel a running stocks OHLC history fetch.", {
|
|
191
|
+
dataset: datasetParam,
|
|
192
|
+
frequency: z
|
|
193
|
+
.enum(["Second", "Minute", "Hour", "Day"])
|
|
194
|
+
.describe("OHLC frequency to cancel"),
|
|
195
|
+
}, async ({ dataset, frequency }) => {
|
|
196
|
+
return toolResult(await client().cancelBacktestHistoryFetch("stocks", "ohlcs", {
|
|
197
|
+
dataset,
|
|
198
|
+
frequency,
|
|
199
|
+
}));
|
|
200
|
+
});
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Tick History Replay
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
server.tool("start_stocks_tick_replay", "Start replaying previously fetched tick history data. This drives backtest execution. Foundry only. Typical workflow: 1) fetch tick history, 2) clear backtest state, 3) start tick replay.", {
|
|
205
|
+
dataset: datasetParam,
|
|
206
|
+
date: z
|
|
207
|
+
.string()
|
|
208
|
+
.describe("Date of previously fetched tick history (yyyy-MM-dd)"),
|
|
209
|
+
rateType: z
|
|
210
|
+
.enum(["Exact", "MultipleOfActual"])
|
|
211
|
+
.optional()
|
|
212
|
+
.describe("Replay rate type (default: Exact)"),
|
|
213
|
+
rate: z
|
|
214
|
+
.number()
|
|
215
|
+
.int()
|
|
216
|
+
.optional()
|
|
217
|
+
.describe("Replay rate multiplier when rateType=MultipleOfActual (default: 1)"),
|
|
218
|
+
startTime: z
|
|
219
|
+
.string()
|
|
220
|
+
.optional()
|
|
221
|
+
.describe('Time within day to start replay (hh:mm or "now", default: "now")'),
|
|
222
|
+
startPoint: z
|
|
223
|
+
.string()
|
|
224
|
+
.optional()
|
|
225
|
+
.describe('Offset from start-of-day, e.g. "9.5h", "30m" (default: "9.5h")'),
|
|
226
|
+
duration: z
|
|
227
|
+
.string()
|
|
228
|
+
.optional()
|
|
229
|
+
.describe('Replay window duration, e.g. "6.5h", "30m" (default: "6.5h")'),
|
|
230
|
+
}, async ({ dataset, date, rateType, rate, startTime, startPoint, duration }) => {
|
|
231
|
+
return toolResult(await client().startBacktestReplay("stocks", "ticks", {
|
|
232
|
+
dataset,
|
|
233
|
+
date,
|
|
234
|
+
rateType,
|
|
235
|
+
rate,
|
|
236
|
+
startTime,
|
|
237
|
+
startPoint,
|
|
238
|
+
duration,
|
|
239
|
+
}));
|
|
240
|
+
});
|
|
241
|
+
server.tool("check_stocks_tick_replay", "Check whether a stocks tick history replay is currently running.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
242
|
+
return toolResult(await client().checkBacktestReplay("stocks", "ticks", { dataset }));
|
|
243
|
+
});
|
|
244
|
+
server.tool("cancel_stocks_tick_replay", "Cancel a running stocks tick history replay.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
245
|
+
return toolResult(await client().cancelBacktestReplay("stocks", "ticks", { dataset }));
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=stocks-backtest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stocks-backtest.js","sourceRoot":"","sources":["../../src/tools/stocks-backtest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { toolResult } from "../util.js";
|
|
3
|
+
const datasetParam = z
|
|
4
|
+
.enum(["SIP", "Synthetic"])
|
|
5
|
+
.optional()
|
|
6
|
+
.describe("Dataset (default: SIP)");
|
|
7
|
+
export function registerStocksTools(server, envManager) {
|
|
8
|
+
const client = () => envManager.getClient();
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// Reference
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
server.tool("get_stocks_securities", "Get the securities master (symbol, name, exchange) for a stocks dataset.", {
|
|
13
|
+
dataset: datasetParam,
|
|
14
|
+
date: z
|
|
15
|
+
.string()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Date (yyyy-MM-dd). Omit for current date."),
|
|
18
|
+
exchanges: z
|
|
19
|
+
.string()
|
|
20
|
+
.optional()
|
|
21
|
+
.describe("Comma-separated exchange filter"),
|
|
22
|
+
}, async ({ dataset, date, exchanges }) => {
|
|
23
|
+
return toolResult(await client().get("/stocks/reference/securities", {
|
|
24
|
+
dataset,
|
|
25
|
+
date,
|
|
26
|
+
exchanges,
|
|
27
|
+
}));
|
|
28
|
+
});
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Live — Tick Data
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
server.tool("get_stocks_latest_trade_time", "Get the timestamp of the last trade received by the live feed.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
33
|
+
return toolResult(await client().get("/stocks/live/trades/latest-time", { dataset }));
|
|
34
|
+
});
|
|
35
|
+
server.tool("get_stocks_latest_trades", "Get the last trade for each requested symbol from the live feed.", {
|
|
36
|
+
dataset: datasetParam,
|
|
37
|
+
symbols: z
|
|
38
|
+
.string()
|
|
39
|
+
.describe("Comma-separated symbols (e.g. AAPL,MSFT)"),
|
|
40
|
+
}, async ({ dataset, symbols }) => {
|
|
41
|
+
return toolResult(await client().get("/stocks/live/trades/latest", { dataset, symbols }));
|
|
42
|
+
});
|
|
43
|
+
server.tool("get_stocks_latest_quote_time", "Get the timestamp of the last quote received by the live feed.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
44
|
+
return toolResult(await client().get("/stocks/live/quotes/latest-time", { dataset }));
|
|
45
|
+
});
|
|
46
|
+
server.tool("get_stocks_top_of_book", "Get the current top-of-book bid/ask quote for each requested symbol.", {
|
|
47
|
+
dataset: datasetParam,
|
|
48
|
+
symbols: z
|
|
49
|
+
.string()
|
|
50
|
+
.describe("Comma-separated symbols (e.g. AAPL,MSFT)"),
|
|
51
|
+
}, async ({ dataset, symbols }) => {
|
|
52
|
+
return toolResult(await client().get("/stocks/live/quotes/top-of-book", {
|
|
53
|
+
dataset,
|
|
54
|
+
symbols,
|
|
55
|
+
}));
|
|
56
|
+
});
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Live — Aggregates
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
server.tool("get_stocks_live_agg_latest_time", "Get the timestamp of the last trade received by the live aggregates subsystem.", { dataset: datasetParam }, async ({ dataset }) => {
|
|
61
|
+
return toolResult(await client().get("/stocks/live/agg/trades/latest-time", { dataset }));
|
|
62
|
+
});
|
|
63
|
+
server.tool("get_stocks_live_ohlcs", "Get OHLC candles for the current trading day. Optionally include prior days with the history parameter.", {
|
|
64
|
+
dataset: datasetParam,
|
|
65
|
+
frequency: z
|
|
66
|
+
.enum(["Minute"])
|
|
67
|
+
.describe("Candle frequency (currently only Minute for live)"),
|
|
68
|
+
symbol: z.string().describe("Symbol to fetch (e.g. AAPL)"),
|
|
69
|
+
history: z
|
|
70
|
+
.number()
|
|
71
|
+
.int()
|
|
72
|
+
.optional()
|
|
73
|
+
.describe("Number of prior days to include (default: 0)"),
|
|
74
|
+
}, async ({ dataset, frequency, symbol, history }) => {
|
|
75
|
+
return toolResult(await client().get("/stocks/live/agg/ohlcs", {
|
|
76
|
+
dataset,
|
|
77
|
+
frequency,
|
|
78
|
+
symbol,
|
|
79
|
+
history,
|
|
80
|
+
}));
|
|
81
|
+
});
|
|
82
|
+
server.tool("get_stocks_live_smas", "Get Simple Moving Averages (SMAs) for the current trading day.", {
|
|
83
|
+
dataset: datasetParam,
|
|
84
|
+
frequency: z.enum(["Minute"]).describe("Frequency"),
|
|
85
|
+
symbol: z.string().describe("Symbol to fetch"),
|
|
86
|
+
}, async ({ dataset, frequency, symbol }) => {
|
|
87
|
+
return toolResult(await client().get("/stocks/live/agg/smas", {
|
|
88
|
+
dataset,
|
|
89
|
+
frequency,
|
|
90
|
+
symbol,
|
|
91
|
+
}));
|
|
92
|
+
});
|
|
93
|
+
server.tool("get_stocks_live_emas", "Get Exponential Moving Averages (EMAs) for the current trading day, including MACD values and crossover states.", {
|
|
94
|
+
dataset: datasetParam,
|
|
95
|
+
frequency: z.enum(["Minute"]).describe("Frequency"),
|
|
96
|
+
symbol: z.string().describe("Symbol to fetch"),
|
|
97
|
+
}, async ({ dataset, frequency, symbol }) => {
|
|
98
|
+
return toolResult(await client().get("/stocks/live/agg/emas", {
|
|
99
|
+
dataset,
|
|
100
|
+
frequency,
|
|
101
|
+
symbol,
|
|
102
|
+
}));
|
|
103
|
+
});
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
105
|
+
// History
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
server.tool("get_stocks_historical_ohlcs", "Get historical OHLC candles. For Second/Minute frequency, from and to must be within the same day.", {
|
|
108
|
+
dataset: datasetParam,
|
|
109
|
+
frequency: z
|
|
110
|
+
.enum(["Second", "Minute", "Hour", "Day"])
|
|
111
|
+
.describe("Candle frequency"),
|
|
112
|
+
symbols: z
|
|
113
|
+
.string()
|
|
114
|
+
.describe("Comma-separated symbols (e.g. AAPL,MSFT)"),
|
|
115
|
+
from: z
|
|
116
|
+
.string()
|
|
117
|
+
.describe("Start timestamp inclusive (yyyy-MM-DDThh:mm:ss)"),
|
|
118
|
+
to: z
|
|
119
|
+
.string()
|
|
120
|
+
.describe("End timestamp inclusive (yyyy-MM-DDThh:mm:ss)"),
|
|
121
|
+
}, async ({ dataset, frequency, symbols, from, to }) => {
|
|
122
|
+
return toolResult(await client().get("/stocks/history/ohlcs", {
|
|
123
|
+
dataset,
|
|
124
|
+
frequency,
|
|
125
|
+
symbols,
|
|
126
|
+
from,
|
|
127
|
+
to,
|
|
128
|
+
}));
|
|
129
|
+
});
|
|
130
|
+
server.tool("get_stocks_top_gainers", "Get stocks that gained at or above a threshold percentage compared to the prior trading day.", {
|
|
131
|
+
dataset: datasetParam,
|
|
132
|
+
date: z.string().describe("Date (yyyy-MM-dd)"),
|
|
133
|
+
gainThreshold: z
|
|
134
|
+
.number()
|
|
135
|
+
.describe("Minimum gain percentage (e.g. 2 = 2%)"),
|
|
136
|
+
maxCount: z
|
|
137
|
+
.number()
|
|
138
|
+
.int()
|
|
139
|
+
.optional()
|
|
140
|
+
.describe("Max results (0 or omit for all)"),
|
|
141
|
+
}, async ({ dataset, date, gainThreshold, maxCount }) => {
|
|
142
|
+
return toolResult(await client().get("/stocks/history/top-gainers", {
|
|
143
|
+
dataset,
|
|
144
|
+
date,
|
|
145
|
+
gainThreshold,
|
|
146
|
+
maxCount,
|
|
147
|
+
}));
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=stocks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stocks.js","sourceRoot":"","sources":["../../src/tools/stocks.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
ADDED
package/dist/util.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wrap an API response into the MCP ToolResultBlockParam format.
|
|
3
|
+
*/
|
|
4
|
+
export function toolResult(data) {
|
|
5
|
+
return {
|
|
6
|
+
content: [
|
|
7
|
+
{
|
|
8
|
+
type: "text",
|
|
9
|
+
text: JSON.stringify(data, null, 2),
|
|
10
|
+
},
|
|
11
|
+
],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=util.js.map
|