# Chainstack (remote · mcp.chainstack.com)

Deploy and manage blockchain nodes across 70+ protocols, search docs, request testnet funds.

- Trust score: 68/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-18

## Components

- remote · `mcp.chainstack.com`: 68/100 (this document), [markdown](https://verifymcp.io/servers/com-chainstack-chainstack/mcp.md), [page](https://verifymcp.io/servers/com-chainstack-chainstack/mcp)

## Channel facts

- Endpoint: `https://mcp.chainstack.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.10.10`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-18.

- **Endpoint Security**: 66/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (update_project).
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3563 tokens (~178/item across 20 items; 18 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 73/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 4% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-chainstack-chainstack https://mcp.chainstack.com/mcp
```

### Codex

```toml
[mcp_servers.com-chainstack-chainstack]
url = "https://mcp.chainstack.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-chainstack-chainstack": {
      "type": "remote",
      "url": "https://mcp.chainstack.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-chainstack-chainstack --url https://mcp.chainstack.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-chainstack-chainstack:
    url: "https://mcp.chainstack.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-chainstack-chainstack": {
      "type": "http",
      "url": "https://mcp.chainstack.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-17 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-16 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-13 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-12 (score 65, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-11 (score 65)

First indexed and scored.

## MCP tools (18)

### `get_organization` (~15 tokens)

Get organization name and ID.

Output parameters:

- `id` (string)
- `name` (string)

### `get_deployment_options` (~31 tokens)

List blockchain/cloud/network combinations for node deployment.

Call before create_node to get valid blockchain and cloud IDs.

Output parameters:

- `result` (array)

### `list_projects` (~18 tokens)

List all projects. Projects are containers for nodes.

Output parameters:

- `result` (array)

### `create_project` (~41 tokens)

Create a new project.

Args:
    name: Project name.
    description: Optional description.

Input parameters:

- `description` (string)
- `name` (string, required)

Output parameters:

- `created_at` (string)
- `creator` (object)
- `description`
- `id` (string)
- `name` (string)
- `networks` (integer)
- `type`

### `list_nodes` (~59 tokens)

List nodes with status and connection endpoints.

Args:
    project_id: Optional project ID to filter by (e.g., PR-123-456-789).
                If omitted, returns all nodes in the organization.

Input parameters:

- `project_id` (string)

Output parameters:

- `result` (array)

### `get_node` (~48 tokens)

Get a node's full details including endpoints and cloud info.

Args:
    node_id: Node ID (e.g., ND-123-456-789).

Input parameters:

- `node_id` (string, required)

Output parameters:

- `api_namespaces` (array)
- `beacon_endpoint` (string)
- `blockchain` (string)
- `cloud` (string)
- `https_endpoint` (string)
- `id` (string)
- `name` (string)
- `network` (string)
- `node_tier` (string)
- `project` (string)
- `protocol` (string)
- `region` (string)
- `status`
- `wss_endpoint` (string)

### `create_node` (~164 tokens)

Deploy a new blockchain node. Call get_deployment_options first for valid IDs.

Trader nodes are region-bound (e.g., London, Ashburn, Singapore). Always confirm
the region with the user before deploying — region cannot be changed after deployment.

Args:
    name: Node name.
    project: Project ID from list_projects (e.g., PR-123-456-789).
    blockchain: Blockchain ID from get_deployment_options (e.g., BC-000-000-008).
    cloud: Cloud ID from get_deployment_options (e.g., CC-0016 for Global, CC-0020 for London).

Input parameters:

- `blockchain` (string, required)
- `cloud` (string, required)
- `name` (string, required)
- `project` (string, required)

Output parameters:

- `api_namespaces` (array)
- `beacon_endpoint` (string)
- `blockchain` (string)
- `cloud` (string)
- `https_endpoint` (string)
- `id` (string)
- `name` (string)
- `network` (string)
- `node_tier` (string)
- `project` (string)
- `protocol` (string)
- `region` (string)
- `status`
- `wss_endpoint` (string)

### `get_project` (~40 tokens)

Get project details.

Args:
    project_id: Project ID (e.g., PR-123-456-789).

Input parameters:

- `project_id` (string, required)

Output parameters:

- `created_at` (string)
- `creator` (object)
- `description`
- `id` (string)
- `name` (string)
- `networks` (integer)
- `type`

### `update_project` (~65 tokens)

Update a project's name or description.

Args:
    project_id: Project ID (e.g., PR-123-456-789).
    name: New name.
    description: New description.

Input parameters:

- `description`
- `name`
- `project_id` (string, required)

Output parameters:

- `created_at` (string)
- `creator` (object)
- `description`
- `id` (string)
- `name` (string)
- `networks` (integer)
- `type`

### `delete_project` (~43 tokens)

Delete a project (irreversible).

Args:
    project_id: Project ID (e.g., PR-123-456-789).

Input parameters:

- `project_id` (string, required)

Output parameters:

- `result` (string)

### `update_node` (~53 tokens)

Rename a node.

Args:
    node_id: Node ID (e.g., ND-123-456-789).
    name: New name.

Input parameters:

- `name` (string, required)
- `node_id` (string, required)

Output parameters:

- `api_namespaces` (array)
- `beacon_endpoint` (string)
- `blockchain` (string)
- `cloud` (string)
- `https_endpoint` (string)
- `id` (string)
- `name` (string)
- `network` (string)
- `node_tier` (string)
- `project` (string)
- `protocol` (string)
- `region` (string)
- `status`
- `wss_endpoint` (string)

### `delete_node` (~43 tokens)

Delete a node (irreversible).

Args:
    node_id: Node ID (e.g., ND-123-456-789).

Input parameters:

- `node_id` (string, required)

Output parameters:

- `result` (string)

### `search_docs` (~58 tokens)

Search Chainstack docs — blockchain RPC methods, node infrastructure, Web3 APIs, deployment guides, and code examples.

Args:
    query: Search query (e.g., "deploy ethereum node", "eth_call").

Input parameters:

- `query` (string, required)

Output parameters:

- `result` (array)

### `get_doc_page` (~111 tokens)

Get the full content of a Chainstack documentation page.

Use after search_docs to fetch the complete page when a snippet isn't enough.

Args:
    page: Page path from search results — pass the `page` field from
          a search_docs result (e.g., "docs/ethereum-trader-nodes").
          The leading slash, the `.mdx` extension, and the
          docs.chainstack.com URL prefix are all optional and stripped
          if present.

Input parameters:

- `page` (string, required)

Output parameters:

- `result` (string)

### `get_platform_status` (~54 tokens)

Check platform status, active incidents, and maintenances.

Args:
    network: Optional filter (e.g., "ethereum"). Without it, returns
             overall status and incidents only.

Input parameters:

- `network` (string)

Output parameters:

- `components` (array)
- `incidents` (array)
- `maintenances` (array)
- `status` (string)

### `contact_chainstack` (~775 tokens)

Submit a message to Chainstack's sales and support team.

Use when the user wants to ask about pricing, get a custom quote,
request a plan upgrade, request node customizations (Enterprise),
report a problem, or reach Chainstack for any reason. Posts to the
same contact form as chainstack.com/contact/.

\## Before calling this tool

CRITICAL — follow these steps EVERY time:

1\. Draft the message based on your conversation context.
2\. Show the user the EXACT message, email, and name you will send.
3\. If the user has a Chainstack API key configured, tell them:
   "I'll also include your Chainstack account info (org name and ID)
   so the team can pull up your account immediately — this means
   significantly faster handling and a more tailored response."
4\. Ask: "Shall I send this to Chainstack? Please confirm there's
   no sensitive information you'd like removed."
5\. Only call this tool after the user explicitly confirms.

NEVER include in the message:
\- API keys, tokens, passwords, private keys, wallet seeds, mnemonics
\- RPC endpoint URLs (Chainstack or any other provider)
\- Wallet addresses, transaction hashes, or on-chain account details
  the user hasn't approved sharing
\- Any information the user hasn't explicitly approved sharing

If the user shared sensitive data during the conversation, do NOT
include it unless they specifically approve it in the review step.

\## Writing an effective message

A great message gets the user a faster, more tailored response.
Include what you already know from the conversation:
\- What they're building and at what scale
\- Current plan and usage (e.g., "Pro plan, ~80M RU/month on Base")
\- What they need (upgrade, custom pricing, migration help, etc.)
\- What they've tried or what's not working
\- Specific numbers when available

Bad:  "I have a question about pricing."
Good: "Pro plan user running 200M RU/month across Base and Ethereum,
       evaluating Business plan for archive access and higher RPS.
       Looking for annual prici…

Input parameters:

- `category` (string)
- `email` (string, required)
- `message` (string, required)
- `name` (string, required)

Output parameters:

- `alternative_channels` (array)
- `estimated_response_time` (string)
- `lead_source` (string)
- `submitted` (boolean)

### `request_testnet_funds` (~548 tokens)

Top up a testnet address from Chainstack's faucet.

The faucet does not send a fixed amount — it tops the address up to the
per-network maximum (e.g. 0.5 ETH for sepolia). If the address already
sits above the cap, the call fails with an insufficient-balance error.
Describe the behavior to the user as "top up" not "give", and surface
the returned `amountSent` so they see the actual delta.

Supported networks and their native assets:
  \- sepolia, hoodi — Ethereum testnets (ETH)
  \- base — Base Sepolia (ETH)
  \- amoy — Polygon Amoy (POL)
  \- bnb-testnet — BNB Smart Chain testnet (BNB)
  \- zksync-testnet — zkSync Sepolia (ETH)
  \- robinhood — Robinhood Chain testnet (ETH)
  \- hyperevm — HyperEVM testnet (HYPE)
  \- plasma — Plasma testnet (XPL)
  \- monad — Monad testnet (MON)
  \- ton — TON testnet (TON)
  \- solana — Solana devnet (SOL)

Per-address cooldown applies after each successful drip. On cooldown
the faucet returns a `nextFaucetAvailable` timestamp (ISO 8601) that
this tool surfaces in the error message.

Requires a Chainstack API key. The key is also the rate-limiting
identity — the faucet tracks usage per organization. Get a key at
https://console.chainstack.com/user/settings/api-keys and add it as
\`Authorization: Bearer <key>` in the MCP client config. Never ask the
user to paste their API key in chat.

Args:
    network: Canonical testnet id (the schema `enum` advertises the set).
        Case-insensitive; common aliases are normalized to the canonical id.
    address: Destination address. EVM hex address for EVM networks,
        a TON address for `ton`, or a base58 Solana public key for
        `solana`. Validated server-side — format errors surface as 400.

Returns:
    On success: `{network, amountSent, transaction}`. `amountSent`
    is a string in the network's native unit (not wei/lamports).

Input parameters:

- `address` (string, required)
- `network` (string, required): Testnet to fund. Must be one of the canonical ids in `enum`. Common aliases (ethereum-sepolia, base-sepolia, solana-devnet, ...) are accepted and normalized to the canonical id.

Output parameters:

- `amountSent` (string)
- `network` (string)
- `transaction`

### `get_chainstack_pricing` (~663 tokens)

Fetch Chainstack's public pricing and return a normalized snapshot.

Use this to answer pricing questions before quoting the user: plan fit,
overage math, per-chain dedicated-node costs, and add-on pricing
(Unlimited Node flat-fee tiers, Yellowstone gRPC streams, Warp
transactions, dedicated-node base rates).

This tool returns the menu, not the bill — the calling agent does the
arithmetic. All prices are list prices in USD; disclaimers are surfaced
in the `disclaimers` field.

Design: we pass pricing.md through as raw markdown. Marketing owns that
file and its structure changes freely; parsing it server-side would
couple us to heading text and table column names we don't control. The
LLM reads markdown natively, so handing the raw text to the agent keeps
us correct regardless of how the page is restructured.

pricing_current.json is parsed into `dedicated_catalog` because it has
a stable engineering-owned schema, and the catalog benefits from
filtering (to user-orderable SKUs only), unit conversion (cents → USD,
milli-cores → cores), and region humanization (via `region_legend`).

Per-method RU billing rules are NOT in these sources. Plan-level rates
(Full Node = 1 RU, Archive Node = 2 RU) are in the markdown, but some
EVM archive-state methods (eth_getBalance, eth_call, eth_getProof,
eth_getStorageAt, eth_getCode, eth_getTransactionCount, eth_callMany,
eth_createAccessList) and all debug_* / trace_* methods are billed at
2 RU on a full node when called against old blocks. For method-level
detail, call `search_docs` with "request units" or
\`get_doc_page("docs/request-units")`.

No API key required — sources are fully public. Each call fetches both
sources fresh (no caching), so a stale result isn't possible.

Returns:
    A dict with fields:
    - `pricing_markdown`: raw markdown from chainstack.com/pricing.md.
      Read this for plan tiers, feature matrix, add-on pricing, support
      levels, PAYG details, and provider comparisons.
    - `dedicated_catalog`: us…

Output parameters:

- `dedicated_catalog`
- `disclaimers` (array)
- `fetched_at` (string)
- `pricing_markdown`
- `region_legend`
- `sources` (object)
- `warnings` (array)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-chainstack-chainstack/mcp#diagnostics

## Score history

- 2026-08-18: 68
- 2026-08-17: 68
- 2026-08-16: 67
- 2026-08-15: 66
- 2026-08-14: 66
- 2026-08-13: 66
- 2026-08-12: 65
- 2026-08-11: 65

## Links

- Remote endpoint: https://mcp.chainstack.com/mcp
- Repository: https://github.com/chainstacklabs/mcp-server
- Website: https://docs.chainstack.com/docs/chainstack-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/com-chainstack-chainstack/mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-chainstack-chainstack/mcp.json
- HTML version of this page: https://verifymcp.io/servers/com-chainstack-chainstack/mcp
