@vantagestack/mcp-server 0.1.59 → 0.1.63

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.
Files changed (115) hide show
  1. package/dist/client.d.ts +25 -0
  2. package/dist/client.js +172 -0
  3. package/dist/client.js.map +1 -0
  4. package/dist/index.d.ts +2 -0
  5. package/dist/index.js +1424 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/tools/account-deletion.d.ts +6 -0
  8. package/dist/tools/account-deletion.js +92 -0
  9. package/dist/tools/account-deletion.js.map +1 -0
  10. package/dist/tools/account-health.d.ts +21 -0
  11. package/dist/tools/account-health.js +84 -0
  12. package/dist/tools/account-health.js.map +1 -0
  13. package/dist/tools/account.d.ts +19 -0
  14. package/dist/tools/account.js +291 -0
  15. package/dist/tools/account.js.map +1 -0
  16. package/dist/tools/account.test.d.ts +1 -0
  17. package/dist/tools/account.test.js +213 -0
  18. package/dist/tools/account.test.js.map +1 -0
  19. package/dist/tools/admin-test.d.ts +18 -0
  20. package/dist/tools/admin-test.js +108 -0
  21. package/dist/tools/admin-test.js.map +1 -0
  22. package/dist/tools/calendar.d.ts +4 -0
  23. package/dist/tools/calendar.js +85 -0
  24. package/dist/tools/calendar.js.map +1 -0
  25. package/dist/tools/calendar.test.d.ts +1 -0
  26. package/dist/tools/calendar.test.js +62 -0
  27. package/dist/tools/calendar.test.js.map +1 -0
  28. package/dist/tools/canary.d.ts +4 -0
  29. package/dist/tools/canary.js +25 -0
  30. package/dist/tools/canary.js.map +1 -0
  31. package/dist/tools/canary.test.d.ts +1 -0
  32. package/dist/tools/canary.test.js +46 -0
  33. package/dist/tools/canary.test.js.map +1 -0
  34. package/dist/tools/contract-configs.d.ts +9 -0
  35. package/dist/tools/contract-configs.js +187 -0
  36. package/dist/tools/contract-configs.js.map +1 -0
  37. package/dist/tools/contract-configs.test.d.ts +1 -0
  38. package/dist/tools/contract-configs.test.js +245 -0
  39. package/dist/tools/contract-configs.test.js.map +1 -0
  40. package/dist/tools/copier.d.ts +11 -0
  41. package/dist/tools/copier.js +52 -0
  42. package/dist/tools/copier.js.map +1 -0
  43. package/dist/tools/copier.test.d.ts +1 -0
  44. package/dist/tools/copier.test.js +75 -0
  45. package/dist/tools/copier.test.js.map +1 -0
  46. package/dist/tools/groups.d.ts +14 -0
  47. package/dist/tools/groups.js +44 -0
  48. package/dist/tools/groups.js.map +1 -0
  49. package/dist/tools/groups.test.d.ts +1 -0
  50. package/dist/tools/groups.test.js +72 -0
  51. package/dist/tools/groups.test.js.map +1 -0
  52. package/dist/tools/ip-allowlist.d.ts +6 -0
  53. package/dist/tools/ip-allowlist.js +69 -0
  54. package/dist/tools/ip-allowlist.js.map +1 -0
  55. package/dist/tools/journal.d.ts +6 -0
  56. package/dist/tools/journal.js +110 -0
  57. package/dist/tools/journal.js.map +1 -0
  58. package/dist/tools/journal.test.d.ts +1 -0
  59. package/dist/tools/journal.test.js +100 -0
  60. package/dist/tools/journal.test.js.map +1 -0
  61. package/dist/tools/latency.d.ts +3 -0
  62. package/dist/tools/latency.js +54 -0
  63. package/dist/tools/latency.js.map +1 -0
  64. package/dist/tools/market-history.d.ts +4 -0
  65. package/dist/tools/market-history.js +50 -0
  66. package/dist/tools/market-history.js.map +1 -0
  67. package/dist/tools/market-hours.d.ts +3 -0
  68. package/dist/tools/market-hours.js +19 -0
  69. package/dist/tools/market-hours.js.map +1 -0
  70. package/dist/tools/paper-trading.d.ts +12 -0
  71. package/dist/tools/paper-trading.js +284 -0
  72. package/dist/tools/paper-trading.js.map +1 -0
  73. package/dist/tools/paper-trading.test.d.ts +1 -0
  74. package/dist/tools/paper-trading.test.js +153 -0
  75. package/dist/tools/paper-trading.test.js.map +1 -0
  76. package/dist/tools/ping.d.ts +8 -0
  77. package/dist/tools/ping.js +22 -0
  78. package/dist/tools/ping.js.map +1 -0
  79. package/dist/tools/ping.test.d.ts +1 -0
  80. package/dist/tools/ping.test.js +25 -0
  81. package/dist/tools/ping.test.js.map +1 -0
  82. package/dist/tools/qc.d.ts +18 -0
  83. package/dist/tools/qc.js +418 -0
  84. package/dist/tools/qc.js.map +1 -0
  85. package/dist/tools/qc.test.d.ts +1 -0
  86. package/dist/tools/qc.test.js +218 -0
  87. package/dist/tools/qc.test.js.map +1 -0
  88. package/dist/tools/read.d.ts +7 -0
  89. package/dist/tools/read.js +154 -0
  90. package/dist/tools/read.js.map +1 -0
  91. package/dist/tools/read.test.d.ts +1 -0
  92. package/dist/tools/read.test.js +102 -0
  93. package/dist/tools/read.test.js.map +1 -0
  94. package/dist/tools/risk.d.ts +7 -0
  95. package/dist/tools/risk.js +108 -0
  96. package/dist/tools/risk.js.map +1 -0
  97. package/dist/tools/signal-templates.d.ts +6 -0
  98. package/dist/tools/signal-templates.js +90 -0
  99. package/dist/tools/signal-templates.js.map +1 -0
  100. package/dist/tools/signals.d.ts +8 -0
  101. package/dist/tools/signals.js +318 -0
  102. package/dist/tools/signals.js.map +1 -0
  103. package/dist/tools/signals.test.d.ts +1 -0
  104. package/dist/tools/signals.test.js +92 -0
  105. package/dist/tools/signals.test.js.map +1 -0
  106. package/dist/tools/sync-accounts.d.ts +18 -0
  107. package/dist/tools/sync-accounts.js +68 -0
  108. package/dist/tools/sync-accounts.js.map +1 -0
  109. package/dist/tools/trade.d.ts +3 -0
  110. package/dist/tools/trade.js +49 -0
  111. package/dist/tools/trade.js.map +1 -0
  112. package/dist/user.d.ts +19 -0
  113. package/dist/user.js +21 -0
  114. package/dist/user.js.map +1 -0
  115. package/package.json +1 -1
