sui-mcp-server
Provides tools to query the Sui blockchain via gRPC, GraphQL, and Archival Service, enabling agents to read ledger data, inspect live state, introspect Move packages, perform relational queries, stream checkpoints, and simulate or execute transactions.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@sui-mcp-serverWhat's the latest checkpoint?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
sui-mcp-server
A local-first MCP server that lets any AI agent — Claude Desktop, Claude Code, a custom Anthropic SDK loop, or anything else that speaks the Model Context Protocol — query the Sui blockchain through its new data stack: gRPC, GraphQL, and the Archival Service.
Plug it into your agent and you can ask plain-English questions about Sui:
"What's happening on Sui mainnet right now?"
"Walk me through the recent activity for address 0x…"
"Fetch object 0x5 at version 100 — which endpoint had to answer?"
"What public functions does the sui_system package expose?"
The server handles transport selection, retention boundaries, schema introspection, and response shaping. The agent just answers the question.
What this actually is
The Model Context Protocol (MCP) is a standard way for AI agents to call external tools. An MCP server exposes a catalog of tools (think: REST endpoints with rich descriptions); an MCP client — usually an LLM-driven agent — picks which tools to call to satisfy a user's request.
This repo is an MCP server for Sui data. It runs locally as a Node subprocess, speaks MCP over stdio, and exposes 29 tools mapped to the new Sui APIs. The example agent at examples/agent.ts is a thin Anthropic-SDK loop that connects to the server, lets Claude pick tools, and runs the conversation. You can use that agent as-is, or swap in any other MCP client.
Related MCP server: sui-trader-mcp
Why this exists
Sui's JSON-RPC sunsets on 2026-07-31. The replacement is a three-layer data stack — gRPC (low-latency point reads), GraphQL RPC (relational reads), and the Archival Service (deep history) — that's well-shaped for production indexers and SDKs.
It's not yet shaped for agents. Agents want:
A small set of task-shaped tools that map to common questions ("balance of address X", "what happened in tx Y").
An escape hatch when the curated tools don't fit, with schema discovery so the agent can navigate without prior knowledge.
Auto-routing across endpoints so the agent doesn't need to know about retention boundaries.
Responses pre-shaped for an LLM context window — no
BigIntserialization errors, no rawUint8Arrays, no proto-style empty wrappers.
This server provides exactly that. It's a thin layer — the heavy lifting still happens on the Sui side — but the layer is what makes Sui usable from a one-shot LLM prompt instead of a multi-week SDK integration.
What you get
A hybrid surface combining curated intent tools with a schema-introspective dispatcher:
Category | Tools | What they're for |
Ledger reads (gRPC) |
| Single-entity lookups; defaults to live → archive auto-routing |
Live state (gRPC) |
| Address-level live state |
Move packages (gRPC) |
| Contract introspection |
Relational reads (GraphQL) |
| Cross-entity queries in one round-trip |
Streaming (gRPC) |
| Tail of chain — bounded window per call |
Execution (gRPC) |
| Dry-run always; submit only when explicitly enabled |
Introspection |
| "What can I do?" — feeds the dispatcher pattern |
Escape hatches |
| Raw passthrough when no curated tool fits |
Every response includes a routing trace — source, endpoint, network, latency — so both the agent and a human watching the terminal can see exactly which transport answered.
Quick start
Requires Node 22+.
git clone <this repo> sui-mcp-server
cd sui-mcp-server
npm install
npm run buildSanity check (no API key, no network):
node scripts/smoke.mjsYou should see 29 tools register and one offline call succeed.
Talk to it interactively (needs an Anthropic API key):
export ANTHROPIC_API_KEY=sk-ant-...
npm run agentYou'll get a sui[mainnet]> prompt. Try asking "What's the latest checkpoint?" and follow up with "and how does that compare to testnet?" — the conversation persists across turns, so Claude builds context. Use /network testnet to flip networks mid-session, /help for the full command list, and Ctrl-D to exit.
Example prompts to try
These exercise different paths through the server. Each one is the kind of thing an agent should be able to answer without the user knowing anything about gRPC vs GraphQL.
Tip-of-chain reads (gRPC + GraphQL relational):
"What's the latest checkpoint on Sui mainnet? Include the timestamp and network total transactions."
"Compare the reference gas prices on mainnet and testnet right now."
Address profiling (GraphQL — one query for many things):
"Give me a profile of address 0x… — balance, top owned objects, recent transactions."
Move package introspection:
"What public functions does the package at 0x3 (sui_system) expose? Pick one and show me its full signature."
Auto-routing across live and archive:
"Fetch object 0x5 at version 100 and tell me which endpoint had to answer." — Live full nodes typically don't retain versions that old; the trace will show the live attempt returning empty before the call falls back to the Archival Service.
Streaming + cadence:
"Stream 5 checkpoints and tell me the average time between them."
Simulation (safe — never touches live state):
"Simulate this BCS-encoded transaction and tell me whether it would succeed and how much gas it would burn." (Pass the bytes inline.)
When you ask follow-ups, Claude reuses what it already learned — no redundant tool calls.
Under the hood
The Sui data stack in 30 seconds
The new stack has three pieces, served behind public-good URLs:
gRPC fullnode (
fullnode.<network>.sui.io): the canonical low-latency reads. Five services —LedgerService(objects, transactions, checkpoints, epochs),StateService(live balances and owned objects),MovePackageService(contract introspection),SubscriptionService(server-streaming),TransactionExecutionService(submit + simulate).GraphQL RPC (
graphql.<network>.sui.io/graphql): an indexer-backed relational layer. Best for cross-entity queries — "address X's balance + owned objects + last 10 transactions" in one round-trip.Archival Service (
archive.<network>.sui.io): the sameLedgerServiceinterface as the live full node, but backed by long-retention storage. Use it when an object/transaction/checkpoint is older than the live full node still holds.
That last point is the architectural keystone: the Archival Service implements the same gRPC interface as the live full node. Same client code, same response shapes — only the URL differs. This server takes advantage of that symmetry to do live → archive auto-fallback transparently.
How a tool call flows
agent ──MCP─▶ sui-mcp-server ──┬─▶ SuiGrpcClient ──▶ live full node (gRPC)
│ ╰──▶ Archival Service (gRPC, fallback)
╰─▶ fetch() ────▶ GraphQL endpointEach curated tool wraps a service-specific call shape (the right read_mask, the right oneofKind variant, the right BigInt coercion) so the agent doesn't have to know proto-ts conventions. The escape-hatch tools (sui_grpc_call, sui_graphql_query) bypass the wrappers when a request doesn't fit a curated shape.
Auto-routing across live and archive
For Ledger reads, the default source: "auto" means: try the live full node first, inspect the response with a per-shape "is this empty?" predicate, fall back to archive if live errored or returned an empty payload. The trace records both attempts so it's clear what happened:
{
"source": "archival",
"label": "ledger.GetObject (after live: empty)",
"rationale": "...auto-route: live returned empty payload (likely past retention) → fell back to Archival Service",
"endpoint": "https://archive.mainnet.sui.io",
"latencyMs": 142
}Override with source: "live" or source: "archive" only when you have a specific reason (benchmarking, you already know the version is old, etc.).
Why GraphQL doesn't auto-fall-back to archive
Sui's GraphQL RPC is indexer-backed and already composes the Archival Service as one of its data sources. So an empty GraphQL result usually means the indexer doesn't have the entity at the requested level — running a parallel archive query rarely helps and adds noise.
The right escalation when GraphQL returns null for a specific id/digest/checkpoint is to drop to the gRPC LedgerService curated tool with source: "auto". That covers retention-boundary cases the indexer hasn't materialized, without doing redundant work for cases the indexer does cover. The tool descriptions and sui_describe_grpc_services notes both encode this policy so the agent inherits it for free.
LLM-friendly response shaping
Proto responses contain things JSON.stringify can't handle: BigInt for uint64/int64 fields, Uint8Array for digests and BCS bytes, and google.protobuf.Timestamp { seconds, nanos } blobs. The jsonSafe walker in src/util/json.ts produces a clean view: bigints become strings, byte arrays become 0x-hex, timestamps become { epochMs, iso }. The agent sees something it can read and quote back to the user without serializer errors.
Surviving SDK drift
@mysten/sui v2 is still iterating. Method paths drift between minor releases (client.ledgerService.getObject vs client.core.getObject vs client.getObject). The curated tools use a callFirst fallback chain so they keep working across releases; when something does break, error messages are tagged with hints about which arg shape the SDK is expecting. All SDK-specific knowledge is concentrated in one or two files, so adjustments are localized.
Using it locally
Interactive REPL (recommended)
npm run agent # mainnet, REPL
npm run agent -- --network testnet # testnet, REPL
npm run agent -- --max-rounds 60 # raise the per-turn tool-call budgetThe REPL preserves conversation context across turns, so follow-ups reuse what was already fetched instead of re-querying. Tool calls render as [tool 3/25] sui_chain_tip {...} on stderr — /trace off silences them.
One-shot CLI
npm run agent -- "What's the latest checkpoint on mainnet?"
npm run agent -- --network testnet "Show me a recent transaction digest"
npm run agent -- tip address tx recent # canned examples (one at a time)Slash commands inside the REPL
Command | What it does |
| Switch network mid-session — takes effect immediately, no restart |
| Adjust the per-turn tool-call budget (default 25) |
| Reset conversation history |
| Show conversation length and session settings |
| List the MCP tools the server exposed |
| Show or hide tool-call traces |
| Slash-command reference |
| Exit (Ctrl-D works too) |
For deeper testing recipes — auto-routing fallback verification, MCP Inspector usage, troubleshooting the cap-hit case — see TESTING.md.
Using it in production
From Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) and add:
{
"mcpServers": {
"sui": {
"command": "node",
"args": ["/absolute/path/to/sui-mcp-server/dist/server.js"],
"env": {
"SUI_MCP_DEFAULT_NETWORK": "mainnet"
}
}
}
}Restart Claude Desktop. The Sui tools appear in the tool palette automatically.
From Claude Code
Drop the same JSON into .claude/mcp.json at your project root.
As a hosted service
The current build speaks MCP over stdio — the canonical local-process transport. To deploy it as a remote service, wrap with one of the supported MCP HTTP/SSE transports. The server logic is transport-agnostic; the swap happens in two lines of src/server.ts. See the MCP TypeScript SDK README for the latest transport options.
For a multi-tenant deployment, run one server process per concurrent agent (cheap — it's a Node subprocess that reaches out to public-good Sui endpoints) and pass per-tenant config via env vars.
Configuration
All via env vars. Per-network overrides take precedence over global ones; both take precedence over the public-good defaults.
Variable | Default | Purpose |
|
| Network used when a tool call doesn't specify one |
| public-good URL | Per-network gRPC endpoint override |
| public-good URL | Per-network GraphQL endpoint override |
| public-good URL | Per-network Archival Service endpoint override |
| — | Global fall-throughs |
|
| Expose |
|
| Expose |
|
| Per-call cap on streamed frames |
|
| Per-call wall-clock cap on streaming |
Default endpoints:
Mainnet:
fullnode.mainnet.sui.io/graphql.mainnet.sui.io/graphql/archive.mainnet.sui.ioTestnet:
fullnode.testnet.sui.io/graphql.testnet.sui.io/graphql/archive.testnet.sui.io
Safety model
Reads are unrestricted. Anything LedgerService / StateService / MovePackageService / GraphQL exposes is fair game.
Simulation (sui_simulate_transaction) is always available — it's a dry-run, no state changes, no fees.
Execution is gated behind SUI_MCP_ENABLE_EXECUTION=true. Even when on, the server never accepts private keys — it only forwards opaque, pre-signed transaction bytes. Signing happens in the user's wallet/SDK; the MCP server is a transport, not a wallet.
Subscriptions are bounded per-call (max frames + max seconds) so a misbehaving agent can't tie up the connection. Tail the chain by calling repeatedly with the returned cursor.
Raw gRPC (sui_grpc_call) is read-only. It explicitly blocks executeTransaction and subscribeCheckpoints — those have their own dedicated tools with safety wrappers.
Project layout
src/
├── server.ts # MCP entry point — stdio transport + tool registration
├── config.ts # network + endpoint resolution + feature flags
├── clients/
│ ├── grpc.ts # SuiGrpcClient wrapper, callFirst, grpcAutoCall, looksEmpty
│ └── graphql.ts # plain fetch-based GraphQL client
├── util/
│ ├── json.ts # bigint + Uint8Array + Timestamp → JSON-safe walker
│ ├── format.ts # ok() / fail() — MCP content shape with routing trace
│ └── validate.ts # input validators (object_id, digest, address, etc.)
└── tools/
├── ledger.ts # gRPC LedgerService — auto-routed
├── state.ts # gRPC StateService
├── move_package.ts # gRPC MovePackageService
├── graphql.ts # GraphQL curated tools + escape hatch
├── subscription.ts # gRPC SubscriptionService — bounded window
├── execution.ts # Simulate (always) + Execute (gated)
├── grpc_raw.ts # sui_grpc_call escape hatch
└── introspect.ts # service catalog + endpoint listing
examples/
└── agent.ts # ~250-line interactive CLI agent
scripts/
└── smoke.mjs # offline sanity checkA few quirks the wrappers smooth over (learned the hard way):
SuiGrpcClientconstructor takes{ network, baseUrl }. Calling the URL fieldurlproduces an opaque error insideGrpcWebFetchTransport.makeUrl.Without an explicit
read_mask, gRPC responses contain only identifying digests. The curated tools pass sensible default paths.Method access drifts between SDK minors. The
callFirstfallback chain handles this transparently.Object versions are Lamport timestamps, not a +1 counter.
sui_object_history_stepencapsulates the canonicalpreviousTransaction → effects.changedObjects.inputVersionwalk.
Further reading
TESTING.md — five ways to drive the server, six prompts that exercise specific behaviors, full troubleshooting guide.
Sui gRPC fullnode protocol — the upstream spec.
Sui GraphQL docs — schema and examples.
sui-apis— the canonical proto definitions.Model Context Protocol — what MCP is and how to build clients.
License
Apache-2.0.
Available Tools
29 toolssui_address_overviewA
One-shot relational read for an address — balance + owned objects (first 12) + recent transactions (first 10). Replaces 4–5 separate gRPC calls. Use as the default 'tell me about this address' tool.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses the data returned (balance, 12 owned objects, 10 transactions) and that it's a combined read. However, it lacks details on error handling, edge cases (e.g., invalid address), or rate limits. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: first defines the function concisely, second provides usage guidance. No unnecessary words, each sentence adds value. Front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description adequately covers output (balance, objects, transactions with limits) and compares to alternatives. Without an output schema, it explains what to expect. Slight room for improvement on output structure but very good overall.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only network has description). The tool description mentions 'address' but does not add format or additional constraints beyond the schema. It provides minimal added meaning, so a mid-range score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs a one-shot relational read for an address, providing balance, owned objects (first 12), and recent transactions (first 10). It explicitly distinguishes from sibling tools by stating it replaces 4-5 separate gRPC calls and is the default 'tell me about this address' tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on when to use: as the default overview tool for an address, and implies it replaces multiple separate calls. It does not exclude deeper dives but gives strong context for its primary use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_batch_get_objectsA
Fetch up to 50 objects in one round-trip. Returns per-object results (each may succeed or fail individually). Prefer this over a loop of sui_get_object when you have a known list of ids.
| Name | Required | Description | Default |
|---|---|---|---|
| object_ids | Yes | Up to 50 object ids. | |
| source | No | ||
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Mentions 'each may succeed or fail individually', which is important behavioral info. However, lacks details on error handling or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with key information, no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complexity is low; description covers batch behavior and per-object results but does not explain return value structure beyond that. For a fetch tool with no output schema, it is adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds little beyond schema (e.g., 'up to 50' is already in schema). Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states 'Fetch up to 50 objects in one round-trip' with a specific verb and resource. Distinguishes from sibling sui_get_object by suggesting preference over a loop.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Prefer this over a loop of sui_get_object when you have a known list of ids', giving clear guidance on when to use. Could be more explicit about when not to use, but sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_batch_get_transactionsA
Fetch up to 50 transactions in one round-trip. Per-item errors do not fail the batch.
| Name | Required | Description | Default |
|---|---|---|---|
| digests | Yes | ||
| source | No | ||
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries the full burden. It discloses per-item error tolerance (important) but omits other behaviors like order preservation, missing digest handling, rate limits, or auth requirements. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose. Every word adds value. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so return format is unknown. Description covers batch size and error handling but does not explain what is returned for each digest (e.g., full transaction object vs. subset). Adequate for a simple batch tool but leaves gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is low (33%, only network has description). The description adds minimal value: only indirectly mentions digests via 'transactions' but fails to explain source or network roles. Insufficient compensation for low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool fetches transactions in a batch of up to 50, with a key behavioral differentiator (per-item errors don't fail batch). Clearly distinguishes from single-transaction fetch and other batch tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies when to use (multiple transactions at once) but does not explicitly exclude alternatives like repeated single get_transaction calls. Provides clear context but no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_chain_tipA
Lightweight 'about this network' read — chain identifier, latest checkpoint, current epoch + reference gas price. One query.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It accurately describes a read-only operation and lists the returned fields. It could mention potential error conditions or data freshness, but for a simple read, it is sufficiently transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with key information, and every word adds value. No wasted or redundant text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema), the description provides a complete overview of what the tool returns. Minor improvement could be explicitly listing the fields in a structured way, but it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with the single parameter 'network' already described in the schema. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: it reads network info (chain identifier, latest checkpoint, current epoch, reference gas price). It is lightweight and distinguishes itself from siblings like sui_get_checkpoint or sui_get_epoch by providing an overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for a quick network overview ('one query'), but does not explicitly state when not to use it or mention alternative tools for detailed data. It is clear in context but lacks exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_describe_grpc_servicesA
Return the catalog of gRPC services and methods this MCP server can reach (with which curated tool, if any, wraps each one). Use this when deciding whether to call a curated tool or fall back to sui_grpc_call.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It implicitly indicates a read operation ('Return the catalog') and discloses the mapping to curated tools. However, it does not explicitly state safety or auth requirements, but that is not necessary for this simple read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: first states purpose, second provides usage guidance. Front-loaded and no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters and no output schema, the description adequately covers what the tool returns and when to use it. Slightly more detail about the format could improve it, but it's already sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0 parameters with 100% coverage. Per guidelines, 0 parameters yields baseline score 4. No parameter info needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns a catalog of gRPC services and methods, with clear verb ('Return') and resource. It distinguishes from siblings like sui_grpc_call by mentioning the mapping to curated tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this when deciding whether to call a curated tool or fall back to sui_grpc_call', providing clear guidance on when to use this tool vs the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_execute_transactionC
(disabled) Submit a pre-signed transaction. Set SUI_MCP_ENABLE_EXECUTION=true on the server to enable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavior. Only mentions submission and disabled state; no details on transaction execution, side effects, permissions, or return values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single focused sentence, front-loaded with key info (disabled status and usage condition). No wasted words, though could benefit from slight expansion on purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters, no output schema, and no annotations, description is minimal. Lacks context on what constitutes a pre-signed transaction, expected outcomes, or error handling. Incomplete for an execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has no parameters (0), and schema description coverage is 100%. Description adds no value beyond schema, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states it submits a pre-signed transaction but is disabled. The purpose is clear but lacks specificity about what a pre-signed transaction is, and it does not differentiate from siblings like sui_simulate_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states the tool is disabled and requires setting an environment variable to enable. No guidance on when to use versus alternatives like sui_simulate_transaction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_balanceA
Get the aggregated coin balance for an address, optionally for a specific coin type (defaults to 0x2::sui::SUI).
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | 0x-prefixed Sui address. | |
| coin_type | No | Move type for the coin, e.g. 0x2::sui::SUI or 0x...::usdc::USDC. Defaults to native SUI. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It mentions 'aggregated' and the default coin type, implying a read-only query, but does not explicitly state safety, side effects, or permissions. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence containing all essential information: action, resource, optional parameter, and default. No extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the core function, it lacks information about the return format (e.g., whether it returns a number or object) and does not clarify optional parameter defaults (network) or required fields (address) beyond the schema. Adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so baseline is 3. The description adds value by introducing 'aggregated' and specifying the default coin type, which clarifies the purpose of the coin_type parameter beyond the schema's own description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Get the aggregated coin balance for an address', specifying the resource (address) and the optional coin type with a default. It distinguishes from siblings like sui_list_balances and sui_get_coin_info by focusing on aggregated balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide explicit guidance on when to use this tool versus alternatives (e.g., sui_list_balances or sui_get_coin_info). It only describes functionality, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_checkpointA
Fetch a checkpoint by sequence number, digest, or 'latest'. Returns the checkpoint header, summary (timestamp, networkTotalTransactions), and digest. Defaults to 'auto' routing — live first, archive fallback. For latest=true the live node is always authoritative; auto still works (archive returns its latest as a fallback if live is unreachable).
| Name | Required | Description | Default |
|---|---|---|---|
| sequence_number | No | Checkpoint sequence number as a string. Mutually exclusive with `digest` and `latest`. | |
| digest | No | Base58 checkpoint digest. Mutually exclusive with the others. | |
| latest | No | Set true to fetch the latest checkpoint. | |
| source | No | Routing policy. 'auto' (default) tries live then archive. 'live' / 'archive' force a single endpoint. | |
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full burden. It discloses routing policy, fallback to archive, and authoritative behavior for latest. It does not mention error conditions or permissions, but the core behavioral traits are covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose, then routing details. No redundant information. Every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, but description lists return fields (header, summary, digest). Enough for an agent to understand what it gets. Could add pagination or error info, but sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% (all 5 params have descriptions), so baseline is 3. The description adds extra meaning: explains 'auto' routing behavior and latest authoritative details, going beyond schema enums.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('fetch'), resource ('checkpoint'), and identifiers ('sequence number, digest, or latest'). It differentiates from sibling tools like sui_recent_checkpoints and sui_chain_tip by specifying distinct query methods.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains routing behavior ('auto' vs 'live' vs 'archive') and authoritative handling for latest. It implicitly guides when to use each source, but does not explicitly state when_not to use this tool compared to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_coin_infoA
Get coin metadata (decimals, symbol, name, icon) for a coin type. Cacheable; metadata rarely changes.
| Name | Required | Description | Default |
|---|---|---|---|
| coin_type | Yes | Move coin type, e.g. 0x2::sui::SUI or 0x...::usdc::USDC. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It only discloses cacheability and infrequent changes, but does not state that the tool is read-only, has no side effects, or any authentication requirements. More behavioral details are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main action. No redundant or unnecessary text; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple retrieval tool with fully described parameters, the description adequately conveys the purpose and cacheability. However, without an output schema, it does not fully specify the return structure (e.g., exact field names or types), leaving some ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters. The tool description adds no additional meaning beyond what the schema already provides, so it meets the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the verb 'Get' and the resource 'coin metadata', listing specific fields (decimals, symbol, name, icon). It distinguishes from sibling tools by focusing on metadata, not balances or objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions cacheability and that metadata rarely changes, implying when to use (e.g., when caching is beneficial). However, it lacks explicit guidance on when not to use this tool or alternatives among the many sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_datatypeA
Get a Move datatype (struct or enum) definition — its fields, abilities, and type parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | ||
| module_name | Yes | ||
| datatype_name | Yes | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description indicates a read-only operation ('Get') with no side effects. No annotations exist to provide additional safety info. Explanation of behavior is adequate but lacks details on authentication, rate limits, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with the action and resource, containing no extraneous words. Every element ('Get', 'Move datatype', 'fields, abilities, type parameters') is necessary and contributes to understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output content (fields, abilities, type parameters) well, given no output schema. However, parameter descriptions are lacking, and the tool's complexity (4 parameters, 3 required) demands more contextual detail for full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 25% schema description coverage, the description adds no parameter-specific details beyond the tool's purpose. It does not explain the meaning or format of package_id, module_name, or datatype_name, missing an opportunity to compensate for sparse schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves a Move datatype definition, specifying struct or enum, and lists included components (fields, abilities, type parameters). It distinguishes from sibling tools like sui_get_function and sui_get_object by focusing on datatype definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance is provided. The description implies usage for retrieving datatype information but does not mention alternatives or exclusions, leaving the agent to infer context from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_epochA
Fetch metadata for an epoch — committee, system state, first/last checkpoint, reference gas price. Use epoch='current' for the live epoch.
| Name | Required | Description | Default |
|---|---|---|---|
| epoch | Yes | Epoch number as string, or 'current' for the active epoch. | |
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It mentions the returned fields (committee, system state, etc.) but does not disclose side effects, rate limits, or authorization needs. The read-only nature is implied but not confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence defines purpose and key data returned; the second provides a usage tip. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple fetch tool with no output schema, the description lists several key return fields and explains both parameters well. It lacks only a complete list of all possible fields, but is sufficient for typical use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds context about 'current' usage and network defaults, but this largely repeats the schema. Additional value is minimal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Fetch') and resource ('metadata for an epoch') with clear fields listed (committee, system state, first/last checkpoint, reference gas price). It distinguishes from sibling tools like sui_get_checkpoint by specifying epoch scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on using 'current' for the live epoch, which aids in parameter selection. However, no direct comparison or when-not-to-use advice relative to similar tools (e.g., sui_get_checkpoint) is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_functionA
Get the signature of a specific Move entry/public function — type parameters, argument types, return types, visibility. Use this before calling sui_simulate_transaction or constructing a PTB.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | ||
| module_name | Yes | ||
| function_name | Yes | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states the tool returns signature details but does not mention whether it is read-only, idempotent, or requires authentication. For a query tool, this is a notable lack of transparency about safety and cost.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that efficiently conveys the tool's output and a key use case. It contains no filler or redundant information, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no output schema, and no annotations, the description is sparse. It does not cover the return format, error handling, or prerequisites. For a tool used in a workflow (before simulation), more completeness is needed to handle edge cases or validation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 75% of parameters without descriptions (only 'network' has one). The description does not explain 'package_id,' 'module_name,' or 'function_name,' relying on domain knowledge. With low schema coverage, the description should compensate but fails to add meaning beyond the tool's purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets the signature of a Move function, listing specific details (type parameters, argument types, return types, visibility). It distinguishes from siblings like sui_get_package by focusing on function signatures, and provides a concrete use case (before sui_simulate_transaction or PTB construction).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this before calling sui_simulate_transaction or constructing a PTB,' which guides the agent on when to invoke it. It does not include negative examples or alternative tools, but the usage context is clear and sufficient given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_objectA
Fetch a Sui object's current state by object id. Returns the object's owner, type, version, digest, previous-transaction pointer, and Move contents (BCS). Use for any 'what is object 0x...' question — bypass GraphQL for single-object reads. By default routes 'auto': tries the live full node, falls back to the Archival Service if live has expired this version. The trace records the fallback chain.
| Name | Required | Description | Default |
|---|---|---|---|
| object_id | Yes | 0x-prefixed Sui object id (1 to 64 hex chars after 0x). | |
| version | No | Optional historical version (Lamport). When provided, returns that specific version. Note: object versions are not +1 monotonic — if you need a prior version, fetch the current object then walk back through `previous_transaction` to find the input_version of the object in that transaction's effects.changed_objects. | |
| source | No | Routing policy. 'auto' (default) tries live then falls back to archive on retention boundary. 'live' / 'archive' force a single endpoint when you have specific reasons (e.g. you know the version is old, or you're benchmarking). | |
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the 'auto' routing's fallback behavior to Archival Service for expired versions and mentions the trace recording. It is transparent about a non-obvious behavior (version non-monotonicity caveat).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with zero waste. The first sentence gives core purpose, the second lists returned fields and use case, the third explains routing and trace. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description thoroughly covers what is returned. Combined with excellent parameter documentation, it provides complete context for a single-object fetch tool. No gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 4 parameters are fully described in the schema (100% coverage). The description adds significant value beyond the schema by explaining the version parameter's non-monotonic nature with a detailed example, and the source parameter's practical routing intent. This aids correct invocation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description begins with a clear action verb 'Fetch' and specifies the resource 'Sui object's current state by object id'. It lists the returned fields (owner, type, version, etc.), distinguishing it from sibling tools like sui_batch_get_objects or sui_get_transaction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Use for any "what is object 0x..." question — bypass GraphQL for single-object reads', giving clear when-to-use guidance. It also explains routing policies and when to force specific sources. It lacks explicit when-not-to-use, but the sibling list implies batch for multiple objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_packageA
Get a Move package by id — its modules, ABI, dependencies, and on-chain bytecode pointer. The starting point for any 'what does this contract expose?' question.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | 0x-prefixed package object id. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses what the tool returns (modules, ABI, dependencies, bytecode), implying a read-only operation. However, it does not explicitly state that it is non-destructive, nor does it cover rate limits, permissions, or other behavioral traits. The description is adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long. The first sentence efficiently states the core functionality and return components, while the second sentence adds valuable usage context. No unnecessary words or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description explains the return value (modules, ABI, dependencies, bytecode pointer). It covers the tool's purpose and typical use case. It does not mention error handling or prerequisites, but for a simple read tool, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters. The description does not add additional meaning beyond what the schema provides. According to guidelines, baseline 3 is appropriate when schema coverage is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Get'), the resource ('Move package by id'), and specifies the returned components (modules, ABI, dependencies, bytecode pointer). It also provides a use-case context ('starting point for any 'what does this contract expose?' question'), distinguishing it from sibling tools that focus on objects or functions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool ('starting point for contract exposure questions'), but does not explicitly state when not to use it or suggest alternatives. Given the sibling tools list includes related tools like sui_get_function and sui_get_object, explicit exclusions would improve the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_service_infoA
Probe a gRPC endpoint for its chain identifier, latest checkpoint, and the lowest checkpoint it still has. Useful for picking between live and archive when you don't know which side has the data you need.
| Name | Required | Description | Default |
|---|---|---|---|
| source | No | ||
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It describes what data is returned but does not explicitly state read-only status, error behavior, or prerequisites like endpoint accessibility. This leaves some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action, and every word adds value. No repetition or superfluous text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Considering the tool has two optional parameters, no required ones, and no output schema, the description adequately explains the tool's purpose and the data it returns. A minor gap is not mentioning that the operation is read-only or safe.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only 'network' has a description). The tool description does not add parameter semantics beyond what the schema provides, e.g., it doesn't explain what 'live' vs 'archive' means for the 'source' parameter. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description specifies the verb 'Probe', the resource 'gRPC endpoint', and the exact data items retrieved: chain identifier, latest checkpoint, and lowest checkpoint. It also states the utility for distinguishing between live and archive endpoints, clearly differentiating it from sibling tools like sui_get_checkpoint.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states it is 'useful for picking between live and archive when you don't know which side has the data you need.' This provides clear context, though it does not explicitly mention when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_get_transactionA
Fetch a transaction by its base58 digest. Returns the transaction body, effects (status, gas summary, changed objects), events, and signatures. The right tool for 'what happened in tx '. Defaults to 'auto' routing — live first, falls back to archive on retention boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| digest | Yes | Base58 transaction digest. | |
| source | No | Routing policy. 'auto' (default) tries live then archive. 'live' / 'archive' force a single endpoint. | |
| network | No | Sui network. Defaults to the server's configured default (usually mainnet). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses routing policy and fallback, but does not explicitly state that the tool is read-only or safe. The behavior is implied, but lacks explicit safety or error handling details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no wasted words. Purpose, usage, and routing are front-loaded. Efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 3 parameters and no output schema, the description adequately covers purpose, returns, and routing. Missing details on error handling or validation, but sufficient for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. Description adds minor context about routing defaults ('auto' tries live then archive) but does not significantly enhance understanding beyond schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Fetch a transaction by its base58 digest' and lists return contents (body, effects, events, signatures). Explicitly distinguishes itself as 'The right tool for what happened in tx <digest>'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear usage context: 'The right tool for what happened in tx <digest>'. Explains routing defaults and fallback behavior. Does not explicitly compare to siblings like sui_batch_get_transactions, but the use case is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_graphql_introspectA
Introspect the Sui GraphQL schema. Returns the type system so an agent can construct a valid sui_graphql_query.
| Name | Required | Description | Default |
|---|---|---|---|
| type_name | No | Optionally narrow to a single type (e.g. 'Address', 'TransactionBlock'). Omit to get the full schema. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states that the tool returns the type system, which implies a read-only operation. However, it does not explicitly disclose any behavioral traits such as no side effects, required permissions, or rate limits. The description is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise sentences. The first sentence clearly states the action and result, and the second sentence adds the purpose. No unnecessary words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only two optional parameters and no output schema, the description adequately covers the purpose and parameter usage. It explains how to narrow the introspection and the network context. The missing information about the output format is somewhat compensated by the clear purpose of enabling queries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with both parameters having descriptions in the schema. The description adds examples for 'type_name' (e.g., 'Address', 'TransactionBlock') and clarifies the default behavior for 'network'. While this adds some value, the schema already provides the core meaning, so a score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'introspect', the resource 'Sui GraphQL schema', and the purpose 'so an agent can construct a valid sui_graphql_query'. It distinguishes from the sibling tool 'sui_graphql_query' by explaining that this tool provides the schema for constructing queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies that this tool should be used before constructing a GraphQL query, but does not explicitly state when not to use it or provide alternative tools. The relationship with 'sui_graphql_query' is clear, but more explicit guidance would be beneficial.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_graphql_queryA
Run an arbitrary GraphQL query against the Sui GraphQL endpoint. The escape hatch for the agentic dispatcher pattern: when no curated tool fits, the agent crafts its own query. Use sui_graphql_introspect first if you don't know the schema. NOTE: Sui's GraphQL RPC is indexer-backed and already composes the Archival Service under the hood, so an empty/null GraphQL result usually means the indexer doesn't have the entity at the requested level — running a parallel archive query is rarely useful. The right escalation when GraphQL returns null for a known id/digest/checkpoint is to drop to sui_get_object / sui_get_transaction / sui_get_checkpoint with source='auto' (the live→archive fallback covers retention boundary cases the indexer hasn't materialized).
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | GraphQL query string. | |
| variables | No | Optional variables map. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It discloses that GraphQL is indexer-backed, explains the meaning of empty/null results, and describes the escalation path. This provides excellent transparency beyond basic functionality.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with purpose first, then usage guidelines. While slightly lengthy, every sentence adds value. Could be trimmed slightly but still efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description fully covers behavior, error interpretation, and alternatives. It is complete for a query tool with 3 parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline 3. The description adds minimal extra meaning beyond the schema: it confirms optional variables and network default. No significant additional context for parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Run an arbitrary GraphQL query against the Sui GraphQL endpoint.' It distinguishes itself as the escape hatch when no curated tool fits, making its role clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use sui_graphql_introspect first if schema unknown, and explains when to drop to other tools (e.g., sui_get_object) when GraphQL returns null. This covers both when to use and when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_grpc_callA
Escape hatch: call any READ method on the LedgerService / StateService / MovePackageService directly. Args are forwarded as-is to the @mysten/sui SuiGrpcClient. Pass read_mask_paths if you want fields populated. Use sui_describe_grpc_services first to discover what's available. ExecuteTransaction and SubscribeCheckpoints are blocked here — they have their own gated tools. For LedgerService methods, source='auto' (default) tries live then falls back to archive on retention boundary.
| Name | Required | Description | Default |
|---|---|---|---|
| service | Yes | Service name in JS camelCase: ledgerService | stateService | movePackageService. | |
| method | Yes | Method name in JS camelCase, e.g. getObject. | |
| args | Yes | Method args as a JSON object. Numeric fields the proto declares as uint64/int64 should be passed as decimal strings; the wrapper will coerce to BigInt where needed. | |
| read_mask_paths | No | Proto field paths to populate in the response. Without this, responses are usually just digests. | |
| source | No | Routing policy. 'auto' (default) → for ledgerService, tries live then archive on retention boundary; for other services, behaves like 'live' (archive doesn't implement them). 'live' / 'archive' force a single endpoint. Archive can ONLY serve ledgerService methods — choosing 'archive' with another service errors. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description fully discloses that only READ methods are allowed, that ExecuteTransaction and SubscribeCheckpoints are blocked, that read_mask_paths affects response detail, and details the source routing behavior including fallback and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the main purpose. It is concise but could be better structured (e.g., with bullet points) for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 6 parameters, nested objects, and no output schema, the description covers all essential aspects: allowed services, blocked methods, recommended discovery, parameter nuances, routing policies, and network defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant value: explains that read_mask_paths is needed for full fields (otherwise digests), that numeric fields should be passed as decimal strings for BigInt coercion, and the interaction between source and service.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it is an 'escape hatch' for calling READ methods on specific services (LedgerService, StateService, MovePackageService), explicitly blocking ExecuteTransaction and SubscribeCheckpoints, which distinguishes it from sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly recommends using sui_describe_grpc_services first to discover available methods, clarifies which methods are blocked and why, and explains the source routing policy for different services.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_list_balancesB
List all coin-type balances held by an address. Paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | 0x-prefixed Sui address. | |
| page_size | No | ||
| page_token | No | Opaque continuation token from a previous response, if paginating. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only states 'List all coin-type balances' and 'Paginated', omitting details like response structure, required permissions, or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Extremely concise with two sentences, front-loading the purpose and immediately noting pagination. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without output schema or annotations, the description fails to explain response format or pagination mechanics. Insufficient for a tool with 4 parameters and no return guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, covering most parameters. The description adds no additional semantic value beyond the schema, so baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('List'), the resource ('all coin-type balances held by an address'), and includes pagination info, distinguishing it from siblings like sui_get_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for listing all balances, but does not explicitly mention when to use vs. alternatives (e.g., sui_get_balance for a single coin) or provide context on prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_list_dynamic_fieldsB
List dynamic fields attached to a parent object. Useful when crawling tables/bags/dynamic object fields.
| Name | Required | Description | Default |
|---|---|---|---|
| parent | Yes | 0x-prefixed parent object id. | |
| page_size | No | ||
| page_token | No | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It merely states the tool lists fields, without mentioning safety (read-only vs. mutation), rate limits, or pagination behavior details beyond parameter names. This leaves significant gaps for an AI agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with key information. It avoids fluff but could be more informative within the same length, e.g., explaining return format.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what the tool returns (e.g., list of dynamic field names/types). It does not. Coupled with partial schema coverage and missing pagination behavior, the description feels incomplete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%, but the tool description does not clarify the uncovered parameters (page_size, page_token) beyond the schema. Even the covered parameters lack additional context. The description adds no value over the schema, failing to compensate for missing param descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states specific verb 'List' and resource 'dynamic fields attached to a parent object', with context hinting at crawling tables/bags. This distinguishes it from sibling tools like sui_get_object or sui_batch_get_objects, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description says 'Useful when crawling tables/bags/dynamic object fields', providing clear context for when to use. However, it does not explicitly mention when not to use or provide alternative tools, missing some completeness for a top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_list_endpointsA
Return the gRPC, GraphQL, and Archival URLs in use for a given network, after env-override resolution. Useful when deploying behind a self-hosted full node.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden. It mentions 'env-override resolution,' which hints at configuration behavior, but it does not explicitly state read-only nature, required permissions, or potential side effects. The description is adequate for a simple listing but lacks full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the action and context. Every word is purposeful, with no redundancy or unnecessary detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single optional parameter, no output schema, and no annotations. The description adequately explains what the tool returns and one key use case. It lacks details on output structure (e.g., format of URLs) but is sufficiently complete for a simple list operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, meaning the description must compensate. While the parameter 'network' has an enum in the schema, the description only says 'for a given network' without explaining it is optional or listing the accepted values. This adds minimal value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns gRPC, GraphQL, and Archival URLs for a network after env-override resolution. It uses a specific verb ('Return') and resource ('URLs') and distinguishes itself from sibling tools by addressing network endpoint listing rather than data queries.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context with 'Useful when deploying behind a self-hosted full node,' indicating when to use the tool. However, it does not explicitly state when not to use it or mention alternative tools, which would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_list_owned_objectsA
List the objects an address owns, paginated. Each item carries object_id + version + type — fetch full bodies via sui_get_object or sui_batch_get_objects.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | ||
| page_size | No | ||
| page_token | No | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description discloses pagination and content of items but does not mention read-only nature, authentication, rate limits, or ordering. Adequate for a simple list tool but lacks some behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that packs purpose, pagination, item fields, and guidance to siblings. No fluff, well structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with pagination, the description covers what's returned and next steps. Lacks mention of sorting or ordering but is sufficient given tool complexity and absence of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only network has description). Description adds pagination context for page_size/page_token but does not explain address or page_size range. Provides marginal value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it lists objects owned by an address with pagination. Mentions item fields (id, version, type) and directs to sibling tools for full bodies, differentiating it from sui_get_object and sui_batch_get_objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly advises using sui_get_object or sui_batch_get_objects for full object bodies, implying this tool is for lightweight listing. Pagination mention sets expectations for large result sets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_list_package_versionsA
List historical versions of a Move package — the upgrade chain. Useful when an address points at an older snapshot of a contract.
| Name | Required | Description | Default |
|---|---|---|---|
| package_id | Yes | ||
| page_size | No | ||
| page_token | No | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'list historical versions' but does not explain critical aspects such as pagination behavior, error handling, authentication requirements, or the structure of the returned data. This is insufficient for an agent to understand the tool's behavior beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short, front-loaded sentences with no extraneous information. Every phrase ('historical versions', 'upgrade chain', 'useful when...') adds value, making it highly efficient for an agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no output schema, no annotations), the description is inadequate. It does not specify the return format, pagination limits, or how to interpret the 'upgrade chain' data. Agents would likely need to infer or experiment to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (only the 'network' parameter has a description). The tool description adds no parameter-level information, nor does it clarify the meaning or expected format of required parameters like 'package_id' or optional ones like 'page_size' and 'page_token'. The description fails to compensate for the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the action ('List historical versions') and the resource ('a Move package'), with additional context ('the upgrade chain') that distinguishes it from sibling tools like sui_get_package which retrieves the current package. The purpose is unambiguous and directly actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a concrete use case ('Useful when an address points at an older snapshot of a contract'), helping agents decide when to invoke this tool. However, it does not explicitly exclude scenarios or name alternative tools for when the current version is needed, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_object_history_stepA
Walk one step backward through an object's history. Returns the prior valid version + the digest of the transaction that produced this version. Object versions are NOT a +1 monotonic counter — this tool encapsulates the canonical 'previousTransaction → effects.changedObjects.inputVersion' walk so agents don't re-implement it.
| Name | Required | Description | Default |
|---|---|---|---|
| object_id | Yes | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so description carries the full burden. It discloses non-monotonic versioning and the internal logic, but does not specify permissions or side effects, which are minimal for a read-only history walk.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with purpose and output, followed by essential context. No superfluous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 2 parameters, no output schema, and no annotations, the description adequately covers purpose, output, and a key nuance. Lacks parameter-level guidance but schema partially covers that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'network' has a description). The tool-level description adds no per-parameter details, failing to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('walk') and resource ('object's history'), clearly distinguishes from siblings like sui_get_object, and explains the non-obvious version behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the canonical walk it encapsulates, implying its use case, but does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_recent_checkpointsA
Recent checkpoint feed with digests, timestamps, and per-checkpoint transaction counts.
| Name | Required | Description | Default |
|---|---|---|---|
| last | No | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided. The description mentions the output includes digests, timestamps, and transaction counts, but does not disclose ordering, default recency, or pagination behavior. Some behavioral context is given but incomplete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 10 words, front-loaded with the core purpose. No unnecessary words or repetitions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with two optional parameters and no output schema, the description covers the main output fields and purpose. Lacks details on default behavior (e.g., how many checkpoints by default) but is generally sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50% (only 'network' has a description). The description does not explain the 'last' parameter, which controls the number of checkpoints returned. It adds minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a feed of recent checkpoints with digests, timestamps, and transaction counts. It distinguishes from siblings like sui_get_checkpoint (single checkpoint) and sui_stream_checkpoints (streaming).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives (e.g., sui_get_checkpoint for a single checkpoint, sui_stream_checkpoints for streaming). The description does not mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_simulate_transactionA
Dry-run a transaction. Always safe — no state changes, no fees. Returns effects, command outputs, and a suggested_gas_price. Use this before any real execution to check that the tx will succeed and to size gas. Accepts BCS-encoded transaction bytes (base64).
| Name | Required | Description | Default |
|---|---|---|---|
| transaction_bcs_b64 | Yes | Base64-encoded BCS bytes of the unsigned TransactionData. The tool decodes the base64 internally. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes safety (no state changes, no fees) and outputs (effects, command outputs, gas price). Without annotations, this provides necessary behavioral context. Could specify more about input validation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two well-structured sentences that front-load the purpose and safety, then detail output and usage. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, it lists key return values. For a 2-parameter tool, it covers input format and usage context adequately. Could elaborate on output structure but sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are described in the schema. The description restates the base64 encoding but adds no new meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it dry-runs a transaction, is safe, and has no state changes or fees. It distinguishes itself from real execution tools like sui_execute_transaction by being a simulation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to use before real execution to check success and size gas. Implicitly contrasts with sui_execute_transaction, but doesn't explicitly name the sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_stream_checkpointsA
Subscribe to new checkpoints and return a window of up to 10 frames (or until 30s elapse, whichever comes first). Each frame carries the cursor + checkpoint summary. Call repeatedly to tail the chain — pass the last cursor back as 'after_cursor' for resumable reads.
| Name | Required | Description | Default |
|---|---|---|---|
| max_frames | No | Max frames to collect this call. Cap is SUI_MCP_STREAM_MAX_FRAMES (current: 10). | |
| max_seconds | No | Max wall-clock seconds. Cap is SUI_MCP_STREAM_MAX_SECONDS (current: 30). | |
| after_cursor | No | Resume cursor returned by a prior call. Omit to subscribe from the live tip. | |
| read_mask_paths | No | Checkpoint fields to populate. Defaults to ['sequence_number','digest','summary']. | |
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully discloses behavior: windowing (max_frames, max_seconds), each frame carries cursor + summary, resumption with after_cursor, and server caps. Transparent about all key traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences: first conveys core behavior, second explains windowing, third usage pattern. No wasted words, front-loaded with essential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all parameters and usage pattern well despite no annotations or output schema. Could elaborate on output format details (e.g., what fields are in the checkpoint summary), but sufficient for an AI agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but description adds meaning: explains max_frames/seconds caps, after_cursor for resumption, default fields for read_mask_paths, and network default. Adds useful context beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it subscribes to new checkpoints and returns a window of up to 10 frames (or 30s). It distinguishes from siblings like sui_recent_checkpoints by explicitly stating the streaming pattern and resumable reads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear instructions to call repeatedly and pass the last cursor back as 'after_cursor' for resumable reads. Implicitly differentiates from one-shot checkpoints but lacks explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sui_transaction_richA
Pull transaction effects, gas summary, balance changes, and the checkpoint pointer in one GraphQL round-trip — relational reads gRPC isn't shaped for.
| Name | Required | Description | Default |
|---|---|---|---|
| digest | Yes | ||
| network | No | Sui network. Defaults to the server's configured default. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so description carries full burden. It reveals the tool is a GraphQL round-trip fetching multiple data types, implying read-only. However, it lacks details on authentication, rate limits, or potential errors, leaving some behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence front-loads the action and key outputs. It is efficient, though the phrase 'relational reads gRPC isn't shaped for' is slightly jargon-heavy. Overall concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 2 parameters, no output schema, and no annotations, the description provides a reasonable overview but omits details on return format, error handling, and usage constraints. It is minimally complete for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (only 'network' has a description). The description adds no parameter-level meaning—'digest' is mentioned but not explained (e.g., format). The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that the tool pulls transaction effects, gas summary, balance changes, and checkpoint pointer via GraphQL, distinguishing it from gRPC. The verb 'pull' and specific data types make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for relational reads that gRPC isn't suited for, but does not explicitly contrast with sibling tools like sui_get_transaction or provide when-not-to-use guidance. It offers decent context but no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
29 tool updates
v0.1.0- First observed
sui_address_overview - First observed
sui_batch_get_objects - First observed
sui_batch_get_transactions - First observed
sui_chain_tip - First observed
sui_describe_grpc_services - First observed
sui_execute_transaction - First observed
sui_get_balance - First observed
sui_get_checkpoint - First observed
sui_get_coin_info - First observed
sui_get_datatype - First observed
sui_get_epoch - First observed
sui_get_function - First observed
sui_get_object - First observed
sui_get_package - First observed
sui_get_service_info - First observed
sui_get_transaction - First observed
sui_graphql_introspect - First observed
sui_graphql_query - First observed
sui_grpc_call - First observed
sui_list_balances - First observed
sui_list_dynamic_fields - First observed
sui_list_endpoints - First observed
sui_list_owned_objects - First observed
sui_list_package_versions - First observed
sui_object_history_step - First observed
sui_recent_checkpoints - First observed
sui_simulate_transaction - First observed
sui_stream_checkpoints - First observed
sui_transaction_rich
TDQS
Scored across 29 tools
Each tool has a clearly distinct purpose, with no overlapping functionality. For example, sui_get_object and sui_batch_get_objects are separate for single vs batch, and sui_graphql_query and sui_grpc_call are differentiated as escape hatches with clear descriptions.
Most tools follow a consistent verb_noun pattern prefixed with 'sui_', such as sui_get_object, sui_list_owned_objects. However, a few like sui_transaction_rich and sui_address_overview deviate slightly, but overall the pattern is clear and predictable.
With 29 tools, the server covers a wide range of operations for the Sui blockchain. While somewhat large, each tool serves a specific need and the count is justified by the complexity of the domain, though it borders on being heavy.
The tool set provides comprehensive coverage of Sui operations, including object retrieval, transactions, checkpoints, epochs, packages, dynamic fields, balances, streaming, simulation, and escape hatches via GraphQL and gRPC. No obvious gaps exist for common use cases.
Maintenance
Related MCP Connectors
MCP server connecting AI agents to non-custodial staking data across 130+ networks.
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server giving AI agents one-connection access to crypto & DeFi data: DeFi protocol TVL, stableco
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA lightweight, fast MCP server that provides onchain capabilities for the LLMs and Agents.39253MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server designed for AI agents to perform optimal token swaps on the Sui blockchain.6MIT
- AlicenseNot gradedqualityFmaintenanceAn MCP server for the Sui blockchain that enables AI agents to manage accounts, execute token swaps, and perform smart contract development using the Sui CLI. It supports over 30 tools for DeFi operations, staking, and market data via Pyth price oracles.92MIT
- AlicenseAqualityDmaintenanceAn MCP server that powers AI agents with indexed blockchain data from The Graph.3MIT