@aibtc/mcp-server 1.52.0 → 1.53.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.
@@ -7,12 +7,22 @@
7
7
  * Endpoint pattern: /v1/{chain}/{resource}
8
8
  * Default chain: stacks
9
9
  */
10
+ export interface TeneroFetchOptions {
11
+ /**
12
+ * Abort signal for caller-controlled cancellation/timeouts. Tenero has
13
+ * been observed to stall 15-30s on tokens that haven't traded recently;
14
+ * callers that fan out parallel lookups should bound each call with
15
+ * `AbortSignal.timeout(...)`.
16
+ */
17
+ signal?: AbortSignal;
18
+ }
10
19
  /**
11
20
  * Get token details including metadata, price, and volume.
12
21
  * @param contractId - Token contract address (e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex)
13
22
  * @param chain - Chain to query (default: stacks)
23
+ * @param options - Optional fetch controls (e.g. `signal` for timeouts).
14
24
  */
15
- export declare function getTokenInfo(contractId: string, chain?: string): Promise<unknown>;
25
+ export declare function getTokenInfo(contractId: string, chain?: string, options?: TeneroFetchOptions): Promise<unknown>;
16
26
  /**
17
27
  * Get token market summary including price history, volume, and pool liquidity.
18
28
  * @param contractId - Token contract address
@@ -1 +1 @@
1
- {"version":3,"file":"tenero-api.d.ts","sourceRoot":"","sources":["../../src/services/tenero-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAkBH;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAIlB"}
1
+ {"version":3,"file":"tenero-api.d.ts","sourceRoot":"","sources":["../../src/services/tenero-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,MAAM,WAAW,kBAAkB;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAqBD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,EAChB,OAAO,CAAC,EAAE,kBAAkB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,KAAK,SAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CACjC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,MAAM,EACf,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,KAAK,SAAK,EACV,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,KAAK,SAAW,GACf,OAAO,CAAC,OAAO,CAAC,CAIlB"}
@@ -8,8 +8,10 @@
8
8
  * Default chain: stacks
9
9
  */
10
10
  const TENERO_BASE = "https://api.tenero.io";
