ethereum-wallet-mcp
Provides tools for interacting with Ethereum wallets, enabling AI agents to create wallets, check balances, validate addresses using EIP-55 checksum, retrieve current gas prices, and manage transaction history.
Ethereum Wallet MCP Server
A self-contained Model Context Protocol (MCP) server that exposes Ethereum wallet tools to AI agents over stdio.
This repository contains the complete MCP server implementation (source code + Dockerfile). No database, no external RPC provider, and no secrets are required to build and run it.
Tools
Tool | Description |
| Create a new Ethereum wallet |
| List all wallets |
| Get the ETH balance of a wallet |
| Validate an Ethereum address (full EIP-55 checksum verification) |
| Get the current gas price in Gwei |
| List transactions (paged) |
| Get details of a single transaction |
Related MCP server: wallet-generator-mcp
Build & run with Docker
docker build -t ethereum-wallet-mcp .
docker run -i ethereum-wallet-mcpRun locally
dotnet runConnect (e.g. Claude Desktop / Cursor)
{
"mcpServers": {
"ethereum-wallet-mcp": {
"command": "docker",
"args": ["run", "-i", "ethereum-wallet-mcp"]
}
}
}Stack
.NET 9
ModelContextProtocol (stdio transport)
Available Tools
7 toolscreate_walletB
Create a new Ethereum wallet for the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Wallet name. | |
| remark | No | Optional remark. | |
| category | No | Optional category. | |
| description | No | Optional wallet description. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false and destructiveHint=false, so the safety profile is covered. The description adds that the wallet is Ethereum-based and tied to the authenticated user, which is useful context, but it omits key behavior: whether a keypair is generated, whether names must be unique, and what happens on failure.
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 front-loaded sentence with zero filler and no repetition of the tool name. It is efficient, though its brevity borders on under-specification rather than tight writing.
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?
This is a mutation tool with no output schema, so the description should say what the caller receives back (wallet address, id, key material) and whether the operation has side effects like key generation. None of that is present, leaving an agent unable to anticipate the result of a create call.
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 100%, so all four parameters are documented in the schema itself. The description adds no meaning beyond that — nothing about the purpose of 'name' as an identifier, uniqueness constraints, or how 'category' and 'description' are used.
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 and resource ('Create a new Ethereum wallet') and scopes it to the authenticated user, which clearly separates it from read-side siblings like list_wallets and get_balance. It stops short of naming those siblings explicitly, so it is clear but not maximally differentiated.
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?
There is no when-to-use guidance, no prerequisites beyond the vague phrase 'for the authenticated user', and no mention of alternatives or when not to call it (e.g., duplicate wallet names, per-chain limits). An agent must infer the calling context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gas_priceARead-only
Get the current gas price in Gwei. Public; no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, so the description's added value is the auth disclosure: public and keyless. It does not say whether the value is cached, how fresh it is, or whether it returns a single number vs. slow/standard/fast tiers, which are the remaining behavioral unknowns for a gas oracle.
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 short sentences with zero filler; the core action and unit come first and the access note follows. Every clause 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?
For a zero-parameter read with no output schema and a readOnly annotation, the description is nearly sufficient: it names the resource, the unit, and the auth posture. The one meaningful omission is the shape of the returned value (single price vs. multiple speed tiers), which would affect how the agent interprets the result.
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 tool takes zero parameters, so the baseline is 4 regardless of schema coverage. The description usefully fixes the output unit as Gwei, adding a small amount of meaning not present in an empty 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?
States a specific verb and resource ("Get the current gas price") and pins down the unit (Gwei), so the agent knows exactly what value comes back. It does not name a sibling, but none of the listed siblings (balance, wallet, transaction, address tools) overlap with gas pricing, so differentiation is largely moot.
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?
Gives clear access context ("Public; no API key required"), which tells the agent it can call this without credentials or setup. There is no explicit when-to-use or when-not-to-use statement, but with no competing gas-related sibling the only open question — prerequisites — is answered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceARead-only
Get the current ETH balance of a wallet (read live from the chain).
| Name | Required | Description | Default |
|---|---|---|---|
| walletId | Yes | Wallet ID (GUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The parenthetical "read live from the chain" adds genuine behavioral context beyond readOnlyHint — it signals a network-bound, fresh read rather than a cached value. However, the description says nothing about latency, rate limits, or what happens when the wallet ID is unknown or the chain is unreachable, which are the remaining behavioral questions for a live-chain read.
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?
One sentence, front-loaded with the verb and resource, with the freshness qualifier appended compactly. Every clause earns its place and there is no redundant restatement of the tool name.
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 one-parameter read tool with readOnlyHint and full schema coverage, the definition covers enough to invoke correctly, and "ETH balance" tells the agent what comes back despite no output schema. Only minor gaps remain around units/format of the returned balance and error behavior.
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 100% and the single parameter walletId (GUID) is already documented in the schema. The description adds no format, sourcing, or constraint detail about the identifier, so this sits at the baseline expected when the schema does the work.
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 gives a specific verb and resource ("Get the current ETH balance of a wallet"), which is unambiguous and readily separable from siblings like list_transactions or gas_price. It stops short of explicitly naming a sibling it should be preferred over, but the resource is distinctive enough that confusion is unlikely.
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?
Usage is only implied: the agent can infer this is the tool for checking a balance, but there is no explicit when-to-use guidance, no note on prerequisites such as the wallet existing in the account, and no stated alternative for multi-asset or historical balance queries (e.g., versus list_transactions).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transactionARead-only
Get details of a single transaction owned by the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| transactionId | Yes | Transaction ID (GUID). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read. The description adds the useful constraint that only transactions owned by the authenticated user are retrievable, implying out-of-scope IDs will not resolve. It says nothing about not-found behavior, error shape, or how much detail is returned, so the addition is modest.
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 front-loaded sentence with no filler, stating the action, the scope, and the ownership constraint at once.
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 one-parameter read tool with a fully documented schema and a readOnly annotation, the description covers what an agent needs to select and call it. Only edge-case behavior for missing or unowned transaction IDs is left unstated, which is a minor gap.
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 100% and the single parameter is documented as a GUID transaction ID. The description mentions no parameter at all, so it adds no meaning beyond the schema; baseline 3 applies.
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?
States a specific verb ('Get details') and resource ('a single transaction') with an ownership scope ('owned by the authenticated user'), which cleanly separates it from the plural sibling list_transactions. It stops short of naming that sibling, so sibling differentiation is implicit rather than explicit.
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?
When-to-use is implied by 'single transaction' versus the list-oriented siblings, but there is no explicit guidance, no mention of what to do when the ID is unknown or the transaction isn't owned by the caller, and no reference to an alternative tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_transactionsBRead-only
List the authenticated user's transactions (paged).
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | Page number (1-based). | |
| pageSize | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real context beyond that: results are scoped to the authenticated user and the output is paged. It says nothing about default ordering, what a transaction record contains, or pagination limits beyond the schema defaults.
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 short sentence with the scoping constraint front-loaded and zero redundant phrasing. Nothing could be removed without losing meaning.
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 read-only, two-parameter list tool with full schema coverage, the essentials are present. However, there is no output schema, so the agent gets no signal about the shape or ordering of returned transactions, and nothing indicates behavior when the page is beyond the last page.
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 100% and both parameters (page, pageSize) are documented with defaults, so the schema does the heavy lifting. The word 'paged' in the description merely corroborates that rather than adding format or boundary details, so baseline 3 applies.
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?
States a specific verb and resource ('List ... transactions') and scopes it to the authenticated user, which cleanly separates it from get_transaction (singular fetch) and get_balance. It does not explicitly name a sibling, so it stops short of a 5.
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?
There is no explicit when-to-use or when-not-to-use guidance, and no mention of get_transaction as the alternative for retrieving a single record. The list-vs-fetch distinction is only implied by the plural noun, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_walletsARead-only
List all wallets owned by the authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already establishes this as a safe read, and the description usefully adds that results are scoped to the authenticated user, implying authentication is required. It says nothing about pagination, result ordering, or whether wallet balances are included in each entry, which matters given get_balance is a sibling.
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?
One sentence with zero filler, and the key scoping fact (owner = authenticated user) is front-loaded. Nothing could be trimmed without losing 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?
For a zero-parameter read tool with a fully covered schema and no output schema, this is close to sufficient: it says what is listed and whose wallets. A short note on whether balances are included or how large listings are handled would close the remaining gap.
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 tool takes zero parameters, so there is no parameter meaning to add beyond the schema. The description correctly does not invent any filtering options that the empty schema does not support.
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?
States a specific verb ('List') and resource ('wallets') and adds a scope qualifier ('owned by the authenticated user') that separates it from a global wallet listing. It implicitly contrasts with create_wallet, but never names a sibling explicitly, so an agent must rely on the names to route.
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?
Usage is only implied: an agent can infer this is the enumeration call for wallets, versus get_balance for a single balance or list_transactions for activity. There is no explicit when-to-use/when-not statement or named alternative, and no guidance on whether to call this before get_balance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_addressARead-only
Validate an Ethereum address format. Public; no API key required.
| Name | Required | Description | Default |
|---|---|---|---|
| address | Yes | Ethereum address to validate. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description usefully adds that no API key is needed. However, it does not clarify the scope of 'format' (pure syntax vs. EIP-55 checksum) or what a failure looks like, leaving some behavioral ambiguity for a validation tool.
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 short, front-loaded sentences with zero filler; the action comes first and access constraints follow immediately.
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 one-parameter tool this is close, but with no output schema the description should indicate what validation returns (boolean, error, normalized address). That missing return semantics is the main gap for a definition this simple.
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 100%, so the single 'address' parameter is already documented in the schema. The description adds no format details, input conventions, or examples beyond that, so the schema does the heavy lifting and baseline 3 applies.
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?
States a specific verb and resource ('Validate an Ethereum address format'), so an agent knows exactly what the tool does. No sibling differentiates itself as an alternative validator, so there is nothing to contrast against, but the purpose itself is 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 supplies access context ('Public; no API key required') but never says when to call this versus doing format checks elsewhere. Since no sibling tool overlaps, implied usage is reasonable, but it stops short of explicit when-to-use guidance.
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.
7 tool updates
v0.1.0- First observed
create_wallet - First observed
gas_price - First observed
get_balance - First observed
get_transaction - First observed
list_transactions - First observed
list_wallets - First observed
validate_address
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: balance reads, wallet listing/creation, transaction listing vs. single-transaction detail, plus two clearly public utility calls (gas price, address validation). There is no meaningful overlap between any pair, and the list/get distinction on transactions is explicit.
Five of seven tools follow a clean verb_noun pattern (get_balance, list_wallets, list_transactions, get_transaction, create_wallet, validate_address). The only deviation is gas_price, which uses a noun phrase rather than a verb, but it is still readable and unambiguous.
Seven tools is a tight, well-scoped surface for an Ethereum wallet server with no filler. Every tool maps to a distinct capability an agent would plausibly need.
Read paths and wallet creation are covered, but there is no send/transfer tool, no single-wallet detail or rename/delete operation, and no transaction submission or signing. An agent can inspect a wallet but cannot act on it, which is a notable gap for a wallet server.
Maintenance
Related MCP Connectors
Self-hosted MCP server: 26 deterministic dev, security, and EVM tools.
Free Ethereum wallet profile & NFT metadata MCP tools (no signup).
Tenzro Network MCP server: wallet, identity, payments, inference, staking, bridges, verification.
Multi-chain wallet MCP. 18 tools: balance, swap, bridge, stake, claim. Pay-per-call USDC (x402 v2).
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA lightweight, fast MCP server that provides onchain capabilities for the LLMs and Agents.62 npm255MIT
- AlicenseBqualityDmaintenanceAn MCP server for batch-generating wallets compatible with Ethereum and all EVM-compatible chains.11MIT
- AlicenseCqualityCmaintenanceSelf-hosted wallet MCP server for AI agents. Provides 42 tools for multi-chain crypto operations: transfers, token management, DeFi (swap, lend, stake, bridge, perp), NFT, smart contracts, and x402 payments. Supports EVM and Solana with policy engine, spending limits, and human approval.6029MIT
- AlicenseNot gradedqualityCmaintenanceSelf-hosted MCP server enabling AI agents to manage EVM wallets, check balances, swap tokens, and securely execute transactions via 1Claw Intents without exposing private keys.50 PyPIMIT