hive-intelligence 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +3 -1
- package/build/{chunk-5QAXJON7.js → chunk-LBJL66AC.js} +5 -2
- package/build/{chunk-E2FAHUXM.js → chunk-PUECNLZ2.js} +1 -1
- package/build/{chunk-Z42XNN47.js → chunk-X4U2IALG.js} +743 -244
- package/build/cli.js +13 -13
- package/build/{completion-ROZAH667.js → completion-LFOLLOPU.js} +1 -1
- package/build/{doctor-SMUVDZZ2.js → doctor-AFLDGC4O.js} +1 -1
- package/build/{mcpServer-T3DYYFCC.js → mcpServer-6BQOD6YZ.js} +1 -1
- package/build/monitor-worker.js +2 -2
- package/build/{namespace-XMFFW47T.js → namespace-EU47MWAP.js} +1 -1
- package/build/release.json +4 -4
- package/build/{serve-2ICWEUMC.js → serve-TD63POF2.js} +1 -1
- package/build/server.js +2 -2
- package/build/stdio.js +1 -1
- package/build/{tools-J6VPDGYP.js → tools-CCMIU3SO.js} +1 -1
- package/package.json +1 -1
|
@@ -7836,9 +7836,8 @@ Don't use when:
|
|
|
7836
7836
|
- You need token metadata (use coingecko_get_onchain_token_info)
|
|
7837
7837
|
|
|
7838
7838
|
Error Handling:
|
|
7839
|
-
- Returns 404
|
|
7839
|
+
- Returns 404 for tokens CoinGecko does not track traders for: wrapped native tokens (WETH, wSOL), stablecoins, and tokens created before 2023-09-01. Works on eth, base, solana and other networks for newer tokens.
|
|
7840
7840
|
- Requires CoinGecko's Analyst plan or higher (a provider tier, not a Hive plan)
|
|
7841
|
-
- Not all networks support trader tracking
|
|
7842
7841
|
- Rate limited based on API plan`,
|
|
7843
7842
|
inputSchema: {
|
|
7844
7843
|
type: "object",
|
|
@@ -7877,7 +7876,7 @@ var handler79 = async (client2, args) => {
|
|
|
7877
7876
|
if (error?.status === 404) {
|
|
7878
7877
|
return asTextContentResult(
|
|
7879
7878
|
{
|
|
7880
|
-
error: `Invalid arguments:
|
|
7879
|
+
error: `Invalid arguments: CoinGecko does not track top traders for ${address} on "${network}" (404). It covers tokens created after 2023-09-01 and excludes wrapped native tokens and stablecoins. Use coingecko_get_onchain_token_top_holders or get_token_top_holders for this token.`,
|
|
7881
7880
|
code: "VALIDATION_ERROR",
|
|
7882
7881
|
suggestion: "Call coingecko_get_onchain_token_top_holders with the same network and address."
|
|
7883
7882
|
},
|
|
@@ -8468,17 +8467,18 @@ var handler87 = async (client2, args) => asTextContentResult(
|
|
|
8468
8467
|
var get_total_supply_chart_range_default = { metadata: metadata87, tool: tool87, handler: handler87 };
|
|
8469
8468
|
|
|
8470
8469
|
// src/tools/insights/get-insights.ts
|
|
8470
|
+
var INSIGHTS_SOURCE_NOTE = "AI-generated summary written by CoinGecko; not verified by Hive.";
|
|
8471
8471
|
var metadata88 = {
|
|
8472
8472
|
resource: "insights",
|
|
8473
8473
|
operation: "read",
|
|
8474
|
-
tags: ["coingecko", "coins", "insights", "research", "
|
|
8474
|
+
tags: ["coingecko", "coins", "insights", "research", "ai-generated"],
|
|
8475
8475
|
httpMethod: "get",
|
|
8476
8476
|
httpPath: "/insights",
|
|
8477
8477
|
operationId: "insights"
|
|
8478
8478
|
};
|
|
8479
8479
|
var tool88 = {
|
|
8480
8480
|
name: "coingecko_get_coin_insights",
|
|
8481
|
-
description: `Get CoinGecko's
|
|
8481
|
+
description: `Get CoinGecko's AI-generated coin insights: short summaries of market catalysts, sentiment, and fundamentals. CoinGecko's AI writes these; Hive does not verify them, so treat them as context and confirm facts with market data. Returns a bounded page of at most 20 items.
|
|
8482
8482
|
|
|
8483
8483
|
Args:
|
|
8484
8484
|
- page (integer, optional): Page number from 1 to 20. Default: 1.
|
|
@@ -8488,7 +8488,7 @@ Args:
|
|
|
8488
8488
|
- to (string, optional): End date in YYYY-MM-DD format.
|
|
8489
8489
|
|
|
8490
8490
|
Returns:
|
|
8491
|
-
|
|
8491
|
+
{ source_note, insights: [{ title, description, related_coin_ids, posted_at }] }, bounded to the requested page and page size.
|
|
8492
8492
|
|
|
8493
8493
|
Examples:
|
|
8494
8494
|
- Latest insights: {"page":1,"per_page":10}
|
|
@@ -8503,7 +8503,6 @@ Don't use when:
|
|
|
8503
8503
|
- You need live prices or market rankings (use coingecko_get_coins_markets)
|
|
8504
8504
|
|
|
8505
8505
|
Plan and freshness:
|
|
8506
|
-
- CoinGecko marks this endpoint Enterprise-only.
|
|
8507
8506
|
- CoinGecko documents a 60-second cache/update interval.
|
|
8508
8507
|
- Insight publication time is supplied by CoinGecko; inspect each returned record before treating it as current.`,
|
|
8509
8508
|
inputSchema: {
|
|
@@ -8556,10 +8555,398 @@ var handler88 = async (client2, args) => {
|
|
|
8556
8555
|
from: args?.from,
|
|
8557
8556
|
to: args?.to
|
|
8558
8557
|
};
|
|
8559
|
-
|
|
8558
|
+
const insights = await client2.get("/insights", { query });
|
|
8559
|
+
return asTextContentResult({ source_note: INSIGHTS_SOURCE_NOTE, insights });
|
|
8560
8560
|
};
|
|
8561
8561
|
var get_insights_default = { metadata: metadata88, tool: tool88, handler: handler88 };
|
|
8562
8562
|
|
|
8563
|
+
// src/tools/onchain/wallets/get-wallet-balances.ts
|
|
8564
|
+
var WALLET_BALANCE_NETWORKS = [
|
|
8565
|
+
"eth",
|
|
8566
|
+
"base",
|
|
8567
|
+
"bsc",
|
|
8568
|
+
"polygon_pos",
|
|
8569
|
+
"arbitrum",
|
|
8570
|
+
"optimism",
|
|
8571
|
+
"avax",
|
|
8572
|
+
"linea",
|
|
8573
|
+
"stable",
|
|
8574
|
+
"robinhood",
|
|
8575
|
+
"arc"
|
|
8576
|
+
];
|
|
8577
|
+
var metadata89 = {
|
|
8578
|
+
resource: "onchain.wallets.balances",
|
|
8579
|
+
operation: "read",
|
|
8580
|
+
tags: [
|
|
8581
|
+
"coingecko",
|
|
8582
|
+
"onchain",
|
|
8583
|
+
"wallets",
|
|
8584
|
+
"balances",
|
|
8585
|
+
"portfolio",
|
|
8586
|
+
"geckoterminal"
|
|
8587
|
+
],
|
|
8588
|
+
httpMethod: "get",
|
|
8589
|
+
httpPath: "/onchain/wallets/{address}/balances",
|
|
8590
|
+
operationId: "wallet-balances-address"
|
|
8591
|
+
};
|
|
8592
|
+
var tool89 = {
|
|
8593
|
+
name: "coingecko_get_onchain_wallet_balances",
|
|
8594
|
+
description: `Get a wallet's token balances with USD values and 24h price change across several EVM networks in one call.
|
|
8595
|
+
|
|
8596
|
+
Args:
|
|
8597
|
+
- address (string, required): EVM wallet address (0x\u2026).
|
|
8598
|
+
- networks (string, optional): Comma-separated GeckoTerminal network ids. Default: all supported (${WALLET_BALANCE_NETWORKS.join(",")}). EVM only; Solana is rejected.
|
|
8599
|
+
- page (integer, optional): Page number. Default 1.
|
|
8600
|
+
- per_page (integer, optional): Tokens per page, 1-100. Default 100.
|
|
8601
|
+
|
|
8602
|
+
Returns:
|
|
8603
|
+
data.attributes with total_value_usd, total_holdings, a per-network value breakdown, and balances sorted by value: network, address, token_type ("native" rows use 0xeeee\u2026eeee), symbol, decimals, balance (decimal string), price_usd, value_usd, h24_price_change_percentage, total_reserve_in_usd (pool liquidity behind the price). Numbers are strings.
|
|
8604
|
+
|
|
8605
|
+
Examples:
|
|
8606
|
+
- All supported networks: {"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}
|
|
8607
|
+
- Base only: {"address":"0x\u2026","networks":"base"}
|
|
8608
|
+
|
|
8609
|
+
Use when:
|
|
8610
|
+
- You need a priced multi-chain EVM portfolio in one call.
|
|
8611
|
+
|
|
8612
|
+
Don't use when:
|
|
8613
|
+
- The wallet is on Solana (use helius_get_wallet_balances).
|
|
8614
|
+
- You need realized or unrealized PnL (use get_wallet_pnl).
|
|
8615
|
+
|
|
8616
|
+
Notes:
|
|
8617
|
+
- value_usd uses DEX prices; a large value_usd with a small total_reserve_in_usd usually means an illiquid or spam token.`,
|
|
8618
|
+
inputSchema: {
|
|
8619
|
+
type: "object",
|
|
8620
|
+
properties: {
|
|
8621
|
+
address: {
|
|
8622
|
+
type: "string",
|
|
8623
|
+
minLength: 1,
|
|
8624
|
+
maxLength: 100,
|
|
8625
|
+
description: "EVM wallet address (0x\u2026). Required."
|
|
8626
|
+
},
|
|
8627
|
+
networks: {
|
|
8628
|
+
type: "string",
|
|
8629
|
+
maxLength: 200,
|
|
8630
|
+
description: `Comma-separated network ids. Default: ${WALLET_BALANCE_NETWORKS.join(",")}.`
|
|
8631
|
+
},
|
|
8632
|
+
page: {
|
|
8633
|
+
type: "integer",
|
|
8634
|
+
minimum: 1,
|
|
8635
|
+
maximum: 500,
|
|
8636
|
+
description: "Page number, 1-500. Default 1."
|
|
8637
|
+
},
|
|
8638
|
+
per_page: {
|
|
8639
|
+
type: "integer",
|
|
8640
|
+
minimum: 1,
|
|
8641
|
+
maximum: 100,
|
|
8642
|
+
description: "Tokens per page, 1-100. Default 100."
|
|
8643
|
+
}
|
|
8644
|
+
},
|
|
8645
|
+
required: ["address"],
|
|
8646
|
+
additionalProperties: false
|
|
8647
|
+
},
|
|
8648
|
+
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8649
|
+
};
|
|
8650
|
+
var handler89 = async (client2, args) => {
|
|
8651
|
+
const address = String(args?.address ?? "").trim();
|
|
8652
|
+
const query = {
|
|
8653
|
+
networks: args?.networks ?? WALLET_BALANCE_NETWORKS.join(","),
|
|
8654
|
+
page: args?.page,
|
|
8655
|
+
per_page: args?.per_page ?? 100
|
|
8656
|
+
};
|
|
8657
|
+
return asTextContentResult(
|
|
8658
|
+
await client2.get(
|
|
8659
|
+
`/onchain/wallets/${encodeURIComponent(address)}/balances`,
|
|
8660
|
+
{ query }
|
|
8661
|
+
)
|
|
8662
|
+
);
|
|
8663
|
+
};
|
|
8664
|
+
var get_wallet_balances_default = { metadata: metadata89, tool: tool89, handler: handler89 };
|
|
8665
|
+
|
|
8666
|
+
// src/tools/onchain/wallets/get-wallet-pnl.ts
|
|
8667
|
+
var metadata90 = {
|
|
8668
|
+
resource: "onchain.wallets.pnl",
|
|
8669
|
+
operation: "read",
|
|
8670
|
+
tags: [
|
|
8671
|
+
"coingecko",
|
|
8672
|
+
"onchain",
|
|
8673
|
+
"wallets",
|
|
8674
|
+
"pnl",
|
|
8675
|
+
"profitability",
|
|
8676
|
+
"geckoterminal"
|
|
8677
|
+
],
|
|
8678
|
+
httpMethod: "get",
|
|
8679
|
+
httpPath: "/onchain/wallets/{address}/pnl",
|
|
8680
|
+
operationId: "wallet-pnl-address"
|
|
8681
|
+
};
|
|
8682
|
+
var tool90 = {
|
|
8683
|
+
name: "coingecko_get_onchain_wallet_pnl",
|
|
8684
|
+
description: `Get a wallet's realized and unrealized DEX trading PnL, in total, per network, and per token.
|
|
8685
|
+
|
|
8686
|
+
Args:
|
|
8687
|
+
- address (string, required): Wallet address.
|
|
8688
|
+
- networks (string, optional): Comma-separated GeckoTerminal network ids, all from one VM family (all EVM, or "solana"). Default: ${WALLET_BALANCE_NETWORKS.join(",")}. Any GeckoTerminal network is accepted.
|
|
8689
|
+
- page (integer, optional): Page number. Default 1.
|
|
8690
|
+
- per_page (integer, optional): Tokens per page, 1-300. Default 50.
|
|
8691
|
+
|
|
8692
|
+
Returns:
|
|
8693
|
+
data.attributes with total_realized_pnl_usd, total_unrealized_pnl_usd, total_tokens, a per-network breakdown, and token_stats rows: network, address, symbol, realized_pnl_usd, unrealized_pnl_usd, average_buy_price_usd, average_sell_price_usd, total_buy/sell_count, total_buy/sell_usd. Numbers are strings; unrealized_pnl_usd is null when the token is no longer held.
|
|
8694
|
+
|
|
8695
|
+
Examples:
|
|
8696
|
+
- EVM PnL: {"address":"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"}
|
|
8697
|
+
- Solana PnL: {"address":"<base58>","networks":"solana"}
|
|
8698
|
+
|
|
8699
|
+
Use when:
|
|
8700
|
+
- You need to know whether a wallet trades profitably, or which tokens made or lost it money.
|
|
8701
|
+
|
|
8702
|
+
Don't use when:
|
|
8703
|
+
- You need current holdings (use get_wallet_balances).
|
|
8704
|
+
- You need the individual trades (use get_wallet_trades).
|
|
8705
|
+
|
|
8706
|
+
Notes:
|
|
8707
|
+
- PnL is computed from DEX trades CoinGecko indexes; CEX activity and OTC transfers are not counted.`,
|
|
8708
|
+
inputSchema: {
|
|
8709
|
+
type: "object",
|
|
8710
|
+
properties: {
|
|
8711
|
+
address: {
|
|
8712
|
+
type: "string",
|
|
8713
|
+
minLength: 1,
|
|
8714
|
+
maxLength: 100,
|
|
8715
|
+
description: "Wallet address. Required."
|
|
8716
|
+
},
|
|
8717
|
+
networks: {
|
|
8718
|
+
type: "string",
|
|
8719
|
+
maxLength: 200,
|
|
8720
|
+
description: `Comma-separated network ids from one VM family. Default: ${WALLET_BALANCE_NETWORKS.join(",")}.`
|
|
8721
|
+
},
|
|
8722
|
+
page: {
|
|
8723
|
+
type: "integer",
|
|
8724
|
+
minimum: 1,
|
|
8725
|
+
maximum: 500,
|
|
8726
|
+
description: "Page number, 1-500. Default 1."
|
|
8727
|
+
},
|
|
8728
|
+
per_page: {
|
|
8729
|
+
type: "integer",
|
|
8730
|
+
minimum: 1,
|
|
8731
|
+
maximum: 300,
|
|
8732
|
+
description: "Tokens per page, 1-300. Default 50."
|
|
8733
|
+
}
|
|
8734
|
+
},
|
|
8735
|
+
required: ["address"],
|
|
8736
|
+
additionalProperties: false
|
|
8737
|
+
},
|
|
8738
|
+
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8739
|
+
};
|
|
8740
|
+
var handler90 = async (client2, args) => {
|
|
8741
|
+
const address = String(args?.address ?? "").trim();
|
|
8742
|
+
const query = {
|
|
8743
|
+
networks: args?.networks ?? WALLET_BALANCE_NETWORKS.join(","),
|
|
8744
|
+
page: args?.page,
|
|
8745
|
+
per_page: args?.per_page ?? 50
|
|
8746
|
+
};
|
|
8747
|
+
return asTextContentResult(
|
|
8748
|
+
await client2.get(`/onchain/wallets/${encodeURIComponent(address)}/pnl`, {
|
|
8749
|
+
query
|
|
8750
|
+
})
|
|
8751
|
+
);
|
|
8752
|
+
};
|
|
8753
|
+
var get_wallet_pnl_default = { metadata: metadata90, tool: tool90, handler: handler90 };
|
|
8754
|
+
|
|
8755
|
+
// src/tools/onchain/networks/wallets/get-wallet-trades.ts
|
|
8756
|
+
function walletWindowError(args) {
|
|
8757
|
+
if (args?.from == null === (args?.to == null)) return null;
|
|
8758
|
+
return asTextContentResult(
|
|
8759
|
+
{
|
|
8760
|
+
error: "Invalid arguments: pass both from and to (YYYY-MM-DD, at most 30 days apart), or neither for the last 7 days.",
|
|
8761
|
+
code: "VALIDATION_ERROR"
|
|
8762
|
+
},
|
|
8763
|
+
true
|
|
8764
|
+
);
|
|
8765
|
+
}
|
|
8766
|
+
var WALLET_WINDOW_PROPERTIES = {
|
|
8767
|
+
from: {
|
|
8768
|
+
type: "string",
|
|
8769
|
+
pattern: "^\\d{4}-\\d{2}-\\d{2}$",
|
|
8770
|
+
description: "Window start, YYYY-MM-DD. Send with to; window at most 30 days. Default: last 7 days."
|
|
8771
|
+
},
|
|
8772
|
+
to: {
|
|
8773
|
+
type: "string",
|
|
8774
|
+
pattern: "^\\d{4}-\\d{2}-\\d{2}$",
|
|
8775
|
+
description: "Window end, YYYY-MM-DD. Send with from."
|
|
8776
|
+
},
|
|
8777
|
+
cursor: {
|
|
8778
|
+
type: "string",
|
|
8779
|
+
maxLength: 500,
|
|
8780
|
+
description: "meta.next_cursor from the previous page. Omit for the first page."
|
|
8781
|
+
},
|
|
8782
|
+
per_page: {
|
|
8783
|
+
type: "integer",
|
|
8784
|
+
minimum: 1,
|
|
8785
|
+
maximum: 300,
|
|
8786
|
+
description: "Rows per page, 1-300. Default 100."
|
|
8787
|
+
}
|
|
8788
|
+
};
|
|
8789
|
+
var metadata91 = {
|
|
8790
|
+
resource: "onchain.networks.wallets.trades",
|
|
8791
|
+
operation: "read",
|
|
8792
|
+
tags: ["coingecko", "onchain", "wallets", "trades", "swaps", "geckoterminal"],
|
|
8793
|
+
httpMethod: "get",
|
|
8794
|
+
httpPath: "/onchain/networks/{network}/wallets/{address}/trades",
|
|
8795
|
+
operationId: "wallet-trades-address"
|
|
8796
|
+
};
|
|
8797
|
+
var tool91 = {
|
|
8798
|
+
name: "coingecko_get_onchain_wallet_trades",
|
|
8799
|
+
description: `Get a wallet's DEX buys and sells on one network, with USD prices at execution time.
|
|
8800
|
+
|
|
8801
|
+
Args:
|
|
8802
|
+
- network (string, required): GeckoTerminal network id, e.g. "eth", "base", "solana". Any GeckoTerminal network.
|
|
8803
|
+
- address (string, required): Wallet address.
|
|
8804
|
+
- from, to (string, optional): YYYY-MM-DD window, sent together, at most 30 days. Default: last 7 days.
|
|
8805
|
+
- cursor (string, optional): meta.next_cursor from the previous page.
|
|
8806
|
+
- per_page (integer, optional): 1-300. Default 100.
|
|
8807
|
+
|
|
8808
|
+
Returns:
|
|
8809
|
+
data rows with pool_address, pool_dex, kind (buy/sell), from/to_token_address, from/to_token_amount, price_from/to_in_usd, volume_in_usd, tx_hash, block_timestamp; meta.next_cursor (null on the last page). An empty data array means no DEX trades in the window.
|
|
8810
|
+
|
|
8811
|
+
Examples:
|
|
8812
|
+
- Last 7 days on Base: {"network":"base","address":"0x\u2026"}
|
|
8813
|
+
- September on Ethereum: {"network":"eth","address":"0x\u2026","from":"2026-09-01","to":"2026-09-30"}
|
|
8814
|
+
|
|
8815
|
+
Use when:
|
|
8816
|
+
- You need what a wallet bought and sold, and at what price.
|
|
8817
|
+
|
|
8818
|
+
Don't use when:
|
|
8819
|
+
- You need all token movements including plain transfers (use get_wallet_transfers).
|
|
8820
|
+
- You need the PnL summary (use get_wallet_pnl).`,
|
|
8821
|
+
inputSchema: {
|
|
8822
|
+
type: "object",
|
|
8823
|
+
properties: {
|
|
8824
|
+
network: {
|
|
8825
|
+
type: "string",
|
|
8826
|
+
minLength: 1,
|
|
8827
|
+
maxLength: 60,
|
|
8828
|
+
description: 'GeckoTerminal network id, e.g. "eth". Required.'
|
|
8829
|
+
},
|
|
8830
|
+
address: {
|
|
8831
|
+
type: "string",
|
|
8832
|
+
minLength: 1,
|
|
8833
|
+
maxLength: 100,
|
|
8834
|
+
description: "Wallet address. Required."
|
|
8835
|
+
},
|
|
8836
|
+
...WALLET_WINDOW_PROPERTIES
|
|
8837
|
+
},
|
|
8838
|
+
required: ["network", "address"],
|
|
8839
|
+
additionalProperties: false
|
|
8840
|
+
},
|
|
8841
|
+
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8842
|
+
};
|
|
8843
|
+
var handler91 = async (client2, args) => {
|
|
8844
|
+
const invalid2 = walletWindowError(args);
|
|
8845
|
+
if (invalid2) return invalid2;
|
|
8846
|
+
const network = encodeURIComponent(String(args?.network ?? "").trim());
|
|
8847
|
+
const address = encodeURIComponent(String(args?.address ?? "").trim());
|
|
8848
|
+
const query = {
|
|
8849
|
+
from: args?.from,
|
|
8850
|
+
to: args?.to,
|
|
8851
|
+
cursor: args?.cursor,
|
|
8852
|
+
per_page: args?.per_page ?? 100
|
|
8853
|
+
};
|
|
8854
|
+
return asTextContentResult(
|
|
8855
|
+
await client2.get(`/onchain/networks/${network}/wallets/${address}/trades`, {
|
|
8856
|
+
query
|
|
8857
|
+
})
|
|
8858
|
+
);
|
|
8859
|
+
};
|
|
8860
|
+
var get_wallet_trades_default = { metadata: metadata91, tool: tool91, handler: handler91 };
|
|
8861
|
+
|
|
8862
|
+
// src/tools/onchain/networks/wallets/get-wallet-transfers.ts
|
|
8863
|
+
var metadata92 = {
|
|
8864
|
+
resource: "onchain.networks.wallets.transfers",
|
|
8865
|
+
operation: "read",
|
|
8866
|
+
tags: ["coingecko", "onchain", "wallets", "transfers", "geckoterminal"],
|
|
8867
|
+
httpMethod: "get",
|
|
8868
|
+
httpPath: "/onchain/networks/{network}/wallets/{address}/transfers",
|
|
8869
|
+
operationId: "wallet-transfers-address"
|
|
8870
|
+
};
|
|
8871
|
+
var tool92 = {
|
|
8872
|
+
name: "coingecko_get_onchain_wallet_transfers",
|
|
8873
|
+
description: `Get a wallet's inbound and outbound token transfers on one EVM network.
|
|
8874
|
+
|
|
8875
|
+
Args:
|
|
8876
|
+
- network (string, required): One of ${WALLET_BALANCE_NETWORKS.join(", ")}.
|
|
8877
|
+
- address (string, required): EVM wallet address (0x\u2026).
|
|
8878
|
+
- direction (string, optional): "in" or "out". Default both.
|
|
8879
|
+
- token (string, optional): Only transfers of this token contract address.
|
|
8880
|
+
- from, to (string, optional): YYYY-MM-DD window, sent together, at most 30 days. Default: last 7 days.
|
|
8881
|
+
- cursor (string, optional): meta.next_cursor from the previous page.
|
|
8882
|
+
- per_page (integer, optional): 1-300. Default 100.
|
|
8883
|
+
|
|
8884
|
+
Returns:
|
|
8885
|
+
data rows with block_number, tx_hash, direction, token_address, symbol, decimals, amount (decimal string), from_address, to_address, block_timestamp; meta.next_cursor (null on the last page).
|
|
8886
|
+
|
|
8887
|
+
Examples:
|
|
8888
|
+
- Recent inbound on Ethereum: {"network":"eth","address":"0x\u2026","direction":"in"}
|
|
8889
|
+
|
|
8890
|
+
Use when:
|
|
8891
|
+
- You need who sent a wallet what, or where its tokens went.
|
|
8892
|
+
|
|
8893
|
+
Don't use when:
|
|
8894
|
+
- The wallet is on Solana (use helius_get_wallet_transfers).
|
|
8895
|
+
- You only need DEX buys and sells (use get_wallet_trades).`,
|
|
8896
|
+
inputSchema: {
|
|
8897
|
+
type: "object",
|
|
8898
|
+
properties: {
|
|
8899
|
+
network: {
|
|
8900
|
+
type: "string",
|
|
8901
|
+
minLength: 1,
|
|
8902
|
+
maxLength: 60,
|
|
8903
|
+
description: 'Network id, e.g. "eth". Required.'
|
|
8904
|
+
},
|
|
8905
|
+
address: {
|
|
8906
|
+
type: "string",
|
|
8907
|
+
minLength: 1,
|
|
8908
|
+
maxLength: 100,
|
|
8909
|
+
description: "EVM wallet address. Required."
|
|
8910
|
+
},
|
|
8911
|
+
direction: {
|
|
8912
|
+
type: "string",
|
|
8913
|
+
enum: ["in", "out"],
|
|
8914
|
+
description: "Transfer direction. Default both."
|
|
8915
|
+
},
|
|
8916
|
+
token: {
|
|
8917
|
+
type: "string",
|
|
8918
|
+
maxLength: 100,
|
|
8919
|
+
description: "Token contract address filter."
|
|
8920
|
+
},
|
|
8921
|
+
...WALLET_WINDOW_PROPERTIES
|
|
8922
|
+
},
|
|
8923
|
+
required: ["network", "address"],
|
|
8924
|
+
additionalProperties: false
|
|
8925
|
+
},
|
|
8926
|
+
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8927
|
+
};
|
|
8928
|
+
var handler92 = async (client2, args) => {
|
|
8929
|
+
const invalid2 = walletWindowError(args);
|
|
8930
|
+
if (invalid2) return invalid2;
|
|
8931
|
+
const network = encodeURIComponent(String(args?.network ?? "").trim());
|
|
8932
|
+
const address = encodeURIComponent(String(args?.address ?? "").trim());
|
|
8933
|
+
const query = {
|
|
8934
|
+
direction: args?.direction,
|
|
8935
|
+
token: args?.token,
|
|
8936
|
+
from: args?.from,
|
|
8937
|
+
to: args?.to,
|
|
8938
|
+
cursor: args?.cursor,
|
|
8939
|
+
per_page: args?.per_page ?? 100
|
|
8940
|
+
};
|
|
8941
|
+
return asTextContentResult(
|
|
8942
|
+
await client2.get(
|
|
8943
|
+
`/onchain/networks/${network}/wallets/${address}/transfers`,
|
|
8944
|
+
{ query }
|
|
8945
|
+
)
|
|
8946
|
+
);
|
|
8947
|
+
};
|
|
8948
|
+
var get_wallet_transfers_default = { metadata: metadata92, tool: tool92, handler: handler92 };
|
|
8949
|
+
|
|
8563
8950
|
// src/tools/rwas/query.ts
|
|
8564
8951
|
function pickQuery(args, keys) {
|
|
8565
8952
|
const query = {};
|
|
@@ -8596,7 +8983,7 @@ var PRECISION_VALUES = [
|
|
|
8596
8983
|
];
|
|
8597
8984
|
|
|
8598
8985
|
// src/tools/rwas/get-rwas-list.ts
|
|
8599
|
-
var
|
|
8986
|
+
var metadata93 = {
|
|
8600
8987
|
resource: "rwas",
|
|
8601
8988
|
operation: "read",
|
|
8602
8989
|
tags: ["coingecko", "rwa", "tokenized", "stocks", "commodities", "etf", "list"],
|
|
@@ -8604,7 +8991,7 @@ var metadata89 = {
|
|
|
8604
8991
|
httpPath: "/rwas/list",
|
|
8605
8992
|
operationId: "rwas-list"
|
|
8606
8993
|
};
|
|
8607
|
-
var
|
|
8994
|
+
var tool93 = {
|
|
8608
8995
|
name: "coingecko_get_rwa_list",
|
|
8609
8996
|
description: `List every tokenized real-world asset (RWA) that CoinGecko tracks: tokenized stocks, commodities, and ETFs with spot market data. Use it to resolve the RWA asset IDs the other coingecko_get_rwa_* tools take.
|
|
8610
8997
|
|
|
@@ -8651,15 +9038,15 @@ Plan and freshness:
|
|
|
8651
9038
|
},
|
|
8652
9039
|
annotations: READ_ONLY_ANNOTATIONS
|
|
8653
9040
|
};
|
|
8654
|
-
var
|
|
9041
|
+
var handler93 = async (client2, args) => {
|
|
8655
9042
|
return asTextContentResult(
|
|
8656
9043
|
await client2.get("/rwas/list", { query: pickQuery(args, ["asset_type"]) })
|
|
8657
9044
|
);
|
|
8658
9045
|
};
|
|
8659
|
-
var get_rwas_list_default = { metadata:
|
|
9046
|
+
var get_rwas_list_default = { metadata: metadata93, tool: tool93, handler: handler93 };
|
|
8660
9047
|
|
|
8661
9048
|
// src/tools/rwas/get-rwas-markets.ts
|
|
8662
|
-
var
|
|
9049
|
+
var metadata94 = {
|
|
8663
9050
|
resource: "rwas.markets",
|
|
8664
9051
|
operation: "read",
|
|
8665
9052
|
tags: ["coingecko", "rwa", "tokenized", "stocks", "commodities", "etf", "markets", "price"],
|
|
@@ -8680,7 +9067,7 @@ var QUERY_KEYS = [
|
|
|
8680
9067
|
"price_change_percentage",
|
|
8681
9068
|
"sparkline"
|
|
8682
9069
|
];
|
|
8683
|
-
var
|
|
9070
|
+
var tool94 = {
|
|
8684
9071
|
name: "coingecko_get_rwa_markets",
|
|
8685
9072
|
description: `Get CoinGecko spot market data for tokenized real-world assets (RWAs): tokenized stocks, commodities, and ETFs, with USD price, market cap, and 24h volume aggregated across every token that wraps each asset. This is spot data for the tokenized versions, not the traditional exchange quote and not perpetual futures.
|
|
8686
9073
|
|
|
@@ -8814,15 +9201,15 @@ Plan and freshness:
|
|
|
8814
9201
|
},
|
|
8815
9202
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8816
9203
|
};
|
|
8817
|
-
var
|
|
9204
|
+
var handler94 = async (client2, args) => {
|
|
8818
9205
|
return asTextContentResult(
|
|
8819
9206
|
await client2.get("/rwas/markets", { query: pickQuery(args, QUERY_KEYS) })
|
|
8820
9207
|
);
|
|
8821
9208
|
};
|
|
8822
|
-
var get_rwas_markets_default = { metadata:
|
|
9209
|
+
var get_rwas_markets_default = { metadata: metadata94, tool: tool94, handler: handler94 };
|
|
8823
9210
|
|
|
8824
9211
|
// src/tools/rwas/get-rwas-asset.ts
|
|
8825
|
-
var
|
|
9212
|
+
var metadata95 = {
|
|
8826
9213
|
resource: "rwas",
|
|
8827
9214
|
operation: "read",
|
|
8828
9215
|
tags: ["coingecko", "rwa", "tokenized", "stocks", "commodities", "etf", "details", "tokens"],
|
|
@@ -8831,7 +9218,7 @@ var metadata91 = {
|
|
|
8831
9218
|
operationId: "rwas-id"
|
|
8832
9219
|
};
|
|
8833
9220
|
var QUERY_KEYS2 = ["sparkline", "tokenized_market_data", "tokens"];
|
|
8834
|
-
var
|
|
9221
|
+
var tool95 = {
|
|
8835
9222
|
name: "coingecko_get_rwa_asset",
|
|
8836
9223
|
description: `Get one tokenized real-world asset (RWA) from CoinGecko by ID: a tokenized stock, commodity, or ETF, with its metadata, aggregated spot market data, and the list of tokens that wrap it, each with contract addresses per chain and its issuer.
|
|
8837
9224
|
|
|
@@ -8908,17 +9295,17 @@ Plan and freshness:
|
|
|
8908
9295
|
},
|
|
8909
9296
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
8910
9297
|
};
|
|
8911
|
-
var
|
|
9298
|
+
var handler95 = async (client2, args) => {
|
|
8912
9299
|
return asTextContentResult(
|
|
8913
9300
|
await client2.get(`/rwas/${pathId(args)}`, {
|
|
8914
9301
|
query: pickQuery(args, QUERY_KEYS2)
|
|
8915
9302
|
})
|
|
8916
9303
|
);
|
|
8917
9304
|
};
|
|
8918
|
-
var get_rwas_asset_default = { metadata:
|
|
9305
|
+
var get_rwas_asset_default = { metadata: metadata95, tool: tool95, handler: handler95 };
|
|
8919
9306
|
|
|
8920
9307
|
// src/tools/rwas/get-rwas-tickers.ts
|
|
8921
|
-
var
|
|
9308
|
+
var metadata96 = {
|
|
8922
9309
|
resource: "rwas.tickers",
|
|
8923
9310
|
operation: "read",
|
|
8924
9311
|
tags: ["coingecko", "rwa", "tokenized", "stocks", "commodities", "etf", "tickers", "exchanges", "liquidity"],
|
|
@@ -8934,7 +9321,7 @@ var QUERY_KEYS3 = [
|
|
|
8934
9321
|
"order",
|
|
8935
9322
|
"page"
|
|
8936
9323
|
];
|
|
8937
|
-
var
|
|
9324
|
+
var tool96 = {
|
|
8938
9325
|
name: "coingecko_get_rwa_tickers",
|
|
8939
9326
|
description: `Get exchange tickers for one tokenized real-world asset (RWA) on CoinGecko: every spot pair, across centralized and decentralized exchanges, for the tokens that wrap a given stock, commodity, or ETF. Requires a CoinGecko Basic plan or above.
|
|
8940
9327
|
|
|
@@ -9024,17 +9411,17 @@ Plan and freshness:
|
|
|
9024
9411
|
},
|
|
9025
9412
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
9026
9413
|
};
|
|
9027
|
-
var
|
|
9414
|
+
var handler96 = async (client2, args) => {
|
|
9028
9415
|
return asTextContentResult(
|
|
9029
9416
|
await client2.get(`/rwas/${pathId(args)}/tickers`, {
|
|
9030
9417
|
query: pickQuery(args, QUERY_KEYS3)
|
|
9031
9418
|
})
|
|
9032
9419
|
);
|
|
9033
9420
|
};
|
|
9034
|
-
var get_rwas_tickers_default = { metadata:
|
|
9421
|
+
var get_rwas_tickers_default = { metadata: metadata96, tool: tool96, handler: handler96 };
|
|
9035
9422
|
|
|
9036
9423
|
// src/tools/rwas/get-rwas-market-chart.ts
|
|
9037
|
-
var
|
|
9424
|
+
var metadata97 = {
|
|
9038
9425
|
resource: "rwas.market_chart",
|
|
9039
9426
|
operation: "read",
|
|
9040
9427
|
tags: ["coingecko", "rwa", "tokenized", "stocks", "commodities", "etf", "chart", "historical"],
|
|
@@ -9043,7 +9430,7 @@ var metadata93 = {
|
|
|
9043
9430
|
operationId: "rwas-id-market-chart"
|
|
9044
9431
|
};
|
|
9045
9432
|
var QUERY_KEYS4 = ["days", "interval", "precision"];
|
|
9046
|
-
var
|
|
9433
|
+
var tool97 = {
|
|
9047
9434
|
name: "coingecko_get_rwa_market_chart",
|
|
9048
9435
|
description: `Get historical spot price, market cap, and volume series for one tokenized real-world asset (RWA) on CoinGecko: a tokenized stock, commodity, or ETF, aggregated across the tokens that wrap it. Requires a CoinGecko Basic plan or above.
|
|
9049
9436
|
|
|
@@ -9111,17 +9498,17 @@ Plan and freshness:
|
|
|
9111
9498
|
},
|
|
9112
9499
|
annotations: HISTORICAL_ANNOTATIONS
|
|
9113
9500
|
};
|
|
9114
|
-
var
|
|
9501
|
+
var handler97 = async (client2, args) => {
|
|
9115
9502
|
const query = pickQuery(args, QUERY_KEYS4);
|
|
9116
9503
|
if (query.days === void 0) query.days = "1";
|
|
9117
9504
|
return asTextContentResult(
|
|
9118
9505
|
await client2.get(`/rwas/${pathId(args)}/market_chart`, { query })
|
|
9119
9506
|
);
|
|
9120
9507
|
};
|
|
9121
|
-
var get_rwas_market_chart_default = { metadata:
|
|
9508
|
+
var get_rwas_market_chart_default = { metadata: metadata97, tool: tool97, handler: handler97 };
|
|
9122
9509
|
|
|
9123
9510
|
// src/tools/rwas/get-rwas-issuers.ts
|
|
9124
|
-
var
|
|
9511
|
+
var metadata98 = {
|
|
9125
9512
|
resource: "rwas.issuers",
|
|
9126
9513
|
operation: "read",
|
|
9127
9514
|
tags: ["coingecko", "rwa", "tokenized", "issuers", "list"],
|
|
@@ -9129,7 +9516,7 @@ var metadata94 = {
|
|
|
9129
9516
|
httpPath: "/rwas/issuers/list",
|
|
9130
9517
|
operationId: "rwas-issuers-list"
|
|
9131
9518
|
};
|
|
9132
|
-
var
|
|
9519
|
+
var tool98 = {
|
|
9133
9520
|
name: "coingecko_get_rwa_issuers",
|
|
9134
9521
|
description: `List every issuer of tokenized real-world assets (RWAs) that CoinGecko tracks with spot market data: the companies and protocols that mint tokenized stocks, commodities, and ETFs, such as Ondo, Backed, Paxos, Dinari, and Robinhood. Use it to resolve issuer IDs for coingecko_get_rwa_issuer and for the issuer filters on coingecko_get_rwa_markets and coingecko_get_rwa_tickers.
|
|
9135
9522
|
|
|
@@ -9167,13 +9554,13 @@ Plan and freshness:
|
|
|
9167
9554
|
},
|
|
9168
9555
|
annotations: READ_ONLY_ANNOTATIONS
|
|
9169
9556
|
};
|
|
9170
|
-
var
|
|
9557
|
+
var handler98 = async (client2, _args) => {
|
|
9171
9558
|
return asTextContentResult(await client2.get("/rwas/issuers/list"));
|
|
9172
9559
|
};
|
|
9173
|
-
var get_rwas_issuers_default = { metadata:
|
|
9560
|
+
var get_rwas_issuers_default = { metadata: metadata98, tool: tool98, handler: handler98 };
|
|
9174
9561
|
|
|
9175
9562
|
// src/tools/rwas/get-rwas-issuer.ts
|
|
9176
|
-
var
|
|
9563
|
+
var metadata99 = {
|
|
9177
9564
|
resource: "rwas.issuers",
|
|
9178
9565
|
operation: "read",
|
|
9179
9566
|
tags: ["coingecko", "rwa", "tokenized", "issuers", "details", "tokens"],
|
|
@@ -9181,7 +9568,7 @@ var metadata95 = {
|
|
|
9181
9568
|
httpPath: "/rwas/issuers/{id}",
|
|
9182
9569
|
operationId: "rwas-issuers-id"
|
|
9183
9570
|
};
|
|
9184
|
-
var
|
|
9571
|
+
var tool99 = {
|
|
9185
9572
|
name: "coingecko_get_rwa_issuer",
|
|
9186
9573
|
description: `Get one issuer of tokenized real-world assets (RWAs) from CoinGecko by ID, with its aggregated spot market cap and 24h volume across every tokenized stock, commodity, and ETF it has minted, plus the full token catalog with per-chain contract addresses.
|
|
9187
9574
|
|
|
@@ -9241,12 +9628,12 @@ Plan and freshness:
|
|
|
9241
9628
|
},
|
|
9242
9629
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
9243
9630
|
};
|
|
9244
|
-
var
|
|
9631
|
+
var handler99 = async (client2, args) => {
|
|
9245
9632
|
return asTextContentResult(
|
|
9246
9633
|
await client2.get(`/rwas/issuers/${pathId(args)}`)
|
|
9247
9634
|
);
|
|
9248
9635
|
};
|
|
9249
|
-
var get_rwas_issuer_default = { metadata:
|
|
9636
|
+
var get_rwas_issuer_default = { metadata: metadata99, tool: tool99, handler: handler99 };
|
|
9250
9637
|
|
|
9251
9638
|
// src/db/supabase.ts
|
|
9252
9639
|
import { createClient } from "@supabase/supabase-js";
|
|
@@ -9415,24 +9802,24 @@ var secureLogger = {
|
|
|
9415
9802
|
/**
|
|
9416
9803
|
* Log authentication events without exposing tokens
|
|
9417
9804
|
*/
|
|
9418
|
-
authEvent: (event, success,
|
|
9805
|
+
authEvent: (event, success, metadata104) => {
|
|
9419
9806
|
const logData = {
|
|
9420
9807
|
event,
|
|
9421
9808
|
success,
|
|
9422
9809
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
9423
|
-
...sanitizeObject(
|
|
9810
|
+
...sanitizeObject(metadata104 || {})
|
|
9424
9811
|
};
|
|
9425
9812
|
console.error(formatLogMessage("AUTH", event, logData));
|
|
9426
9813
|
},
|
|
9427
9814
|
/**
|
|
9428
9815
|
* Log MCP tool calls for analytics
|
|
9429
9816
|
*/
|
|
9430
|
-
toolCall: (toolName, success, durationMs,
|
|
9817
|
+
toolCall: (toolName, success, durationMs, metadata104) => {
|
|
9431
9818
|
const logData = {
|
|
9432
9819
|
tool: toolName,
|
|
9433
9820
|
success,
|
|
9434
9821
|
durationMs,
|
|
9435
|
-
...sanitizeObject(
|
|
9822
|
+
...sanitizeObject(metadata104 || {})
|
|
9436
9823
|
};
|
|
9437
9824
|
console.error(
|
|
9438
9825
|
formatLogMessage(
|
|
@@ -9445,12 +9832,12 @@ var secureLogger = {
|
|
|
9445
9832
|
/**
|
|
9446
9833
|
* Log request/response for debugging (sanitized)
|
|
9447
9834
|
*/
|
|
9448
|
-
request: (method, path, statusCode,
|
|
9835
|
+
request: (method, path, statusCode, metadata104) => {
|
|
9449
9836
|
const logData = {
|
|
9450
9837
|
method,
|
|
9451
9838
|
path,
|
|
9452
9839
|
statusCode,
|
|
9453
|
-
...sanitizeObject(
|
|
9840
|
+
...sanitizeObject(metadata104 || {})
|
|
9454
9841
|
};
|
|
9455
9842
|
console.error(formatLogMessage("REQUEST", `${method} ${path}`, logData));
|
|
9456
9843
|
}
|
|
@@ -10092,8 +10479,8 @@ function canonicalJson2(value) {
|
|
|
10092
10479
|
}
|
|
10093
10480
|
return JSON.stringify(value) ?? "null";
|
|
10094
10481
|
}
|
|
10095
|
-
function cleanMonitorMetadata(
|
|
10096
|
-
const cleaned = { ...
|
|
10482
|
+
function cleanMonitorMetadata(metadata104) {
|
|
10483
|
+
const cleaned = { ...metadata104 ?? {} };
|
|
10097
10484
|
delete cleaned.idempotency_key;
|
|
10098
10485
|
delete cleaned.idempotency_fingerprint;
|
|
10099
10486
|
delete cleaned.legacy_duplicate_idempotency_key;
|
|
@@ -10129,15 +10516,15 @@ function monitorCreateFingerprint(input) {
|
|
|
10129
10516
|
).digest("hex");
|
|
10130
10517
|
}
|
|
10131
10518
|
function existingMonitorFingerprint(existing) {
|
|
10132
|
-
const
|
|
10133
|
-
const stored =
|
|
10519
|
+
const metadata104 = existing.metadata ?? {};
|
|
10520
|
+
const stored = metadata104.idempotency_fingerprint;
|
|
10134
10521
|
if (typeof stored === "string" && /^[a-f0-9]{64}$/.test(stored)) {
|
|
10135
10522
|
return stored;
|
|
10136
10523
|
}
|
|
10137
10524
|
return monitorCreateFingerprint({
|
|
10138
10525
|
cadence: existing.cadence,
|
|
10139
10526
|
kind: existing.kind,
|
|
10140
|
-
metadata:
|
|
10527
|
+
metadata: metadata104,
|
|
10141
10528
|
name: existing.name,
|
|
10142
10529
|
nextRunAt: existing.next_run_at,
|
|
10143
10530
|
rules: existing.rules,
|
|
@@ -10907,7 +11294,7 @@ var hiveCreateMonitor = {
|
|
|
10907
11294
|
const target = parseMonitorTarget(args?.target);
|
|
10908
11295
|
const rules = parseMonitorRules(args?.rules);
|
|
10909
11296
|
const status = parseMonitorStatus(args?.status);
|
|
10910
|
-
const
|
|
11297
|
+
const metadata104 = parseMonitorMetadata(args?.metadata);
|
|
10911
11298
|
const name = stringArg(args, "name");
|
|
10912
11299
|
if (!name) {
|
|
10913
11300
|
return result(
|
|
@@ -10955,7 +11342,7 @@ var hiveCreateMonitor = {
|
|
|
10955
11342
|
"monitor"
|
|
10956
11343
|
);
|
|
10957
11344
|
}
|
|
10958
|
-
if (args?.metadata !== void 0 && !
|
|
11345
|
+
if (args?.metadata !== void 0 && !metadata104) {
|
|
10959
11346
|
return result(
|
|
10960
11347
|
{
|
|
10961
11348
|
ok: false,
|
|
@@ -10987,7 +11374,7 @@ var hiveCreateMonitor = {
|
|
|
10987
11374
|
cadence: stringArg(args, "cadence"),
|
|
10988
11375
|
status,
|
|
10989
11376
|
nextRunAt: stringArg(args, "next_run_at") ?? null,
|
|
10990
|
-
metadata:
|
|
11377
|
+
metadata: metadata104,
|
|
10991
11378
|
idempotencyKey
|
|
10992
11379
|
}),
|
|
10993
11380
|
"monitor"
|
|
@@ -11174,7 +11561,7 @@ var hiveUpdateMonitor = {
|
|
|
11174
11561
|
const status = parseMonitorStatus(args?.status);
|
|
11175
11562
|
const target = args?.target === void 0 ? void 0 : parseMonitorTarget(args?.target);
|
|
11176
11563
|
const rules = args?.rules === void 0 ? void 0 : parseMonitorRules(args?.rules);
|
|
11177
|
-
const
|
|
11564
|
+
const metadata104 = args?.metadata === void 0 ? void 0 : parseMonitorMetadata(args?.metadata);
|
|
11178
11565
|
if (args?.status !== void 0 && !status) {
|
|
11179
11566
|
return result(
|
|
11180
11567
|
{
|
|
@@ -11205,7 +11592,7 @@ var hiveUpdateMonitor = {
|
|
|
11205
11592
|
"monitor"
|
|
11206
11593
|
);
|
|
11207
11594
|
}
|
|
11208
|
-
if (args?.metadata !== void 0 && !
|
|
11595
|
+
if (args?.metadata !== void 0 && !metadata104) {
|
|
11209
11596
|
return result(
|
|
11210
11597
|
{
|
|
11211
11598
|
ok: false,
|
|
@@ -11226,7 +11613,7 @@ var hiveUpdateMonitor = {
|
|
|
11226
11613
|
rules,
|
|
11227
11614
|
cadence: stringArg(args, "cadence"),
|
|
11228
11615
|
nextRunAt: args?.next_run_at === void 0 ? void 0 : stringArg(args, "next_run_at") ?? null,
|
|
11229
|
-
metadata:
|
|
11616
|
+
metadata: metadata104
|
|
11230
11617
|
}),
|
|
11231
11618
|
"monitor"
|
|
11232
11619
|
);
|
|
@@ -12118,14 +12505,14 @@ function validateFeedbackInput(input) {
|
|
|
12118
12505
|
`Invalid arguments: message is ${message.length} characters; the limit is ${FEEDBACK_MAX_MESSAGE_CHARS}.`
|
|
12119
12506
|
);
|
|
12120
12507
|
}
|
|
12121
|
-
let
|
|
12508
|
+
let tool100 = null;
|
|
12122
12509
|
if (input.tool !== void 0 && input.tool !== null) {
|
|
12123
12510
|
if (typeof input.tool !== "string" || !isToolNameShaped(input.tool)) {
|
|
12124
12511
|
throw new FeedbackValidationError(
|
|
12125
12512
|
"Invalid arguments: tool must be a Hive tool name (lowercase letters, digits and underscores, 3 to 128 characters) or omitted."
|
|
12126
12513
|
);
|
|
12127
12514
|
}
|
|
12128
|
-
|
|
12515
|
+
tool100 = input.tool;
|
|
12129
12516
|
}
|
|
12130
12517
|
let receiptId = null;
|
|
12131
12518
|
if (input.receiptId !== void 0 && input.receiptId !== null) {
|
|
@@ -12136,7 +12523,7 @@ function validateFeedbackInput(input) {
|
|
|
12136
12523
|
}
|
|
12137
12524
|
receiptId = input.receiptId.toLowerCase();
|
|
12138
12525
|
}
|
|
12139
|
-
return { message: scrubFeedbackText(message), tool:
|
|
12526
|
+
return { message: scrubFeedbackText(message), tool: tool100, receiptId };
|
|
12140
12527
|
}
|
|
12141
12528
|
function withTimeout(promise, ms) {
|
|
12142
12529
|
return new Promise((resolve, reject) => {
|
|
@@ -12441,6 +12828,10 @@ function getAllEndpoints() {
|
|
|
12441
12828
|
list.push(get_total_supply_chart_default);
|
|
12442
12829
|
list.push(get_total_supply_chart_range_default);
|
|
12443
12830
|
list.push(get_insights_default);
|
|
12831
|
+
list.push(get_wallet_balances_default);
|
|
12832
|
+
list.push(get_wallet_pnl_default);
|
|
12833
|
+
list.push(get_wallet_trades_default);
|
|
12834
|
+
list.push(get_wallet_transfers_default);
|
|
12444
12835
|
list.push(get_rwas_list_default);
|
|
12445
12836
|
list.push(get_rwas_markets_default);
|
|
12446
12837
|
list.push(get_rwas_asset_default);
|
|
@@ -16647,6 +17038,30 @@ var wrapper = {
|
|
|
16647
17038
|
oldToolName: "coingecko_get_coin_insights"
|
|
16648
17039
|
}
|
|
16649
17040
|
},
|
|
17041
|
+
{
|
|
17042
|
+
tool: {
|
|
17043
|
+
name: "get_wallet_balances",
|
|
17044
|
+
oldToolName: "coingecko_get_onchain_wallet_balances"
|
|
17045
|
+
}
|
|
17046
|
+
},
|
|
17047
|
+
{
|
|
17048
|
+
tool: {
|
|
17049
|
+
name: "get_wallet_pnl",
|
|
17050
|
+
oldToolName: "coingecko_get_onchain_wallet_pnl"
|
|
17051
|
+
}
|
|
17052
|
+
},
|
|
17053
|
+
{
|
|
17054
|
+
tool: {
|
|
17055
|
+
name: "get_wallet_trades",
|
|
17056
|
+
oldToolName: "coingecko_get_onchain_wallet_trades"
|
|
17057
|
+
}
|
|
17058
|
+
},
|
|
17059
|
+
{
|
|
17060
|
+
tool: {
|
|
17061
|
+
name: "get_wallet_transfers",
|
|
17062
|
+
oldToolName: "coingecko_get_onchain_wallet_transfers"
|
|
17063
|
+
}
|
|
17064
|
+
},
|
|
16650
17065
|
{
|
|
16651
17066
|
tool: {
|
|
16652
17067
|
name: "get_token_lists",
|
|
@@ -18223,10 +18638,10 @@ function setupLogger() {
|
|
|
18223
18638
|
const consoleFormat = winston.format.combine(
|
|
18224
18639
|
winston.format.colorize(),
|
|
18225
18640
|
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
|
|
18226
|
-
winston.format.printf(({ timestamp, level, message, ...
|
|
18641
|
+
winston.format.printf(({ timestamp, level, message, ...metadata104 }) => {
|
|
18227
18642
|
let msg = `${timestamp} [${level}]: ${message}`;
|
|
18228
|
-
if (Object.keys(
|
|
18229
|
-
msg += ` ${JSON.stringify(
|
|
18643
|
+
if (Object.keys(metadata104).length > 0) {
|
|
18644
|
+
msg += ` ${JSON.stringify(metadata104)}`;
|
|
18230
18645
|
}
|
|
18231
18646
|
return msg;
|
|
18232
18647
|
})
|
|
@@ -26769,10 +27184,10 @@ function setupTools(apiClient) {
|
|
|
26769
27184
|
...derivativesVolumesTools(apiClient),
|
|
26770
27185
|
...metadataTools(apiClient)
|
|
26771
27186
|
];
|
|
26772
|
-
toolCategories.forEach((
|
|
26773
|
-
const execute =
|
|
26774
|
-
tools5[
|
|
26775
|
-
...
|
|
27187
|
+
toolCategories.forEach((tool100) => {
|
|
27188
|
+
const execute = tool100.execute.bind(tool100);
|
|
27189
|
+
tools5[tool100.name] = {
|
|
27190
|
+
...tool100,
|
|
26776
27191
|
execute: async (args) => normalizeMcpErrorResult(await execute(args))
|
|
26777
27192
|
};
|
|
26778
27193
|
});
|
|
@@ -30855,7 +31270,7 @@ var handlers2 = {
|
|
|
30855
31270
|
"ccxt_fetch_open_interest_multi"
|
|
30856
31271
|
)
|
|
30857
31272
|
};
|
|
30858
|
-
var
|
|
31273
|
+
var metadata100 = {
|
|
30859
31274
|
fetchMarkets: fetchMarketsMetadata,
|
|
30860
31275
|
fetchCurrencies: fetchCurrenciesMetadata,
|
|
30861
31276
|
fetchTicker: fetchTickerMetadata,
|
|
@@ -30971,8 +31386,8 @@ var CCXT_REQUIRED_BATCH_FILTERS = {
|
|
|
30971
31386
|
ccxt_fetch_borrow_rate_histories: "codes",
|
|
30972
31387
|
ccxt_fetch_all_greeks: "symbols"
|
|
30973
31388
|
};
|
|
30974
|
-
function withCcxtBounds(
|
|
30975
|
-
const schema =
|
|
31389
|
+
function withCcxtBounds(tool100) {
|
|
31390
|
+
const schema = tool100.inputSchema;
|
|
30976
31391
|
const properties = Object.fromEntries(
|
|
30977
31392
|
Object.entries(schema.properties || {}).map(
|
|
30978
31393
|
([name, rawProperty]) => {
|
|
@@ -30991,13 +31406,13 @@ function withCcxtBounds(tool96) {
|
|
|
30991
31406
|
)
|
|
30992
31407
|
);
|
|
30993
31408
|
const required = new Set(schema.required || []);
|
|
30994
|
-
const explicitFilter = CCXT_REQUIRED_BATCH_FILTERS[
|
|
31409
|
+
const explicitFilter = CCXT_REQUIRED_BATCH_FILTERS[tool100.name];
|
|
30995
31410
|
if (explicitFilter) required.add(explicitFilter);
|
|
30996
31411
|
return {
|
|
30997
|
-
...
|
|
30998
|
-
description: explicitFilter ? `${
|
|
31412
|
+
...tool100,
|
|
31413
|
+
description: explicitFilter ? `${tool100.description}
|
|
30999
31414
|
|
|
31000
|
-
Hive safety bound: ${explicitFilter} is required and accepts at most 100 entries; unbounded all-market reads are rejected.` :
|
|
31415
|
+
Hive safety bound: ${explicitFilter} is required and accepts at most 100 entries; unbounded all-market reads are rejected.` : tool100.description,
|
|
31001
31416
|
inputSchema: {
|
|
31002
31417
|
...schema,
|
|
31003
31418
|
type: "object",
|
|
@@ -31008,10 +31423,10 @@ Hive safety bound: ${explicitFilter} is required and accepts at most 100 entries
|
|
|
31008
31423
|
};
|
|
31009
31424
|
}
|
|
31010
31425
|
var tools = Object.fromEntries(
|
|
31011
|
-
Object.entries(rawTools).map(([key,
|
|
31426
|
+
Object.entries(rawTools).map(([key, tool100]) => [key, withCcxtBounds(tool100)])
|
|
31012
31427
|
);
|
|
31013
31428
|
var exportedHandlers = handlers2;
|
|
31014
|
-
var ccxt_default = { metadata:
|
|
31429
|
+
var ccxt_default = { metadata: metadata100, tools, handlers: exportedHandlers };
|
|
31015
31430
|
|
|
31016
31431
|
// src/tools/ccxt/index.ts
|
|
31017
31432
|
function getAllCCXTEndpoints() {
|
|
@@ -31852,7 +32267,7 @@ Use when:
|
|
|
31852
32267
|
- You need accurate gas estimation for a complex transaction
|
|
31853
32268
|
|
|
31854
32269
|
Don't use when:
|
|
31855
|
-
- You only need current token balances (use
|
|
32270
|
+
- You only need current token balances (use get_wallet_balances)
|
|
31856
32271
|
- You want historical transaction data (use moralis_get_wallet_history)
|
|
31857
32272
|
- You need token security analysis without simulation (use goplus_ tools)`,
|
|
31858
32273
|
inputSchema: {
|
|
@@ -31932,7 +32347,7 @@ function handleSimulateTransaction(clientParam, args) {
|
|
|
31932
32347
|
"Set TENDERLY_API_KEY, TENDERLY_ACCOUNT_SLUG, and TENDERLY_PROJECT_SLUG environment variables.",
|
|
31933
32348
|
[
|
|
31934
32349
|
"goplus_check_token_security \u2014 for token risk analysis without simulation",
|
|
31935
|
-
"
|
|
32350
|
+
"get_wallet_balances \u2014 for current wallet balances"
|
|
31936
32351
|
],
|
|
31937
32352
|
{
|
|
31938
32353
|
network_id: "1",
|
|
@@ -31971,7 +32386,7 @@ function handleSimulateTransaction(clientParam, args) {
|
|
|
31971
32386
|
"Check that network_id is valid, from/to are valid addresses, and input is properly hex-encoded.",
|
|
31972
32387
|
[
|
|
31973
32388
|
"goplus_check_token_security \u2014 for token risk analysis",
|
|
31974
|
-
"
|
|
32389
|
+
"get_wallet_balances \u2014 for current balances"
|
|
31975
32390
|
],
|
|
31976
32391
|
{
|
|
31977
32392
|
network_id: "1",
|
|
@@ -32512,7 +32927,7 @@ function handleGetBlockNumber(clientParam, args) {
|
|
|
32512
32927
|
);
|
|
32513
32928
|
}
|
|
32514
32929
|
function makeGatewayTool(key, name, method, description, properties, required, buildParams) {
|
|
32515
|
-
const
|
|
32930
|
+
const metadata104 = {
|
|
32516
32931
|
resource: `tenderly.gateway.${method}`,
|
|
32517
32932
|
operation: "read",
|
|
32518
32933
|
tags: ["blockchain", "evm", "tenderly", "gateway", "read"],
|
|
@@ -32520,7 +32935,7 @@ function makeGatewayTool(key, name, method, description, properties, required, b
|
|
|
32520
32935
|
httpPath: "/{network}.gateway.tenderly.co/{accessKey}",
|
|
32521
32936
|
operationId: `tenderly-${method.replace(/[A-Z]/g, (c) => `-${c.toLowerCase()}`)}`
|
|
32522
32937
|
};
|
|
32523
|
-
const
|
|
32938
|
+
const tool100 = {
|
|
32524
32939
|
name,
|
|
32525
32940
|
title: name.replace(/^tenderly_/, "").replace(/_/g, " ").replace(/\b\w/g, (character) => character.toUpperCase()),
|
|
32526
32941
|
description: `${description}
|
|
@@ -32547,7 +32962,7 @@ Requires TENDERLY_NODE_ACCESS_KEY (or TENDERLY_GATEWAY_ACCESS_KEY). This is a re
|
|
|
32547
32962
|
openWorldHint: true
|
|
32548
32963
|
}
|
|
32549
32964
|
};
|
|
32550
|
-
const
|
|
32965
|
+
const handler100 = async (clientParam, args = {}) => {
|
|
32551
32966
|
const client2 = resolveClient(clientParam);
|
|
32552
32967
|
if (!client2) {
|
|
32553
32968
|
return createErrorResponse3(
|
|
@@ -32577,7 +32992,7 @@ Requires TENDERLY_NODE_ACCESS_KEY (or TENDERLY_GATEWAY_ACCESS_KEY). This is a re
|
|
|
32577
32992
|
);
|
|
32578
32993
|
}
|
|
32579
32994
|
};
|
|
32580
|
-
return { key, tool:
|
|
32995
|
+
return { key, tool: tool100, metadata: metadata104, handler: handler100 };
|
|
32581
32996
|
}
|
|
32582
32997
|
var accessListProp = {
|
|
32583
32998
|
type: "array",
|
|
@@ -32984,7 +33399,7 @@ var gatewayDefinitions = [
|
|
|
32984
33399
|
}
|
|
32985
33400
|
)
|
|
32986
33401
|
];
|
|
32987
|
-
var
|
|
33402
|
+
var metadata101 = {
|
|
32988
33403
|
simulateTransaction: simulateTransactionMetadata2,
|
|
32989
33404
|
simulateBundle: simulateBundleMetadata,
|
|
32990
33405
|
estimateGas: estimateGasMetadata,
|
|
@@ -33011,7 +33426,7 @@ var handlers3 = {
|
|
|
33011
33426
|
getBlockNumber: handleGetBlockNumber,
|
|
33012
33427
|
...Object.fromEntries(gatewayDefinitions.map((definition) => [definition.key, definition.handler]))
|
|
33013
33428
|
};
|
|
33014
|
-
var tenderly_default = { metadata:
|
|
33429
|
+
var tenderly_default = { metadata: metadata101, tools: tools2, handlers: handlers3 };
|
|
33015
33430
|
|
|
33016
33431
|
// src/tools/tenderly/index.ts
|
|
33017
33432
|
function getAllTenderlyEndpoints() {
|
|
@@ -40404,7 +40819,7 @@ var newHandlers = {
|
|
|
40404
40819
|
}
|
|
40405
40820
|
}
|
|
40406
40821
|
};
|
|
40407
|
-
function currentMoralisDefinition(key, name, resource, httpMethod, httpPath, description, properties, required,
|
|
40822
|
+
function currentMoralisDefinition(key, name, resource, httpMethod, httpPath, description, properties, required, handler100) {
|
|
40408
40823
|
return {
|
|
40409
40824
|
key,
|
|
40410
40825
|
metadata: {
|
|
@@ -40432,7 +40847,7 @@ function currentMoralisDefinition(key, name, resource, httpMethod, httpPath, des
|
|
|
40432
40847
|
openWorldHint: true
|
|
40433
40848
|
}
|
|
40434
40849
|
},
|
|
40435
|
-
handler:
|
|
40850
|
+
handler: handler100
|
|
40436
40851
|
};
|
|
40437
40852
|
}
|
|
40438
40853
|
var currentMoralisDefinitions = [
|
|
@@ -40661,7 +41076,7 @@ var currentMoralisTools = Object.fromEntries(
|
|
|
40661
41076
|
var currentMoralisHandlers = Object.fromEntries(
|
|
40662
41077
|
currentMoralisDefinitions.map((definition) => [definition.key, definition.handler])
|
|
40663
41078
|
);
|
|
40664
|
-
var
|
|
41079
|
+
var metadata102 = {
|
|
40665
41080
|
...currentMoralisMetadata,
|
|
40666
41081
|
getTokenScoreTimeseries: getTokenScoreTimeseriesMeta,
|
|
40667
41082
|
getTokenAnalyticsTimeseries: getTokenAnalyticsTimeseriesMeta,
|
|
@@ -40931,8 +41346,8 @@ var MORALIS_ARRAY_LIMITS = {
|
|
|
40931
41346
|
getNativeBalancesBatch: { wallet_addresses: 25 },
|
|
40932
41347
|
getNftCollectionMetadataBatch: { addresses: 25 }
|
|
40933
41348
|
};
|
|
40934
|
-
function withMoralisBounds(key,
|
|
40935
|
-
const schema =
|
|
41349
|
+
function withMoralisBounds(key, tool100) {
|
|
41350
|
+
const schema = tool100.inputSchema;
|
|
40936
41351
|
const properties = Object.fromEntries(
|
|
40937
41352
|
Object.entries(schema.properties || {}).map(
|
|
40938
41353
|
([name, rawProperty]) => {
|
|
@@ -40951,7 +41366,7 @@ function withMoralisBounds(key, tool96) {
|
|
|
40951
41366
|
)
|
|
40952
41367
|
);
|
|
40953
41368
|
return {
|
|
40954
|
-
...
|
|
41369
|
+
...tool100,
|
|
40955
41370
|
inputSchema: {
|
|
40956
41371
|
...schema,
|
|
40957
41372
|
type: "object",
|
|
@@ -40961,7 +41376,7 @@ function withMoralisBounds(key, tool96) {
|
|
|
40961
41376
|
};
|
|
40962
41377
|
}
|
|
40963
41378
|
var activeMetadata = Object.fromEntries(
|
|
40964
|
-
activeMoralisKeys.map((key) => [key,
|
|
41379
|
+
activeMoralisKeys.map((key) => [key, metadata102[key]])
|
|
40965
41380
|
);
|
|
40966
41381
|
var activeTools = Object.fromEntries(
|
|
40967
41382
|
activeMoralisKeys.map((key) => [key, withMoralisBounds(String(key), tools3[key])])
|
|
@@ -41772,7 +42187,7 @@ Use when:
|
|
|
41772
42187
|
|
|
41773
42188
|
Don't use when:
|
|
41774
42189
|
- You need raw token account data only (use helius_get_token_balances \u2014 faster)
|
|
41775
|
-
- You need EVM wallet data (use
|
|
42190
|
+
- You need EVM wallet data (use get_wallet_balances or get_wallet_portfolio)`,
|
|
41776
42191
|
inputSchema: {
|
|
41777
42192
|
type: "object",
|
|
41778
42193
|
properties: {
|
|
@@ -44268,7 +44683,7 @@ function meta(resource, path, method) {
|
|
|
44268
44683
|
};
|
|
44269
44684
|
}
|
|
44270
44685
|
function dataPost(key, name, description, path, properties, bodyBuilder, required = [], schemaExtensions = {}) {
|
|
44271
|
-
const
|
|
44686
|
+
const tool100 = makeTool(
|
|
44272
44687
|
name,
|
|
44273
44688
|
description,
|
|
44274
44689
|
properties,
|
|
@@ -44278,7 +44693,7 @@ function dataPost(key, name, description, path, properties, bodyBuilder, require
|
|
|
44278
44693
|
);
|
|
44279
44694
|
return {
|
|
44280
44695
|
key,
|
|
44281
|
-
tool:
|
|
44696
|
+
tool: tool100,
|
|
44282
44697
|
metadata: meta(key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`), path, "post"),
|
|
44283
44698
|
handler: async (clientParam, args = {}) => {
|
|
44284
44699
|
const client2 = resolveClient4(clientParam);
|
|
@@ -44293,7 +44708,7 @@ function dataPost(key, name, description, path, properties, bodyBuilder, require
|
|
|
44293
44708
|
};
|
|
44294
44709
|
}
|
|
44295
44710
|
function dataGet(key, name, description, path, properties, queryBuilder, required = [], schemaExtensions = {}) {
|
|
44296
|
-
const
|
|
44711
|
+
const tool100 = makeTool(
|
|
44297
44712
|
name,
|
|
44298
44713
|
description,
|
|
44299
44714
|
properties,
|
|
@@ -44303,7 +44718,7 @@ function dataGet(key, name, description, path, properties, queryBuilder, require
|
|
|
44303
44718
|
);
|
|
44304
44719
|
return {
|
|
44305
44720
|
key,
|
|
44306
|
-
tool:
|
|
44721
|
+
tool: tool100,
|
|
44307
44722
|
metadata: meta(key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`), path, "get"),
|
|
44308
44723
|
handler: async (clientParam, args = {}) => {
|
|
44309
44724
|
const client2 = resolveClient4(clientParam);
|
|
@@ -44318,7 +44733,7 @@ function dataGet(key, name, description, path, properties, queryBuilder, require
|
|
|
44318
44733
|
};
|
|
44319
44734
|
}
|
|
44320
44735
|
function nftGet(key, name, description, path, properties, queryBuilder, required = [], annotations = volatileAnnotations3, schemaExtensions = {}) {
|
|
44321
|
-
const
|
|
44736
|
+
const tool100 = makeTool(
|
|
44322
44737
|
name,
|
|
44323
44738
|
description,
|
|
44324
44739
|
properties,
|
|
@@ -44328,7 +44743,7 @@ function nftGet(key, name, description, path, properties, queryBuilder, required
|
|
|
44328
44743
|
);
|
|
44329
44744
|
return {
|
|
44330
44745
|
key,
|
|
44331
|
-
tool:
|
|
44746
|
+
tool: tool100,
|
|
44332
44747
|
metadata: meta(`nft.${key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)}`, path, "get"),
|
|
44333
44748
|
handler: async (clientParam, args = {}) => {
|
|
44334
44749
|
const client2 = resolveClient4(clientParam);
|
|
@@ -44348,7 +44763,7 @@ function nftGet(key, name, description, path, properties, queryBuilder, required
|
|
|
44348
44763
|
};
|
|
44349
44764
|
}
|
|
44350
44765
|
function nftPost(key, name, description, path, properties, bodyBuilder, required = [], annotations = volatileAnnotations3, schemaExtensions = {}) {
|
|
44351
|
-
const
|
|
44766
|
+
const tool100 = makeTool(
|
|
44352
44767
|
name,
|
|
44353
44768
|
description,
|
|
44354
44769
|
properties,
|
|
@@ -44358,7 +44773,7 @@ function nftPost(key, name, description, path, properties, bodyBuilder, required
|
|
|
44358
44773
|
);
|
|
44359
44774
|
return {
|
|
44360
44775
|
key,
|
|
44361
|
-
tool:
|
|
44776
|
+
tool: tool100,
|
|
44362
44777
|
metadata: meta(`nft.${key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)}`, path, "post"),
|
|
44363
44778
|
handler: async (clientParam, args = {}) => {
|
|
44364
44779
|
const client2 = resolveClient4(clientParam);
|
|
@@ -44378,7 +44793,7 @@ function nftPost(key, name, description, path, properties, bodyBuilder, required
|
|
|
44378
44793
|
};
|
|
44379
44794
|
}
|
|
44380
44795
|
function rpcTool(key, name, description, method, properties, paramsBuilder, required = [], schemaExtensions = {}, defaultNetwork = "eth-mainnet") {
|
|
44381
|
-
const
|
|
44796
|
+
const tool100 = makeTool(
|
|
44382
44797
|
name,
|
|
44383
44798
|
description,
|
|
44384
44799
|
properties,
|
|
@@ -44388,7 +44803,7 @@ function rpcTool(key, name, description, method, properties, paramsBuilder, requ
|
|
|
44388
44803
|
);
|
|
44389
44804
|
return {
|
|
44390
44805
|
key,
|
|
44391
|
-
tool:
|
|
44806
|
+
tool: tool100,
|
|
44392
44807
|
metadata: meta(`rpc.${key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)}`, "/v2/{apiKey}", "post"),
|
|
44393
44808
|
handler: async (clientParam, args = {}) => {
|
|
44394
44809
|
const client2 = resolveClient4(clientParam);
|
|
@@ -46162,8 +46577,8 @@ var ALCHEMY_ARRAY_LIMITS = {
|
|
|
46162
46577
|
networks: 20,
|
|
46163
46578
|
category: 10
|
|
46164
46579
|
};
|
|
46165
|
-
function withAlchemyBounds(
|
|
46166
|
-
const schema =
|
|
46580
|
+
function withAlchemyBounds(tool100) {
|
|
46581
|
+
const schema = tool100.inputSchema;
|
|
46167
46582
|
const properties = Object.fromEntries(
|
|
46168
46583
|
Object.entries(schema.properties || {}).map(
|
|
46169
46584
|
([name, rawProperty]) => {
|
|
@@ -46185,20 +46600,20 @@ function withAlchemyBounds(tool96) {
|
|
|
46185
46600
|
}
|
|
46186
46601
|
)
|
|
46187
46602
|
);
|
|
46188
|
-
return { ...
|
|
46603
|
+
return { ...tool100, inputSchema: { ...schema, properties } };
|
|
46189
46604
|
}
|
|
46190
46605
|
var activeDefinitions = definitions.map((definition) => ({
|
|
46191
46606
|
...definition,
|
|
46192
46607
|
tool: withAlchemyBounds(definition.tool)
|
|
46193
46608
|
}));
|
|
46194
|
-
var
|
|
46609
|
+
var metadata103 = Object.fromEntries(
|
|
46195
46610
|
activeDefinitions.map((d) => [d.key, d.metadata])
|
|
46196
46611
|
);
|
|
46197
46612
|
var tools4 = Object.fromEntries(activeDefinitions.map((d) => [d.key, d.tool]));
|
|
46198
46613
|
var handlers5 = Object.fromEntries(
|
|
46199
46614
|
activeDefinitions.map((d) => [d.key, d.handler])
|
|
46200
46615
|
);
|
|
46201
|
-
var alchemy_default = { metadata:
|
|
46616
|
+
var alchemy_default = { metadata: metadata103, tools: tools4, handlers: handlers5 };
|
|
46202
46617
|
|
|
46203
46618
|
// src/tools/alchemy/index.ts
|
|
46204
46619
|
function getAllAlchemyEndpoints() {
|
|
@@ -46574,17 +46989,17 @@ var HEADROOM_TOOL_PATTERNS = [
|
|
|
46574
46989
|
function toolNeedsResponseHeadroom(toolName) {
|
|
46575
46990
|
return HEADROOM_TOOL_PATTERNS.some((pattern) => pattern.test(toolName));
|
|
46576
46991
|
}
|
|
46577
|
-
function getAnnotatedMaxResultSizeChars(
|
|
46578
|
-
const meta2 =
|
|
46992
|
+
function getAnnotatedMaxResultSizeChars(tool100) {
|
|
46993
|
+
const meta2 = tool100?._meta;
|
|
46579
46994
|
const value = meta2?.[MAX_RESULT_SIZE_META_KEY];
|
|
46580
46995
|
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : null;
|
|
46581
46996
|
}
|
|
46582
|
-
function withResponseHeadroomMeta(
|
|
46583
|
-
if (!toolNeedsResponseHeadroom(
|
|
46584
|
-
const existing =
|
|
46585
|
-
if (existing && existing[MAX_RESULT_SIZE_META_KEY] !== void 0) return
|
|
46997
|
+
function withResponseHeadroomMeta(tool100) {
|
|
46998
|
+
if (!toolNeedsResponseHeadroom(tool100.name)) return tool100;
|
|
46999
|
+
const existing = tool100._meta;
|
|
47000
|
+
if (existing && existing[MAX_RESULT_SIZE_META_KEY] !== void 0) return tool100;
|
|
46586
47001
|
return {
|
|
46587
|
-
...
|
|
47002
|
+
...tool100,
|
|
46588
47003
|
_meta: {
|
|
46589
47004
|
...existing ?? {},
|
|
46590
47005
|
[MAX_RESULT_SIZE_META_KEY]: ANNOTATED_MAX_RESULT_SIZE_CHARS
|
|
@@ -49515,13 +49930,13 @@ function historyInputSchema(baseCoinDescription) {
|
|
|
49515
49930
|
required: ["base_coin"]
|
|
49516
49931
|
};
|
|
49517
49932
|
}
|
|
49518
|
-
function errorResult2(
|
|
49933
|
+
function errorResult2(tool100, error) {
|
|
49519
49934
|
if (error instanceof ArchiveInputError) {
|
|
49520
49935
|
return asTextContentResult(
|
|
49521
49936
|
{
|
|
49522
49937
|
error: error.message,
|
|
49523
49938
|
runtime_status: "invalid_input",
|
|
49524
|
-
tool:
|
|
49939
|
+
tool: tool100
|
|
49525
49940
|
},
|
|
49526
49941
|
true
|
|
49527
49942
|
);
|
|
@@ -49531,17 +49946,17 @@ function errorResult2(tool96, error) {
|
|
|
49531
49946
|
{
|
|
49532
49947
|
error: message,
|
|
49533
49948
|
runtime_status: classifyRuntimeStatusFromError(message),
|
|
49534
|
-
tool:
|
|
49949
|
+
tool: tool100
|
|
49535
49950
|
},
|
|
49536
49951
|
true
|
|
49537
49952
|
);
|
|
49538
49953
|
}
|
|
49539
|
-
function missingCredentialsResult(
|
|
49954
|
+
function missingCredentialsResult(tool100) {
|
|
49540
49955
|
return asTextContentResult(
|
|
49541
49956
|
{
|
|
49542
49957
|
error: ARCHIVE_MISSING_CREDENTIALS_MESSAGE,
|
|
49543
49958
|
runtime_status: "missing_key",
|
|
49544
|
-
tool:
|
|
49959
|
+
tool: tool100
|
|
49545
49960
|
},
|
|
49546
49961
|
true
|
|
49547
49962
|
);
|
|
@@ -50608,13 +51023,13 @@ function okResult(sourceUrl, body) {
|
|
|
50608
51023
|
may_have_more
|
|
50609
51024
|
});
|
|
50610
51025
|
}
|
|
50611
|
-
function errorResult3(
|
|
51026
|
+
function errorResult3(tool100, error) {
|
|
50612
51027
|
if (error instanceof PolymarketInputError) {
|
|
50613
51028
|
return asTextContentResult(
|
|
50614
51029
|
{
|
|
50615
51030
|
error: error.message,
|
|
50616
51031
|
runtime_status: "invalid_input",
|
|
50617
|
-
tool:
|
|
51032
|
+
tool: tool100
|
|
50618
51033
|
},
|
|
50619
51034
|
true
|
|
50620
51035
|
);
|
|
@@ -50624,7 +51039,7 @@ function errorResult3(tool96, error) {
|
|
|
50624
51039
|
{
|
|
50625
51040
|
error: message,
|
|
50626
51041
|
runtime_status: classifyRuntimeStatusFromError(message),
|
|
50627
|
-
tool:
|
|
51042
|
+
tool: tool100
|
|
50628
51043
|
},
|
|
50629
51044
|
true
|
|
50630
51045
|
);
|
|
@@ -52123,10 +52538,10 @@ async function fetchHackRows() {
|
|
|
52123
52538
|
}
|
|
52124
52539
|
|
|
52125
52540
|
// src/tools/signals/tools.ts
|
|
52126
|
-
function errorResult4(
|
|
52541
|
+
function errorResult4(tool100, error, extra = {}) {
|
|
52127
52542
|
if (error instanceof SignalsInputError) {
|
|
52128
52543
|
return asTextContentResult(
|
|
52129
|
-
{ error: error.message, runtime_status: "invalid_input", tool:
|
|
52544
|
+
{ error: error.message, runtime_status: "invalid_input", tool: tool100, ...extra },
|
|
52130
52545
|
true
|
|
52131
52546
|
);
|
|
52132
52547
|
}
|
|
@@ -52135,7 +52550,7 @@ function errorResult4(tool96, error, extra = {}) {
|
|
|
52135
52550
|
{
|
|
52136
52551
|
error: message,
|
|
52137
52552
|
runtime_status: classifyRuntimeStatusFromError(message),
|
|
52138
|
-
tool:
|
|
52553
|
+
tool: tool100,
|
|
52139
52554
|
...extra
|
|
52140
52555
|
},
|
|
52141
52556
|
true
|
|
@@ -54079,7 +54494,7 @@ var SCHEMA_PATTERNS = [
|
|
|
54079
54494
|
TOKEN_DILIGENCE_OUTPUT_SCHEMA
|
|
54080
54495
|
],
|
|
54081
54496
|
[
|
|
54082
|
-
/^(alchemy_get_tokens_by_wallet|alchemy_get_token_balances_by_wallet|alchemy_get_native_balance|alchemy_get_asset_transfers|moralis_get_wallet_history|moralis_get_wallet_profitability|moralis_get_wallet_profitability_summary|moralis_get_wallet_pnl|moralis_get_wallet_pnl_summary|moralis_get_wallet_defi_positions|moralis_get_wallet_defi_summary|moralis_get_wallet_insight|helius_get_wallet_balances|helius_get_wallet_history|helius_get_wallet_transfers|get_wallet_balances|get_wallet_stats|get_wallet_chart)$/,
|
|
54497
|
+
/^(get_wallet_balances|get_wallet_pnl|get_wallet_trades|get_wallet_transfers|alchemy_get_tokens_by_wallet|alchemy_get_token_balances_by_wallet|alchemy_get_native_balance|alchemy_get_asset_transfers|moralis_get_wallet_history|moralis_get_wallet_profitability|moralis_get_wallet_profitability_summary|moralis_get_wallet_pnl|moralis_get_wallet_pnl_summary|moralis_get_wallet_defi_positions|moralis_get_wallet_defi_summary|moralis_get_wallet_insight|helius_get_wallet_balances|helius_get_wallet_history|helius_get_wallet_transfers|get_wallet_balances|get_wallet_stats|get_wallet_chart)$/,
|
|
54083
54498
|
WALLET_INVESTIGATION_OUTPUT_SCHEMA
|
|
54084
54499
|
],
|
|
54085
54500
|
[
|
|
@@ -54601,11 +55016,11 @@ var TENDERLY_REST_TOOLS = /* @__PURE__ */ new Set([
|
|
|
54601
55016
|
"tenderly_estimate_gas",
|
|
54602
55017
|
"tenderly_decode_calldata"
|
|
54603
55018
|
]);
|
|
54604
|
-
function matchesProvider(provider, toolName,
|
|
55019
|
+
function matchesProvider(provider, toolName, metadata104) {
|
|
54605
55020
|
const normalizedProvider = provider.toLowerCase();
|
|
54606
55021
|
const normalizedToolName = toolName.toLowerCase();
|
|
54607
|
-
const resource =
|
|
54608
|
-
const tags =
|
|
55022
|
+
const resource = metadata104.resource.toLowerCase();
|
|
55023
|
+
const tags = metadata104.tags.map((tag) => tag.toLowerCase());
|
|
54609
55024
|
return normalizedToolName.startsWith(`${normalizedProvider}_`) || normalizedToolName.includes(`_${normalizedProvider}_`) || resource.startsWith(normalizedProvider) || resource.includes(`${normalizedProvider}.`) || tags.includes(normalizedProvider);
|
|
54610
55025
|
}
|
|
54611
55026
|
var PROVIDER_CATALOG = [
|
|
@@ -54616,7 +55031,7 @@ var PROVIDER_CATALOG = [
|
|
|
54616
55031
|
type: "MCP discovery and compatibility tools",
|
|
54617
55032
|
clientStrategy: "hive",
|
|
54618
55033
|
alwaysAvailable: true,
|
|
54619
|
-
matches: (toolName,
|
|
55034
|
+
matches: (toolName, metadata104) => toolName.startsWith("hive_") || metadata104.resource === "dynamic_tools" || metadata104.tags.includes("hive")
|
|
54620
55035
|
},
|
|
54621
55036
|
{
|
|
54622
55037
|
id: "coingecko",
|
|
@@ -54625,7 +55040,7 @@ var PROVIDER_CATALOG = [
|
|
|
54625
55040
|
type: "Market data, prices, and metadata",
|
|
54626
55041
|
clientStrategy: "shared-coingecko",
|
|
54627
55042
|
alwaysAvailable: true,
|
|
54628
|
-
matches: (toolName,
|
|
55043
|
+
matches: (toolName, metadata104) => matchesProvider("coingecko", toolName, metadata104)
|
|
54629
55044
|
},
|
|
54630
55045
|
{
|
|
54631
55046
|
id: "goplus",
|
|
@@ -54637,7 +55052,7 @@ var PROVIDER_CATALOG = [
|
|
|
54637
55052
|
label: "GOPLUS_APP_KEY or GOPLUS_API_KEY, plus GOPLUS_APP_SECRET",
|
|
54638
55053
|
isConfigured: () => hasAnyEnvVar("GOPLUS_APP_KEY", "GOPLUS_API_KEY") && hasEnvVar("GOPLUS_APP_SECRET")
|
|
54639
55054
|
},
|
|
54640
|
-
matches: (toolName,
|
|
55055
|
+
matches: (toolName, metadata104) => matchesProvider("goplus", toolName, metadata104)
|
|
54641
55056
|
},
|
|
54642
55057
|
{
|
|
54643
55058
|
id: "ccxt",
|
|
@@ -54646,7 +55061,7 @@ var PROVIDER_CATALOG = [
|
|
|
54646
55061
|
type: "Centralized exchange market data and trading metadata",
|
|
54647
55062
|
clientStrategy: "shared-ccxt",
|
|
54648
55063
|
alwaysAvailable: true,
|
|
54649
|
-
matches: (toolName,
|
|
55064
|
+
matches: (toolName, metadata104) => matchesProvider("ccxt", toolName, metadata104)
|
|
54650
55065
|
},
|
|
54651
55066
|
{
|
|
54652
55067
|
id: "defillama",
|
|
@@ -54655,7 +55070,7 @@ var PROVIDER_CATALOG = [
|
|
|
54655
55070
|
type: "TVL, protocol analytics, yields, and bridge data",
|
|
54656
55071
|
clientStrategy: "internal",
|
|
54657
55072
|
alwaysAvailable: true,
|
|
54658
|
-
matches: (toolName,
|
|
55073
|
+
matches: (toolName, metadata104) => matchesProvider("defillama", toolName, metadata104)
|
|
54659
55074
|
},
|
|
54660
55075
|
{
|
|
54661
55076
|
// Listed BEFORE hyperliquid: rwa_get_hyperliquid_dex_perps contains the
|
|
@@ -54667,7 +55082,7 @@ var PROVIDER_CATALOG = [
|
|
|
54667
55082
|
type: "Tokenized real-world-asset perps: cross-venue funding, markets, and open interest across Hyperliquid HIP-3 builder dexes, Ostium, Avantis, Lighter, and Extended (keyless official APIs)",
|
|
54668
55083
|
clientStrategy: "internal",
|
|
54669
55084
|
alwaysAvailable: true,
|
|
54670
|
-
matches: (toolName,
|
|
55085
|
+
matches: (toolName, metadata104) => matchesProvider("rwa", toolName, metadata104)
|
|
54671
55086
|
},
|
|
54672
55087
|
{
|
|
54673
55088
|
id: "hyperliquid",
|
|
@@ -54676,7 +55091,7 @@ var PROVIDER_CATALOG = [
|
|
|
54676
55091
|
type: "Hyperliquid perpetual DEX: per-pair volume, funding, open interest, and builder DEXs (tokenized-stock perps)",
|
|
54677
55092
|
clientStrategy: "internal",
|
|
54678
55093
|
alwaysAvailable: true,
|
|
54679
|
-
matches: (toolName,
|
|
55094
|
+
matches: (toolName, metadata104) => matchesProvider("hyperliquid", toolName, metadata104)
|
|
54680
55095
|
},
|
|
54681
55096
|
{
|
|
54682
55097
|
// The Hive-native hive_archive_monitor tool contains the "_archive_"
|
|
@@ -54694,7 +55109,7 @@ var PROVIDER_CATALOG = [
|
|
|
54694
55109
|
"SHARPE_ARCHIVE_SUPABASE_SERVICE_ROLE_KEY"
|
|
54695
55110
|
)
|
|
54696
55111
|
},
|
|
54697
|
-
matches: (toolName,
|
|
55112
|
+
matches: (toolName, metadata104) => matchesProvider("archive", toolName, metadata104)
|
|
54698
55113
|
},
|
|
54699
55114
|
{
|
|
54700
55115
|
id: "polymarket",
|
|
@@ -54703,7 +55118,7 @@ var PROVIDER_CATALOG = [
|
|
|
54703
55118
|
type: "Polymarket prediction markets: market and event search, market-implied odds, CLOB order books and price history, per-wallet positions and activity (keyless public Gamma, CLOB and Data APIs)",
|
|
54704
55119
|
clientStrategy: "internal",
|
|
54705
55120
|
alwaysAvailable: true,
|
|
54706
|
-
matches: (toolName,
|
|
55121
|
+
matches: (toolName, metadata104) => matchesProvider("polymarket", toolName, metadata104)
|
|
54707
55122
|
},
|
|
54708
55123
|
{
|
|
54709
55124
|
id: "alternative",
|
|
@@ -54712,7 +55127,7 @@ var PROVIDER_CATALOG = [
|
|
|
54712
55127
|
type: "Crypto Fear & Greed Index: daily market-wide sentiment composite since 2018 (keyless)",
|
|
54713
55128
|
clientStrategy: "internal",
|
|
54714
55129
|
alwaysAvailable: true,
|
|
54715
|
-
matches: (_toolName,
|
|
55130
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("alternative-me")
|
|
54716
55131
|
},
|
|
54717
55132
|
{
|
|
54718
55133
|
id: "blockchain",
|
|
@@ -54721,7 +55136,7 @@ var PROVIDER_CATALOG = [
|
|
|
54721
55136
|
type: "Bitcoin on-chain charts: hash rate, active addresses, transaction count, market price, difficulty, fees, miner revenue (keyless)",
|
|
54722
55137
|
clientStrategy: "internal",
|
|
54723
55138
|
alwaysAvailable: true,
|
|
54724
|
-
matches: (_toolName,
|
|
55139
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("blockchain-com")
|
|
54725
55140
|
},
|
|
54726
55141
|
{
|
|
54727
55142
|
id: "blockscout",
|
|
@@ -54730,7 +55145,7 @@ var PROVIDER_CATALOG = [
|
|
|
54730
55145
|
type: "EVM token holder lists and counts from Blockscout explorers (keyless public API; BLOCKSCOUT_API_KEY switches to the PRO API)",
|
|
54731
55146
|
clientStrategy: "internal",
|
|
54732
55147
|
alwaysAvailable: true,
|
|
54733
|
-
matches: (_toolName,
|
|
55148
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("blockscout")
|
|
54734
55149
|
},
|
|
54735
55150
|
{
|
|
54736
55151
|
id: "fetch",
|
|
@@ -54739,7 +55154,7 @@ var PROVIDER_CATALOG = [
|
|
|
54739
55154
|
type: "Allowlisted fetch of long-tail public crypto APIs (the escape hatch when no typed tool covers a source)",
|
|
54740
55155
|
clientStrategy: "internal",
|
|
54741
55156
|
alwaysAvailable: true,
|
|
54742
|
-
matches: (toolName,
|
|
55157
|
+
matches: (toolName, metadata104) => matchesProvider("fetch", toolName, metadata104)
|
|
54743
55158
|
},
|
|
54744
55159
|
{
|
|
54745
55160
|
id: "tenderly",
|
|
@@ -54751,7 +55166,7 @@ var PROVIDER_CATALOG = [
|
|
|
54751
55166
|
label: "Tenderly REST credentials or TENDERLY_NODE_ACCESS_KEY/TENDERLY_GATEWAY_ACCESS_KEY",
|
|
54752
55167
|
isConfigured: () => hasTenderlyRestCredentials() || hasTenderlyNodeCredentials()
|
|
54753
55168
|
},
|
|
54754
|
-
matches: (toolName,
|
|
55169
|
+
matches: (toolName, metadata104) => matchesProvider("tenderly", toolName, metadata104)
|
|
54755
55170
|
},
|
|
54756
55171
|
{
|
|
54757
55172
|
id: "moralis",
|
|
@@ -54763,7 +55178,7 @@ var PROVIDER_CATALOG = [
|
|
|
54763
55178
|
label: "MORALIS_API_KEY",
|
|
54764
55179
|
isConfigured: () => hasEnvVar("MORALIS_API_KEY")
|
|
54765
55180
|
},
|
|
54766
|
-
matches: (toolName,
|
|
55181
|
+
matches: (toolName, metadata104) => matchesProvider("moralis", toolName, metadata104)
|
|
54767
55182
|
},
|
|
54768
55183
|
{
|
|
54769
55184
|
id: "helius",
|
|
@@ -54775,7 +55190,7 @@ var PROVIDER_CATALOG = [
|
|
|
54775
55190
|
label: "HELIUS_API_KEY",
|
|
54776
55191
|
isConfigured: () => hasEnvVar("HELIUS_API_KEY")
|
|
54777
55192
|
},
|
|
54778
|
-
matches: (toolName,
|
|
55193
|
+
matches: (toolName, metadata104) => matchesProvider("helius", toolName, metadata104)
|
|
54779
55194
|
},
|
|
54780
55195
|
{
|
|
54781
55196
|
id: "alchemy",
|
|
@@ -54787,11 +55202,11 @@ var PROVIDER_CATALOG = [
|
|
|
54787
55202
|
label: "ALCHEMY_API_KEY",
|
|
54788
55203
|
isConfigured: () => hasEnvVar("ALCHEMY_API_KEY")
|
|
54789
55204
|
},
|
|
54790
|
-
matches: (toolName,
|
|
55205
|
+
matches: (toolName, metadata104) => matchesProvider("alchemy", toolName, metadata104)
|
|
54791
55206
|
}
|
|
54792
55207
|
];
|
|
54793
|
-
function getProviderDescriptorForTool(toolName,
|
|
54794
|
-
return PROVIDER_CATALOG.find((provider) => provider.matches(toolName,
|
|
55208
|
+
function getProviderDescriptorForTool(toolName, metadata104) {
|
|
55209
|
+
return PROVIDER_CATALOG.find((provider) => provider.matches(toolName, metadata104)) ?? UNKNOWN_PROVIDER_DESCRIPTOR;
|
|
54795
55210
|
}
|
|
54796
55211
|
function getProviderDescriptorForEndpoint(endpoint) {
|
|
54797
55212
|
return getProviderDescriptorForTool(endpoint.tool.name, endpoint.metadata);
|
|
@@ -54820,7 +55235,7 @@ function getProviderStatusCatalog() {
|
|
|
54820
55235
|
})
|
|
54821
55236
|
);
|
|
54822
55237
|
}
|
|
54823
|
-
function getCredentialRequirementForTool(toolName,
|
|
55238
|
+
function getCredentialRequirementForTool(toolName, metadata104) {
|
|
54824
55239
|
if (toolName === "tenderly_get_supported_networks" || toolName === "tenderly_get_block_number") {
|
|
54825
55240
|
return null;
|
|
54826
55241
|
}
|
|
@@ -54833,7 +55248,7 @@ function getCredentialRequirementForTool(toolName, metadata100) {
|
|
|
54833
55248
|
isConfigured: hasTenderlyNodeCredentials
|
|
54834
55249
|
};
|
|
54835
55250
|
}
|
|
54836
|
-
return getProviderDescriptorForTool(toolName,
|
|
55251
|
+
return getProviderDescriptorForTool(toolName, metadata104).credentialRequirement ?? null;
|
|
54837
55252
|
}
|
|
54838
55253
|
|
|
54839
55254
|
// src/mcpInvokers.ts
|
|
@@ -54864,14 +55279,14 @@ var RESPONSE_FORMAT_SCHEMA = {
|
|
|
54864
55279
|
enum: ["json", "markdown"],
|
|
54865
55280
|
description: "Output format: 'json' for structured data (default) or 'markdown' for human-readable text."
|
|
54866
55281
|
};
|
|
54867
|
-
function normalizeToolSchema(
|
|
55282
|
+
function normalizeToolSchema(tool100) {
|
|
54868
55283
|
const normalized = {
|
|
54869
|
-
...
|
|
54870
|
-
inputSchema:
|
|
54871
|
-
title:
|
|
55284
|
+
...tool100,
|
|
55285
|
+
inputSchema: tool100.inputSchema ? JSON.parse(JSON.stringify(tool100.inputSchema)) : tool100.inputSchema,
|
|
55286
|
+
title: tool100.title ?? getToolTitle(tool100.name),
|
|
54872
55287
|
annotations: {
|
|
54873
|
-
...getAnnotationsForTool(
|
|
54874
|
-
...
|
|
55288
|
+
...getAnnotationsForTool(tool100.name),
|
|
55289
|
+
...tool100.annotations ?? {}
|
|
54875
55290
|
}
|
|
54876
55291
|
};
|
|
54877
55292
|
if (normalized.inputSchema && typeof normalized.inputSchema === "object" && normalized.inputSchema.type === "object") {
|
|
@@ -54898,20 +55313,19 @@ function normalizeEndpointSchema(endpoint) {
|
|
|
54898
55313
|
var RETIRED_TOOLS_DATE = "2026-09-06";
|
|
54899
55314
|
var RETIRED_TOOL_REPLACEMENTS = {
|
|
54900
55315
|
// wallet
|
|
54901
|
-
codex_filter_wallets_by_network: "Use
|
|
54902
|
-
codex_get_wallet_aggregate_backfill_state: "Use
|
|
54903
|
-
codex_get_wallet_label_types: "Use
|
|
54904
|
-
filter_network_wallets: "Use
|
|
54905
|
-
filter_token_wallets: "Use
|
|
54906
|
-
filter_wallets: "Use
|
|
54907
|
-
|
|
54908
|
-
|
|
54909
|
-
|
|
54910
|
-
get_wallet_token_events: "Use alchemy_get_token_balances_by_wallet, alchemy_get_asset_transfers, or moralis_get_wallet_profitability_summary for wallet balances, transfers, and PnL.",
|
|
55316
|
+
codex_filter_wallets_by_network: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55317
|
+
codex_get_wallet_aggregate_backfill_state: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55318
|
+
codex_get_wallet_label_types: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55319
|
+
filter_network_wallets: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55320
|
+
filter_token_wallets: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55321
|
+
filter_wallets: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55322
|
+
get_wallet_chart: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55323
|
+
get_wallet_stats: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55324
|
+
get_wallet_token_events: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
54911
55325
|
// holders
|
|
54912
|
-
get_token_holders: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders
|
|
54913
|
-
get_token_top_traders: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders
|
|
54914
|
-
get_top_holders_percentage: "Use get_token_top_holders for holders on any network, coingecko_get_onchain_token_top_traders for traders
|
|
55326
|
+
get_token_holders: "Use get_token_top_holders for holders on any network, or coingecko_get_onchain_token_top_traders for traders (tokens created after 2023-09-01; not wrapped native tokens or stablecoins).",
|
|
55327
|
+
get_token_top_traders: "Use get_token_top_holders for holders on any network, or coingecko_get_onchain_token_top_traders for traders (tokens created after 2023-09-01; not wrapped native tokens or stablecoins).",
|
|
55328
|
+
get_top_holders_percentage: "Use get_token_top_holders for holders on any network, or coingecko_get_onchain_token_top_traders for traders (tokens created after 2023-09-01; not wrapped native tokens or stablecoins).",
|
|
54915
55329
|
// pairs
|
|
54916
55330
|
codex_get_detailed_token_stats: "Use get_token_pools, get_pool_info, get_pools_by_address, moralis_get_pair_stats, or get_new_pools for pool and pair data.",
|
|
54917
55331
|
codex_get_windowed_pair_stats: "Use get_token_pools, get_pool_info, get_pools_by_address, moralis_get_pair_stats, or get_new_pools for pool and pair data.",
|
|
@@ -54972,6 +55386,9 @@ var ALCHEMY_PAYG = "because Alchemy offers it only on Pay As You Go and Enterpri
|
|
|
54972
55386
|
var ALCHEMY_BUNDLE_REPLACEMENT = "Use tenderly_simulate_bundle or tenderly_node_simulate_bundle for multi-transaction simulation.";
|
|
54973
55387
|
var ALCHEMY_SIMULATION_SUNSET = 'because Alchemy shut down its Transaction Simulation API on 2026-09-30 and now answers "Unsupported method" on every plan';
|
|
54974
55388
|
var ALCHEMY_SIMULATION_REPLACEMENT = "Use tenderly_simulate_transaction or tenderly_node_simulate_transaction; both return the execution trace, logs, and asset and balance changes without broadcasting.";
|
|
55389
|
+
var MORALIS_PAUSED = "because Hive's Moralis account is paused and will not be renewed";
|
|
55390
|
+
var MORALIS_BALANCES_REPLACEMENT = "Use get_wallet_balances for priced EVM balances across chains.";
|
|
55391
|
+
var MORALIS_PNL_REPLACEMENT = "Use get_wallet_pnl for realized and unrealized PnL per wallet and per token.";
|
|
54975
55392
|
var CCXT_PRIVATE = "because every exchange that serves it requires an authenticated exchange account";
|
|
54976
55393
|
var CCXT_BORROW_REPLACEMENT = "Use ccxt_fetch_borrow_rate_history or ccxt_fetch_borrow_rate_histories (public) and read the latest point.";
|
|
54977
55394
|
var UNSERVABLE_TOOLS = {
|
|
@@ -54991,10 +55408,6 @@ var UNSERVABLE_TOOLS = {
|
|
|
54991
55408
|
reason: COINGECKO_ENTERPRISE,
|
|
54992
55409
|
replacement: COINGECKO_SUPPLY_REPLACEMENT
|
|
54993
55410
|
},
|
|
54994
|
-
get_coin_insights: {
|
|
54995
|
-
reason: COINGECKO_ENTERPRISE,
|
|
54996
|
-
replacement: "No direct replacement; use get_coins_market_data and get_coin_tickers for the market facts behind an insight."
|
|
54997
|
-
},
|
|
54998
55411
|
helius_get_wallet_identity: {
|
|
54999
55412
|
reason: HELIUS_WALLET_PLAN,
|
|
55000
55413
|
replacement: "No other wallet-identity source is live on Hive's plans; use helius_get_wallet_history or helius_get_transfers_by_address for the wallet's activity."
|
|
@@ -55073,6 +55486,56 @@ var UNSERVABLE_TOOLS = {
|
|
|
55073
55486
|
goplus_simulate_solana_transaction: {
|
|
55074
55487
|
reason: 'because GoPlus answers "system error" to every Solana pre-execution request, including a fresh valid transfer',
|
|
55075
55488
|
replacement: "Use get_solana_token_security for the tokens the transaction touches; Hive has no other Solana pre-signing simulation."
|
|
55489
|
+
},
|
|
55490
|
+
moralis_get_wallet_token_balances: {
|
|
55491
|
+
reason: MORALIS_PAUSED,
|
|
55492
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55493
|
+
date: "2026-10-14"
|
|
55494
|
+
},
|
|
55495
|
+
moralis_get_wallet_token_balances_price: {
|
|
55496
|
+
reason: MORALIS_PAUSED,
|
|
55497
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55498
|
+
date: "2026-10-14"
|
|
55499
|
+
},
|
|
55500
|
+
moralis_get_wallet_net_worth: {
|
|
55501
|
+
reason: MORALIS_PAUSED,
|
|
55502
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55503
|
+
date: "2026-10-14"
|
|
55504
|
+
},
|
|
55505
|
+
moralis_get_wallet_profitability: {
|
|
55506
|
+
reason: MORALIS_PAUSED,
|
|
55507
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55508
|
+
date: "2026-10-14"
|
|
55509
|
+
},
|
|
55510
|
+
moralis_get_wallet_profitability_summary: {
|
|
55511
|
+
reason: MORALIS_PAUSED,
|
|
55512
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55513
|
+
date: "2026-10-14"
|
|
55514
|
+
},
|
|
55515
|
+
moralis_get_wallet_pnl: {
|
|
55516
|
+
reason: MORALIS_PAUSED,
|
|
55517
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55518
|
+
date: "2026-10-14"
|
|
55519
|
+
},
|
|
55520
|
+
moralis_get_wallet_pnl_summary: {
|
|
55521
|
+
reason: MORALIS_PAUSED,
|
|
55522
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55523
|
+
date: "2026-10-14"
|
|
55524
|
+
},
|
|
55525
|
+
moralis_get_wallet_swaps: {
|
|
55526
|
+
reason: MORALIS_PAUSED,
|
|
55527
|
+
replacement: "Use get_wallet_trades for a wallet's DEX buys and sells.",
|
|
55528
|
+
date: "2026-10-14"
|
|
55529
|
+
},
|
|
55530
|
+
moralis_get_wallet_token_transfers: {
|
|
55531
|
+
reason: MORALIS_PAUSED,
|
|
55532
|
+
replacement: "Use get_wallet_transfers for EVM token transfers, or helius_get_wallet_transfers on Solana.",
|
|
55533
|
+
date: "2026-10-14"
|
|
55534
|
+
},
|
|
55535
|
+
moralis_get_token_top_traders: {
|
|
55536
|
+
reason: MORALIS_PAUSED,
|
|
55537
|
+
replacement: "Use coingecko_get_onchain_token_top_traders for a token's most profitable traders.",
|
|
55538
|
+
date: "2026-10-14"
|
|
55076
55539
|
}
|
|
55077
55540
|
};
|
|
55078
55541
|
function isUnservableTool(toolName) {
|
|
@@ -55428,9 +55891,9 @@ function withExecMarker(result2, marker) {
|
|
|
55428
55891
|
function humanizePropertyName(propName) {
|
|
55429
55892
|
return propName.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().toLowerCase();
|
|
55430
55893
|
}
|
|
55431
|
-
function fillMissingInputDescriptions(
|
|
55432
|
-
const schema =
|
|
55433
|
-
if (!schema?.properties) return
|
|
55894
|
+
function fillMissingInputDescriptions(tool100) {
|
|
55895
|
+
const schema = tool100.inputSchema;
|
|
55896
|
+
if (!schema?.properties) return tool100;
|
|
55434
55897
|
let changed = false;
|
|
55435
55898
|
const properties = {};
|
|
55436
55899
|
for (const [propName, propSchema] of Object.entries(schema.properties)) {
|
|
@@ -55441,14 +55904,14 @@ function fillMissingInputDescriptions(tool96) {
|
|
|
55441
55904
|
changed = true;
|
|
55442
55905
|
properties[propName] = {
|
|
55443
55906
|
...propSchema,
|
|
55444
|
-
description: `${humanizePropertyName(propName)} parameter for ${
|
|
55907
|
+
description: `${humanizePropertyName(propName)} parameter for ${tool100.name}. See the tool Args section for accepted values and examples.`
|
|
55445
55908
|
};
|
|
55446
55909
|
}
|
|
55447
|
-
if (!changed) return
|
|
55910
|
+
if (!changed) return tool100;
|
|
55448
55911
|
return {
|
|
55449
|
-
...
|
|
55912
|
+
...tool100,
|
|
55450
55913
|
inputSchema: {
|
|
55451
|
-
...
|
|
55914
|
+
...tool100.inputSchema,
|
|
55452
55915
|
properties
|
|
55453
55916
|
}
|
|
55454
55917
|
};
|
|
@@ -55481,18 +55944,18 @@ function getFallbackCoinGeckoClient() {
|
|
|
55481
55944
|
function isKeylessCoinGeckoClient(client2) {
|
|
55482
55945
|
return client2 instanceof Coingecko3 && !client2.proAPIKey && !client2.demoAPIKey;
|
|
55483
55946
|
}
|
|
55484
|
-
function createSafeHandler(
|
|
55947
|
+
function createSafeHandler(handler100, metadata104, toolName, inputSchema) {
|
|
55485
55948
|
const schemaParams = inputSchemaParamNames(inputSchema);
|
|
55486
55949
|
const credentialRequirement = getCredentialRequirementForTool(
|
|
55487
55950
|
toolName,
|
|
55488
|
-
|
|
55951
|
+
metadata104
|
|
55489
55952
|
);
|
|
55490
55953
|
return async (client2, args) => {
|
|
55491
55954
|
const t0 = Date.now();
|
|
55492
55955
|
try {
|
|
55493
|
-
let usedFallback =
|
|
55956
|
+
let usedFallback = metadata104.tags.includes("coingecko") && isKeylessCoinGeckoClient(client2);
|
|
55494
55957
|
let effectiveClient = client2;
|
|
55495
|
-
if (effectiveClient == null &&
|
|
55958
|
+
if (effectiveClient == null && metadata104.tags.includes("coingecko")) {
|
|
55496
55959
|
effectiveClient = getFallbackCoinGeckoClient();
|
|
55497
55960
|
usedFallback = isKeylessCoinGeckoClient(effectiveClient);
|
|
55498
55961
|
}
|
|
@@ -55523,7 +55986,7 @@ function createSafeHandler(handler96, metadata100, toolName, inputSchema) {
|
|
|
55523
55986
|
);
|
|
55524
55987
|
}
|
|
55525
55988
|
}
|
|
55526
|
-
let result2 = await
|
|
55989
|
+
let result2 = await handler100(effectiveClient, safeArgs);
|
|
55527
55990
|
const observedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
55528
55991
|
if (result2._hiveExec?.source === "fallback") usedFallback = true;
|
|
55529
55992
|
if (!result2.isError && credentialRequirement && !credentialRequirement.isConfigured() && result2?.content?.[0]?.type === "text" && result2.content[0].text) {
|
|
@@ -55755,9 +56218,9 @@ function getAllWrappedEndpoints() {
|
|
|
55755
56218
|
const allEndpointsJSON = wrapper;
|
|
55756
56219
|
const updatedTools = [];
|
|
55757
56220
|
for (const endpoint of allTool) {
|
|
55758
|
-
let { tool:
|
|
56221
|
+
let { tool: tool100 } = endpoint;
|
|
55759
56222
|
let matchedItem = null;
|
|
55760
|
-
const originalName =
|
|
56223
|
+
const originalName = tool100.name;
|
|
55761
56224
|
const strippedName = stripProviderPrefix(originalName);
|
|
55762
56225
|
for (const endpoints of Object.values(allEndpointsJSON)) {
|
|
55763
56226
|
for (const item of endpoints) {
|
|
@@ -55783,10 +56246,10 @@ function getAllWrappedEndpoints() {
|
|
|
55783
56246
|
}
|
|
55784
56247
|
if (matchedItem) {
|
|
55785
56248
|
let toolInstanse = {
|
|
55786
|
-
...
|
|
56249
|
+
...tool100,
|
|
55787
56250
|
name: matchedItem.tool.name,
|
|
55788
|
-
title:
|
|
55789
|
-
description: matchedItem.tool.description ??
|
|
56251
|
+
title: tool100.title ?? getToolTitle(matchedItem.tool.name),
|
|
56252
|
+
description: matchedItem.tool.description ?? tool100.description
|
|
55790
56253
|
};
|
|
55791
56254
|
if (!toolInstanse.annotations) {
|
|
55792
56255
|
toolInstanse.annotations = getAnnotationsForTool(toolInstanse.name);
|
|
@@ -55829,10 +56292,10 @@ function getAllWrappedEndpoints() {
|
|
|
55829
56292
|
"signals_",
|
|
55830
56293
|
"fetch_"
|
|
55831
56294
|
];
|
|
55832
|
-
if (selfDescribedPrefixes.some((p) =>
|
|
56295
|
+
if (selfDescribedPrefixes.some((p) => tool100.name.startsWith(p)) || isFreeWriteEndpoint(tool100.name)) {
|
|
55833
56296
|
let toolInstanse = {
|
|
55834
|
-
...
|
|
55835
|
-
title:
|
|
56297
|
+
...tool100,
|
|
56298
|
+
title: tool100.title ?? getToolTitle(tool100.name)
|
|
55836
56299
|
};
|
|
55837
56300
|
if (!toolInstanse.annotations) {
|
|
55838
56301
|
toolInstanse.annotations = getAnnotationsForTool(toolInstanse.name);
|
|
@@ -55858,7 +56321,7 @@ function getAllWrappedEndpoints() {
|
|
|
55858
56321
|
});
|
|
55859
56322
|
} else {
|
|
55860
56323
|
secureLogger.debug(
|
|
55861
|
-
`No match found in allEndpoints for tool: ${
|
|
56324
|
+
`No match found in allEndpoints for tool: ${tool100.name}`
|
|
55862
56325
|
);
|
|
55863
56326
|
}
|
|
55864
56327
|
}
|
|
@@ -55874,9 +56337,9 @@ function getToolByCategory(category) {
|
|
|
55874
56337
|
const allWrappedTools = getAllWrappedEndpoints();
|
|
55875
56338
|
const tools5 = [];
|
|
55876
56339
|
for (const toolName of toolNameList) {
|
|
55877
|
-
const
|
|
55878
|
-
if (
|
|
55879
|
-
tools5.push(
|
|
56340
|
+
const tool100 = allWrappedTools.find((tool101) => tool101.tool.name === toolName);
|
|
56341
|
+
if (tool100) {
|
|
56342
|
+
tools5.push(tool100);
|
|
55880
56343
|
}
|
|
55881
56344
|
}
|
|
55882
56345
|
return tools5;
|
|
@@ -56099,8 +56562,13 @@ var ToolRegistry = [
|
|
|
56099
56562
|
{
|
|
56100
56563
|
category: "Portfolio & Wallet",
|
|
56101
56564
|
name: "get_portfolio_wallet_endpoints",
|
|
56102
|
-
description: "Endpoints for tracking user wallet balances, transaction history, portfolio positions across protocols and chains, net asset calculations, token holdings analysis, comprehensive wallet activity monitoring, real-time balance tracking, balance update history over time, multi-token portfolio analysis, balance changes with transaction context, financial auditing capabilities for individual users and addresses, wallet filtering and discovery, NFT holdings tracking, wallet PnL, DeFi positions, swap history, and wallet insight metrics. Provider guide: Use
|
|
56565
|
+
description: "Endpoints for tracking user wallet balances, transaction history, portfolio positions across protocols and chains, net asset calculations, token holdings analysis, comprehensive wallet activity monitoring, real-time balance tracking, balance update history over time, multi-token portfolio analysis, balance changes with transaction context, financial auditing capabilities for individual users and addresses, wallet filtering and discovery, NFT holdings tracking, wallet PnL, DeFi positions, swap history, and wallet insight metrics. Provider guide: Use get_wallet_balances, get_wallet_pnl, get_wallet_trades, and get_wallet_transfers (CoinGecko) for EVM balances, PnL, DEX trades, and transfers. Use alchemy_ tools for NFT holdings, raw transfers, and EVM chains CoinGecko does not cover. Use moralis_ tools only for DeFi positions and decoded wallet insight/history. Use helius_ tools for Solana-native wallet depth (native SOL balance, SPL token accounts, Digital Asset Standard assets owned by a wallet).",
|
|
56103
56566
|
tools: [
|
|
56567
|
+
// CoinGecko wallet data (default for EVM balances, PnL, DEX trades, transfers)
|
|
56568
|
+
"get_wallet_balances",
|
|
56569
|
+
"get_wallet_pnl",
|
|
56570
|
+
"get_wallet_trades",
|
|
56571
|
+
"get_wallet_transfers",
|
|
56104
56572
|
"alchemy_get_tokens_by_wallet",
|
|
56105
56573
|
"alchemy_get_token_balances_by_wallet",
|
|
56106
56574
|
"alchemy_get_nfts_by_wallet",
|
|
@@ -56131,24 +56599,15 @@ var ToolRegistry = [
|
|
|
56131
56599
|
"alchemy_solana_get_transaction_with_compression_info",
|
|
56132
56600
|
// Moralis wallet intelligence tools
|
|
56133
56601
|
"moralis_get_wallet_history",
|
|
56134
|
-
"moralis_get_wallet_profitability",
|
|
56135
|
-
"moralis_get_wallet_profitability_summary",
|
|
56136
|
-
"moralis_get_wallet_pnl",
|
|
56137
|
-
"moralis_get_wallet_pnl_summary",
|
|
56138
56602
|
"moralis_get_wallet_defi_positions",
|
|
56139
56603
|
"moralis_get_wallet_defi_summary",
|
|
56140
|
-
"moralis_get_wallet_swaps",
|
|
56141
56604
|
"moralis_get_wallet_chain_activity",
|
|
56142
56605
|
"moralis_get_wallet_stats",
|
|
56143
56606
|
"moralis_get_wallet_insight",
|
|
56144
|
-
"moralis_get_wallet_token_balances",
|
|
56145
|
-
"moralis_get_wallet_token_balances_price",
|
|
56146
|
-
"moralis_get_wallet_net_worth",
|
|
56147
56607
|
"moralis_get_wallet_approvals",
|
|
56148
56608
|
"moralis_get_wallet_active_chains",
|
|
56149
56609
|
"moralis_get_native_balance",
|
|
56150
56610
|
"moralis_get_native_balances_batch",
|
|
56151
|
-
"moralis_get_wallet_token_transfers",
|
|
56152
56611
|
"moralis_get_sol_balance",
|
|
56153
56612
|
"moralis_get_sol_token_balances",
|
|
56154
56613
|
"moralis_get_sol_portfolio",
|
|
@@ -56233,7 +56692,6 @@ var ToolRegistry = [
|
|
|
56233
56692
|
"moralis_get_token_metadata_batch",
|
|
56234
56693
|
"moralis_get_token_holders",
|
|
56235
56694
|
"moralis_get_token_transfers",
|
|
56236
|
-
"moralis_get_token_top_traders",
|
|
56237
56695
|
"moralis_get_token_details",
|
|
56238
56696
|
"moralis_get_sol_token_price",
|
|
56239
56697
|
"moralis_get_sol_token_metadata",
|
|
@@ -56470,6 +56928,7 @@ var ToolRegistry = [
|
|
|
56470
56928
|
"get_exchanges_list",
|
|
56471
56929
|
"get_derivatives_exchanges_list",
|
|
56472
56930
|
"get_news",
|
|
56931
|
+
"get_coin_insights",
|
|
56473
56932
|
"moralis_search_entities",
|
|
56474
56933
|
"moralis_get_entity",
|
|
56475
56934
|
"moralis_get_entities_by_category",
|
|
@@ -57047,8 +57506,8 @@ function normalizeToolResponse(result2, toolName, args) {
|
|
|
57047
57506
|
}
|
|
57048
57507
|
|
|
57049
57508
|
// src/utils/clientRouter.ts
|
|
57050
|
-
function getClientForTool(
|
|
57051
|
-
const provider = getProviderDescriptorForTool("",
|
|
57509
|
+
function getClientForTool(metadata104, clients) {
|
|
57510
|
+
const provider = getProviderDescriptorForTool("", metadata104);
|
|
57052
57511
|
if (provider.clientStrategy === "shared-goplus") {
|
|
57053
57512
|
return clients.goplusClient ?? void 0;
|
|
57054
57513
|
}
|
|
@@ -57687,7 +58146,7 @@ function describeErrorCode(code) {
|
|
|
57687
58146
|
// src/utils/agentErrorCopy.ts
|
|
57688
58147
|
function agentErrorCopy(status, context = {}) {
|
|
57689
58148
|
const provider = context.provider || "the provider";
|
|
57690
|
-
const
|
|
58149
|
+
const tool100 = context.tool || "this tool";
|
|
57691
58150
|
switch (status) {
|
|
57692
58151
|
case "ok":
|
|
57693
58152
|
return {
|
|
@@ -57697,12 +58156,12 @@ function agentErrorCopy(status, context = {}) {
|
|
|
57697
58156
|
case "invalid_input":
|
|
57698
58157
|
return {
|
|
57699
58158
|
cause: "The arguments failed validation or named an unsupported venue/method; the provider was not the problem.",
|
|
57700
|
-
next_action: `Fix the arguments: call get_api_endpoint_schema for '${
|
|
58159
|
+
next_action: `Fix the arguments: call get_api_endpoint_schema for '${tool100}', use supported values, then retry. Do not retry unchanged.`
|
|
57701
58160
|
};
|
|
57702
58161
|
case "missing_key":
|
|
57703
58162
|
return {
|
|
57704
|
-
cause: `${provider} is not configured on this deployment (no API credential), so '${
|
|
57705
|
-
next_action: `Do not retry '${
|
|
58163
|
+
cause: `${provider} is not configured on this deployment (no API credential), so '${tool100}' cannot return data here.`,
|
|
58164
|
+
next_action: `Do not retry '${tool100}'. Use search_tools to pick a sibling provider tool for the same data, or ask the operator to configure ${provider} credentials.`
|
|
57706
58165
|
};
|
|
57707
58166
|
case "plan_required":
|
|
57708
58167
|
return {
|
|
@@ -57721,7 +58180,7 @@ function agentErrorCopy(status, context = {}) {
|
|
|
57721
58180
|
};
|
|
57722
58181
|
case "failing":
|
|
57723
58182
|
return {
|
|
57724
|
-
cause: `${provider} returned an unexpected error for '${
|
|
58183
|
+
cause: `${provider} returned an unexpected error for '${tool100}'.`,
|
|
57725
58184
|
next_action: "Do not retry in a loop. Try the route fallback tool or a sibling provider via search_tools, and report the runtime_status to the user."
|
|
57726
58185
|
};
|
|
57727
58186
|
}
|
|
@@ -59665,22 +60124,23 @@ function heroTools(endpoints, options = {}) {
|
|
|
59665
60124
|
const tokens = firstArray(payload, ["tokens", "items", "balances"]);
|
|
59666
60125
|
const summarized = tokens.map((token) => {
|
|
59667
60126
|
if (!isRecord3(token)) return token;
|
|
59668
|
-
const
|
|
60127
|
+
const metadata104 = isRecord3(token.tokenMetadata) ? token.tokenMetadata : isRecord3(token.token) ? token.token : void 0;
|
|
59669
60128
|
const fallbackAddress = typeof token.address === "string" && token.address.trim().toLowerCase() === walletLower ? null : token.address ?? null;
|
|
59670
60129
|
const tokenAddress = token.tokenAddress ?? token.mint ?? fallbackAddress;
|
|
59671
60130
|
const isNative = tokenAddress == null;
|
|
59672
|
-
const rawDecimals = token.decimals ??
|
|
60131
|
+
const rawDecimals = token.decimals ?? metadata104?.decimals;
|
|
59673
60132
|
const decimals = typeof rawDecimals === "number" ? rawDecimals : isNative ? 18 : void 0;
|
|
59674
60133
|
const balance = decodeBalance(
|
|
59675
60134
|
token.balance ?? token.amount ?? token.tokenBalance ?? token.uiAmount ?? null,
|
|
59676
60135
|
decimals
|
|
59677
60136
|
);
|
|
59678
60137
|
return {
|
|
59679
|
-
symbol: token.symbol ??
|
|
59680
|
-
name: token.name ??
|
|
60138
|
+
symbol: token.symbol ?? metadata104?.symbol ?? token.tokenSymbol ?? (isNative ? NATIVE_SYMBOLS[chainLabel] ?? null : null),
|
|
60139
|
+
name: token.name ?? metadata104?.name ?? null,
|
|
59681
60140
|
address: tokenAddress,
|
|
59682
60141
|
balance,
|
|
59683
|
-
usd_value: token.totalValueUsd ?? token.valueUsd ?? token.usd_value ?? (typeof token.totalValueUsdCents === "number" ? token.totalValueUsdCents / 100 : usdFromPrices(token, balance))
|
|
60142
|
+
usd_value: token.totalValueUsd ?? token.valueUsd ?? token.usd_value ?? (typeof token.totalValueUsdCents === "number" ? token.totalValueUsdCents / 100 : usdFromPrices(token, balance)),
|
|
60143
|
+
...token.h24_change_pct != null ? { h24_change_pct: token.h24_change_pct } : {}
|
|
59684
60144
|
};
|
|
59685
60145
|
});
|
|
59686
60146
|
const nonZero = summarized.filter(
|
|
@@ -59708,6 +60168,23 @@ function heroTools(endpoints, options = {}) {
|
|
|
59708
60168
|
} : {}
|
|
59709
60169
|
};
|
|
59710
60170
|
};
|
|
60171
|
+
const coingeckoBalances = (payload) => {
|
|
60172
|
+
const attributes = isRecord3(payload.data) && isRecord3(payload.data.attributes) ? payload.data.attributes : {};
|
|
60173
|
+
const rows = Array.isArray(attributes.balances) ? attributes.balances : [];
|
|
60174
|
+
const toNumber = (value) => value == null || !Number.isFinite(Number(value)) ? null : Number(value);
|
|
60175
|
+
return {
|
|
60176
|
+
total_value_usd: toNumber(attributes.total_value_usd),
|
|
60177
|
+
balances: rows.filter(isRecord3).map((row) => ({
|
|
60178
|
+
symbol: row.symbol ?? null,
|
|
60179
|
+
name: row.name ?? null,
|
|
60180
|
+
tokenAddress: row.token_type === "native" ? null : row.address ?? null,
|
|
60181
|
+
balance: row.balance ?? null,
|
|
60182
|
+
decimals: 0,
|
|
60183
|
+
usd_value: toNumber(row.value_usd),
|
|
60184
|
+
h24_change_pct: toNumber(row.h24_price_change_percentage)
|
|
60185
|
+
}))
|
|
60186
|
+
};
|
|
60187
|
+
};
|
|
59711
60188
|
const getWalletPortfolio = {
|
|
59712
60189
|
metadata: {
|
|
59713
60190
|
resource: "dynamic_tools",
|
|
@@ -59717,7 +60194,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
59717
60194
|
tool: {
|
|
59718
60195
|
name: "get_wallet_portfolio",
|
|
59719
60196
|
title: "Get Wallet Portfolio",
|
|
59720
|
-
description:
|
|
60197
|
+
description: `Token holdings for a wallet with balances, USD values, and 24h price change where available. Likely spam airdrops are hidden and counted (include_spam=true shows them). EVM chains route through CoinGecko (${WALLET_BALANCE_NETWORKS.join(", ")}) with Alchemy as the fallback; Solana wallets are detected automatically and route through Helius.`,
|
|
59721
60198
|
inputSchema: zodToInputSchema(walletPortfolioSchema),
|
|
59722
60199
|
outputSchema: heroOutputSchema("get_wallet_portfolio"),
|
|
59723
60200
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
@@ -59748,9 +60225,28 @@ function heroTools(endpoints, options = {}) {
|
|
|
59748
60225
|
}
|
|
59749
60226
|
const normalized = normalizeChain(chain);
|
|
59750
60227
|
const network = ALCHEMY_NETWORKS[normalized];
|
|
60228
|
+
const geckoNetwork = GECKO_NETWORKS[normalized] ?? normalized;
|
|
60229
|
+
let fallbackNote;
|
|
60230
|
+
if (WALLET_BALANCE_NETWORKS.includes(geckoNetwork)) {
|
|
60231
|
+
const result3 = await executeUnderlying("get_wallet_balances", {
|
|
60232
|
+
address,
|
|
60233
|
+
networks: geckoNetwork,
|
|
60234
|
+
per_page: 100
|
|
60235
|
+
}, "get_wallet_portfolio");
|
|
60236
|
+
if (!network || "hive" in result3 && result3.ok) {
|
|
60237
|
+
return respond(result3, format, (payload) => {
|
|
60238
|
+
const balances = coingeckoBalances(payload);
|
|
60239
|
+
return {
|
|
60240
|
+
...trimWalletPortfolio(address, normalized, includeSpam, true)(balances),
|
|
60241
|
+
total_value_usd: balances.total_value_usd
|
|
60242
|
+
};
|
|
60243
|
+
});
|
|
60244
|
+
}
|
|
60245
|
+
fallbackNote = "CoinGecko wallet balances failed for this call; served from Alchemy.";
|
|
60246
|
+
}
|
|
59751
60247
|
if (!network) {
|
|
59752
60248
|
return errorResult5(
|
|
59753
|
-
`Invalid arguments: Unknown chain '${chain}'. Pass an EVM chain name (${Object.keys(ALCHEMY_NETWORKS).slice(0, 6).join(", ")}, \u2026) or "solana".`
|
|
60249
|
+
`Invalid arguments: Unknown chain '${chain}'. Pass an EVM chain name (${Object.keys(ALCHEMY_NETWORKS).slice(0, 6).join(", ")}, \u2026), a CoinGecko network id (${WALLET_BALANCE_NETWORKS.join(", ")}), or "solana".`
|
|
59754
60250
|
);
|
|
59755
60251
|
}
|
|
59756
60252
|
const result2 = await executeUnderlying("alchemy_get_tokens_by_wallet", {
|
|
@@ -59759,11 +60255,10 @@ function heroTools(endpoints, options = {}) {
|
|
|
59759
60255
|
withMetadata: true,
|
|
59760
60256
|
withPrices: true
|
|
59761
60257
|
}, "get_wallet_portfolio");
|
|
59762
|
-
return respond(
|
|
59763
|
-
|
|
59764
|
-
|
|
59765
|
-
|
|
59766
|
-
);
|
|
60258
|
+
return respond(result2, format, (payload) => ({
|
|
60259
|
+
...trimWalletPortfolio(address, normalized, includeSpam, true)(payload),
|
|
60260
|
+
...fallbackNote ? { fallback_note: fallbackNote } : {}
|
|
60261
|
+
}));
|
|
59767
60262
|
}
|
|
59768
60263
|
};
|
|
59769
60264
|
return [getTokenPrice, checkTokenSafety, getWalletPortfolio];
|
|
@@ -60027,7 +60522,7 @@ var TASK_TOOLSET_ROUTES = {
|
|
|
60027
60522
|
step(
|
|
60028
60523
|
"balances",
|
|
60029
60524
|
"Read current wallet value and balances.",
|
|
60030
|
-
"
|
|
60525
|
+
"get_wallet_balances",
|
|
60031
60526
|
"alchemy_get_token_balances_by_wallet",
|
|
60032
60527
|
PROVIDER_FALLBACK
|
|
60033
60528
|
),
|
|
@@ -60066,7 +60561,7 @@ var TASK_TOOLSET_ROUTES = {
|
|
|
60066
60561
|
step(
|
|
60067
60562
|
"balances",
|
|
60068
60563
|
"Anchor activity to the current wallet state.",
|
|
60069
|
-
"
|
|
60564
|
+
"get_wallet_balances",
|
|
60070
60565
|
"alchemy_get_native_balance",
|
|
60071
60566
|
PROVIDER_FALLBACK
|
|
60072
60567
|
),
|
|
@@ -61044,18 +61539,18 @@ var TASK_TOOLSET_CATALOG = [
|
|
|
61044
61539
|
requiredIdentifiers: ["wallet address", "chain"],
|
|
61045
61540
|
optionalIdentifiers: ["token contract", "transaction hash", "time range"],
|
|
61046
61541
|
recommendedTools: [
|
|
61542
|
+
"get_wallet_balances",
|
|
61543
|
+
"get_wallet_pnl",
|
|
61544
|
+
"get_wallet_trades",
|
|
61545
|
+
"get_wallet_transfers",
|
|
61047
61546
|
"alchemy_get_tokens_by_wallet",
|
|
61048
61547
|
"alchemy_get_token_balances_by_wallet",
|
|
61049
61548
|
"alchemy_get_nfts_by_wallet",
|
|
61050
61549
|
"alchemy_get_asset_transfers",
|
|
61051
61550
|
"alchemy_get_native_balance",
|
|
61052
61551
|
"moralis_get_wallet_history",
|
|
61053
|
-
"moralis_get_wallet_token_balances",
|
|
61054
|
-
"moralis_get_wallet_net_worth",
|
|
61055
|
-
"moralis_get_wallet_profitability_summary",
|
|
61056
61552
|
"moralis_get_wallet_defi_positions",
|
|
61057
61553
|
"moralis_get_wallet_defi_summary",
|
|
61058
|
-
"moralis_get_wallet_swaps",
|
|
61059
61554
|
"moralis_get_wallet_chain_activity",
|
|
61060
61555
|
"moralis_get_wallet_insight",
|
|
61061
61556
|
"helius_get_wallet_balances",
|
|
@@ -63835,7 +64330,7 @@ async function runMcpProtocolHealth(options = {}) {
|
|
|
63835
64330
|
checks.push(
|
|
63836
64331
|
await timedCheck("tools_list_root_surface", async () => {
|
|
63837
64332
|
const listed = await client2.listTools();
|
|
63838
|
-
const names = listed.tools.map((
|
|
64333
|
+
const names = listed.tools.map((tool100) => tool100.name);
|
|
63839
64334
|
const expectedCount = getRootVisibleToolCount();
|
|
63840
64335
|
const expectedTools = [...ROOT_VISIBLE_TOOL_NAMES];
|
|
63841
64336
|
if (listed.tools.length !== expectedCount) {
|
|
@@ -67103,6 +67598,10 @@ var TOOL_PROBE_ARGS = {
|
|
|
67103
67598
|
},
|
|
67104
67599
|
get_multi_tokens: { network: "eth", addresses: ETH_USDC },
|
|
67105
67600
|
get_token_lists: { asset_platform_id: "ethereum" },
|
|
67601
|
+
get_wallet_balances: { address: ETH_WALLET, networks: "eth", per_page: 5 },
|
|
67602
|
+
get_wallet_pnl: { address: ETH_WALLET, networks: "eth", per_page: 5 },
|
|
67603
|
+
get_wallet_trades: { network: "eth", address: ETH_WALLET, per_page: 5 },
|
|
67604
|
+
get_wallet_transfers: { network: "eth", address: ETH_WALLET, per_page: 5 },
|
|
67106
67605
|
coingecko_get_onchain_token_top_traders: {
|
|
67107
67606
|
network: COINGECKO_TOP_TRADERS_NETWORK,
|
|
67108
67607
|
address: COINGECKO_TOP_TRADERS_TOKEN,
|
|
@@ -69226,8 +69725,8 @@ var WORKFLOW_REGRESSION_CASES = [
|
|
|
69226
69725
|
expectedTopToolset: "wallet_investigation",
|
|
69227
69726
|
expectedToolsets: ["wallet_investigation"],
|
|
69228
69727
|
expectedCategoryTool: "get_portfolio_wallet_endpoints",
|
|
69229
|
-
expectedSchemaTool: "
|
|
69230
|
-
expectedProvider: "
|
|
69728
|
+
expectedSchemaTool: "get_wallet_pnl",
|
|
69729
|
+
expectedProvider: "CoinGecko"
|
|
69231
69730
|
},
|
|
69232
69731
|
{
|
|
69233
69732
|
id: "wallet-defi-pnl",
|
|
@@ -69246,8 +69745,8 @@ var WORKFLOW_REGRESSION_CASES = [
|
|
|
69246
69745
|
expectedTopToolset: "wallet_investigation",
|
|
69247
69746
|
expectedToolsets: ["wallet_investigation"],
|
|
69248
69747
|
expectedCategoryTool: "get_portfolio_wallet_endpoints",
|
|
69249
|
-
expectedSchemaTool: "
|
|
69250
|
-
expectedProvider: "
|
|
69748
|
+
expectedSchemaTool: "get_wallet_trades",
|
|
69749
|
+
expectedProvider: "CoinGecko"
|
|
69251
69750
|
},
|
|
69252
69751
|
{
|
|
69253
69752
|
id: "malicious-address",
|
|
@@ -72204,7 +72703,7 @@ function getRootToolSet() {
|
|
|
72204
72703
|
tools: Array.from(toolsByName.values()),
|
|
72205
72704
|
visibleTools: ROOT_VISIBLE_TOOL_ORDER.map(
|
|
72206
72705
|
(name) => compatibilityByName.get(name)
|
|
72207
|
-
).filter((
|
|
72706
|
+
).filter((tool100) => Boolean(tool100))
|
|
72208
72707
|
};
|
|
72209
72708
|
secureLogger.info("Root MCP tool catalog cached", {
|
|
72210
72709
|
actualToolCount: actualToolEndpoints.length,
|
|
@@ -72476,21 +72975,21 @@ var HiveMCPServer = class {
|
|
|
72476
72975
|
}
|
|
72477
72976
|
registerAllTools() {
|
|
72478
72977
|
const registeredTools = this.scope.kind === "root" ? this.compatibilityToolEndpoints.map((endpoint) => endpoint.tool) : this.visibleTools;
|
|
72479
|
-
for (const
|
|
72480
|
-
const inputSchema =
|
|
72978
|
+
for (const tool100 of registeredTools) {
|
|
72979
|
+
const inputSchema = tool100.inputSchema;
|
|
72481
72980
|
const inputZodSchema = memoizedJsonSchemaToZodInputSchema(inputSchema);
|
|
72482
|
-
const outputSchema =
|
|
72981
|
+
const outputSchema = tool100.outputSchema;
|
|
72483
72982
|
const outputZodShape = outputSchema?.type === "object" ? memoizedJsonSchemaToZodOutputSchema(outputSchema) : void 0;
|
|
72484
|
-
const toolName =
|
|
72485
|
-
const toolMeta =
|
|
72983
|
+
const toolName = tool100.name;
|
|
72984
|
+
const toolMeta = tool100._meta;
|
|
72486
72985
|
this.server.registerTool(
|
|
72487
72986
|
toolName,
|
|
72488
72987
|
{
|
|
72489
|
-
title:
|
|
72490
|
-
description:
|
|
72988
|
+
title: tool100.title,
|
|
72989
|
+
description: tool100.description,
|
|
72491
72990
|
inputSchema: inputZodSchema,
|
|
72492
72991
|
...outputZodShape && { outputSchema: outputZodShape },
|
|
72493
|
-
annotations:
|
|
72992
|
+
annotations: tool100.annotations,
|
|
72494
72993
|
// Surfaces response-size headroom annotations (plan 1.15) in
|
|
72495
72994
|
// SDK-generated tools/list responses.
|
|
72496
72995
|
...toolMeta && { _meta: toolMeta }
|