11
- async function fetchTenero(path) {
12
- const response = await fetch(`${TENERO_BASE}${path}`);
11
+ async function fetchTenero(path, options) {
12
+ const response = await fetch(`${TENERO_BASE}${path}`, {
13
+ signal: options?.signal,
14
+ });
13
15
  if (!response.ok) {
14
16
  const text = await response.text().catch(() => "Unknown error");
15
17
  throw new Error(`Tenero API error ${response.status}: ${text}`);
@@ -21,9 +23,10 @@ async function fetchTenero(path) {
21
23
  * Get token details including metadata, price, and volume.
22
24
  * @param contractId - Token contract address (e.g. SP102V8P0F7JX67ARQ77WEA3D3CFB5XW39REDT0AM.token-alex)
23
25
  * @param chain - Chain to query (default: stacks)
26
+ * @param options - Optional fetch controls (e.g. `signal` for timeouts).
24
27
  */
25
- export async function getTokenInfo(contractId, chain = "stacks") {
26
- return fetchTenero(`/v1/${chain}/tokens/${contractId}`);
28
+ export async function getTokenInfo(contractId, chain = "stacks", options) {
29
+ return fetchTenero(`/v1/${chain}/tokens/${contractId}`, options);
27
30
  }
28
31
  /**
29
32
  * Get token market summary including price history, volume, and pool liquidity.
@@ -1 +1 @@
1
- {"version":3,"file":"tenero-api.js","sourceRoot":"","sources":["../../src/services/tenero-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tenero-api.js","sourceRoot":"","sources":["../../src/services/tenero-api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"competition.tools.d.ts","sourceRoot":"","sources":["../../src/tools/competition.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA2FpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAoIhE"}
1
+ {"version":3,"file":"competition.tools.d.ts","sourceRoot":"","sources":["../../src/tools/competition.tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuXpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyKhE"}
@@ -2,6 +2,7 @@ import { z } from "zod";
2
2
  import { AIBTC_CAMPAIGN_API_URL } from "../config/competition.js";
3
3
  import { NETWORK } from "../config/networks.js";
4
4
  import { getTransactionStatus } from "../services/hiro-api.js";
5
+ import { getTokenInfo } from "../services/tenero-api.js";
5
6
  import { getWalletManager } from "../services/wallet-manager.js";
6
7
  import { createJsonResponse } from "../utils/formatting.js";
7
8
  import { createErrorResponse } from "../utils/errors.js";
@@ -41,6 +42,42 @@ function normalizeTxid(txid) {
41
42
  return withPrefix.toLowerCase();
42
43
  }
43
44
  const COMPETITION_FETCH_TIMEOUT_MS = 10_000;
45
+ /**
46
+ * Cap on `/trades` pagination when computing campaign stats. 10 pages × 200
47
+ * trades = 2000 swaps — well above any realistic competition agent's volume.
48
+ * If a real agent ever exceeds this, the response carries `pnl_truncated: true`
49
+ * so the caller knows the totals are a lower bound.
50
+ */
51
+ const PNL_MAX_TRADE_PAGES = 10;
52
+ const PNL_TRADES_PAGE_SIZE = 200;
53
+ /**
54
+ * Per-token Tenero timeout. Field reports (from operators running this on
55
+ * an ~80-calls/day sensor cycle) include 15-30s stalls on tokens that
56
+ * haven't traded recently — without a bound the whole `competition_status`
57
+ * call would block until Node's default socket timeout. 10s matches the
58
+ * competition-API budget so a slow leg is treated the same as a slow
59
+ * status fetch.
60
+ */
61
+ const TENERO_TOKEN_TIMEOUT_MS = 10_000;
62
+ /**
63
+ * Max concurrent Tenero requests when resolving distinct token prices.
64
+ * Agents with many distinct tokens (30+) would otherwise fire that many
65
+ * simultaneous calls and risk saturating Tenero's unauthenticated rate
66
+ * limit. 10 keeps total wall time bounded while staying well clear of
67
+ * the rate-limit ceiling.
68
+ */
69
+ const TENERO_RESOLVE_CONCURRENCY = 10;
70
+ /**
71
+ * Synthetic token id the indexer uses for native STX (no `::asset` form on
72
+ * chain). Mirrors `STX_ASSET_ID` in landing-page `lib/competition/d1-reads.ts`.
73
+ */
74
+ const STX_ASSET_ID = "stx";
75
+ /**
76
+ * Sentinel the swap parser writes when it can't decode a token id. Filtered
77
+ * out before pricing — no point burning a Tenero call on a string we know
78
+ * isn't a real token. Mirrors the leaderboard's behaviour.
79
+ */
80
+ const UNKNOWN_TOKEN_SENTINEL = "unknown";
44
81
  async function competitionFetch(path, init) {
45
82
  const controller = new AbortController();
46
83
  const timer = setTimeout(() => controller.abort(), COMPETITION_FETCH_TIMEOUT_MS);
@@ -67,6 +104,191 @@ async function competitionFetch(path, init) {
67
104
  }
68
105
  return parsed;
69
106
  }
107
+ /**
108
+ * Strip the `::asset` suffix and pass `"stx"` through unchanged. Tenero's
109
+ * `/v1/stacks/tokens/{address}` route keys on the bare contract id; native
110
+ * STX uses the literal `"stx"`. Mirrors `tokenIdToTeneroAddress` in
111
+ * landing-page `lib/external/tenero/prices.ts` so prices line up byte-for-
112
+ * byte with the leaderboard.
113
+ */
114
+ function tokenIdToTeneroAddress(tokenId) {
115
+ if (tokenId === STX_ASSET_ID)
116
+ return STX_ASSET_ID;
117
+ const idx = tokenId.indexOf("::");
118
+ return idx >= 0 ? tokenId.slice(0, idx) : tokenId;
119
+ }
120
+ /**
121
+ * Defensively parse Tenero's `data.price_usd` / `data.decimals`. Tenero
122
+ * usually returns them as numbers but has been seen to return strings on
123
+ * less-trafficked tokens; the landing-page resolver handles both, so we do
124
+ * too. Returns `null` when the token has no published price (zero, missing,
125
+ * NaN) or no usable decimals.
126
+ */
127
+ function parseTeneroPrice(data) {
128
+ if (!data || typeof data !== "object")
129
+ return null;
130
+ const obj = data;
131
+ const rawPrice = obj.price_usd;
132
+ const parsedPrice = typeof rawPrice === "string"
133
+ ? parseFloat(rawPrice)
134
+ : typeof rawPrice === "number"
135
+ ? rawPrice
136
+ : NaN;
137
+ if (!Number.isFinite(parsedPrice) || parsedPrice <= 0)
138
+ return null;
139
+ const rawDecimals = obj.decimals;
140
+ const parsedDecimals = typeof rawDecimals === "string"
141
+ ? parseInt(rawDecimals, 10)
142
+ : typeof rawDecimals === "number"
143
+ ? rawDecimals
144
+ : NaN;
145
+ if (!Number.isFinite(parsedDecimals) || parsedDecimals < 0)
146
+ return null;
147
+ return { priceUsd: parsedPrice, decimals: parsedDecimals };
148
+ }
149
+ /**
150
+ * Mark-to-current P&L over an agent's successful swaps.
151
+ *
152
+ * pnl_usd = Σ(amount_out × price[token_out]
153
+ * − amount_in × price[token_in])
154
+ *
155
+ * Mirrors `computeCampaignStats` in landing-page `lib/competition/pnl.ts`
156
+ * line-for-line so the MCP-side total matches the leaderboard's column at
157
+ * the same instant in time. Only `tx_status === "success"` rows count; a
158
+ * swap where either leg has no Tenero price is dropped from the totals and
159
+ * the unrecognised token id(s) get surfaced in `unpriced_tokens` so the
160
+ * caller can debug a partial result instead of silently under-reporting.
161
+ */
162
+ function computeCampaignStats(swaps, prices, pnlTruncated, now = Date.now()) {
163
+ let pnl = 0;
164
+ let notional = 0;
165
+ let priced = 0;
166
+ let unpriced = 0;
167
+ let totalSuccess = 0;
168
+ const unpricedTokens = new Set();
169
+ for (const s of swaps) {
170
+ if (s.tx_status !== "success")
171
+ continue;
172
+ totalSuccess++;
173
+ const inKey = tokenIdToTeneroAddress(s.token_in);
174
+ const outKey = tokenIdToTeneroAddress(s.token_out);
175
+ const inP = prices.get(inKey);
176
+ const outP = prices.get(outKey);
177
+ if (!inP || !outP) {
178
+ if (!inP)
179
+ unpricedTokens.add(s.token_in);
180
+ if (!outP)
181
+ unpricedTokens.add(s.token_out);
182
+ unpriced++;
183
+ continue;
184
+ }
185
+ const inUsd = (s.amount_in / 10 ** inP.decimals) * inP.priceUsd;
186
+ const outUsd = (s.amount_out / 10 ** outP.decimals) * outP.priceUsd;
187
+ pnl += outUsd - inUsd;
188
+ notional += inUsd;
189
+ priced++;
190
+ }
191
+ return {
192
+ pnl_usd: priced > 0 ? pnl : null,
193
+ pnl_percent: notional > 0 ? (pnl / notional) * 100 : null,
194
+ notional_usd: notional,
195
+ priced_trade_count: priced,
196
+ unpriced_trade_count: unpriced,
197
+ unpriced_tokens: Array.from(unpricedTokens),
198
+ methodology: "mark_to_current",
199
+ priced_at: now,
200
+ pnl_truncated: pnlTruncated,
201
+ total_successful_trades: totalSuccess,
202
+ };
203
+ }
204
+ async function collectAllTrades(address) {
205
+ const all = [];
206
+ let cursor = null;
207
+ for (let page = 0; page < PNL_MAX_TRADE_PAGES; page++) {
208
+ const params = new URLSearchParams({
209
+ address,
210
+ limit: String(PNL_TRADES_PAGE_SIZE),
211
+ });
212
+ if (cursor)
213
+ params.set("cursor", cursor);
214
+ const parsed = (await competitionFetch(`/trades?${params.toString()}`));
215
+ if (Array.isArray(parsed.trades))
216
+ all.push(...parsed.trades);
217
+ cursor = parsed.next_cursor ?? null;
218
+ if (!cursor)
219
+ return { trades: all, truncated: false };
220
+ }
221
+ return { trades: all, truncated: true };
222
+ }
223
+ /**
224
+ * Run `worker` over `items` with at most `limit` calls in flight at once.
225
+ * A tiny worker-pool — N runners share a cursor and pull the next item
226
+ * when their previous one resolves. Preserves input order in the output
227
+ * array. We use this instead of a chunked `Promise.all` so a single slow
228
+ * Tenero leg doesn't block other tokens behind it.
229
+ */
230
+ async function withConcurrency(items, limit, worker) {
231
+ const out = new Array(items.length);
232
+ let cursor = 0;
233
+ const runners = Array.from({ length: Math.min(Math.max(limit, 1), items.length) }, async () => {
234
+ while (true) {
235
+ const i = cursor++;
236
+ if (i >= items.length)
237
+ return;
238
+ out[i] = await worker(items[i], i);
239
+ }
240
+ });
241
+ await Promise.all(runners);
242
+ return out;
243
+ }
244
+ /**
245
+ * Resolve prices for every distinct token id referenced in `swaps` by
246
+ * calling Tenero `/v1/stacks/tokens/{address}` once per token. Bounded
247
+ * concurrency (`TENERO_RESOLVE_CONCURRENCY`) plus a per-call timeout
248
+ * (`TENERO_TOKEN_TIMEOUT_MS`) so an agent with many distinct tokens or a
249
+ * slow Tenero leg can't stall the whole status call.
250
+ *
251
+ * Tokens Tenero doesn't price (404, timeout, no published price) stay
252
+ * absent from the returned Map — `computeCampaignStats` treats absence as
253
+ * "unpriced" and excludes the swap from the totals. The literal `"unknown"`
254
+ * parser sentinel is filtered out up front; it's never a real token.
255
+ */
256
+ async function resolveTokenPricesViaTenero(swaps) {
257
+ const distinct = new Set();
258
+ for (const s of swaps) {
259
+ if (s.tx_status !== "success")
260
+ continue;
261
+ if (s.token_in && s.token_in !== UNKNOWN_TOKEN_SENTINEL) {
262
+ distinct.add(tokenIdToTeneroAddress(s.token_in));
263
+ }
264
+ if (s.token_out && s.token_out !== UNKNOWN_TOKEN_SENTINEL) {
265
+ distinct.add(tokenIdToTeneroAddress(s.token_out));
266
+ }
267
+ }
268
+ const prices = new Map();
269
+ if (distinct.size === 0)
270
+ return prices;
271
+ const ids = Array.from(distinct);
272
+ const entries = await withConcurrency(ids, TENERO_RESOLVE_CONCURRENCY, async (id) => {
273
+ try {
274
+ const data = await getTokenInfo(id, "stacks", {
275
+ signal: AbortSignal.timeout(TENERO_TOKEN_TIMEOUT_MS),
276
+ });
277
+ return [id, parseTeneroPrice(data)];
278
+ }
279
+ catch {
280
+ // Tenero 404 / network blip / timeout → leave unpriced; the swap
281
+ // will be bucketed into `unpriced_trade_count` and surfaced via
282
+ // `unpriced_tokens` so the caller knows what's missing.
283
+ return [id, null];
284
+ }
285
+ });
286
+ for (const [id, p] of entries) {
287
+ if (p)
288
+ prices.set(id, p);
289
+ }
290
+ return prices;
291
+ }
70
292
  export function registerCompetitionTools(server) {
71
293
  server.registerTool("competition_submit_trade", {
72
294
  description: `Submit a trade txid to the AIBTC trading competition for verification and P&L scoring.
@@ -127,21 +349,50 @@ Response shapes:
127
349
  }
128
350
  });
129
351
  server.registerTool("competition_status", {
130
- description: `Get the current AIBTC trading competition standing for an agent.
352
+ description: `Get the current AIBTC trading competition standing for an agent, with mark-to-current P&L computed locally.
353
+
354
+ **Latency note:** by default this call also paginates the agent's trade history and parallel-fetches Tenero prices to compute live P&L. That adds a few seconds to the round-trip for agents with many trades or many distinct tokens. Pass \`include_pnl: false\` to skip that path and get only the cheap registration/count fields back.
355
+
356
+ Returns \`{ address, agent_id, registered, trade_count, verified_trade_count, first_trade_at, last_trade_at, campaign, campaign_stats }\`. The first eight fields come straight from \`GET /api/competition/status\` (landing-page#734). \`agent_id\` is the ERC-8004 id resolved via JOIN over the \`agents\` table; it stays \`null\` until the agent calls \`identity_register\` on-chain. \`campaign\` carries rank + P&L once backend scoring has run.
131
357
 
132
- Returns \`{ address, agent_id, registered, trade_count, verified_trade_count, first_trade_at, last_trade_at, campaign }\` per landing-page#734. \`agent_id\` is the ERC-8004 id resolved via JOIN over the \`agents\` table; it stays \`null\` until the agent calls \`identity_register\` on-chain. \`campaign\` carries rank + P&L once scoring has run.
358
+ \`campaign_stats\` is computed client-side in this tool (not the backend) and exists so the agent has a usable P&L number *now* without waiting for the backend's nightly scoring cron. Methodology mirrors the leaderboard's \`computeCampaignStats\` byte-for-byte:
133
359
 
134
- To be eligible for scoring, the agent needs **both** an aibtc.com website registration (dual-sig flow at https://aibtc.com) **and** an ERC-8004 agent_id (via \`identity_register\`). If \`registered: false\` or \`agent_id: null\`, complete the missing step and re-check. If no address is provided, uses the active wallet's Stacks address.`,
360
+ pnl_usd = Σ(amount_out × price[token_out]
361
+ − amount_in × price[token_in])
362
+
363
+ over the agent's swaps where \`tx_status === "success"\`. Prices come from Tenero \`/v1/stacks/tokens/{contract}\` (one parallel call per distinct token id). Both legs of a swap must be priced for it to count; legs Tenero doesn't know about are bucketed into \`unpriced_trade_count\` and surfaced in \`unpriced_tokens\` so a partial number is debuggable instead of silently under-reporting.
364
+
365
+ \`campaign_stats\` fields:
366
+ - \`pnl_usd\`: mark-to-current USD P&L, or \`null\` when no swap had both legs priced.
367
+ - \`pnl_percent\`: P&L as % of notional spent, or \`null\` when notional is zero.
368
+ - \`notional_usd\`: USD value of \`amount_in\` summed across priced swaps — "what was put at risk".
369
+ - \`priced_trade_count\` / \`unpriced_trade_count\`: swap split.
370
+ - \`unpriced_tokens\`: distinct ids that couldn't be priced (the \`"unknown"\` parser sentinel may appear here).
371
+ - \`total_successful_trades\`: total \`success\` swaps seen (\`priced + unpriced\`).
372
+ - \`pnl_truncated\`: \`true\` when the agent has more than ${PNL_MAX_TRADE_PAGES * PNL_TRADES_PAGE_SIZE} swaps and the totals are a lower bound. Use \`competition_list_trades\` to walk the full history if this fires.
373
+ - \`methodology: "mark_to_current"\`, \`priced_at\`: unix-millis stamp.
374
+
375
+ To be eligible for scoring, the agent needs **both** an aibtc.com website registration (dual-sig flow at https://aibtc.com) **and** an ERC-8004 agent_id (via \`identity_register\`). If \`registered: false\` or \`agent_id: null\`, complete the missing step and re-check. Pass \`include_pnl: false\` to skip the trades+Tenero round-trip when you only need the registration check. If no address is provided, uses the active wallet's Stacks address.`,
135
376
  inputSchema: {
136
377
  address: stacksAddressSchema
137
378
  .optional()
138
379
  .describe("Stacks address of the agent. Defaults to the active wallet."),
380
+ include_pnl: z
381
+ .boolean()
382
+ .optional()
383
+ .describe("Compute and attach `campaign_stats` (mark-to-current P&L over the agent's successful swaps). Defaults to true. Set false to skip the trades + Tenero round-trips when you only need the registration check."),
139
384
  },
140
- }, async ({ address }) => {
385
+ }, async ({ address, include_pnl }) => {
141
386
  try {
142
387
  const target = await resolveAddress(address);
143
- const parsed = await competitionFetch(`/status?address=${encodeURIComponent(target)}`);
144
- return createJsonResponse(parsed);
388
+ const status = (await competitionFetch(`/status?address=${encodeURIComponent(target)}`));
389
+ if (include_pnl === false) {
390
+ return createJsonResponse(status);
391
+ }
392
+ const { trades, truncated } = await collectAllTrades(target);
393
+ const prices = await resolveTokenPricesViaTenero(trades);
394
+ const campaign_stats = computeCampaignStats(trades, prices, truncated);
395
+ return createJsonResponse({ ...status, campaign_stats });
145
396
  }
146
397
  catch (error) {
147
398
  return createErrorResponse(error);
@@ -1 +1 @@
1
- {"version":3,"file":"competition.tools.js","sourceRoot":"","sources":["../../src/tools/competition.tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"competition.tools.js","sourceRoot":"","sources":["../../src/tools/competition.tools.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aibtc/mcp-server",
3
- "version": "1.52.0",
3
+ "version": "1.53.0",
4
4
  "description": "Bitcoin-native MCP server for AI agents: BTC/STX wallets, DeFi yield, sBTC peg, NFTs, and x402 payments.",
5
5
  "mcpName": "io.github.aibtcdev/mcp-server",
6
6
  "type": "module",
package/skill/SKILL.md CHANGED
@@ -4,7 +4,7 @@ description: Bitcoin L1 wallet for agents - check balances, send BTC, manage UTX
4
4
  license: MIT
5
5
  metadata:
6
6
  author: aibtcdev
7
- version: 1.52.0 # x-release-please-version
7
+ version: 1.53.0 # x-release-please-version
8
8
  npm: "@aibtc/mcp-server"
9
9
  github: https://github.com/aibtcdev/aibtc-mcp-server
10
10
  ---