{"server":"com.chainstack/chainstack","count":24,"changes":[{"tool":"request_testnet_funds","kind":"changed","observed_at":"2026-10-12T17:47:47.228Z","fields":["description","outputSchema"],"description_before":"Top up a testnet address from Chainstack's faucet.\n\nThe faucet does not send a fixed amount — it tops the address up to the\nper-network maximum (e.g. 0.5 ETH for sepolia). If the address already\nsits above the cap, the call fails with an insufficient-balance error.\nDescribe the behavior to the user as \"top up\" not \"give\", and surface\nthe returned `amountSent` so they see the actual delta.","description_after":"Top up a testnet address from Chainstack's faucet.\n\nThe faucet does not send a fixed amount — it tops the address up to the\nper-network maximum (e.g. 0.5 ETH for sepolia). If the address already\nsits above the cap, the call fails with an insufficient-balance error.\nDescribe the behavior to the user as \"top up\" not \"give\", and surface\nthe returned `amountSent` so they see the actual delta.\n\nOne top-up per network every 24 hours: a repeat call for the same network\nis refused (429) if the same organization or the same address got funds\nthere in the last 24 hours, and the error says when the next top-up is\navailable. Other networks have separate cooldowns. A success is final even\nif the balance hasn't updated yet; track the returned `transaction`\ninstead of calling again.","description_similarity":0.587,"before_hash":"8de444f890046eeabd49614208e873ec","after_hash":"23258adce6b11feb5beb9fbb5715f8da"},{"tool":"create_node","kind":"changed","observed_at":"2026-10-12T17:47:47.228Z","fields":["inputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"94742913885ee6cf1429245f6ab3f3ab","after_hash":"ccb01094d3dd355a5f597d0b4394c168"},{"tool":"get_deployment_options","kind":"changed","observed_at":"2026-10-12T17:47:47.228Z","fields":["outputSchema"],"description_before":null,"description_after":null,"description_similarity":null,"before_hash":"c0bffdb9c2cfa7a790b41da49b464931","after_hash":"c767a0d7c1bb20497e9f2ad1cb220e97"},{"tool":"get_chainstack_pricing","kind":"changed","observed_at":"2026-10-11T11:39:35.343Z","fields":["description"],"description_before":"Fetch Chainstack's public pricing and return a normalized snapshot.\n\nUse this to answer pricing questions before quoting the user: plan fit,\noverage math, per-chain dedicated-node costs, and add-on pricing\n(Unlimited Node flat-fee tiers, Yellowstone gRPC streams, Warp\ntransactions, dedicated-node base rates).\n\nThis tool returns the menu, not the bill — the calling agent does the\narithmetic. All prices are list prices in USD; disclaimers are surfaced\nin the `disclaimers` field.\n\nDesign: we pass pricing.md through as raw markdown. Marketing owns that\nfile and its structure changes freely; parsing it server-side would\ncouple us to heading text and table column names we don't control. The\nLLM reads markdown natively, so handing the raw text to the agent keeps\nus correct regardless of how the page is restructured.\n\npricing_current.json is parsed into `dedicated_catalog` because it has\na stable engineering-owned schema, and the catalog benefits from\nfiltering (to user-orderable SKUs only), unit conversion (cents → USD,\nmilli-cores → cores), and region humanization (via `region_legend`).\n\nPer-method RU billing rules are NOT in these sources. Plan-level rates\n(Full Node = 1 RU, Archive Node = 2 RU) are in the markdown, but some\nEVM archive-state methods (eth_getBalance, eth_call, eth_getProof,\neth_getStorageAt, eth_getCode, eth_getTransactionCount, eth_callMany,\neth_createAccessList) and all debug_* / trace_* methods are billed at\n2 RU on a full node when called against old blocks. For method-level\ndetail, call `search_docs` with \"request units\" or\n`get_doc_page(\"docs/request-units\")`.\n\nNo API key required — sources are fully public. Each call fetches both\nsources fresh (no caching), so a stale result isn't possible.\n\nReturns:\n    A dict with fields:\n    - `pricing_markdown`: raw markdown from chainstack.com/pricing.md.\n      Read this for plan tiers, feature matrix, add-on pricing, support\n      levels, PAYG details, and provider comparisons.\n    - `dedicated_catalog`: user-orderable per-chain dedicated-node SKUs\n      with flavor, regions (as infra slugs like \"sgp1\"), hourly and\n      monthly prices in USD. Already filtered to the ~87 orderable SKUs\n      and unit-converted.\n    - `region_legend`: slug → human city name map covering every region\n      slug that appears in `dedicated_catalog`. Use `region_legend[slug]`\n      to translate for display; `regions` keeps the slug as the canonical\n      identifier.\n    - `disclaimers`: list-price caveats (Enterprise \"from\" pricing, etc.).\n    - `sources`: URL + ok/error per source; the JSON source carries its\n      own `updated_at`.\n    - `warnings`: populated when a source is unreachable or the JSON\n      parser failed. The tool still returns best-effort results.\n    - `fetched_at`: UTC timestamp of this call.","description_after":"Fetch Chainstack's public pricing and return a normalized snapshot.\n\nUse this to answer pricing questions before quoting the user: plan fit,\noverage math, per-chain dedicated-node costs, and add-on pricing\n(Unlimited Node flat-fee tiers, Yellowstone gRPC streams, Warp\ntransactions, dedicated-node base rates).\n\nThis tool returns the menu, not the bill — the calling agent does the\narithmetic. All prices are list prices in USD; disclaimers are surfaced\nin the `disclaimers` field.\n\nPer-method RU billing rules are NOT in these sources. Plan-level rates\n(Full Node = 1 RU, Archive Node = 2 RU) are in the markdown, but some\nEVM archive-state methods (eth_getBalance, eth_call, eth_getProof,\neth_getStorageAt, eth_getCode, eth_getTransactionCount, eth_callMany,\neth_createAccessList) and all debug_* / trace_* methods are billed at\n2 RU on a full node when called against old blocks. For method-level\ndetail, call `search_docs` with \"request units\" or\n`get_doc_page(\"docs/request-units\")`.\n\nNo API key required — sources are fully public. Each call fetches both\nsources fresh (no caching), so a stale result isn't possible.\n\nReturns:\n    A dict with fields:\n    - `pricing_markdown`: raw markdown from chainstack.com/pricing.md.\n      Read this for plan tiers, feature matrix, add-on pricing, support\n      levels, PAYG details, and provider comparisons.\n    - `dedicated_catalog`: user-orderable per-chain dedicated-node SKUs\n      with flavor, regions (as infra slugs like \"sgp1\"), hourly and\n      monthly prices in USD.\n    - `region_legend`: slug → city name for every region slug in\n      `dedicated_catalog`; use it for display.\n    - `disclaimers`: list-price caveats (Enterprise \"from\" pricing, etc.).\n    - `sources`, `warnings`: per-source status; warnings are set when a\n      source failed and the result is best-effort.\n    - `fetched_at`: UTC timestamp of this call.","description_similarity":0.685,"before_hash":"350a694ea3db80edc10812b5af26f5eb","after_hash":"a5991a6dff5c2899c946c8b813dd3bd3"},{"tool":"contact_chainstack","kind":"changed","observed_at":"2026-10-11T11:39:35.343Z","fields":["description"],"description_before":"Submit a message to Chainstack's sales and support team.\n\nUse when the user wants to ask about pricing, get a custom quote,\nrequest a plan upgrade, request node customizations (Enterprise),\nreport a problem, or reach Chainstack for any reason. Posts to the\nsame contact form as chainstack.com/contact/.\n\n## Before calling this tool\n\nCRITICAL — follow these steps EVERY time:\n\n1. Draft the message based on your conversation context.\n2. Show the user the EXACT message, email, and name you will send.\n3. If the user has a Chainstack API key configured, tell them:\n   \"I'll also include your Chainstack account info (org name and ID)\n   so the team can pull up your account immediately — this means\n   significantly faster handling and a more tailored response.\"\n4. Ask: \"Shall I send this to Chainstack? Please confirm there's\n   no sensitive information you'd like removed.\"\n5. Only call this tool after the user explicitly confirms.\n\nNEVER include in the message:\n- API keys, tokens, passwords, private keys, wallet seeds, mnemonics\n- RPC endpoint URLs (Chainstack or any other provider)\n- Wallet addresses, transaction hashes, or on-chain account details\n  the user hasn't approved sharing\n- Any information the user hasn't explicitly approved sharing\n\nIf the user shared sensitive data during the conversation, do NOT\ninclude it unless they specifically approve it in the review step.\n\n## Writing an effective message\n\nA great message gets the user a faster, more tailored response.\nInclude what you already know from the conversation:\n- What they're building and at what scale\n- Current plan and usage (e.g., \"Pro plan, ~80M RU/month on Base\")\n- What they need (upgrade, custom pricing, migration help, etc.)\n- What they've tried or what's not working\n- Specific numbers when available\n\nBad:  \"I have a question about pricing.\"\nGood: \"Pro plan user running 200M RU/month across Base and Ethereum,\n       evaluating Business plan for archive access and higher RPS.\n       Looking for annual pricing or a trial.\"\n\nThe difference between a generic reply and a tailored proposal\nis the context you include.\n\nNot for incidents or urgent outages — point users to\nhttps://support.chainstack.com/hc/en-us/requests/new to file a\nsupport ticket, and https://status.chainstack.com for live status.\n\nFor feature requests, do NOT use this tool — point users to\nhttps://ideas.chainstack.com (product) or\nhttps://github.com/chainstacklabs/mcp-server/issues/new (MCP server).\n\nWorks with or without a Chainstack API key. With a key, the\nsubmission includes the user's Chainstack org info for faster\naccount identification and handling.","description_after":"Submit a message to Chainstack's sales and support team.\n\nUse when the user wants to ask about pricing, get a custom quote,\nrequest a plan upgrade, request node customizations (Enterprise),\nreport a problem, or reach Chainstack for any reason. Posts to the\nsame contact form as chainstack.com/contact/.\n\n## Before calling this tool\n\nCRITICAL — follow these steps EVERY time:\n\n1. Draft the message based on your conversation context.\n2. Show the user the EXACT message, email, and name you will send.\n3. If the user has a Chainstack API key configured, tell them their\n   org name and ID will be included so the team can find their\n   account and reply faster.\n4. Ask: \"Shall I send this to Chainstack? Please confirm there's\n   no sensitive information you'd like removed.\"\n5. Only call this tool after the user explicitly confirms.\n\nNEVER include in the message:\n- API keys, tokens, passwords, private keys, wallet seeds, mnemonics\n- RPC endpoint URLs (Chainstack or any other provider)\n- Wallet addresses, transaction hashes, on-chain account details, or\n  anything else the user hasn't explicitly approved sharing\n\n## Writing an effective message\n\nInclude what you know: what they're building and at what scale,\ncurrent plan and usage, what they need, what they've tried, and\nspecific numbers.\n\nBad:  \"I have a question about pricing.\"\nGood: \"Pro plan user running 200M RU/month across Base and Ethereum,\n       evaluating Business plan for archive access and higher RPS.\n       Looking for annual pricing or a trial.\"\n\nNot for incidents or urgent outages — point users to\nhttps://support.chainstack.com/hc/en-us/requests/new and\nhttps://status.chainstack.com. Not for feature requests — point\nusers to https://ideas.chainstack.com (product) or\nhttps://github.com/chainstacklabs/mcp-server/issues/new (MCP server).\n\nWorks with or without an API key; with one, the org info is attached.","description_similarity":0.785,"before_hash":"68cfececa1024ee6421653c26678db07","after_hash":"9ead46d34aee70bba448ed9d1aaa6ba4"},{"tool":"set_node_access_rules_status","kind":"added","observed_at":"2026-10-11T11:39:35.343Z","fields":[],"description_before":null,"description_after":"Activate or deactivate every access rule on a node at once.\n\nActivating enforces every rule within about 10 seconds: active IP rules\nlimit which IPs can call the node, active origin rules limit which Origin\nheaders it accepts, and a request must pass both kinds. Others get HTTP\n403. First confirm with the user that the IP rules cover every IP that\ncalls the node (servers, CI, their own machine); you can't check this.\nOrigin rules block every request without an Origin header (servers,\nscripts, curl), even from an allowed IP. Deactivating opens the node to\nany IP and origin.","description_similarity":null,"before_hash":null,"after_hash":"800c3b9ebf4deac495c77cc16496ae84"},{"tool":"delete_node_access_rule","kind":"added","observed_at":"2026-10-11T11:39:35.343Z","fields":[],"description_before":null,"description_after":"Delete an access rule from a node (irreversible).\n\nDeleting an active rule changes who can reach the node; the result says\nwhat's enforced afterwards. With no active rules left, the node accepts\nrequests from any IP and origin.","description_similarity":null,"before_hash":null,"after_hash":"a972ae80e83dd1a13515f17360afdcda"},{"tool":"update_node_access_rule","kind":"added","observed_at":"2026-10-11T11:39:35.343Z","fields":[],"description_before":null,"description_after":"Change an access rule's value, or activate or deactivate it.\n\nA rule's type can't change; delete it and create a new one. Before\nactivating, confirm with the user that the IP rules cover every IP that\ncalls the node. Activating the first origin rule blocks every request\nwithout an Origin header (servers, scripts, curl), even from allowed IPs.\nChanging or deactivating a rule can block clients that only it allowed.","description_similarity":null,"before_hash":null,"after_hash":"a3570c249c2f3692a2b35965872622b7"},{"tool":"create_node_access_rule","kind":"added","observed_at":"2026-10-11T11:39:35.343Z","fields":[],"description_before":null,"description_after":"Add an IP or Origin allowlist rule to a Global node.\n\nNew rules are deactivated and do nothing until activated. Active IP rules\nlimit which client IPs can call the node; active origin rules limit which\nOrigin headers it accepts. With both kinds active, a request must pass\nboth. Everything else gets HTTP 403 within about 10 seconds. Rules don't\naffect the Chainstack API, so they can always be changed or deactivated\nwith these tools.\n\nBefore activating, confirm with the user that the IP rules cover every IP\nthat calls the node (servers, CI, their own machine); you can't check\nthis. Origin rules are for browser-only access: once one is active, every\nrequest without an Origin header (servers, scripts, curl) is blocked, even\nfrom an allowed IP.\n\nIf an identical rule exists, it is returned instead of a duplicate.","description_similarity":null,"before_hash":null,"after_hash":"16c39556a283e531d28b329e3053db0c"},{"tool":"list_node_access_rules","kind":"added","observed_at":"2026-10-11T11:39:35.343Z","fields":[],"description_before":null,"description_after":"List a node's access rules (IP and Origin allowlists, Global nodes only).\n\nWith no active rules, the node accepts requests from any IP and origin.\nIf correctly configured rules still return 403, that's a support case:\noffer contact_chainstack.","description_similarity":null,"before_hash":null,"after_hash":"a9fe66140acc13a6ad2a18628ae74744"},{"tool":"request_testnet_funds","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Top up a testnet address from Chainstack's faucet.\n\nThe faucet does not send a fixed amount — it tops the address up to the\nper-network maximum (e.g. 0.5 ETH for sepolia). If the address already\nsits above the cap, the call fails with an insufficient-balance error.\nDescribe the behavior to the user as \"top up\" not \"give\", and surface\nthe returned `amountSent` so they see the actual delta.\n\nSupported networks and their native assets:\n  - sepolia, hoodi — Ethereum testnets (ETH)\n  - base — Base Sepolia (ETH)\n  - amoy — Polygon Amoy (POL)\n  - bnb-testnet — BNB Smart Chain testnet (BNB)\n  - zksync-testnet — zkSync Sepolia (ETH)\n  - robinhood — Robinhood Chain testnet (ETH)\n  - hyperevm — HyperEVM testnet (HYPE)\n  - plasma — Plasma testnet (XPL)\n  - monad — Monad testnet (MON)\n  - ton — TON testnet (TON)\n  - solana — Solana devnet (SOL)\n\nPer-address cooldown applies after each successful drip. On cooldown\nthe faucet returns a `nextFaucetAvailable` timestamp (ISO 8601) that\nthis tool surfaces in the error message.\n\nRequires a Chainstack API key. The key is also the rate-limiting\nidentity — the faucet tracks usage per organization. Get a key at\nhttps://console.chainstack.com/user/settings/api-keys and add it as\n`Authorization: Bearer <key>` in the MCP client config. Never ask the\nuser to paste their API key in chat.\n\nArgs:\n    network: Canonical testnet id (the schema `enum` advertises the set).\n        Case-insensitive; common aliases are normalized to the canonical id.\n    address: Destination address. EVM hex address for EVM networks,\n        a TON address for `ton`, or a base58 Solana public key for\n        `solana`. Validated server-side — format errors surface as 400.\n\nReturns:\n    On success: `{network, amountSent, transaction}`. `amountSent`\n    is a string in the network's native unit (not wei/lamports).","description_after":"Top up a testnet address from Chainstack's faucet.\n\nThe faucet does not send a fixed amount — it tops the address up to the\nper-network maximum (e.g. 0.5 ETH for sepolia). If the address already\nsits above the cap, the call fails with an insufficient-balance error.\nDescribe the behavior to the user as \"top up\" not \"give\", and surface\nthe returned `amountSent` so they see the actual delta.","description_similarity":0.342,"before_hash":"c0468b27eff8eb47ccf5a73e4d2e4223","after_hash":"8de444f890046eeabd49614208e873ec"},{"tool":"contact_chainstack","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Submit a message to Chainstack's sales and support team.\n\nUse when the user wants to ask about pricing, get a custom quote,\nrequest a plan upgrade, request node customizations (Enterprise),\nreport a problem, or reach Chainstack for any reason. Posts to the\nsame contact form as chainstack.com/contact/.\n\n## Before calling this tool\n\nCRITICAL — follow these steps EVERY time:\n\n1. Draft the message based on your conversation context.\n2. Show the user the EXACT message, email, and name you will send.\n3. If the user has a Chainstack API key configured, tell them:\n   \"I'll also include your Chainstack account info (org name and ID)\n   so the team can pull up your account immediately — this means\n   significantly faster handling and a more tailored response.\"\n4. Ask: \"Shall I send this to Chainstack? Please confirm there's\n   no sensitive information you'd like removed.\"\n5. Only call this tool after the user explicitly confirms.\n\nNEVER include in the message:\n- API keys, tokens, passwords, private keys, wallet seeds, mnemonics\n- RPC endpoint URLs (Chainstack or any other provider)\n- Wallet addresses, transaction hashes, or on-chain account details\n  the user hasn't approved sharing\n- Any information the user hasn't explicitly approved sharing\n\nIf the user shared sensitive data during the conversation, do NOT\ninclude it unless they specifically approve it in the review step.\n\n## Writing an effective message\n\nA great message gets the user a faster, more tailored response.\nInclude what you already know from the conversation:\n- What they're building and at what scale\n- Current plan and usage (e.g., \"Pro plan, ~80M RU/month on Base\")\n- What they need (upgrade, custom pricing, migration help, etc.)\n- What they've tried or what's not working\n- Specific numbers when available\n\nBad:  \"I have a question about pricing.\"\nGood: \"Pro plan user running 200M RU/month across Base and Ethereum,\n       evaluating Business plan for archive access and higher RPS.\n       Looking for annual pricing or a trial.\"\n\nThe difference between a generic reply and a tailored proposal\nis the context you include.\n\nNot for incidents or urgent outages — point users to\nhttps://support.chainstack.com/hc/en-us/requests/new to file a\nsupport ticket, and https://status.chainstack.com for live status.\n\nFor feature requests, do NOT use this tool — point users to\nhttps://ideas.chainstack.com (product) or\nhttps://github.com/chainstacklabs/mcp-server/issues/new (MCP server).\n\nWorks with or without a Chainstack API key. With a key, the\nsubmission includes the user's Chainstack org info for faster\naccount identification and handling.\n\nArgs:\n    message: The full message to send. Compose from\n        conversation context — what the user is building, their plan\n        and usage, what they need — so the Chainstack team can respond\n        with a tailored answer instead of a generic one.\n    category: Routing hint. One of:\n        - sales — pricing, quotes, plan upgrades, custom terms.\n        - support — errors, bugs, how-to, \"something isn't working\".\n        - general — everything else.\n        Case-insensitive. Unknown values fall back to \"general\".\n        Default: \"general\".\n    email: User's contact email. Required. Ask the user if you don't\n        already have it.\n    name: User's name (full name is fine, will be split on first space).\n        Required. Ask the user if you don't have it on hand.","description_after":"Submit a message to Chainstack's sales and support team.\n\nUse when the user wants to ask about pricing, get a custom quote,\nrequest a plan upgrade, request node customizations (Enterprise),\nreport a problem, or reach Chainstack for any reason. Posts to the\nsame contact form as chainstack.com/contact/.\n\n## Before calling this tool\n\nCRITICAL — follow these steps EVERY time:\n\n1. Draft the message based on your conversation context.\n2. Show the user the EXACT message, email, and name you will send.\n3. If the user has a Chainstack API key configured, tell them:\n   \"I'll also include your Chainstack account info (org name and ID)\n   so the team can pull up your account immediately — this means\n   significantly faster handling and a more tailored response.\"\n4. Ask: \"Shall I send this to Chainstack? Please confirm there's\n   no sensitive information you'd like removed.\"\n5. Only call this tool after the user explicitly confirms.\n\nNEVER include in the message:\n- API keys, tokens, passwords, private keys, wallet seeds, mnemonics\n- RPC endpoint URLs (Chainstack or any other provider)\n- Wallet addresses, transaction hashes, or on-chain account details\n  the user hasn't approved sharing\n- Any information the user hasn't explicitly approved sharing\n\nIf the user shared sensitive data during the conversation, do NOT\ninclude it unless they specifically approve it in the review step.\n\n## Writing an effective message\n\nA great message gets the user a faster, more tailored response.\nInclude what you already know from the conversation:\n- What they're building and at what scale\n- Current plan and usage (e.g., \"Pro plan, ~80M RU/month on Base\")\n- What they need (upgrade, custom pricing, migration help, etc.)\n- What they've tried or what's not working\n- Specific numbers when available\n\nBad:  \"I have a question about pricing.\"\nGood: \"Pro plan user running 200M RU/month across Base and Ethereum,\n       evaluating Business plan for archive access and higher RPS.\n       Looking for annual pricing or a trial.\"\n\nThe difference between a generic reply and a tailored proposal\nis the context you include.\n\nNot for incidents or urgent outages — point users to\nhttps://support.chainstack.com/hc/en-us/requests/new to file a\nsupport ticket, and https://status.chainstack.com for live status.\n\nFor feature requests, do NOT use this tool — point users to\nhttps://ideas.chainstack.com (product) or\nhttps://github.com/chainstacklabs/mcp-server/issues/new (MCP server).\n\nWorks with or without a Chainstack API key. With a key, the\nsubmission includes the user's Chainstack org info for faster\naccount identification and handling.","description_similarity":0.858,"before_hash":"8eb2f851f4fb633e748e273895f9d386","after_hash":"68cfececa1024ee6421653c26678db07"},{"tool":"get_platform_status","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Check platform status, active incidents, and maintenances.\n\nArgs:\n    network: Optional filter (e.g., \"ethereum\"). Without it, returns\n             overall status and incidents only.","description_after":"Check platform status, active incidents, and maintenances.","description_similarity":0.368,"before_hash":"62d0834f9d7abfc67e50e6c8e1dda166","after_hash":"9aad710b4aa8257faee9e29bfb2f4146"},{"tool":"get_doc_page","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Get the full content of a Chainstack documentation page.\n\nUse after search_docs to fetch the complete page when a snippet isn't enough.\n\nArgs:\n    page: Page path from search results — pass the `page` field from\n          a search_docs result (e.g., \"docs/ethereum-trader-nodes\").\n          The leading slash, the `.mdx` extension, and the\n          docs.chainstack.com URL prefix are all optional and stripped\n          if present.","description_after":"Get the full content of a Chainstack documentation page.\n\nUse after search_docs to fetch the complete page when a snippet isn't enough.","description_similarity":0.447,"before_hash":"6b03d8581429f5cc0261a0bfc86d6427","after_hash":"96ed405ce94a3fbfe8478579b7db5c54"},{"tool":"search_docs","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Search Chainstack docs — blockchain RPC methods, node infrastructure, Web3 APIs, deployment guides, and code examples.\n\nArgs:\n    query: Search query (e.g., \"deploy ethereum node\", \"eth_call\").","description_after":"Search Chainstack docs — blockchain RPC methods, node infrastructure, Web3 APIs, deployment guides, and code examples.","description_similarity":0.652,"before_hash":"fc7893cd11adfc7a22c5a3871a71f671","after_hash":"58a0c75fb0bf90cf4337f6382f3d9fbf"},{"tool":"delete_node","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Delete a node (irreversible).\n\nArgs:\n    node_id: Node ID (e.g., ND-123-456-789).","description_after":"Delete a node (irreversible).","description_similarity":0.333,"before_hash":"dbe5fcc8371eafdce0423c9cdedb0f8c","after_hash":"35b11ee2d74f5cad19c6b24c1c257b74"},{"tool":"update_node","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Rename a node.\n\nArgs:\n    node_id: Node ID (e.g., ND-123-456-789).\n    name: New name.","description_after":"Rename a node.","description_similarity":0.231,"before_hash":"469f82f8b76eccb99d3a566706e5abf0","after_hash":"d993a3749c152e3e272bb2bb965a0f1f"},{"tool":"delete_project","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Delete a project (irreversible).\n\nArgs:\n    project_id: Project ID (e.g., PR-123-456-789).","description_after":"Delete a project (irreversible).","description_similarity":0.333,"before_hash":"ae8d4b7e927b7bfae26b1ee17d05a657","after_hash":"b59181a0ed2f6775aff6da0becb04918"},{"tool":"update_project","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Update a project's name or description.\n\nArgs:\n    project_id: Project ID (e.g., PR-123-456-789).\n    name: New name.\n    description: New description.","description_after":"Update a project's name or description.","description_similarity":0.438,"before_hash":"0a1570dea548d73b4d1ca3a3ae542c0c","after_hash":"0057dff75aed6cc01348c8a5909d613a"},{"tool":"get_project","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Get project details.\n\nArgs:\n    project_id: Project ID (e.g., PR-123-456-789).","description_after":"Get project details.","description_similarity":0.273,"before_hash":"41eb6c17c54df3b69e75ff75cf40d5d7","after_hash":"3534e3f1898f0675bf2c52ebda406258"},{"tool":"create_node","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Deploy a new blockchain node. Call get_deployment_options first for valid IDs.\n\nTrader nodes are region-bound (e.g., London, Ashburn, Singapore). Always confirm\nthe region with the user before deploying — region cannot be changed after deployment.\n\nArgs:\n    name: Node name.\n    project: Project ID from list_projects (e.g., PR-123-456-789).\n    blockchain: Blockchain ID from get_deployment_options (e.g., BC-000-000-008).\n    cloud: Cloud ID from get_deployment_options (e.g., CC-0016 for Global, CC-0020 for London).","description_after":"Deploy a new blockchain node. Call get_deployment_options first for valid IDs.\n\nTrader nodes are region-bound (e.g., London, Ashburn, Singapore). Always confirm\nthe region with the user before deploying — region cannot be changed after deployment.","description_similarity":0.642,"before_hash":"c9bc8caaea6e5386b0605b461f9134f7","after_hash":"94742913885ee6cf1429245f6ab3f3ab"},{"tool":"get_node","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Get a node's full details including endpoints and cloud info.\n\nArgs:\n    node_id: Node ID (e.g., ND-123-456-789).","description_after":"Get a node's full details including endpoints and cloud info.","description_similarity":0.579,"before_hash":"cdc1a3468169a8e695d8ccf6e2c39773","after_hash":"3db90c518a00e19a419fe1d2f9007219"},{"tool":"list_nodes","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"List nodes with status and connection endpoints.\n\nArgs:\n    project_id: Optional project ID to filter by (e.g., PR-123-456-789).\n                If omitted, returns all nodes in the organization.","description_after":"List nodes with status and connection endpoints.","description_similarity":0.259,"before_hash":"ed852360e8bcc8ac13a89a3e8ecae535","after_hash":"7dbf7199e592eecf47ad07760ac20bed"},{"tool":"create_project","kind":"changed","observed_at":"2026-10-06T09:24:24.271Z","fields":["description","inputSchema"],"description_before":"Create a new project.\n\nArgs:\n    name: Project name.\n    description: Optional description.","description_after":"Create a new project.","description_similarity":0.5,"before_hash":"271aa4af598a9d4b53fa0c8e49f18f24","after_hash":"5300401ad20185e092bad0f7006d9dd9"}],"next_before":null,"next_actions":[]}