hive-intelligence 1.10.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/agent-skills/packs/hive-wallet-investigation/SKILL.md +3 -1
- package/build/{chunk-E2FAHUXM.js → chunk-5MSFC2HD.js} +1 -1
- package/build/{chunk-Z42XNN47.js → chunk-FZ77S2XY.js} +753 -249
- package/build/{chunk-5QAXJON7.js → chunk-LBJL66AC.js} +5 -2
- package/build/cli.js +13 -13
- package/build/{completion-ROZAH667.js → completion-LFOLLOPU.js} +1 -1
- package/build/{doctor-SMUVDZZ2.js → doctor-ZKIR44V4.js} +1 -1
- package/build/{mcpServer-T3DYYFCC.js → mcpServer-466JRLWK.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-623KMREW.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
|
|
@@ -52586,12 +53001,13 @@ function tallyTiers(rows, totalHolders, stop) {
|
|
|
52586
53001
|
};
|
|
52587
53002
|
}
|
|
52588
53003
|
function parseArgs(args) {
|
|
52589
|
-
const
|
|
53004
|
+
const sent = args?.network ?? args?.chain;
|
|
53005
|
+
const rawNetwork = String(sent ?? "").trim().toLowerCase();
|
|
52590
53006
|
const key = CHAIN_ALIASES[rawNetwork] ?? rawNetwork;
|
|
52591
53007
|
const chain = CHAINS[key];
|
|
52592
53008
|
if (!chain) {
|
|
52593
53009
|
throw new SignalsInputError(
|
|
52594
|
-
`network must be one of ${Object.keys(CHAINS).join(", ")} (or a chain id); got ${JSON.stringify(
|
|
53010
|
+
`network must be one of ${Object.keys(CHAINS).join(", ")} (or a chain id); got ${JSON.stringify(sent ?? null)}.`
|
|
52595
53011
|
);
|
|
52596
53012
|
}
|
|
52597
53013
|
const address = String(args?.address ?? "").trim();
|
|
@@ -52631,7 +53047,7 @@ function blockscoutGet(chain, path) {
|
|
|
52631
53047
|
}
|
|
52632
53048
|
if (!apiKey && error instanceof SignalsHttpError && (error.status === 403 || error.status === 402)) {
|
|
52633
53049
|
throw new Error(
|
|
52634
|
-
`Blockscout's public explorer for chain ${chain.chainId} refused the request (HTTP ${error.status}, bot protection)
|
|
53050
|
+
`Blockscout's public explorer for chain ${chain.chainId} refused the request (HTTP ${error.status}, bot protection) and this deployment has no Blockscout API key configured, so holder tiers for this chain are unavailable right now.`
|
|
52635
53051
|
);
|
|
52636
53052
|
}
|
|
52637
53053
|
throw error;
|
|
@@ -52770,7 +53186,7 @@ function getAllBlockscoutEndpoints() {
|
|
|
52770
53186
|
description: `Count a token's holders by USD balance: total holders plus how many hold >$10k, $1k-$10k, $100-$1k, $1-$100, and under $1 (dust), from Blockscout's holder list. Answers "how many real (non-dust) holders does this token have?". Keyless on EVM chains: ${Object.keys(CHAINS).join(", ")}.
|
|
52771
53187
|
|
|
52772
53188
|
Args:
|
|
52773
|
-
- network (string, required): ${Object.keys(CHAINS).join(", ")}, or a chain id (1, 8453, 10, 42161, 137).
|
|
53189
|
+
- network (string, required; alias chain): ${Object.keys(CHAINS).join(", ")}, or a chain id (1, 8453, 10, 42161, 137).
|
|
52774
53190
|
- address (string, required): ERC-20 token contract address.
|
|
52775
53191
|
- max_pages (integer, optional): holder pages of ${HOLDERS_PAGE_SIZE} to walk, 1-${MAX_PAGES} (default ${DEFAULT_MAX_PAGES}). The walk also stops after ${TIME_BUDGET_MS / 1e3} s, at the end of the list, or at the first holder under $1.
|
|
52776
53192
|
- price_usd (number, optional): USD price to tier with. Default: Blockscout's exchange rate, then the GeckoTerminal on-chain price.
|
|
@@ -52793,6 +53209,10 @@ Don't use when:
|
|
|
52793
53209
|
type: "string",
|
|
52794
53210
|
description: `Chain: ${Object.keys(CHAINS).join(", ")}, or a chain id.`
|
|
52795
53211
|
},
|
|
53212
|
+
chain: {
|
|
53213
|
+
type: "string",
|
|
53214
|
+
description: "Alias of network, for parity with other wallet tools."
|
|
53215
|
+
},
|
|
52796
53216
|
address: {
|
|
52797
53217
|
type: "string",
|
|
52798
53218
|
description: "ERC-20 token contract address (0x...)."
|
|
@@ -52810,7 +53230,7 @@ Don't use when:
|
|
|
52810
53230
|
description: "USD price to tier with; default Blockscout's rate, then GeckoTerminal."
|
|
52811
53231
|
}
|
|
52812
53232
|
},
|
|
52813
|
-
required: ["
|
|
53233
|
+
required: ["address"],
|
|
52814
53234
|
additionalProperties: false
|
|
52815
53235
|
},
|
|
52816
53236
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
@@ -54079,7 +54499,7 @@ var SCHEMA_PATTERNS = [
|
|
|
54079
54499
|
TOKEN_DILIGENCE_OUTPUT_SCHEMA
|
|
54080
54500
|
],
|
|
54081
54501
|
[
|
|
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)$/,
|
|
54502
|
+
/^(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
54503
|
WALLET_INVESTIGATION_OUTPUT_SCHEMA
|
|
54084
54504
|
],
|
|
54085
54505
|
[
|
|
@@ -54601,11 +55021,11 @@ var TENDERLY_REST_TOOLS = /* @__PURE__ */ new Set([
|
|
|
54601
55021
|
"tenderly_estimate_gas",
|
|
54602
55022
|
"tenderly_decode_calldata"
|
|
54603
55023
|
]);
|
|
54604
|
-
function matchesProvider(provider, toolName,
|
|
55024
|
+
function matchesProvider(provider, toolName, metadata104) {
|
|
54605
55025
|
const normalizedProvider = provider.toLowerCase();
|
|
54606
55026
|
const normalizedToolName = toolName.toLowerCase();
|
|
54607
|
-
const resource =
|
|
54608
|
-
const tags =
|
|
55027
|
+
const resource = metadata104.resource.toLowerCase();
|
|
55028
|
+
const tags = metadata104.tags.map((tag) => tag.toLowerCase());
|
|
54609
55029
|
return normalizedToolName.startsWith(`${normalizedProvider}_`) || normalizedToolName.includes(`_${normalizedProvider}_`) || resource.startsWith(normalizedProvider) || resource.includes(`${normalizedProvider}.`) || tags.includes(normalizedProvider);
|
|
54610
55030
|
}
|
|
54611
55031
|
var PROVIDER_CATALOG = [
|
|
@@ -54616,7 +55036,7 @@ var PROVIDER_CATALOG = [
|
|
|
54616
55036
|
type: "MCP discovery and compatibility tools",
|
|
54617
55037
|
clientStrategy: "hive",
|
|
54618
55038
|
alwaysAvailable: true,
|
|
54619
|
-
matches: (toolName,
|
|
55039
|
+
matches: (toolName, metadata104) => toolName.startsWith("hive_") || metadata104.resource === "dynamic_tools" || metadata104.tags.includes("hive")
|
|
54620
55040
|
},
|
|
54621
55041
|
{
|
|
54622
55042
|
id: "coingecko",
|
|
@@ -54625,7 +55045,7 @@ var PROVIDER_CATALOG = [
|
|
|
54625
55045
|
type: "Market data, prices, and metadata",
|
|
54626
55046
|
clientStrategy: "shared-coingecko",
|
|
54627
55047
|
alwaysAvailable: true,
|
|
54628
|
-
matches: (toolName,
|
|
55048
|
+
matches: (toolName, metadata104) => matchesProvider("coingecko", toolName, metadata104)
|
|
54629
55049
|
},
|
|
54630
55050
|
{
|
|
54631
55051
|
id: "goplus",
|
|
@@ -54637,7 +55057,7 @@ var PROVIDER_CATALOG = [
|
|
|
54637
55057
|
label: "GOPLUS_APP_KEY or GOPLUS_API_KEY, plus GOPLUS_APP_SECRET",
|
|
54638
55058
|
isConfigured: () => hasAnyEnvVar("GOPLUS_APP_KEY", "GOPLUS_API_KEY") && hasEnvVar("GOPLUS_APP_SECRET")
|
|
54639
55059
|
},
|
|
54640
|
-
matches: (toolName,
|
|
55060
|
+
matches: (toolName, metadata104) => matchesProvider("goplus", toolName, metadata104)
|
|
54641
55061
|
},
|
|
54642
55062
|
{
|
|
54643
55063
|
id: "ccxt",
|
|
@@ -54646,7 +55066,7 @@ var PROVIDER_CATALOG = [
|
|
|
54646
55066
|
type: "Centralized exchange market data and trading metadata",
|
|
54647
55067
|
clientStrategy: "shared-ccxt",
|
|
54648
55068
|
alwaysAvailable: true,
|
|
54649
|
-
matches: (toolName,
|
|
55069
|
+
matches: (toolName, metadata104) => matchesProvider("ccxt", toolName, metadata104)
|
|
54650
55070
|
},
|
|
54651
55071
|
{
|
|
54652
55072
|
id: "defillama",
|
|
@@ -54655,7 +55075,7 @@ var PROVIDER_CATALOG = [
|
|
|
54655
55075
|
type: "TVL, protocol analytics, yields, and bridge data",
|
|
54656
55076
|
clientStrategy: "internal",
|
|
54657
55077
|
alwaysAvailable: true,
|
|
54658
|
-
matches: (toolName,
|
|
55078
|
+
matches: (toolName, metadata104) => matchesProvider("defillama", toolName, metadata104)
|
|
54659
55079
|
},
|
|
54660
55080
|
{
|
|
54661
55081
|
// Listed BEFORE hyperliquid: rwa_get_hyperliquid_dex_perps contains the
|
|
@@ -54667,7 +55087,7 @@ var PROVIDER_CATALOG = [
|
|
|
54667
55087
|
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
55088
|
clientStrategy: "internal",
|
|
54669
55089
|
alwaysAvailable: true,
|
|
54670
|
-
matches: (toolName,
|
|
55090
|
+
matches: (toolName, metadata104) => matchesProvider("rwa", toolName, metadata104)
|
|
54671
55091
|
},
|
|
54672
55092
|
{
|
|
54673
55093
|
id: "hyperliquid",
|
|
@@ -54676,7 +55096,7 @@ var PROVIDER_CATALOG = [
|
|
|
54676
55096
|
type: "Hyperliquid perpetual DEX: per-pair volume, funding, open interest, and builder DEXs (tokenized-stock perps)",
|
|
54677
55097
|
clientStrategy: "internal",
|
|
54678
55098
|
alwaysAvailable: true,
|
|
54679
|
-
matches: (toolName,
|
|
55099
|
+
matches: (toolName, metadata104) => matchesProvider("hyperliquid", toolName, metadata104)
|
|
54680
55100
|
},
|
|
54681
55101
|
{
|
|
54682
55102
|
// The Hive-native hive_archive_monitor tool contains the "_archive_"
|
|
@@ -54694,7 +55114,7 @@ var PROVIDER_CATALOG = [
|
|
|
54694
55114
|
"SHARPE_ARCHIVE_SUPABASE_SERVICE_ROLE_KEY"
|
|
54695
55115
|
)
|
|
54696
55116
|
},
|
|
54697
|
-
matches: (toolName,
|
|
55117
|
+
matches: (toolName, metadata104) => matchesProvider("archive", toolName, metadata104)
|
|
54698
55118
|
},
|
|
54699
55119
|
{
|
|
54700
55120
|
id: "polymarket",
|
|
@@ -54703,7 +55123,7 @@ var PROVIDER_CATALOG = [
|
|
|
54703
55123
|
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
55124
|
clientStrategy: "internal",
|
|
54705
55125
|
alwaysAvailable: true,
|
|
54706
|
-
matches: (toolName,
|
|
55126
|
+
matches: (toolName, metadata104) => matchesProvider("polymarket", toolName, metadata104)
|
|
54707
55127
|
},
|
|
54708
55128
|
{
|
|
54709
55129
|
id: "alternative",
|
|
@@ -54712,7 +55132,7 @@ var PROVIDER_CATALOG = [
|
|
|
54712
55132
|
type: "Crypto Fear & Greed Index: daily market-wide sentiment composite since 2018 (keyless)",
|
|
54713
55133
|
clientStrategy: "internal",
|
|
54714
55134
|
alwaysAvailable: true,
|
|
54715
|
-
matches: (_toolName,
|
|
55135
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("alternative-me")
|
|
54716
55136
|
},
|
|
54717
55137
|
{
|
|
54718
55138
|
id: "blockchain",
|
|
@@ -54721,7 +55141,7 @@ var PROVIDER_CATALOG = [
|
|
|
54721
55141
|
type: "Bitcoin on-chain charts: hash rate, active addresses, transaction count, market price, difficulty, fees, miner revenue (keyless)",
|
|
54722
55142
|
clientStrategy: "internal",
|
|
54723
55143
|
alwaysAvailable: true,
|
|
54724
|
-
matches: (_toolName,
|
|
55144
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("blockchain-com")
|
|
54725
55145
|
},
|
|
54726
55146
|
{
|
|
54727
55147
|
id: "blockscout",
|
|
@@ -54730,7 +55150,7 @@ var PROVIDER_CATALOG = [
|
|
|
54730
55150
|
type: "EVM token holder lists and counts from Blockscout explorers (keyless public API; BLOCKSCOUT_API_KEY switches to the PRO API)",
|
|
54731
55151
|
clientStrategy: "internal",
|
|
54732
55152
|
alwaysAvailable: true,
|
|
54733
|
-
matches: (_toolName,
|
|
55153
|
+
matches: (_toolName, metadata104) => metadata104.tags.includes("blockscout")
|
|
54734
55154
|
},
|
|
54735
55155
|
{
|
|
54736
55156
|
id: "fetch",
|
|
@@ -54739,7 +55159,7 @@ var PROVIDER_CATALOG = [
|
|
|
54739
55159
|
type: "Allowlisted fetch of long-tail public crypto APIs (the escape hatch when no typed tool covers a source)",
|
|
54740
55160
|
clientStrategy: "internal",
|
|
54741
55161
|
alwaysAvailable: true,
|
|
54742
|
-
matches: (toolName,
|
|
55162
|
+
matches: (toolName, metadata104) => matchesProvider("fetch", toolName, metadata104)
|
|
54743
55163
|
},
|
|
54744
55164
|
{
|
|
54745
55165
|
id: "tenderly",
|
|
@@ -54751,7 +55171,7 @@ var PROVIDER_CATALOG = [
|
|
|
54751
55171
|
label: "Tenderly REST credentials or TENDERLY_NODE_ACCESS_KEY/TENDERLY_GATEWAY_ACCESS_KEY",
|
|
54752
55172
|
isConfigured: () => hasTenderlyRestCredentials() || hasTenderlyNodeCredentials()
|
|
54753
55173
|
},
|
|
54754
|
-
matches: (toolName,
|
|
55174
|
+
matches: (toolName, metadata104) => matchesProvider("tenderly", toolName, metadata104)
|
|
54755
55175
|
},
|
|
54756
55176
|
{
|
|
54757
55177
|
id: "moralis",
|
|
@@ -54763,7 +55183,7 @@ var PROVIDER_CATALOG = [
|
|
|
54763
55183
|
label: "MORALIS_API_KEY",
|
|
54764
55184
|
isConfigured: () => hasEnvVar("MORALIS_API_KEY")
|
|
54765
55185
|
},
|
|
54766
|
-
matches: (toolName,
|
|
55186
|
+
matches: (toolName, metadata104) => matchesProvider("moralis", toolName, metadata104)
|
|
54767
55187
|
},
|
|
54768
55188
|
{
|
|
54769
55189
|
id: "helius",
|
|
@@ -54775,7 +55195,7 @@ var PROVIDER_CATALOG = [
|
|
|
54775
55195
|
label: "HELIUS_API_KEY",
|
|
54776
55196
|
isConfigured: () => hasEnvVar("HELIUS_API_KEY")
|
|
54777
55197
|
},
|
|
54778
|
-
matches: (toolName,
|
|
55198
|
+
matches: (toolName, metadata104) => matchesProvider("helius", toolName, metadata104)
|
|
54779
55199
|
},
|
|
54780
55200
|
{
|
|
54781
55201
|
id: "alchemy",
|
|
@@ -54787,11 +55207,11 @@ var PROVIDER_CATALOG = [
|
|
|
54787
55207
|
label: "ALCHEMY_API_KEY",
|
|
54788
55208
|
isConfigured: () => hasEnvVar("ALCHEMY_API_KEY")
|
|
54789
55209
|
},
|
|
54790
|
-
matches: (toolName,
|
|
55210
|
+
matches: (toolName, metadata104) => matchesProvider("alchemy", toolName, metadata104)
|
|
54791
55211
|
}
|
|
54792
55212
|
];
|
|
54793
|
-
function getProviderDescriptorForTool(toolName,
|
|
54794
|
-
return PROVIDER_CATALOG.find((provider) => provider.matches(toolName,
|
|
55213
|
+
function getProviderDescriptorForTool(toolName, metadata104) {
|
|
55214
|
+
return PROVIDER_CATALOG.find((provider) => provider.matches(toolName, metadata104)) ?? UNKNOWN_PROVIDER_DESCRIPTOR;
|
|
54795
55215
|
}
|
|
54796
55216
|
function getProviderDescriptorForEndpoint(endpoint) {
|
|
54797
55217
|
return getProviderDescriptorForTool(endpoint.tool.name, endpoint.metadata);
|
|
@@ -54820,7 +55240,7 @@ function getProviderStatusCatalog() {
|
|
|
54820
55240
|
})
|
|
54821
55241
|
);
|
|
54822
55242
|
}
|
|
54823
|
-
function getCredentialRequirementForTool(toolName,
|
|
55243
|
+
function getCredentialRequirementForTool(toolName, metadata104) {
|
|
54824
55244
|
if (toolName === "tenderly_get_supported_networks" || toolName === "tenderly_get_block_number") {
|
|
54825
55245
|
return null;
|
|
54826
55246
|
}
|
|
@@ -54833,7 +55253,7 @@ function getCredentialRequirementForTool(toolName, metadata100) {
|
|
|
54833
55253
|
isConfigured: hasTenderlyNodeCredentials
|
|
54834
55254
|
};
|
|
54835
55255
|
}
|
|
54836
|
-
return getProviderDescriptorForTool(toolName,
|
|
55256
|
+
return getProviderDescriptorForTool(toolName, metadata104).credentialRequirement ?? null;
|
|
54837
55257
|
}
|
|
54838
55258
|
|
|
54839
55259
|
// src/mcpInvokers.ts
|
|
@@ -54864,14 +55284,14 @@ var RESPONSE_FORMAT_SCHEMA = {
|
|
|
54864
55284
|
enum: ["json", "markdown"],
|
|
54865
55285
|
description: "Output format: 'json' for structured data (default) or 'markdown' for human-readable text."
|
|
54866
55286
|
};
|
|
54867
|
-
function normalizeToolSchema(
|
|
55287
|
+
function normalizeToolSchema(tool100) {
|
|
54868
55288
|
const normalized = {
|
|
54869
|
-
...
|
|
54870
|
-
inputSchema:
|
|
54871
|
-
title:
|
|
55289
|
+
...tool100,
|
|
55290
|
+
inputSchema: tool100.inputSchema ? JSON.parse(JSON.stringify(tool100.inputSchema)) : tool100.inputSchema,
|
|
55291
|
+
title: tool100.title ?? getToolTitle(tool100.name),
|
|
54872
55292
|
annotations: {
|
|
54873
|
-
...getAnnotationsForTool(
|
|
54874
|
-
...
|
|
55293
|
+
...getAnnotationsForTool(tool100.name),
|
|
55294
|
+
...tool100.annotations ?? {}
|
|
54875
55295
|
}
|
|
54876
55296
|
};
|
|
54877
55297
|
if (normalized.inputSchema && typeof normalized.inputSchema === "object" && normalized.inputSchema.type === "object") {
|
|
@@ -54898,20 +55318,19 @@ function normalizeEndpointSchema(endpoint) {
|
|
|
54898
55318
|
var RETIRED_TOOLS_DATE = "2026-09-06";
|
|
54899
55319
|
var RETIRED_TOOL_REPLACEMENTS = {
|
|
54900
55320
|
// 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.",
|
|
55321
|
+
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.",
|
|
55322
|
+
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.",
|
|
55323
|
+
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.",
|
|
55324
|
+
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.",
|
|
55325
|
+
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.",
|
|
55326
|
+
filter_wallets: "Use get_wallet_balances, get_wallet_transfers, get_wallet_trades, or get_wallet_pnl for wallet balances, transfers, DEX trades, and PnL.",
|
|
55327
|
+
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.",
|
|
55328
|
+
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.",
|
|
55329
|
+
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
55330
|
// 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
|
|
55331
|
+
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).",
|
|
55332
|
+
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).",
|
|
55333
|
+
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
55334
|
// pairs
|
|
54916
55335
|
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
55336
|
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 +55391,9 @@ var ALCHEMY_PAYG = "because Alchemy offers it only on Pay As You Go and Enterpri
|
|
|
54972
55391
|
var ALCHEMY_BUNDLE_REPLACEMENT = "Use tenderly_simulate_bundle or tenderly_node_simulate_bundle for multi-transaction simulation.";
|
|
54973
55392
|
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
55393
|
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.";
|
|
55394
|
+
var MORALIS_PAUSED = "because Hive's Moralis account is paused and will not be renewed";
|
|
55395
|
+
var MORALIS_BALANCES_REPLACEMENT = "Use get_wallet_balances for priced EVM balances across chains.";
|
|
55396
|
+
var MORALIS_PNL_REPLACEMENT = "Use get_wallet_pnl for realized and unrealized PnL per wallet and per token.";
|
|
54975
55397
|
var CCXT_PRIVATE = "because every exchange that serves it requires an authenticated exchange account";
|
|
54976
55398
|
var CCXT_BORROW_REPLACEMENT = "Use ccxt_fetch_borrow_rate_history or ccxt_fetch_borrow_rate_histories (public) and read the latest point.";
|
|
54977
55399
|
var UNSERVABLE_TOOLS = {
|
|
@@ -54991,10 +55413,6 @@ var UNSERVABLE_TOOLS = {
|
|
|
54991
55413
|
reason: COINGECKO_ENTERPRISE,
|
|
54992
55414
|
replacement: COINGECKO_SUPPLY_REPLACEMENT
|
|
54993
55415
|
},
|
|
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
55416
|
helius_get_wallet_identity: {
|
|
54999
55417
|
reason: HELIUS_WALLET_PLAN,
|
|
55000
55418
|
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 +55491,56 @@ var UNSERVABLE_TOOLS = {
|
|
|
55073
55491
|
goplus_simulate_solana_transaction: {
|
|
55074
55492
|
reason: 'because GoPlus answers "system error" to every Solana pre-execution request, including a fresh valid transfer',
|
|
55075
55493
|
replacement: "Use get_solana_token_security for the tokens the transaction touches; Hive has no other Solana pre-signing simulation."
|
|
55494
|
+
},
|
|
55495
|
+
moralis_get_wallet_token_balances: {
|
|
55496
|
+
reason: MORALIS_PAUSED,
|
|
55497
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55498
|
+
date: "2026-10-14"
|
|
55499
|
+
},
|
|
55500
|
+
moralis_get_wallet_token_balances_price: {
|
|
55501
|
+
reason: MORALIS_PAUSED,
|
|
55502
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55503
|
+
date: "2026-10-14"
|
|
55504
|
+
},
|
|
55505
|
+
moralis_get_wallet_net_worth: {
|
|
55506
|
+
reason: MORALIS_PAUSED,
|
|
55507
|
+
replacement: MORALIS_BALANCES_REPLACEMENT,
|
|
55508
|
+
date: "2026-10-14"
|
|
55509
|
+
},
|
|
55510
|
+
moralis_get_wallet_profitability: {
|
|
55511
|
+
reason: MORALIS_PAUSED,
|
|
55512
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55513
|
+
date: "2026-10-14"
|
|
55514
|
+
},
|
|
55515
|
+
moralis_get_wallet_profitability_summary: {
|
|
55516
|
+
reason: MORALIS_PAUSED,
|
|
55517
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55518
|
+
date: "2026-10-14"
|
|
55519
|
+
},
|
|
55520
|
+
moralis_get_wallet_pnl: {
|
|
55521
|
+
reason: MORALIS_PAUSED,
|
|
55522
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55523
|
+
date: "2026-10-14"
|
|
55524
|
+
},
|
|
55525
|
+
moralis_get_wallet_pnl_summary: {
|
|
55526
|
+
reason: MORALIS_PAUSED,
|
|
55527
|
+
replacement: MORALIS_PNL_REPLACEMENT,
|
|
55528
|
+
date: "2026-10-14"
|
|
55529
|
+
},
|
|
55530
|
+
moralis_get_wallet_swaps: {
|
|
55531
|
+
reason: MORALIS_PAUSED,
|
|
55532
|
+
replacement: "Use get_wallet_trades for a wallet's DEX buys and sells.",
|
|
55533
|
+
date: "2026-10-14"
|
|
55534
|
+
},
|
|
55535
|
+
moralis_get_wallet_token_transfers: {
|
|
55536
|
+
reason: MORALIS_PAUSED,
|
|
55537
|
+
replacement: "Use get_wallet_transfers for EVM token transfers, or helius_get_wallet_transfers on Solana.",
|
|
55538
|
+
date: "2026-10-14"
|
|
55539
|
+
},
|
|
55540
|
+
moralis_get_token_top_traders: {
|
|
55541
|
+
reason: MORALIS_PAUSED,
|
|
55542
|
+
replacement: "Use coingecko_get_onchain_token_top_traders for a token's most profitable traders.",
|
|
55543
|
+
date: "2026-10-14"
|
|
55076
55544
|
}
|
|
55077
55545
|
};
|
|
55078
55546
|
function isUnservableTool(toolName) {
|
|
@@ -55428,9 +55896,9 @@ function withExecMarker(result2, marker) {
|
|
|
55428
55896
|
function humanizePropertyName(propName) {
|
|
55429
55897
|
return propName.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/[_-]+/g, " ").trim().toLowerCase();
|
|
55430
55898
|
}
|
|
55431
|
-
function fillMissingInputDescriptions(
|
|
55432
|
-
const schema =
|
|
55433
|
-
if (!schema?.properties) return
|
|
55899
|
+
function fillMissingInputDescriptions(tool100) {
|
|
55900
|
+
const schema = tool100.inputSchema;
|
|
55901
|
+
if (!schema?.properties) return tool100;
|
|
55434
55902
|
let changed = false;
|
|
55435
55903
|
const properties = {};
|
|
55436
55904
|
for (const [propName, propSchema] of Object.entries(schema.properties)) {
|
|
@@ -55441,14 +55909,14 @@ function fillMissingInputDescriptions(tool96) {
|
|
|
55441
55909
|
changed = true;
|
|
55442
55910
|
properties[propName] = {
|
|
55443
55911
|
...propSchema,
|
|
55444
|
-
description: `${humanizePropertyName(propName)} parameter for ${
|
|
55912
|
+
description: `${humanizePropertyName(propName)} parameter for ${tool100.name}. See the tool Args section for accepted values and examples.`
|
|
55445
55913
|
};
|
|
55446
55914
|
}
|
|
55447
|
-
if (!changed) return
|
|
55915
|
+
if (!changed) return tool100;
|
|
55448
55916
|
return {
|
|
55449
|
-
...
|
|
55917
|
+
...tool100,
|
|
55450
55918
|
inputSchema: {
|
|
55451
|
-
...
|
|
55919
|
+
...tool100.inputSchema,
|
|
55452
55920
|
properties
|
|
55453
55921
|
}
|
|
55454
55922
|
};
|
|
@@ -55481,18 +55949,18 @@ function getFallbackCoinGeckoClient() {
|
|
|
55481
55949
|
function isKeylessCoinGeckoClient(client2) {
|
|
55482
55950
|
return client2 instanceof Coingecko3 && !client2.proAPIKey && !client2.demoAPIKey;
|
|
55483
55951
|
}
|
|
55484
|
-
function createSafeHandler(
|
|
55952
|
+
function createSafeHandler(handler100, metadata104, toolName, inputSchema) {
|
|
55485
55953
|
const schemaParams = inputSchemaParamNames(inputSchema);
|
|
55486
55954
|
const credentialRequirement = getCredentialRequirementForTool(
|
|
55487
55955
|
toolName,
|
|
55488
|
-
|
|
55956
|
+
metadata104
|
|
55489
55957
|
);
|
|
55490
55958
|
return async (client2, args) => {
|
|
55491
55959
|
const t0 = Date.now();
|
|
55492
55960
|
try {
|
|
55493
|
-
let usedFallback =
|
|
55961
|
+
let usedFallback = metadata104.tags.includes("coingecko") && isKeylessCoinGeckoClient(client2);
|
|
55494
55962
|
let effectiveClient = client2;
|
|
55495
|
-
if (effectiveClient == null &&
|
|
55963
|
+
if (effectiveClient == null && metadata104.tags.includes("coingecko")) {
|
|
55496
55964
|
effectiveClient = getFallbackCoinGeckoClient();
|
|
55497
55965
|
usedFallback = isKeylessCoinGeckoClient(effectiveClient);
|
|
55498
55966
|
}
|
|
@@ -55523,7 +55991,7 @@ function createSafeHandler(handler96, metadata100, toolName, inputSchema) {
|
|
|
55523
55991
|
);
|
|
55524
55992
|
}
|
|
55525
55993
|
}
|
|
55526
|
-
let result2 = await
|
|
55994
|
+
let result2 = await handler100(effectiveClient, safeArgs);
|
|
55527
55995
|
const observedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
55528
55996
|
if (result2._hiveExec?.source === "fallback") usedFallback = true;
|
|
55529
55997
|
if (!result2.isError && credentialRequirement && !credentialRequirement.isConfigured() && result2?.content?.[0]?.type === "text" && result2.content[0].text) {
|
|
@@ -55755,9 +56223,9 @@ function getAllWrappedEndpoints() {
|
|
|
55755
56223
|
const allEndpointsJSON = wrapper;
|
|
55756
56224
|
const updatedTools = [];
|
|
55757
56225
|
for (const endpoint of allTool) {
|
|
55758
|
-
let { tool:
|
|
56226
|
+
let { tool: tool100 } = endpoint;
|
|
55759
56227
|
let matchedItem = null;
|
|
55760
|
-
const originalName =
|
|
56228
|
+
const originalName = tool100.name;
|
|
55761
56229
|
const strippedName = stripProviderPrefix(originalName);
|
|
55762
56230
|
for (const endpoints of Object.values(allEndpointsJSON)) {
|
|
55763
56231
|
for (const item of endpoints) {
|
|
@@ -55783,10 +56251,10 @@ function getAllWrappedEndpoints() {
|
|
|
55783
56251
|
}
|
|
55784
56252
|
if (matchedItem) {
|
|
55785
56253
|
let toolInstanse = {
|
|
55786
|
-
...
|
|
56254
|
+
...tool100,
|
|
55787
56255
|
name: matchedItem.tool.name,
|
|
55788
|
-
title:
|
|
55789
|
-
description: matchedItem.tool.description ??
|
|
56256
|
+
title: tool100.title ?? getToolTitle(matchedItem.tool.name),
|
|
56257
|
+
description: matchedItem.tool.description ?? tool100.description
|
|
55790
56258
|
};
|
|
55791
56259
|
if (!toolInstanse.annotations) {
|
|
55792
56260
|
toolInstanse.annotations = getAnnotationsForTool(toolInstanse.name);
|
|
@@ -55829,10 +56297,10 @@ function getAllWrappedEndpoints() {
|
|
|
55829
56297
|
"signals_",
|
|
55830
56298
|
"fetch_"
|
|
55831
56299
|
];
|
|
55832
|
-
if (selfDescribedPrefixes.some((p) =>
|
|
56300
|
+
if (selfDescribedPrefixes.some((p) => tool100.name.startsWith(p)) || isFreeWriteEndpoint(tool100.name)) {
|
|
55833
56301
|
let toolInstanse = {
|
|
55834
|
-
...
|
|
55835
|
-
title:
|
|
56302
|
+
...tool100,
|
|
56303
|
+
title: tool100.title ?? getToolTitle(tool100.name)
|
|
55836
56304
|
};
|
|
55837
56305
|
if (!toolInstanse.annotations) {
|
|
55838
56306
|
toolInstanse.annotations = getAnnotationsForTool(toolInstanse.name);
|
|
@@ -55858,7 +56326,7 @@ function getAllWrappedEndpoints() {
|
|
|
55858
56326
|
});
|
|
55859
56327
|
} else {
|
|
55860
56328
|
secureLogger.debug(
|
|
55861
|
-
`No match found in allEndpoints for tool: ${
|
|
56329
|
+
`No match found in allEndpoints for tool: ${tool100.name}`
|
|
55862
56330
|
);
|
|
55863
56331
|
}
|
|
55864
56332
|
}
|
|
@@ -55874,9 +56342,9 @@ function getToolByCategory(category) {
|
|
|
55874
56342
|
const allWrappedTools = getAllWrappedEndpoints();
|
|
55875
56343
|
const tools5 = [];
|
|
55876
56344
|
for (const toolName of toolNameList) {
|
|
55877
|
-
const
|
|
55878
|
-
if (
|
|
55879
|
-
tools5.push(
|
|
56345
|
+
const tool100 = allWrappedTools.find((tool101) => tool101.tool.name === toolName);
|
|
56346
|
+
if (tool100) {
|
|
56347
|
+
tools5.push(tool100);
|
|
55880
56348
|
}
|
|
55881
56349
|
}
|
|
55882
56350
|
return tools5;
|
|
@@ -56099,8 +56567,13 @@ var ToolRegistry = [
|
|
|
56099
56567
|
{
|
|
56100
56568
|
category: "Portfolio & Wallet",
|
|
56101
56569
|
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
|
|
56570
|
+
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
56571
|
tools: [
|
|
56572
|
+
// CoinGecko wallet data (default for EVM balances, PnL, DEX trades, transfers)
|
|
56573
|
+
"get_wallet_balances",
|
|
56574
|
+
"get_wallet_pnl",
|
|
56575
|
+
"get_wallet_trades",
|
|
56576
|
+
"get_wallet_transfers",
|
|
56104
56577
|
"alchemy_get_tokens_by_wallet",
|
|
56105
56578
|
"alchemy_get_token_balances_by_wallet",
|
|
56106
56579
|
"alchemy_get_nfts_by_wallet",
|
|
@@ -56131,24 +56604,15 @@ var ToolRegistry = [
|
|
|
56131
56604
|
"alchemy_solana_get_transaction_with_compression_info",
|
|
56132
56605
|
// Moralis wallet intelligence tools
|
|
56133
56606
|
"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
56607
|
"moralis_get_wallet_defi_positions",
|
|
56139
56608
|
"moralis_get_wallet_defi_summary",
|
|
56140
|
-
"moralis_get_wallet_swaps",
|
|
56141
56609
|
"moralis_get_wallet_chain_activity",
|
|
56142
56610
|
"moralis_get_wallet_stats",
|
|
56143
56611
|
"moralis_get_wallet_insight",
|
|
56144
|
-
"moralis_get_wallet_token_balances",
|
|
56145
|
-
"moralis_get_wallet_token_balances_price",
|
|
56146
|
-
"moralis_get_wallet_net_worth",
|
|
56147
56612
|
"moralis_get_wallet_approvals",
|
|
56148
56613
|
"moralis_get_wallet_active_chains",
|
|
56149
56614
|
"moralis_get_native_balance",
|
|
56150
56615
|
"moralis_get_native_balances_batch",
|
|
56151
|
-
"moralis_get_wallet_token_transfers",
|
|
56152
56616
|
"moralis_get_sol_balance",
|
|
56153
56617
|
"moralis_get_sol_token_balances",
|
|
56154
56618
|
"moralis_get_sol_portfolio",
|
|
@@ -56233,7 +56697,6 @@ var ToolRegistry = [
|
|
|
56233
56697
|
"moralis_get_token_metadata_batch",
|
|
56234
56698
|
"moralis_get_token_holders",
|
|
56235
56699
|
"moralis_get_token_transfers",
|
|
56236
|
-
"moralis_get_token_top_traders",
|
|
56237
56700
|
"moralis_get_token_details",
|
|
56238
56701
|
"moralis_get_sol_token_price",
|
|
56239
56702
|
"moralis_get_sol_token_metadata",
|
|
@@ -56470,6 +56933,7 @@ var ToolRegistry = [
|
|
|
56470
56933
|
"get_exchanges_list",
|
|
56471
56934
|
"get_derivatives_exchanges_list",
|
|
56472
56935
|
"get_news",
|
|
56936
|
+
"get_coin_insights",
|
|
56473
56937
|
"moralis_search_entities",
|
|
56474
56938
|
"moralis_get_entity",
|
|
56475
56939
|
"moralis_get_entities_by_category",
|
|
@@ -57047,8 +57511,8 @@ function normalizeToolResponse(result2, toolName, args) {
|
|
|
57047
57511
|
}
|
|
57048
57512
|
|
|
57049
57513
|
// src/utils/clientRouter.ts
|
|
57050
|
-
function getClientForTool(
|
|
57051
|
-
const provider = getProviderDescriptorForTool("",
|
|
57514
|
+
function getClientForTool(metadata104, clients) {
|
|
57515
|
+
const provider = getProviderDescriptorForTool("", metadata104);
|
|
57052
57516
|
if (provider.clientStrategy === "shared-goplus") {
|
|
57053
57517
|
return clients.goplusClient ?? void 0;
|
|
57054
57518
|
}
|
|
@@ -57687,7 +58151,7 @@ function describeErrorCode(code) {
|
|
|
57687
58151
|
// src/utils/agentErrorCopy.ts
|
|
57688
58152
|
function agentErrorCopy(status, context = {}) {
|
|
57689
58153
|
const provider = context.provider || "the provider";
|
|
57690
|
-
const
|
|
58154
|
+
const tool100 = context.tool || "this tool";
|
|
57691
58155
|
switch (status) {
|
|
57692
58156
|
case "ok":
|
|
57693
58157
|
return {
|
|
@@ -57697,12 +58161,12 @@ function agentErrorCopy(status, context = {}) {
|
|
|
57697
58161
|
case "invalid_input":
|
|
57698
58162
|
return {
|
|
57699
58163
|
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 '${
|
|
58164
|
+
next_action: `Fix the arguments: call get_api_endpoint_schema for '${tool100}', use supported values, then retry. Do not retry unchanged.`
|
|
57701
58165
|
};
|
|
57702
58166
|
case "missing_key":
|
|
57703
58167
|
return {
|
|
57704
|
-
cause: `${provider} is not configured on this deployment (no API credential), so '${
|
|
57705
|
-
next_action: `Do not retry '${
|
|
58168
|
+
cause: `${provider} is not configured on this deployment (no API credential), so '${tool100}' cannot return data here.`,
|
|
58169
|
+
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
58170
|
};
|
|
57707
58171
|
case "plan_required":
|
|
57708
58172
|
return {
|
|
@@ -57721,7 +58185,7 @@ function agentErrorCopy(status, context = {}) {
|
|
|
57721
58185
|
};
|
|
57722
58186
|
case "failing":
|
|
57723
58187
|
return {
|
|
57724
|
-
cause: `${provider} returned an unexpected error for '${
|
|
58188
|
+
cause: `${provider} returned an unexpected error for '${tool100}'.`,
|
|
57725
58189
|
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
58190
|
};
|
|
57727
58191
|
}
|
|
@@ -59665,22 +60129,23 @@ function heroTools(endpoints, options = {}) {
|
|
|
59665
60129
|
const tokens = firstArray(payload, ["tokens", "items", "balances"]);
|
|
59666
60130
|
const summarized = tokens.map((token) => {
|
|
59667
60131
|
if (!isRecord3(token)) return token;
|
|
59668
|
-
const
|
|
60132
|
+
const metadata104 = isRecord3(token.tokenMetadata) ? token.tokenMetadata : isRecord3(token.token) ? token.token : void 0;
|
|
59669
60133
|
const fallbackAddress = typeof token.address === "string" && token.address.trim().toLowerCase() === walletLower ? null : token.address ?? null;
|
|
59670
60134
|
const tokenAddress = token.tokenAddress ?? token.mint ?? fallbackAddress;
|
|
59671
60135
|
const isNative = tokenAddress == null;
|
|
59672
|
-
const rawDecimals = token.decimals ??
|
|
60136
|
+
const rawDecimals = token.decimals ?? metadata104?.decimals;
|
|
59673
60137
|
const decimals = typeof rawDecimals === "number" ? rawDecimals : isNative ? 18 : void 0;
|
|
59674
60138
|
const balance = decodeBalance(
|
|
59675
60139
|
token.balance ?? token.amount ?? token.tokenBalance ?? token.uiAmount ?? null,
|
|
59676
60140
|
decimals
|
|
59677
60141
|
);
|
|
59678
60142
|
return {
|
|
59679
|
-
symbol: token.symbol ??
|
|
59680
|
-
name: token.name ??
|
|
60143
|
+
symbol: token.symbol ?? metadata104?.symbol ?? token.tokenSymbol ?? (isNative ? NATIVE_SYMBOLS[chainLabel] ?? null : null),
|
|
60144
|
+
name: token.name ?? metadata104?.name ?? null,
|
|
59681
60145
|
address: tokenAddress,
|
|
59682
60146
|
balance,
|
|
59683
|
-
usd_value: token.totalValueUsd ?? token.valueUsd ?? token.usd_value ?? (typeof token.totalValueUsdCents === "number" ? token.totalValueUsdCents / 100 : usdFromPrices(token, balance))
|
|
60147
|
+
usd_value: token.totalValueUsd ?? token.valueUsd ?? token.usd_value ?? (typeof token.totalValueUsdCents === "number" ? token.totalValueUsdCents / 100 : usdFromPrices(token, balance)),
|
|
60148
|
+
...token.h24_change_pct != null ? { h24_change_pct: token.h24_change_pct } : {}
|
|
59684
60149
|
};
|
|
59685
60150
|
});
|
|
59686
60151
|
const nonZero = summarized.filter(
|
|
@@ -59708,6 +60173,23 @@ function heroTools(endpoints, options = {}) {
|
|
|
59708
60173
|
} : {}
|
|
59709
60174
|
};
|
|
59710
60175
|
};
|
|
60176
|
+
const coingeckoBalances = (payload) => {
|
|
60177
|
+
const attributes = isRecord3(payload.data) && isRecord3(payload.data.attributes) ? payload.data.attributes : {};
|
|
60178
|
+
const rows = Array.isArray(attributes.balances) ? attributes.balances : [];
|
|
60179
|
+
const toNumber = (value) => value == null || !Number.isFinite(Number(value)) ? null : Number(value);
|
|
60180
|
+
return {
|
|
60181
|
+
total_value_usd: toNumber(attributes.total_value_usd),
|
|
60182
|
+
balances: rows.filter(isRecord3).map((row) => ({
|
|
60183
|
+
symbol: row.symbol ?? null,
|
|
60184
|
+
name: row.name ?? null,
|
|
60185
|
+
tokenAddress: row.token_type === "native" ? null : row.address ?? null,
|
|
60186
|
+
balance: row.balance ?? null,
|
|
60187
|
+
decimals: 0,
|
|
60188
|
+
usd_value: toNumber(row.value_usd),
|
|
60189
|
+
h24_change_pct: toNumber(row.h24_price_change_percentage)
|
|
60190
|
+
}))
|
|
60191
|
+
};
|
|
60192
|
+
};
|
|
59711
60193
|
const getWalletPortfolio = {
|
|
59712
60194
|
metadata: {
|
|
59713
60195
|
resource: "dynamic_tools",
|
|
@@ -59717,7 +60199,7 @@ function heroTools(endpoints, options = {}) {
|
|
|
59717
60199
|
tool: {
|
|
59718
60200
|
name: "get_wallet_portfolio",
|
|
59719
60201
|
title: "Get Wallet Portfolio",
|
|
59720
|
-
description:
|
|
60202
|
+
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
60203
|
inputSchema: zodToInputSchema(walletPortfolioSchema),
|
|
59722
60204
|
outputSchema: heroOutputSchema("get_wallet_portfolio"),
|
|
59723
60205
|
annotations: VOLATILE_READ_ANNOTATIONS
|
|
@@ -59748,9 +60230,28 @@ function heroTools(endpoints, options = {}) {
|
|
|
59748
60230
|
}
|
|
59749
60231
|
const normalized = normalizeChain(chain);
|
|
59750
60232
|
const network = ALCHEMY_NETWORKS[normalized];
|
|
60233
|
+
const geckoNetwork = GECKO_NETWORKS[normalized] ?? normalized;
|
|
60234
|
+
let fallbackNote;
|
|
60235
|
+
if (WALLET_BALANCE_NETWORKS.includes(geckoNetwork)) {
|
|
60236
|
+
const result3 = await executeUnderlying("get_wallet_balances", {
|
|
60237
|
+
address,
|
|
60238
|
+
networks: geckoNetwork,
|
|
60239
|
+
per_page: 100
|
|
60240
|
+
}, "get_wallet_portfolio");
|
|
60241
|
+
if (!network || "hive" in result3 && result3.ok) {
|
|
60242
|
+
return respond(result3, format, (payload) => {
|
|
60243
|
+
const balances = coingeckoBalances(payload);
|
|
60244
|
+
return {
|
|
60245
|
+
...trimWalletPortfolio(address, normalized, includeSpam, true)(balances),
|
|
60246
|
+
total_value_usd: balances.total_value_usd
|
|
60247
|
+
};
|
|
60248
|
+
});
|
|
60249
|
+
}
|
|
60250
|
+
fallbackNote = "CoinGecko wallet balances failed for this call; served from Alchemy.";
|
|
60251
|
+
}
|
|
59751
60252
|
if (!network) {
|
|
59752
60253
|
return errorResult5(
|
|
59753
|
-
`Invalid arguments: Unknown chain '${chain}'. Pass an EVM chain name (${Object.keys(ALCHEMY_NETWORKS).slice(0, 6).join(", ")}, \u2026) or "solana".`
|
|
60254
|
+
`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
60255
|
);
|
|
59755
60256
|
}
|
|
59756
60257
|
const result2 = await executeUnderlying("alchemy_get_tokens_by_wallet", {
|
|
@@ -59759,11 +60260,10 @@ function heroTools(endpoints, options = {}) {
|
|
|
59759
60260
|
withMetadata: true,
|
|
59760
60261
|
withPrices: true
|
|
59761
60262
|
}, "get_wallet_portfolio");
|
|
59762
|
-
return respond(
|
|
59763
|
-
|
|
59764
|
-
|
|
59765
|
-
|
|
59766
|
-
);
|
|
60263
|
+
return respond(result2, format, (payload) => ({
|
|
60264
|
+
...trimWalletPortfolio(address, normalized, includeSpam, true)(payload),
|
|
60265
|
+
...fallbackNote ? { fallback_note: fallbackNote } : {}
|
|
60266
|
+
}));
|
|
59767
60267
|
}
|
|
59768
60268
|
};
|
|
59769
60269
|
return [getTokenPrice, checkTokenSafety, getWalletPortfolio];
|
|
@@ -60027,7 +60527,7 @@ var TASK_TOOLSET_ROUTES = {
|
|
|
60027
60527
|
step(
|
|
60028
60528
|
"balances",
|
|
60029
60529
|
"Read current wallet value and balances.",
|
|
60030
|
-
"
|
|
60530
|
+
"get_wallet_balances",
|
|
60031
60531
|
"alchemy_get_token_balances_by_wallet",
|
|
60032
60532
|
PROVIDER_FALLBACK
|
|
60033
60533
|
),
|
|
@@ -60066,7 +60566,7 @@ var TASK_TOOLSET_ROUTES = {
|
|
|
60066
60566
|
step(
|
|
60067
60567
|
"balances",
|
|
60068
60568
|
"Anchor activity to the current wallet state.",
|
|
60069
|
-
"
|
|
60569
|
+
"get_wallet_balances",
|
|
60070
60570
|
"alchemy_get_native_balance",
|
|
60071
60571
|
PROVIDER_FALLBACK
|
|
60072
60572
|
),
|
|
@@ -61044,18 +61544,18 @@ var TASK_TOOLSET_CATALOG = [
|
|
|
61044
61544
|
requiredIdentifiers: ["wallet address", "chain"],
|
|
61045
61545
|
optionalIdentifiers: ["token contract", "transaction hash", "time range"],
|
|
61046
61546
|
recommendedTools: [
|
|
61547
|
+
"get_wallet_balances",
|
|
61548
|
+
"get_wallet_pnl",
|
|
61549
|
+
"get_wallet_trades",
|
|
61550
|
+
"get_wallet_transfers",
|
|
61047
61551
|
"alchemy_get_tokens_by_wallet",
|
|
61048
61552
|
"alchemy_get_token_balances_by_wallet",
|
|
61049
61553
|
"alchemy_get_nfts_by_wallet",
|
|
61050
61554
|
"alchemy_get_asset_transfers",
|
|
61051
61555
|
"alchemy_get_native_balance",
|
|
61052
61556
|
"moralis_get_wallet_history",
|
|
61053
|
-
"moralis_get_wallet_token_balances",
|
|
61054
|
-
"moralis_get_wallet_net_worth",
|
|
61055
|
-
"moralis_get_wallet_profitability_summary",
|
|
61056
61557
|
"moralis_get_wallet_defi_positions",
|
|
61057
61558
|
"moralis_get_wallet_defi_summary",
|
|
61058
|
-
"moralis_get_wallet_swaps",
|
|
61059
61559
|
"moralis_get_wallet_chain_activity",
|
|
61060
61560
|
"moralis_get_wallet_insight",
|
|
61061
61561
|
"helius_get_wallet_balances",
|
|
@@ -63835,7 +64335,7 @@ async function runMcpProtocolHealth(options = {}) {
|
|
|
63835
64335
|
checks.push(
|
|
63836
64336
|
await timedCheck("tools_list_root_surface", async () => {
|
|
63837
64337
|
const listed = await client2.listTools();
|
|
63838
|
-
const names = listed.tools.map((
|
|
64338
|
+
const names = listed.tools.map((tool100) => tool100.name);
|
|
63839
64339
|
const expectedCount = getRootVisibleToolCount();
|
|
63840
64340
|
const expectedTools = [...ROOT_VISIBLE_TOOL_NAMES];
|
|
63841
64341
|
if (listed.tools.length !== expectedCount) {
|
|
@@ -67103,6 +67603,10 @@ var TOOL_PROBE_ARGS = {
|
|
|
67103
67603
|
},
|
|
67104
67604
|
get_multi_tokens: { network: "eth", addresses: ETH_USDC },
|
|
67105
67605
|
get_token_lists: { asset_platform_id: "ethereum" },
|
|
67606
|
+
get_wallet_balances: { address: ETH_WALLET, networks: "eth", per_page: 5 },
|
|
67607
|
+
get_wallet_pnl: { address: ETH_WALLET, networks: "eth", per_page: 5 },
|
|
67608
|
+
get_wallet_trades: { network: "eth", address: ETH_WALLET, per_page: 5 },
|
|
67609
|
+
get_wallet_transfers: { network: "eth", address: ETH_WALLET, per_page: 5 },
|
|
67106
67610
|
coingecko_get_onchain_token_top_traders: {
|
|
67107
67611
|
network: COINGECKO_TOP_TRADERS_NETWORK,
|
|
67108
67612
|
address: COINGECKO_TOP_TRADERS_TOKEN,
|
|
@@ -69226,8 +69730,8 @@ var WORKFLOW_REGRESSION_CASES = [
|
|
|
69226
69730
|
expectedTopToolset: "wallet_investigation",
|
|
69227
69731
|
expectedToolsets: ["wallet_investigation"],
|
|
69228
69732
|
expectedCategoryTool: "get_portfolio_wallet_endpoints",
|
|
69229
|
-
expectedSchemaTool: "
|
|
69230
|
-
expectedProvider: "
|
|
69733
|
+
expectedSchemaTool: "get_wallet_pnl",
|
|
69734
|
+
expectedProvider: "CoinGecko"
|
|
69231
69735
|
},
|
|
69232
69736
|
{
|
|
69233
69737
|
id: "wallet-defi-pnl",
|
|
@@ -69246,8 +69750,8 @@ var WORKFLOW_REGRESSION_CASES = [
|
|
|
69246
69750
|
expectedTopToolset: "wallet_investigation",
|
|
69247
69751
|
expectedToolsets: ["wallet_investigation"],
|
|
69248
69752
|
expectedCategoryTool: "get_portfolio_wallet_endpoints",
|
|
69249
|
-
expectedSchemaTool: "
|
|
69250
|
-
expectedProvider: "
|
|
69753
|
+
expectedSchemaTool: "get_wallet_trades",
|
|
69754
|
+
expectedProvider: "CoinGecko"
|
|
69251
69755
|
},
|
|
69252
69756
|
{
|
|
69253
69757
|
id: "malicious-address",
|
|
@@ -72204,7 +72708,7 @@ function getRootToolSet() {
|
|
|
72204
72708
|
tools: Array.from(toolsByName.values()),
|
|
72205
72709
|
visibleTools: ROOT_VISIBLE_TOOL_ORDER.map(
|
|
72206
72710
|
(name) => compatibilityByName.get(name)
|
|
72207
|
-
).filter((
|
|
72711
|
+
).filter((tool100) => Boolean(tool100))
|
|
72208
72712
|
};
|
|
72209
72713
|
secureLogger.info("Root MCP tool catalog cached", {
|
|
72210
72714
|
actualToolCount: actualToolEndpoints.length,
|
|
@@ -72476,21 +72980,21 @@ var HiveMCPServer = class {
|
|
|
72476
72980
|
}
|
|
72477
72981
|
registerAllTools() {
|
|
72478
72982
|
const registeredTools = this.scope.kind === "root" ? this.compatibilityToolEndpoints.map((endpoint) => endpoint.tool) : this.visibleTools;
|
|
72479
|
-
for (const
|
|
72480
|
-
const inputSchema =
|
|
72983
|
+
for (const tool100 of registeredTools) {
|
|
72984
|
+
const inputSchema = tool100.inputSchema;
|
|
72481
72985
|
const inputZodSchema = memoizedJsonSchemaToZodInputSchema(inputSchema);
|
|
72482
|
-
const outputSchema =
|
|
72986
|
+
const outputSchema = tool100.outputSchema;
|
|
72483
72987
|
const outputZodShape = outputSchema?.type === "object" ? memoizedJsonSchemaToZodOutputSchema(outputSchema) : void 0;
|
|
72484
|
-
const toolName =
|
|
72485
|
-
const toolMeta =
|
|
72988
|
+
const toolName = tool100.name;
|
|
72989
|
+
const toolMeta = tool100._meta;
|
|
72486
72990
|
this.server.registerTool(
|
|
72487
72991
|
toolName,
|
|
72488
72992
|
{
|
|
72489
|
-
title:
|
|
72490
|
-
description:
|
|
72993
|
+
title: tool100.title,
|
|
72994
|
+
description: tool100.description,
|
|
72491
72995
|
inputSchema: inputZodSchema,
|
|
72492
72996
|
...outputZodShape && { outputSchema: outputZodShape },
|
|
72493
|
-
annotations:
|
|
72997
|
+
annotations: tool100.annotations,
|
|
72494
72998
|
// Surfaces response-size headroom annotations (plan 1.15) in
|
|
72495
72999
|
// SDK-generated tools/list responses.
|
|
72496
73000
|
...toolMeta && { _meta: toolMeta }
|