@@ -0,0 +1,108 @@
1
+ import { makeErrorResult } from "../user.js";
2
+ function fmtDollar(v) {
3
+ const sign = v >= 0 ? "+" : "-";
4
+ return `${sign}$${Math.abs(v).toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
5
+ }
6
+ function fmtMoney(v) {
7
+ return `$${v.toLocaleString("en-US", { minimumFractionDigits: 2, maximumFractionDigits: 2 })}`;
8
+ }
9
+ /** RM2-07 — list every open halt for the authed user, newest first. */
10
+ export async function getRiskHalts(client, resolver, _input) {
11
+ try {
12
+ const userId = await resolver.resolve(client);
13
+ const halts = await client.get(`/api/account/${userId}/risk/halts`);
14
+ if (!halts?.length) {
15
+ return { content: [{ type: "text", text: "No active risk halts. All accounts are routing normally." }] };
16
+ }
17
+ const lines = [`## Active Risk Halts (${halts.length})\n`];
18
+ for (const h of halts) {
19
+ lines.push(`### Connection-Account #${h.connectionAccountId} — ${h.haltReason}`);
20
+ lines.push(`- **Triggered:** ${h.triggeredAt}`);
21
+ if (h.triggerValue != null && h.limitValue != null) {
22
+ lines.push(`- **Trigger:** ${fmtDollar(h.triggerValue)} (limit ${fmtDollar(h.limitValue)})`);
23
+ }
24
+ if (h.flattenFailed) {
25
+ lines.push(`- **⚠ Flatten partial failure** — review positions manually.`);
26
+ }
27
+ if (h.notes)
28
+ lines.push(`- **Notes:** ${h.notes}`);
29
+ lines.push(`- _id=${h.id}_\n`);
30
+ }
31
+ return { content: [{ type: "text", text: lines.join("\n") }] };
32
+ }
33
+ catch (e) {
34
+ return makeErrorResult(e);
35
+ }
36
+ }
37
+ /** RM2-07 — operator re-enable for a halted account. */
38
+ export async function reenableRiskHalt(client, resolver, input) {
39
+ try {
40
+ const connectionAccountId = Number(input.connectionAccountId);
41
+ if (!Number.isFinite(connectionAccountId) || connectionAccountId <= 0) {
42
+ return makeErrorResult(new Error("connectionAccountId is required and must be a positive integer"));
43
+ }
44
+ const userId = await resolver.resolve(client);
45
+ await client.post(`/api/account/${userId}/risk/reenable/${connectionAccountId}`, {});
46
+ return {
47
+ content: [{
48
+ type: "text",
49
+ text: `Re-enabled connection-account ${connectionAccountId}. Halt cleared and the account is routing again. Audited.`,
50
+ }],
51
+ };
52
+ }
53
+ catch (e) {
54
+ return makeErrorResult(e);
55
+ }
56
+ }
57
+ export async function getRisk(client, resolver, _input) {
58
+ try {
59
+ const userId = await resolver.resolve(client);
60
+ const accounts = await client.get(`/api/account/${userId}/risk`);
61
+ if (!accounts?.length) {
62
+ return { content: [{ type: "text", text: "No broker accounts found." }] };
63
+ }
64
+ const lines = ["## Account Risk Snapshots\n"];
65
+ for (const a of accounts) {
66
+ const label = a.connLabel ?? `Connection ${a.connId}`;
67
+ lines.push(`### ${label} — ${a.acctId} (${a.brokerType})`);
68
+ if (!a.hasData) {
69
+ lines.push("_No risk data yet — broker feed not connected or no push received._\n");
70
+ continue;
71
+ }
72
+ if (a.cash != null)
73
+ lines.push(`- **Cash:** ${fmtMoney(a.cash)}`);
74
+ if (a.netLiq != null)
75
+ lines.push(`- **Net Liquidation:** ${fmtMoney(a.netLiq)}`);
76
+ if (a.openPnL != null)
77
+ lines.push(`- **Open P&L:** ${fmtDollar(a.openPnL)}`);
78
+ if (a.dayPnL != null)
79
+ lines.push(`- **Day P&L:** ${fmtDollar(a.dayPnL)}`);
80
+ if (a.realizedPnL != null)
81
+ lines.push(`- **Realized P&L:** ${fmtDollar(a.realizedPnL)}`);
82
+ if (a.distDrawdown != null) {
83
+ const flag = a.distDrawdown < 200 ? " 🔴 DANGER" : a.distDrawdown < 500 ? " 🟡 WARN" : "";
84
+ lines.push(`- **Dist to Drawdown:** ${fmtMoney(a.distDrawdown)}${flag}`);
85
+ }
86
+ if (a.dailyLossLimit != null)
87
+ lines.push(`- **Daily Loss Limit:** ${fmtMoney(a.dailyLossLimit)}`);
88
+ if (a.distDailyLoss != null) {
89
+ const flag = a.distDailyLoss < 200 ? " 🟡 WARN" : "";
90
+ lines.push(`- **Dist Daily Loss:** ${fmtMoney(a.distDailyLoss)}${flag}`);
91
+ }
92
+ if (a.marginBalance != null)
93
+ lines.push(`- **Margin Balance:** ${fmtMoney(a.marginBalance)}`);
94
+ if (a.buyingPower != null)
95
+ lines.push(`- **Buying Power:** ${fmtMoney(a.buyingPower)}`);
96
+ if (a.autoLiqLevel != null)
97
+ lines.push(`- **Auto-Liq Level:** ${fmtMoney(a.autoLiqLevel)}`);
98
+ if (a.fetchedAt)
99
+ lines.push(`- _Updated: ${a.fetchedAt}_`);
100
+ lines.push("");
101
+ }
102
+ return { content: [{ type: "text", text: lines.join("\n") }] };
103
+ }
104
+ catch (e) {
105
+ return makeErrorResult(e);
106
+ }
107
+ }
108
+ //# sourceMappingURL=risk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk.js","sourceRoot":"","sources":["../../src/tools/risk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { VantageClient } from "../client.js";
2
+ import { UserResolver, ToolResult } from "../user.js";
3
+ export declare function listSignalTemplates(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
4
+ export declare function createSignalTemplate(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
5
+ export declare function updateSignalTemplate(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
6
+ export declare function deleteSignalTemplate(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
@@ -0,0 +1,90 @@
1
+ import { makeErrorResult } from "../user.js";
2
+ export async function listSignalTemplates(client, _resolver, input) {
3
+ const groupId = Number(input.groupId);
4
+ if (!groupId)
5
+ return makeErrorResult(new Error("groupId is required"));
6
+ try {
7
+ const templates = await client.get(`/api/groups/${groupId}/signal-templates`);
8
+ const summary = templates.length === 0
9
+ ? "No templates."
10
+ : templates.map((t) => `• [${t.id}] ${t.name}`).join("\n");
11
+ return {
12
+ content: [
13
+ { type: "text", text: `${templates.length} template(s) for group ${groupId}:\n${summary}` },
14
+ { type: "text", text: JSON.stringify(templates, null, 2) },
15
+ ],
16
+ };
17
+ }
18
+ catch (e) {
19
+ return makeErrorResult(e);
20
+ }
21
+ }
22
+ export async function createSignalTemplate(client, _resolver, input) {
23
+ const groupId = Number(input.groupId);
24
+ const name = String(input.name ?? "");
25
+ if (!groupId)
26
+ return makeErrorResult(new Error("groupId is required"));
27
+ if (!name)
28
+ return makeErrorResult(new Error("name is required"));
29
+ if (!input.payload || typeof input.payload !== "object")
30
+ return makeErrorResult(new Error("payload is required (object with action, ticker, etc.)"));
31
+ try {
32
+ const body = { name, payload: input.payload };
33
+ const created = await client.post(`/api/groups/${groupId}/signal-templates`, body);
34
+ return {
35
+ content: [
36
+ { type: "text", text: `Created template id=${created.id} "${created.name}" for group ${groupId}.` },
37
+ { type: "text", text: JSON.stringify(created, null, 2) },
38
+ ],
39
+ };
40
+ }
41
+ catch (e) {
42
+ return makeErrorResult(e);
43
+ }
44
+ }
45
+ export async function updateSignalTemplate(client, _resolver, input) {
46
+ const groupId = Number(input.groupId);
47
+ const templateId = Number(input.templateId);
48
+ const name = String(input.name ?? "");
49
+ if (!groupId)
50
+ return makeErrorResult(new Error("groupId is required"));
51
+ if (!templateId)
52
+ return makeErrorResult(new Error("templateId is required"));
53
+ if (!name)
54
+ return makeErrorResult(new Error("name is required"));
55
+ if (!input.payload || typeof input.payload !== "object")
56
+ return makeErrorResult(new Error("payload is required (object with action, ticker, etc.)"));
57
+ try {
58
+ const body = { name, payload: input.payload };
59
+ const updated = await client.put(`/api/groups/${groupId}/signal-templates/${templateId}`, body);
60
+ return {
61
+ content: [
62
+ { type: "text", text: `Updated template id=${updated.id} "${updated.name}".` },
63
+ { type: "text", text: JSON.stringify(updated, null, 2) },
64
+ ],
65
+ };
66
+ }
67
+ catch (e) {
68
+ return makeErrorResult(e);
69
+ }
70
+ }
71
+ export async function deleteSignalTemplate(client, _resolver, input) {
72
+ const groupId = Number(input.groupId);
73
+ const templateId = Number(input.templateId);
74
+ if (!groupId)
75
+ return makeErrorResult(new Error("groupId is required"));
76
+ if (!templateId)
77
+ return makeErrorResult(new Error("templateId is required"));
78
+ try {
79
+ await client.delete(`/api/groups/${groupId}/signal-templates/${templateId}`);
80
+ return {
81
+ content: [
82
+ { type: "text", text: `Deleted template id=${templateId} from group ${groupId}.` },
83
+ ],
84
+ };
85
+ }
86
+ catch (e) {
87
+ return makeErrorResult(e);
88
+ }
89
+ }
90
+ //# sourceMappingURL=signal-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-templates.js","sourceRoot":"","sources":["../../src/tools/signal-templates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { VantageClient } from "../client.js";
2
+ import { UserResolver, ToolResult } from "../user.js";
3
+ export declare function sendSignal(client: VantageClient, resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
4
+ export declare function exitPositions(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
5
+ export declare function flattenGroup(client: VantageClient, resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
6
+ export declare function sendManualSignal(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
7
+ export declare function cancelOrders(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
8
+ export declare function sendMagicLink(client: VantageClient, _resolver: UserResolver, input: Record<string, unknown>): Promise<ToolResult>;
@@ -0,0 +1,318 @@
1
+ import { makeErrorResult } from "../user.js";
2
+ // MTPS-Batch2: extended to full TradersPost-parity surface. SignalProcessor
3
+ // accepts reverse + breakeven (MTPS-Batch1); trailing_stop orderType gated
4
+ // per-group by capability intersection (UI hides it; server still rejects
5
+ // when a constituent broker can't route it).
6
+ const VALID_ACTIONS = ["buy", "sell", "exit", "exit_and_cancel", "add", "reduce", "reverse", "breakeven"];
7
+ const VALID_ORDER_TYPES = ["market", "limit", "stop", "stop_limit", "trailing_stop"];
8
+ const VALID_QUANTITY_TYPES = ["fixed_quantity", "dollar_amount", "risk_dollar_amount", "percent_of_equity", "percent_of_position"];
9
+ const VALID_TIF = ["day", "gtc", "ioc", "fok", "opg", "cls"];
10
+ export async function sendSignal(client, resolver, input) {
11
+ const groupId = String(input.groupId ?? "");
12
+ const secret = String(input.secret ?? "");
13
+ const action = String(input.action ?? "");
14
+ const ticker = String(input.ticker ?? "");
15
+ if (!groupId || !secret)
16
+ return makeErrorResult(new Error("groupId and secret are required"));
17
+ if (!VALID_ACTIONS.includes(action)) {
18
+ return {
19
+ content: [
20
+ {
21
+ type: "text",
22
+ text: `Invalid action "${action}". Valid values: ${VALID_ACTIONS.join(", ")}`,
23
+ },
24
+ ],
25
+ isError: true,
26
+ };
27
+ }
28
+ if (!ticker)
29
+ return makeErrorResult(new Error("ticker is required"));
30
+ const wireAction = action === "exit_and_cancel" ? "exit" : action;
31
+ const payload = { action: wireAction, ticker };
32
+ if (action === "exit_and_cancel")
33
+ payload.cancel = true;
34
+ if (input.quantity != null)
35
+ payload.quantity = Number(input.quantity);
36
+ if (input.orderType != null) {
37
+ const ot = String(input.orderType);
38
+ if (!VALID_ORDER_TYPES.includes(ot)) {
39
+ return {
40
+ content: [
41
+ {
42
+ type: "text",
43
+ text: `Invalid orderType "${ot}". Valid values: ${VALID_ORDER_TYPES.join(", ")}`,
44
+ },
45
+ ],
46
+ isError: true,
47
+ };
48
+ }
49
+ payload.orderType = ot;
50
+ }
51
+ if (input.limitPrice != null)
52
+ payload.limitPrice = Number(input.limitPrice);
53
+ if (input.stopPrice != null)
54
+ payload.stopPrice = Number(input.stopPrice);
55
+ // takeProfit / stopLoss accept either a number (legacy: offset/price) OR an
56
+ // object (TradersPost bracket shape — { type, limitPrice, percent, amount,
57
+ // stopPrice, trailAmount, trailPercent }). Server's WebhookPayload + bracket
58
+ // resolution handle both shapes natively (MTPS-Batch1).
59
+ if (input.takeProfit != null)
60
+ payload.takeProfit = input.takeProfit;
61
+ if (input.stopLoss != null)
62
+ payload.stopLoss = input.stopLoss;
63
+ if (input.comment != null)
64
+ payload.comment = String(input.comment);
65
+ if (input.timeInForce != null)
66
+ payload.timeInForce = String(input.timeInForce);
67
+ // MTPS-Batch2: TradersPost-parity extensions.
68
+ if (input.quantityType != null) {
69
+ const qt = String(input.quantityType);
70
+ if (!VALID_QUANTITY_TYPES.includes(qt)) {
71
+ return {
72
+ content: [
73
+ { type: "text", text: `Invalid quantityType "${qt}". Valid values: ${VALID_QUANTITY_TYPES.join(", ")}` },
74
+ ],
75
+ isError: true,
76
+ };
77
+ }
78
+ payload.quantityType = qt;
79
+ }
80
+ if (input.amount != null)
81
+ payload.amount = Number(input.amount);
82
+ if (input.riskDollars != null)
83
+ payload.riskDollars = Number(input.riskDollars);
84
+ if (input.percent != null)
85
+ payload.percent = Number(input.percent);
86
+ if (input.trailAmount != null)
87
+ payload.trailAmount = Number(input.trailAmount);
88
+ if (input.trailPercent != null)
89
+ payload.trailPercent = Number(input.trailPercent);
90
+ if (input.signalPrice != null)
91
+ payload.signalPrice = Number(input.signalPrice);
92
+ if (input.delay != null)
93
+ payload.delay = Number(input.delay);
94
+ if (input.breakevenOffset != null)
95
+ payload.breakevenOffset = Number(input.breakevenOffset);
96
+ if (input.ignoreTradingWindows === true)
97
+ payload.ignoreTradingWindows = true;
98
+ if (input.extendedHours === true)
99
+ payload.extendedHours = true;
100
+ if (input.test === true)
101
+ payload.test = true;
102
+ if (input.sentiment != null)
103
+ payload.sentiment = String(input.sentiment);
104
+ try {
105
+ const res = await client.postWebhook(groupId, secret, payload);
106
+ if (!res.success) {
107
+ return { content: [{ type: "text", text: res.error ?? "Signal dispatch failed" }], isError: true };
108
+ }
109
+ const envelopeId = res.envelopeSignalId;
110
+ const isAsync = res.dispatched === 0 && res.total != null && res.total > 0 && envelopeId != null;
111
+ const summary = isAsync
112
+ ? `Signal accepted (fan-out in progress). Use inspect_signal(signalId: "${envelopeId}") to confirm execution.`
113
+ : `${res.dispatched ?? 0} of ${res.total ?? 0} accounts executed`;
114
+ return {
115
+ content: [
116
+ {
117
+ type: "text",
118
+ text: `Signal dispatched: ${summary}. Envelope signal ID: ${envelopeId ?? "unknown"}`,
119
+ },
120
+ {
121
+ type: "text",
122
+ text: JSON.stringify({ dispatched: res.dispatched, total: res.total, envelopeSignalId: envelopeId, results: res.results }, null, 2),
123
+ },
124
+ ],
125
+ };
126
+ }
127
+ catch (err) {
128
+ return makeErrorResult(err);
129
+ }
130
+ }
131
+ export async function exitPositions(client, _resolver, input) {
132
+ const groupId = String(input.groupId ?? "");
133
+ const secret = String(input.secret ?? "");
134
+ if (!groupId || !secret)
135
+ return makeErrorResult(new Error("groupId and secret are required"));
136
+ const payload = {
137
+ action: "exit",
138
+ ticker: input.ticker ? String(input.ticker) : "ALL",
139
+ };
140
+ if (input.comment != null)
141
+ payload.comment = String(input.comment);
142
+ try {
143
+ const res = await client.postWebhook(groupId, secret, payload);
144
+ if (!res.success) {
145
+ return { content: [{ type: "text", text: res.error ?? "Exit failed" }], isError: true };
146
+ }
147
+ const summary = `${res.dispatched ?? 0} of ${res.total ?? 0} accounts received exit signal`;
148
+ return {
149
+ content: [
150
+ { type: "text", text: summary },
151
+ {
152
+ type: "text",
153
+ text: JSON.stringify({ dispatched: res.dispatched, total: res.total, results: res.results }, null, 2),
154
+ },
155
+ ],
156
+ };
157
+ }
158
+ catch (err) {
159
+ return makeErrorResult(err);
160
+ }
161
+ }
162
+ export async function flattenGroup(client, resolver, input) {
163
+ if (input.confirm !== true) {
164
+ return {
165
+ content: [
166
+ {
167
+ type: "text",
168
+ text: "flatten_group requires confirm: true — this closes ALL positions and cancels ALL working orders " +
169
+ "across every account in the group. Pass confirm: true to proceed.",
170
+ },
171
+ ],
172
+ isError: true,
173
+ };
174
+ }
175
+ const groupId = String(input.groupId ?? "");
176
+ if (!groupId)
177
+ return makeErrorResult(new Error("groupId is required"));
178
+ try {
179
+ const userId = await resolver.resolve(client);
180
+ const res = await client.post(`/api/account/${userId}/groups/${groupId}/flatten`, {});
181
+ if (!res.success) {
182
+ return { content: [{ type: "text", text: res.error ?? "Flatten failed" }], isError: true };
183
+ }
184
+ const summary = `Closed ${res.positionsFlattened ?? 0} position(s), cancelled ${res.ordersCancelled ?? 0} order(s)`;
185
+ return {
186
+ content: [
187
+ { type: "text", text: summary },
188
+ { type: "text", text: JSON.stringify(res, null, 2) },
189
+ ],
190
+ };
191
+ }
192
+ catch (err) {
193
+ return makeErrorResult(err);
194
+ }
195
+ }
196
+ export async function sendManualSignal(client, _resolver, input) {
197
+ const userId = Number(input.userId);
198
+ if (!userId || isNaN(userId))
199
+ return makeErrorResult(new Error("userId is required"));
200
+ const scope = String(input.scope ?? "");
201
+ if (scope !== "group" && scope !== "connection")
202
+ return makeErrorResult(new Error("scope must be 'group' or 'connection'"));
203
+ const action = String(input.action ?? "");
204
+ if (!VALID_ACTIONS.includes(action))
205
+ return makeErrorResult(new Error(`action must be one of: ${VALID_ACTIONS.join(", ")}`));
206
+ const ticker = String(input.ticker ?? "");
207
+ if (!ticker)
208
+ return makeErrorResult(new Error("ticker is required"));
209
+ const wireAction = action === "exit_and_cancel" ? "exit" : action;
210
+ const payload = { action: wireAction, ticker };
211
+ if (action === "exit_and_cancel")
212
+ payload.cancel = true;
213
+ if (input.quantity != null)
214
+ payload.quantity = Number(input.quantity);
215
+ if (input.orderType != null)
216
+ payload.orderType = String(input.orderType);
217
+ if (input.limitPrice != null)
218
+ payload.limitPrice = Number(input.limitPrice);
219
+ if (input.stopPrice != null)
220
+ payload.stopPrice = Number(input.stopPrice);
221
+ if (input.takeProfit != null)
222
+ payload.takeProfit = Number(input.takeProfit);
223
+ if (input.stopLoss != null)
224
+ payload.stopLoss = Number(input.stopLoss);
225
+ if (input.comment != null)
226
+ payload.comment = String(input.comment);
227
+ if (input.timeInForce != null)
228
+ payload.timeInForce = String(input.timeInForce);
229
+ try {
230
+ let url;
231
+ if (scope === "group") {
232
+ const groupId = Number(input.groupId);
233
+ if (!groupId || isNaN(groupId))
234
+ return makeErrorResult(new Error("groupId is required when scope=group"));
235
+ url = `/api/account/${userId}/groups/${groupId}/manual-signal`;
236
+ }
237
+ else {
238
+ const connectionId = Number(input.connectionId);
239
+ if (!connectionId || isNaN(connectionId))
240
+ return makeErrorResult(new Error("connectionId is required when scope=connection"));
241
+ url = `/api/account/${userId}/connections/${connectionId}/manual-signal`;
242
+ }
243
+ const res = await client.post(url, payload);
244
+ if (!res.success) {
245
+ return { content: [{ type: "text", text: res.error ?? "Manual signal dispatch failed" }], isError: true };
246
+ }
247
+ return {
248
+ content: [
249
+ { type: "text", text: `Manual signal dispatched. ${res.message ?? ""}`.trim() },
250
+ { type: "text", text: JSON.stringify(res, null, 2) },
251
+ ],
252
+ };
253
+ }
254
+ catch (err) {
255
+ return makeErrorResult(err);
256
+ }
257
+ }
258
+ // MTPS-Batch2: cancel-orders convenience tool with optional cancelOrderType
259
+ // filter. Separate tool (vs folding cancelOrderType into send_signal) so LLM
260
+ // agents can discover the capability — the descriptive tool name + targeted
261
+ // input schema reads more naturally than a flag on a generic send_signal call.
262
+ const VALID_CANCEL_ORDER_TYPES = ["market", "limit", "stop", "stop_limit", "trailing_stop"];
263
+ export async function cancelOrders(client, _resolver, input) {
264
+ const groupId = String(input.groupId ?? "");
265
+ const secret = String(input.secret ?? "");
266
+ const ticker = String(input.ticker ?? "");
267
+ if (!groupId || !secret)
268
+ return makeErrorResult(new Error("groupId and secret are required"));
269
+ if (!ticker)
270
+ return makeErrorResult(new Error("ticker is required"));
271
+ const payload = { action: "cancel", ticker };
272
+ if (input.cancelOrderType != null) {
273
+ const cot = String(input.cancelOrderType);
274
+ if (!VALID_CANCEL_ORDER_TYPES.includes(cot)) {
275
+ return {
276
+ content: [
277
+ { type: "text", text: `Invalid cancelOrderType "${cot}". Valid values: ${VALID_CANCEL_ORDER_TYPES.join(", ")}` },
278
+ ],
279
+ isError: true,
280
+ };
281
+ }
282
+ payload.cancelOrderType = cot;
283
+ }
284
+ if (input.comment != null)
285
+ payload.comment = String(input.comment);
286
+ try {
287
+ const res = await client.postWebhook(groupId, secret, payload);
288
+ if (!res.success) {
289
+ return { content: [{ type: "text", text: res.error ?? "Cancel failed" }], isError: true };
290
+ }
291
+ const filterLabel = input.cancelOrderType ? ` (${input.cancelOrderType} only)` : "";
292
+ const summary = `${res.dispatched ?? 0} of ${res.total ?? 0} accounts received cancel${filterLabel}`;
293
+ return {
294
+ content: [
295
+ { type: "text", text: summary },
296
+ { type: "text", text: JSON.stringify({ dispatched: res.dispatched, total: res.total, results: res.results }, null, 2) },
297
+ ],
298
+ };
299
+ }
300
+ catch (err) {
301
+ return makeErrorResult(err);
302
+ }
303
+ }
304
+ export async function sendMagicLink(client, _resolver, input) {
305
+ const userId = Number(input.userId);
306
+ if (!userId || isNaN(userId))
307
+ return makeErrorResult(new Error("userId is required"));
308
+ try {
309
+ const res = await client.post(`/api/admin/users/${userId}/invite`, {});
310
+ return {
311
+ content: [{ type: "text", text: `Magic link sent to ${res.sentTo}` }],
312
+ };
313
+ }
314
+ catch (err) {
315
+ return makeErrorResult(err);
316
+ }
317
+ }
318
+ //# sourceMappingURL=signals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signals.js","sourceRoot":"","sources":["../../src/tools/signals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};