@carbon-copy/mcp 0.1.1 → 0.2.1

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/README.md CHANGED
@@ -4,8 +4,11 @@ An [MCP](https://modelcontextprotocol.io) server that gives AI agents programmat
4
4
 
5
5
  ## Features
6
6
 
7
- - **Portfolio Management** — View portfolio summary, positions, and trade history
8
- - **Trader Operations** — Follow/unfollow traders, pause/resume copy trading, adjust settings
7
+ - **Portfolio Management** — View portfolio summary (including live positions value and unrealised P&L), open positions, and trade history
8
+ - **Trader Discovery** — Search and filter traders by profit, ROI, win rate, volume, and followers
9
+ - **Follow Management** — Follow/unfollow traders, pause/resume copy trading, adjust per-trader settings
10
+ - **Batch Operations** — Update up to 100 followed traders in a single call
11
+ - **Performance Analytics** — Trader P&L history, drawdown, and Sharpe ratio
9
12
  - **Order Tracking** — List and inspect copy trade orders with filtering
10
13
  - **Account Info** — Access account details
11
14
  - **Cursor Pagination** — Iterate through large datasets efficiently
@@ -15,7 +18,7 @@ An [MCP](https://modelcontextprotocol.io) server that gives AI agents programmat
15
18
  ### Prerequisites
16
19
 
17
20
  1. A [Carbon Copy](https://carboncopy.inc) account
18
- 2. An API key (generate from the dashboard or via the [API](https://docs.carboncopy.inc))
21
+ 2. An API key (generate from the dashboard)
19
22
 
20
23
  ### Usage with Claude Desktop
21
24
 
@@ -55,19 +58,39 @@ Add to `.cursor/mcp.json` in your project:
55
58
 
56
59
  ## Available Tools
57
60
 
61
+ ### Portfolio
62
+
58
63
  | Tool | Description |
59
- |---|---|
60
- | `get_portfolio` | Portfolio summary (value, P&L, win rate) |
61
- | `get_portfolio_history` | Paginated trade history with date filtering |
64
+ |------|-------------|
65
+ | `get_portfolio` | Portfolio summary: balance, positions value, unrealised P&L, win rate |
66
+ | `get_portfolio_history` | Paginated trade history with optional date filtering |
62
67
  | `get_positions` | Open positions with pagination |
63
- | `list_traders` | All followed traders with stats |
68
+
69
+ ### Trader Discovery
70
+
71
+ | Tool | Description |
72
+ |------|-------------|
73
+ | `discover_traders` | Search/filter traders by profit, ROI, win rate, volume, followers |
74
+ | `get_trader_performance` | Detailed performance analytics and P&L history for a trader |
75
+
76
+ ### Follow Management
77
+
78
+ | Tool | Description |
79
+ |------|-------------|
80
+ | `list_traders` | All followed traders with copy settings and stats |
64
81
  | `follow_trader` | Start following a trader |
65
- | `get_trader` | Single trader details |
66
- | `update_trader` | Update copy trading settings |
82
+ | `get_trader` | Details for a single followed trader |
83
+ | `update_trader` | Update copy trading settings for a followed trader |
84
+ | `batch_update_traders` | Update up to 100 followed traders in one call |
67
85
  | `unfollow_trader` | Stop following a trader |
68
- | `pause_trader` | Pause copy trading for a trader |
69
- | `resume_trader` | Resume copy trading for a trader |
70
- | `list_orders` | Paginated orders with status/date filters |
86
+ | `pause_trader` | Pause copy trading for a trader (without unfollowing) |
87
+ | `resume_trader` | Resume copy trading for a paused trader |
88
+
89
+ ### Orders & Account
90
+
91
+ | Tool | Description |
92
+ |------|-------------|
93
+ | `list_orders` | Paginated orders with optional status/date filters |
71
94
  | `get_order` | Single order details |
72
95
  | `get_account` | Account information |
73
96
  | `health` | API health check |
@@ -75,9 +98,9 @@ Add to `.cursor/mcp.json` in your project:
75
98
  ## Resources
76
99
 
77
100
  | URI | Description |
78
- |---|---|
101
+ |-----|-------------|
79
102
  | `carboncopy://portfolio` | Current portfolio snapshot |
80
- | `carboncopy://traders` | List of followed traders |
103
+ | `carboncopy://traders` | Followed traders list |
81
104
 
82
105
  ## Development
83
106
 
@@ -85,22 +108,25 @@ Add to `.cursor/mcp.json` in your project:
85
108
  npm install
86
109
  npm run build
87
110
  npm run dev # Watch mode
111
+ npm test # Run tests
88
112
  ```
89
113
 
90
114
  ## Authentication
91
115
 
92
- All tools use your `CARBONCOPY_API_KEY` (format: `cc_<64 hex chars>`). Generate one from the [Carbon Copy dashboard](https://carboncopy.inc) or via the [Key Management API](https://docs.carboncopy.inc/authentication).
116
+ All tools authenticate via `CARBONCOPY_API_KEY` (format: `cc_<64 hex chars>`). Generate keys from the [Carbon Copy dashboard](https://carboncopy.inc).
117
+
118
+ API keys carry **scoped permissions** (`portfolio`, `traders`, `orders`, `markets`, `account`). Tools return a `403` permission error if your key lacks the required scope.
93
119
 
94
- API keys have scoped permissions (portfolio, traders, orders, markets, account). Tools will return permission errors if your key lacks the required scope.
120
+ You can override the default API origin with `CARBONCOPY_BASE_URL` (defaults to `https://carboncopy.inc`).
95
121
 
96
122
  ## Rate Limits
97
123
 
98
- The underlying API enforces rate limits (60 reads/min, 20 writes/min). The MCP server surfaces rate limit errors transparently — retry after the indicated delay.
124
+ The API enforces rate limits (60 reads/min, 20 writes/min). The MCP server surfaces rate limit errors transparently — retry after the indicated delay.
99
125
 
100
126
  ## Links
101
127
 
102
128
  - [Carbon Copy](https://carboncopy.inc)
103
- - [API Documentation](https://docs.carboncopy.inc)
129
+ - [API Reference](https://github.com/CarbonCopyInc/habakkuk/blob/main/docs/API_REFERENCE.md)
104
130
  - [OpenAPI Spec](https://docs.carboncopy.inc/api-reference/openapi.json)
105
131
 
106
132
  ## License
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
1
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
2
2
  import { CarbonCopyClient } from "../client.js";
3
3
  function createMockResponse(opts = {}) {
4
4
  const { ok = true, status = 200, statusText = "OK", contentLength, body = null, bodyText = "", cloneJsonThrows = false, } = opts;
@@ -6,7 +6,9 @@ function createMockResponse(opts = {}) {
6
6
  if (contentLength !== undefined)
7
7
  headers["content-length"] = contentLength;
8
8
  const jsonFn = vi.fn().mockResolvedValue(body);
9
- const textFn = vi.fn().mockResolvedValue(bodyText || (body !== null ? JSON.stringify(body) : ""));
9
+ const textFn = vi
10
+ .fn()
11
+ .mockResolvedValue(bodyText || (body !== null ? JSON.stringify(body) : ""));
10
12
  // The clone is only used for error-path json parsing
11
13
  const cloneJsonFn = cloneJsonThrows
12
14
  ? vi.fn().mockRejectedValue(new Error("not json"))
@@ -22,7 +24,7 @@ function createMockResponse(opts = {}) {
22
24
  clone,
23
25
  };
24
26
  }
25
- const BASE = "https://carboncopy.inc";
27
+ const BASE = "https://www.carboncopy.inc";
26
28
  describe("CarbonCopyClient", () => {
27
29
  let fetchMock;
28
30
  let client;
@@ -57,13 +59,16 @@ describe("CarbonCopyClient", () => {
57
59
  const responseData = { id: "trader-1" };
58
60
  fetchMock.mockResolvedValue(createMockResponse({ body: responseData }));
59
61
  const payload = {
60
- walletAddress: "0xabc",
62
+ wallet: "0xabc",
61
63
  copyPercentage: 50,
62
64
  };
63
65
  await client.followTrader(payload);
64
66
  const [, init] = fetchMock.mock.calls[0];
65
67
  expect(init.method).toBe("POST");
66
- expect(init.body).toBe(JSON.stringify(payload));
68
+ expect(init.body).toBe(JSON.stringify({
69
+ walletAddress: payload.wallet,
70
+ copyPercentage: payload.copyPercentage,
71
+ }));
67
72
  });
68
73
  });
69
74
  describe("request() — error handling", () => {
@@ -159,58 +164,83 @@ describe("CarbonCopyClient", () => {
159
164
  expect(url).toBe(`${BASE}/api/v1/portfolio/positions`);
160
165
  expect(init.method).toBe("GET");
161
166
  });
162
- it("getTraders() → GET /api/v1/traders", async () => {
167
+ it("getTraders() → GET /api/v1/portfolio/traders", async () => {
163
168
  await client.getTraders();
164
169
  const [url, init] = fetchMock.mock.calls[0];
165
- expect(url).toBe(`${BASE}/api/v1/traders`);
170
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders`);
171
+ expect(init.method).toBe("GET");
172
+ });
173
+ it("discoverTraders({sortBy:'roi'}) → GET /api/v1/traders?sortBy=roi", async () => {
174
+ await client.discoverTraders({ sortBy: "roi" });
175
+ const [url, init] = fetchMock.mock.calls[0];
176
+ expect(url).toBe(`${BASE}/api/v1/traders?sortBy=roi`);
166
177
  expect(init.method).toBe("GET");
167
178
  });
168
- it("followTrader({...}) → POST /api/v1/traders with body", async () => {
179
+ it("followTrader({...}) → POST /api/v1/portfolio/traders with body", async () => {
169
180
  const body = {
170
- walletAddress: "0xabc",
181
+ wallet: "0xabc",
171
182
  copyPercentage: 50,
172
183
  maxCopyAmount: 100,
173
184
  notificationsEnabled: true,
174
185
  };
175
186
  await client.followTrader(body);
176
187
  const [url, init] = fetchMock.mock.calls[0];
177
- expect(url).toBe(`${BASE}/api/v1/traders`);
188
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders`);
178
189
  expect(init.method).toBe("POST");
179
- expect(JSON.parse(init.body)).toEqual(body);
180
- });
181
- it("getTrader('0xabc') → GET /api/v1/traders/0xabc", async () => {
190
+ expect(JSON.parse(init.body)).toEqual({
191
+ walletAddress: body.wallet,
192
+ copyPercentage: body.copyPercentage,
193
+ maxCopyAmount: body.maxCopyAmount,
194
+ notificationsEnabled: body.notificationsEnabled,
195
+ });
196
+ });
197
+ it("getTrader('0xabc') → GET /api/v1/portfolio/traders/0xabc", async () => {
182
198
  await client.getTrader("0xabc");
183
199
  const [url, init] = fetchMock.mock.calls[0];
184
- expect(url).toBe(`${BASE}/api/v1/traders/0xabc`);
200
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/0xabc`);
185
201
  expect(init.method).toBe("GET");
186
202
  });
187
- it("updateTrader('0xabc', {...}) → PATCH /api/v1/traders/0xabc with body", async () => {
203
+ it("updateTrader('0xabc', {...}) → PATCH /api/v1/portfolio/traders/0xabc with body", async () => {
188
204
  const body = { copyPercentage: 75, copyTradingEnabled: false };
189
205
  await client.updateTrader("0xabc", body);
190
206
  const [url, init] = fetchMock.mock.calls[0];
191
- expect(url).toBe(`${BASE}/api/v1/traders/0xabc`);
207
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/0xabc`);
192
208
  expect(init.method).toBe("PATCH");
193
209
  expect(JSON.parse(init.body)).toEqual(body);
194
210
  });
195
- it("unfollowTrader('0xabc') → DELETE /api/v1/traders/0xabc", async () => {
211
+ it("unfollowTrader('0xabc') → DELETE /api/v1/portfolio/traders/0xabc", async () => {
196
212
  fetchMock.mockResolvedValue(createMockResponse({ status: 204, ok: true }));
197
213
  await client.unfollowTrader("0xabc");
198
214
  const [url, init] = fetchMock.mock.calls[0];
199
- expect(url).toBe(`${BASE}/api/v1/traders/0xabc`);
215
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/0xabc`);
200
216
  expect(init.method).toBe("DELETE");
201
217
  });
202
- it("pauseTrader('0xabc') → POST /api/v1/traders/0xabc/pause", async () => {
218
+ it("pauseTrader('0xabc') → POST /api/v1/portfolio/traders/0xabc/pause", async () => {
203
219
  await client.pauseTrader("0xabc");
204
220
  const [url, init] = fetchMock.mock.calls[0];
205
- expect(url).toBe(`${BASE}/api/v1/traders/0xabc/pause`);
221
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/0xabc/pause`);
206
222
  expect(init.method).toBe("POST");
207
223
  });
208
- it("resumeTrader('0xabc') → POST /api/v1/traders/0xabc/resume", async () => {
224
+ it("resumeTrader('0xabc') → POST /api/v1/portfolio/traders/0xabc/resume", async () => {
209
225
  await client.resumeTrader("0xabc");
210
226
  const [url, init] = fetchMock.mock.calls[0];
211
- expect(url).toBe(`${BASE}/api/v1/traders/0xabc/resume`);
227
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/0xabc/resume`);
212
228
  expect(init.method).toBe("POST");
213
229
  });
230
+ it("getTraderPerformance('0xabc') → GET /api/v1/traders/0xabc/performance", async () => {
231
+ await client.getTraderPerformance("0xabc");
232
+ const [url, init] = fetchMock.mock.calls[0];
233
+ expect(url).toBe(`${BASE}/api/v1/traders/0xabc/performance`);
234
+ expect(init.method).toBe("GET");
235
+ });
236
+ it("batchUpdateTraders([...]) → PATCH /api/v1/portfolio/traders/batch", async () => {
237
+ const updates = [{ walletAddress: "0xabc", copyPercentage: 70 }];
238
+ await client.batchUpdateTraders(updates);
239
+ const [url, init] = fetchMock.mock.calls[0];
240
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/batch`);
241
+ expect(init.method).toBe("PATCH");
242
+ expect(JSON.parse(init.body)).toEqual({ updates });
243
+ });
214
244
  it("getOrders({status:'filled'}) → GET /api/v1/orders?status=filled", async () => {
215
245
  await client.getOrders({ status: "filled" });
216
246
  const [url, init] = fetchMock.mock.calls[0];
@@ -261,26 +291,26 @@ describe("CarbonCopyClient", () => {
261
291
  await client.updateTrader(wallet, { copyPercentage: 10 });
262
292
  const [url] = fetchMock.mock.calls[0];
263
293
  expect(url).toContain(encodeURIComponent(wallet));
264
- expect(url).toBe(`${BASE}/api/v1/traders/${encodeURIComponent(wallet)}`);
294
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/${encodeURIComponent(wallet)}`);
265
295
  });
266
296
  it("encodes wallet addresses for unfollowTrader", async () => {
267
297
  const wallet = "0xabc def";
268
298
  fetchMock.mockResolvedValue(createMockResponse({ status: 204, ok: true }));
269
299
  await client.unfollowTrader(wallet);
270
300
  const [url] = fetchMock.mock.calls[0];
271
- expect(url).toBe(`${BASE}/api/v1/traders/${encodeURIComponent(wallet)}`);
301
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/${encodeURIComponent(wallet)}`);
272
302
  });
273
303
  it("encodes wallet addresses for pauseTrader", async () => {
274
304
  const wallet = "0xabc def";
275
305
  await client.pauseTrader(wallet);
276
306
  const [url] = fetchMock.mock.calls[0];
277
- expect(url).toBe(`${BASE}/api/v1/traders/${encodeURIComponent(wallet)}/pause`);
307
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/${encodeURIComponent(wallet)}/pause`);
278
308
  });
279
309
  it("encodes wallet addresses for resumeTrader", async () => {
280
310
  const wallet = "0xabc def";
281
311
  await client.resumeTrader(wallet);
282
312
  const [url] = fetchMock.mock.calls[0];
283
- expect(url).toBe(`${BASE}/api/v1/traders/${encodeURIComponent(wallet)}/resume`);
313
+ expect(url).toBe(`${BASE}/api/v1/portfolio/traders/${encodeURIComponent(wallet)}/resume`);
284
314
  });
285
315
  it("encodes query string values correctly", async () => {
286
316
  await client.getPortfolioHistory({ cursor: "abc=def&ghi" });
@@ -1 +1 @@
1
- {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.test.js","sourceRoot":"","sources":["../../src/__tests__/client.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import { CarbonCopyClient } from "../client.js";
4
4
  import { registerPortfolioResources } from "../resources/portfolio.js";
5
5
  import { registerTraderResources } from "../resources/traders.js";
@@ -150,12 +150,12 @@ describe("Resource Registration", () => {
150
150
  const result = (await resource.readCallback(new URL("carboncopy://traders"), {}));
151
151
  expect(JSON.parse(result.contents[0].text)).toEqual(tradersData);
152
152
  });
153
- it("calls GET /api/v1/traders when traders resource is read", async () => {
153
+ it("calls GET /api/v1/portfolio/traders when traders resource is read", async () => {
154
154
  fetchMock.mockResolvedValue(createMockFetchResponse([]));
155
155
  const resource = getResources(server)["carboncopy://traders"];
156
156
  await resource.readCallback(new URL("carboncopy://traders"), {});
157
157
  const [url, init] = fetchMock.mock.calls[0];
158
- expect(url).toContain("/api/v1/traders");
158
+ expect(url).toContain("/api/v1/portfolio/traders");
159
159
  expect(init.method).toBe("GET");
160
160
  });
161
161
  it("propagates API errors from the traders resource read", async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"resources.test.js","sourceRoot":"","sources":["../../src/__tests__/resources.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resources.test.js","sourceRoot":"","sources":["../../src/__tests__/resources.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
1
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
3
3
  import { CarbonCopyClient } from "../client.js";
4
+ import { registerAccountTools } from "../tools/account.js";
5
+ import { registerOrderTools } from "../tools/orders.js";
4
6
  import { registerPortfolioTools } from "../tools/portfolio.js";
5
7
  import { registerTraderTools } from "../tools/traders.js";
6
- import { registerOrderTools } from "../tools/orders.js";
7
- import { registerAccountTools } from "../tools/account.js";
8
8
  function getTools(server) {
9
9
  return server._registeredTools;
10
10
  }
@@ -27,9 +27,12 @@ const ALL_TOOL_NAMES = [
27
27
  "get_portfolio_history",
28
28
  "get_positions",
29
29
  "list_traders",
30
+ "discover_traders",
30
31
  "follow_trader",
31
32
  "get_trader",
33
+ "get_trader_performance",
32
34
  "update_trader",
35
+ "batch_update_traders",
33
36
  "unfollow_trader",
34
37
  "pause_trader",
35
38
  "resume_trader",
@@ -58,9 +61,9 @@ describe("Tool Registration", () => {
58
61
  // -------------------------------------------------------------------------
59
62
  // Count & names
60
63
  // -------------------------------------------------------------------------
61
- it("registers exactly 14 tools", () => {
64
+ it("registers exactly 17 tools", () => {
62
65
  const tools = getTools(server);
63
- expect(Object.keys(tools)).toHaveLength(14);
66
+ expect(Object.keys(tools)).toHaveLength(17);
64
67
  });
65
68
  it("registers all expected tool names", () => {
66
69
  const tools = getTools(server);
@@ -96,6 +99,10 @@ describe("Tool Registration", () => {
96
99
  const { annotations } = getTools(server)["list_traders"];
97
100
  expect(annotations?.readOnlyHint).toBe(true);
98
101
  });
102
+ it("discover_traders — readOnlyHint:true", () => {
103
+ const { annotations } = getTools(server)["discover_traders"];
104
+ expect(annotations?.readOnlyHint).toBe(true);
105
+ });
99
106
  it("follow_trader — readOnlyHint:false, no destructiveHint", () => {
100
107
  const { annotations } = getTools(server)["follow_trader"];
101
108
  expect(annotations?.readOnlyHint).toBe(false);
@@ -105,11 +112,20 @@ describe("Tool Registration", () => {
105
112
  const { annotations } = getTools(server)["get_trader"];
106
113
  expect(annotations?.readOnlyHint).toBe(true);
107
114
  });
115
+ it("get_trader_performance — readOnlyHint:true", () => {
116
+ const { annotations } = getTools(server)["get_trader_performance"];
117
+ expect(annotations?.readOnlyHint).toBe(true);
118
+ });
108
119
  it("update_trader — readOnlyHint:false, idempotentHint:true", () => {
109
120
  const { annotations } = getTools(server)["update_trader"];
110
121
  expect(annotations?.readOnlyHint).toBe(false);
111
122
  expect(annotations?.idempotentHint).toBe(true);
112
123
  });
124
+ it("batch_update_traders — readOnlyHint:false, idempotentHint:true", () => {
125
+ const { annotations } = getTools(server)["batch_update_traders"];
126
+ expect(annotations?.readOnlyHint).toBe(false);
127
+ expect(annotations?.idempotentHint).toBe(true);
128
+ });
113
129
  it("unfollow_trader — readOnlyHint:false, destructiveHint:true", () => {
114
130
  const { annotations } = getTools(server)["unfollow_trader"];
115
131
  expect(annotations?.readOnlyHint).toBe(false);
@@ -184,19 +200,32 @@ describe("Tool Registration", () => {
184
200
  const result = (await tool.handler({}, {}));
185
201
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
186
202
  const [url] = fetchMock.mock.calls[0];
187
- expect(url).toContain("/api/v1/traders");
203
+ expect(url).toContain("/api/v1/portfolio/traders");
204
+ });
205
+ it("discover_traders — calls discoverTraders() and returns JSON text", async () => {
206
+ const responseData = [{ walletAddress: "0xabc", roi: 12.5 }];
207
+ fetchMock.mockResolvedValue(createMockFetchResponse(responseData));
208
+ const tool = getTools(server)["discover_traders"];
209
+ const result = (await tool.handler({ sortBy: "roi" }, {}));
210
+ expect(JSON.parse(result.content[0].text)).toEqual(responseData);
211
+ const [url] = fetchMock.mock.calls[0];
212
+ expect(url).toMatch(/\/api\/v1\/traders(?:\?|$)/);
213
+ expect(url).toContain("sortBy=roi");
188
214
  });
189
215
  it("follow_trader — posts follow request and returns JSON text", async () => {
190
216
  const responseData = { id: "follow-1", wallet: "0xabc" };
191
217
  fetchMock.mockResolvedValue(createMockFetchResponse(responseData));
192
218
  const tool = getTools(server)["follow_trader"];
193
- const args = { walletAddress: "0xabc", copyPercentage: 50 };
219
+ const args = { wallet: "0xabc", copyPercentage: 50 };
194
220
  const result = (await tool.handler(args, {}));
195
221
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
196
222
  const [url, init] = fetchMock.mock.calls[0];
197
- expect(url).toContain("/api/v1/traders");
223
+ expect(url).toContain("/api/v1/portfolio/traders");
198
224
  expect(init.method).toBe("POST");
199
- expect(JSON.parse(init.body)).toMatchObject(args);
225
+ expect(JSON.parse(init.body)).toMatchObject({
226
+ walletAddress: args.wallet,
227
+ copyPercentage: args.copyPercentage,
228
+ });
200
229
  });
201
230
  it("get_trader — calls getTrader(wallet) and returns JSON text", async () => {
202
231
  const responseData = { wallet: "0xabc", copyPercentage: 50 };
@@ -205,7 +234,16 @@ describe("Tool Registration", () => {
205
234
  const result = (await tool.handler({ wallet: "0xabc" }, {}));
206
235
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
207
236
  const [url] = fetchMock.mock.calls[0];
208
- expect(url).toContain("/api/v1/traders/0xabc");
237
+ expect(url).toContain("/api/v1/portfolio/traders/0xabc");
238
+ });
239
+ it("get_trader_performance — calls performance endpoint and returns JSON text", async () => {
240
+ const responseData = { walletAddress: "0xabc", sharpe: 1.2 };
241
+ fetchMock.mockResolvedValue(createMockFetchResponse(responseData));
242
+ const tool = getTools(server)["get_trader_performance"];
243
+ const result = (await tool.handler({ wallet: "0xabc" }, {}));
244
+ expect(JSON.parse(result.content[0].text)).toEqual(responseData);
245
+ const [url] = fetchMock.mock.calls[0];
246
+ expect(url).toContain("/api/v1/traders/0xabc/performance");
209
247
  });
210
248
  it("update_trader — patches trader settings and returns JSON text", async () => {
211
249
  const responseData = { wallet: "0xabc", copyPercentage: 75 };
@@ -214,10 +252,30 @@ describe("Tool Registration", () => {
214
252
  const result = (await tool.handler({ wallet: "0xabc", copyPercentage: 75 }, {}));
215
253
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
216
254
  const [url, init] = fetchMock.mock.calls[0];
217
- expect(url).toContain("/api/v1/traders/0xabc");
255
+ expect(url).toContain("/api/v1/portfolio/traders/0xabc");
218
256
  expect(init.method).toBe("PATCH");
219
257
  expect(JSON.parse(init.body)).toEqual({ copyPercentage: 75 });
220
258
  });
259
+ it("batch_update_traders — patches multiple traders", async () => {
260
+ const responseData = { updated: 2, notFound: 0, total: 2 };
261
+ fetchMock.mockResolvedValue(createMockFetchResponse(responseData));
262
+ const tool = getTools(server)["batch_update_traders"];
263
+ const updates = [
264
+ { wallet: "0xabc", copyPercentage: 75 },
265
+ { wallet: "0xdef", copyPercentage: 50 },
266
+ ];
267
+ const result = (await tool.handler({ updates }, {}));
268
+ expect(JSON.parse(result.content[0].text)).toEqual(responseData);
269
+ const [url, init] = fetchMock.mock.calls[0];
270
+ expect(url).toContain("/api/v1/portfolio/traders/batch");
271
+ expect(init.method).toBe("PATCH");
272
+ expect(JSON.parse(init.body)).toEqual({
273
+ updates: [
274
+ { walletAddress: "0xabc", copyPercentage: 75 },
275
+ { walletAddress: "0xdef", copyPercentage: 50 },
276
+ ],
277
+ });
278
+ });
221
279
  it("unfollow_trader — deletes trader and returns JSON text (null body)", async () => {
222
280
  fetchMock.mockResolvedValue({
223
281
  ok: true,
@@ -233,7 +291,7 @@ describe("Tool Registration", () => {
233
291
  expect(result.content[0].type).toBe("text");
234
292
  expect(JSON.parse(result.content[0].text)).toEqual({ success: true });
235
293
  const [url, init] = fetchMock.mock.calls[0];
236
- expect(url).toContain("/api/v1/traders/0xabc");
294
+ expect(url).toContain("/api/v1/portfolio/traders/0xabc");
237
295
  expect(init.method).toBe("DELETE");
238
296
  });
239
297
  it("pause_trader — pauses trader and returns JSON text", async () => {
@@ -243,7 +301,7 @@ describe("Tool Registration", () => {
243
301
  const result = (await tool.handler({ wallet: "0xabc" }, {}));
244
302
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
245
303
  const [url, init] = fetchMock.mock.calls[0];
246
- expect(url).toContain("/api/v1/traders/0xabc/pause");
304
+ expect(url).toContain("/api/v1/portfolio/traders/0xabc/pause");
247
305
  expect(init.method).toBe("POST");
248
306
  });
249
307
  it("resume_trader — resumes trader and returns JSON text", async () => {
@@ -253,7 +311,7 @@ describe("Tool Registration", () => {
253
311
  const result = (await tool.handler({ wallet: "0xabc" }, {}));
254
312
  expect(JSON.parse(result.content[0].text)).toEqual(responseData);
255
313
  const [url, init] = fetchMock.mock.calls[0];
256
- expect(url).toContain("/api/v1/traders/0xabc/resume");
314
+ expect(url).toContain("/api/v1/portfolio/traders/0xabc/resume");
257
315
  expect(init.method).toBe("POST");
258
316
  });
259
317
  it("list_orders — calls getOrders() with params and returns JSON text", async () => {