agentmetal/mcp
This server enables autonomous discovery, provisioning, management, and interaction with Linux VPS instances using USDC payments and API keys. It provides 11 tools:
Get catalog (
get_catalog): Browse available server plans (nano,small,medium), locations, and add-on pricing for bandwidth/storage. Free, no payment required.Provision a server (
provision_server): Launch a VPS for 1–30 days, paying with USDC via x402. Optionally provide an SSH public key or enable a managed keypair for root shell access.Get server status (
get_server): Fetch current status, IPv4 address, expiry date, bandwidth usage, and storage info for a specific server.List servers (
list_servers): View all servers associated with a wallet or account API key.Extend a lease (
extend_server): Add 1–30 days to an existing server's lease, paying with USDC.Destroy a server (
destroy_server): Immediately terminate a server (requires account API key).Reboot a server (
reboot_server): Soft-reboot an owned server (requires account API key).Server logs (
server_logs): Retrieve hypervisor-level diagnostics including status, recent provider actions, VNC console URL, and live CPU/disk/network metrics (requires account API key).Execute commands (
exec_command): Run arbitrary shell commands as root over SSH on servers provisioned withmanaged_key:true, with timeouts of 1–120s and up to 256 KB output (requires account API key).Claim account (
claim_account): Initiate account registration by requesting a one-time verification code sent to an email address.Verify claim (
verify_claim): Complete registration by submitting the emailed code to receive an account API key, with an option to link a wallet address.
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., "@agentmetal/mcpProvision a VPS for 14 days"
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.
@agentmetal/mcp
MCP server that exposes AgentMetal as tools, so an agent can discover → pay → provision → SSH in → run commands → manage → renew its own Linux server (VPS / cloud instance) with no human signup. Paid tools sign USDC payments over x402 v2 (or pay by card); the rest are plain HTTP.
Tools
13 tools. Paid tools sign a USDC/x402 payment; account-gated tools need
AGENTMETAL_API_KEY (am_live_…) and ownership of the server.
Tool | Pays? | Account key? | What it does |
| — | — | List plans, locations, and add-on pricing (bandwidth, storage). The free discovery hook. |
| ✅ USDC | — | Provision a VPS ( |
| — | — | Status, IPv4, expiry, bandwidth, storage for a server id |
| — | — | Fleet for a wallet/account |
| ✅ USDC | — | Extend a lease by N days |
| — | ✅ | Destroy now |
| — | ✅ | Soft-reboot an owned server |
| — | ✅ | Hypervisor-level diagnostics without logging in: status, recent provider actions, a VNC console URL, and live CPU/disk/net metrics (no text boot log exists provider-side) |
| — | ✅ | Run a shell command as root over SSH → exit_code/stdout/stderr. Requires a server provisioned with |
| — | — | Read a box's edge-firewall rules. Callable from the box itself (source-IP identity) or with an account key. |
| — | — | Open/close inbound ports on a box's edge firewall (protocol/port/source_ips). From the box itself or with an account key; SSH-lockout guarded. |
| — | — | Email a one-time claim code (via AWS SES) |
| — | — | Redeem the code for an account API key. Link a wallet by also passing |
Add-ons (currently API endpoints, not yet separate MCP tools): extra storage
($0.01/GB/day, attached block volume) via POST /v1/servers/{id}/storage and extra
bandwidth ($2/TB beyond the 20 TB included) via POST /v1/servers/{id}/bandwidth.
Related MCP server: x402 Payment Gateway MCP Server
Configuration (env)
Var | Default | Purpose |
|
| API base URL |
| — |
|
|
| CAIP-2 network (Base mainnet) |
|
| Per-request spend cap, in USDC |
| — |
|
Use with Claude Code
// .mcp.json (or claude mcp add)
{
"mcpServers": {
"agentmetal": {
"command": "node",
"args": ["packages/mcp/src/index.ts"],
"env": {
"WALLET_PRIVATE_KEY": "0x…",
"AGENTMETAL_MAX_USDC": "50"
}
}
}
}The wallet must hold USDC on Base. The spend cap (AGENTMETAL_MAX_USDC) bounds what any
single tool call can pay; a 402 above the cap is refused before signing.
Status: client + server are unit-tested and the stdio handshake is verified. Live USDC settlement needs a funded wallet + an x402 facilitator that supports the
exact/eip155:8453kind.
Available Tools
11 toolsclaim_accountClaim an account (request code)A
Begin claiming an AgentMetal account by email. Sends a one-time 6-digit code to the address; redeem it with verify_claim to get an account API key. Side effect: sends one email. Does not charge. Accounts are OPTIONAL — they add fleet management under one key, monthly card billing, and higher quotas, but are not required to provision or pay. Call verify_claim next with the emailed code.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | Email address that should receive the one-time 6-digit claim code. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses side effect (sends one email) and states it does not charge. However, lacks details on error handling, rate limits, or behavior on invalid email, though schema provides pattern 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 sentences plus a note, all front-loaded with essential information. No wasted words, each 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?
Given single parameter, no output schema, and simple action, the description covers purpose, side effect, optionality, and next steps. No missing information needed for agent decision.
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 covers the parameter fully with format and pattern, achieving 100% coverage. Description adds context that the email receives a code, enhancing understanding 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 the verb 'claim' and resource 'AgentMetal account', and describes the action: sends a one-time code to email. Distinguishes from sibling tool 'verify_claim' by specifying it as the next step.
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 notes accounts are optional and explains when to use: for fleet management, billing, quotas. Also instructs to call 'verify_claim' next, providing clear step-by-step guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
destroy_serverDestroy a serverA
Permanently destroy a server RIGHT NOW, before its lease expires. IRREVERSIBLE — the VM and all its data are deleted and remaining lease time is NOT refunded. Requires an account API key (AGENTMETAL_API_KEY); without one this returns an auth error. Use to free quota or stop holding an unneeded box. To let a box expire naturally instead, simply do not extend it.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id to destroy, e.g. "srv_abc123". This action cannot be undone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses irreversibility, no lease refund, auth error without key, and that it destroys before lease expires. No annotations provided, so description carries full burden and does so thoroughly.
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, each serving a purpose: stating the action, warning about consequences, and giving usage guidance. Could be slightly more concise but is well-structured and front-loaded.
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 auth, irreversibility, refund policy, and use cases. No output schema exists, but description is sufficient for this simple delete action. Lacks mention of error responses or idempotency, but not critical.
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 already describes the parameter and its irreversibility. The description adds a concrete example ('srv_abc123') and reiterates the consequence, providing slight extra clarity 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 uses the verb 'destroy' and specifies the resource 'server' with emphasis on permanence. It distinguishes from sibling tools like 'extend_server' by contrasting with natural expiration.
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 when to use the tool (free quota, unneeded box) and provides an alternative: 'To let a box expire naturally instead, simply do not extend it.' Also notes auth requirement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
exec_commandRun a command on a serverA
Run a single shell command as ROOT on a server over SSH and get back its exit code, stdout, and stderr. Requires (1) an account API key (AGENTMETAL_API_KEY) AND ownership of the server, and (2) a server provisioned with managed_key:true — the only way the API holds a key it can log in with; a box created without managed_key returns "no_managed_key". The command runs in a non-interactive shell with no TTY, so avoid prompts; chain steps with && or ;. Execution is bounded by timeout_seconds (1–120, default 60); if it overruns, the process is killed and timed_out is true. Output is capped at 256 KB per stream. Use to install packages, run scripts, or inspect a box you own without opening your own SSH session.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id to run the command on, e.g. "srv_abc123". Must be a running, managed-key server you own. | |
| command | Yes | The shell command to run as root (non-empty, ≤4096 chars). Runs non-interactively; chain steps with && or ;. | |
| timeout_seconds | No | Max seconds to wait before the command is killed (1–120, default 60). On overrun, timed_out is true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: runs as root, non-interactive, no TTY, returns exit code/stdout/stderr, timeout with timed_out flag, 256KB output cap, and error for missing managed_key. This meets the transparency requirement comprehensively.
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, well-structured paragraph that front-loads the core purpose. Each sentence adds value (prerequisites, constraints, use case). It is concise but thorough, though slightly long due to multiple constraints; a 4 reflects this minor trade-off.
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 all return elements (exit code, stdout, stderr, timed_out) and covers edge cases (no_managed_key, timeout, output cap). It is complete for a command execution tool, and sibling tools complement it without overlap.
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 minor context beyond the schema (e.g., 'Must be a running, managed-key server you own' for id, and restates non-interactive for command). It does not introduce new parameter information, so score remains at the baseline.
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 'Run a single shell command as ROOT on a server over SSH and get back its exit code, stdout, and stderr.' It precisely conveys the action, resource, and expected outcome, and it is distinct from all sibling tools which deal with server lifecycle management, not command execution.
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 lists prerequisites: API key, ownership, and server with managed_key:true. It warns about non-interactive shell and suggests chaining commands with && or ;. It also specifies a use case: 'Use to install packages, run scripts, or inspect a box you own without opening your own SSH session.' This provides clear 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.
extend_serverExtend a server leaseA
Extend an existing server's lease so it is not auto-destroyed at expiry. SPENDS REAL USDC — signed on-chain via x402 (Base) up to the per-call spend cap; a real charge. Adds days days to the current expiry and returns the new expiry (unix seconds). Use before a lease runs out to keep a box alive; check the current expiry first with get_server.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id to extend, e.g. "srv_abc123". | |
| days | Yes | Whole days to add to the current lease (1–30). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Warns about real money spend 'SPENDS REAL USDC — signed on-chain via x402' and describes effects and return value, fully compensating for absent annotations.
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 main action, then financial warning and guidance. 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?
Covers action, side effects, return value, prerequisite, and financial impact. Complete given no output schema and sibling context.
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 covers both parameters with descriptions. Description adds the effect ('Adds days...') and return value context, going 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 'Extend an existing server's lease' with specific verb and resource. Distinguishes from siblings like destroy_server, provision_server, etc.
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 to 'Use before a lease runs out to keep a box alive; check the current expiry first with get_server,' providing clear when-to and prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_catalogList plans, locations, and pricingA
List available server plans (size + price), the regions servers can run in, and add-on pricing for bandwidth and storage. FREE — read-only, charges no money and needs no wallet or account. Call this FIRST to see what sizes, regions, and prices are on offer before provisioning a server.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Clearly declares it is free, read-only, and requires no wallet/account. With no annotations provided, the description adequately covers behavioral 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?
Two sentences, no redundancy, front-loaded with purpose. 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?
Describes all output categories and usage order. Without output schema, this is sufficient for an agent to understand the tool's purpose and results.
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?
No parameters exist, so baseline 4 applies. Description adds value by listing what the output includes (plans, regions, pricing).
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 explicitly states it lists server plans, regions, and add-on pricing. It distinguishes itself from siblings like get_server and list_servers by being a pre-provisioning discovery 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?
States to call this first before provisioning, making its usage context clear. Does not explicitly mention when not to use it, but its read-only nature implies it's always safe.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_serverGet server statusA
Look up one server's live status (provisioning | running | suspended | expired | destroyed), public IPv4, lease expiry (unix seconds), and bandwidth usage. Read-only — never charges money or changes the server. Use to confirm a box is up and reachable, or to see how long it has before auto-destroy.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id returned by provision_server, e.g. "srv_abc123". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: it is read-only, never charges money or changes the server, and lists possible statuses. This goes beyond what the input schema provides.
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, each serving a purpose: what it does, safety assurance, and when to use. 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 the simplicity of the tool (one param, no output schema), the description covers all needed context: return fields, usage scenarios, and safety profile. Sibling tools provide clear contrast.
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% for the single parameter, and the description adds context about the parameter's source and format ('Server id returned by provision_server, e.g. srv_abc123'), enriching the schema's 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 tool's function (look up live status), lists specific fields returned, and distinguishes it from sibling tools like destroy_server or list_servers by emphasizing read-only nature.
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 explicit usage scenarios ('confirm a box is up and reachable, or to see how long it has before auto-destroy'), but does not explicitly mention when not to use it or name alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_serversList your serversA
List every server (the fleet) for a payer wallet, or for the whole account when an account API key is configured. Read-only — never charges or changes anything. Defaults to the wallet configured on this MCP server; pass wallet to list a different payer. Use to enumerate active boxes before calling extend_server or destroy_server.
| Name | Required | Description | Default |
|---|---|---|---|
| wallet | No | Optional payer wallet address (0x…) whose servers to list. Defaults to this MCP server's configured wallet. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It explicitly states 'Read-only — never charges or changes anything,' which is critical. It also discloses the default wallet behavior. It does not mention rate limits or pagination, but for a simple list operation, the transparency is sufficient.
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 states purpose, second declares read-only and default, third gives usage example. No wasted words. 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?
Given no output schema, the description could explain return format, but 'list every server' implies an array. The description covers core use, wallet scope, and safety. It is complete enough for a list tool with clear sibling context.
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% (1 parameter fully described). The description adds 'pass `wallet` to list a different payer' which essentially restates the schema. Baseline is 3; no significant extra meaning added 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 tool lists servers for a payer wallet or whole account. It uses specific verb+resource ('List every server') and implicitly distinguishes from sibling 'get_server' (singular) and 'provision_server'. Additionally, it mentions enumeration for use before 'extend_server' or 'destroy_server', reinforcing its distinct role.
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 usage context: 'use to enumerate active boxes before calling extend_server or destroy_server.' It also notes default wallet behavior and optional parameter. However, it lacks explicit when-not-to-use guidance or comparison to alternatives like 'get_server', though sibling list helps.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
provision_serverProvision a serverA
Provision a brand-new Linux VPS and pay for it in a single call. SPENDS REAL USDC — the payment is signed on-chain via x402 (Base) up to this MCP server's per-call spend cap; it is a real charge, not a quote or a dry run. Returns the server id (srv_…), public IPv4, and an ssh root@<ip> target, usually reachable in under 60 seconds. Use when an agent needs its own compute to build, run, or host something with no human signup. Pass ssh_key to get inbound SSH; omit it and the box boots with no way to log in. The lease lasts days days, after which the server is automatically destroyed unless you extend_server first.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Server size / price tier: "nano" (smallest, cheapest), "small", or "medium". Choose the smallest that fits the workload. | |
| days | Yes | Lease length in whole days (1–30). The server auto-destroys at expiry unless extended; you pay up front for the whole lease. | |
| ssh_key | No | Optional single-line OpenSSH public key (e.g. "ssh-ed25519 AAAA…") authorized for root SSH. Omit and the box has NO inbound SSH access. | |
| managed_key | No | Generate a server-side SSH keypair, authorize it on the box, and return the private key ONCE; enables exec_command. Stored only encrypted server-side. | |
| via | No | Optional attribution tag (e.g. the calling skill name). Analytics only; does not affect provisioning. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full transparency burden. It discloses key behaviors: real payment via on-chain x402, return values (server id, IP, ssh target), typical reachability within 60 seconds, auto-destroy after lease, and consequences of omitting ssh_key. It does not cover error cases 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?
The description is somewhat long but tightly packed with useful information. It front-loads the critical warning about spending real USDC and then details parameters and return values. Every sentence earns its place, though minor trimming could be possible.
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 provisioning (5 parameters, no output schema), the description covers core aspects: payment, return values, lease duration, SSH options, and mentions auto-destruction and extension via sibling. It lacks error handling details but is sufficient for an AI agent 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 coverage is 100% as all parameters have descriptions. The description adds value beyond schema: it explains that omitting ssh_key blocks SSH access, managed_key enables exec_command, and via is analytics-only. It also recommends choosing the smallest plan that fits the workload.
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 provisions a Linux VPS and pays for it in a single call. It uses specific verbs ('provision', 'pay') and resource ('server'), and distinguishes from sibling tools like list_servers and destroy_server.
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 when to use: 'when an agent needs its own compute to build, run, or host something with no human signup.' It provides guidance on passing or omitting ssh_key but does not explicitly list alternatives or when not to use another tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reboot_serverReboot a serverA
Soft-reboot a server (graceful ACPI restart) without destroying it or losing data. Use to recover a box that has become unresponsive or to apply changes that need a restart. Requires an account API key (AGENTMETAL_API_KEY) and ownership of the server; without one this returns an auth error. Does not charge money. Returns immediately with status "rebooting"; the box is back in well under a minute.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id to reboot, e.g. "srv_abc123". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so description covers all: non-destructive, no charge, immediate return with status, quick recovery, auth error. Full behavioral disclosure.
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 action and key constraints. Every sentence adds value without 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?
Single parameter, no output schema. Description covers purpose, usage, behavior, prerequisites, and result fully. No gaps given simplicity.
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 100% with clear 'id' description. Description adds no extra parameter info beyond schema, meeting baseline expectation.
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 soft-reboots a server gracefully without data loss, distinguishing from sibling destroy_server. Verb 'reboot' and resource 'server' are specific.
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 use for unresponsive box or applying changes needing restart. Mentions prerequisites (API key, ownership) and auth error. Lacks explicit alternatives, but context from siblings suffices.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_logsServer diagnostics (hypervisor-level)A
Hypervisor-level diagnostics for a server WITHOUT logging into it: current status, recent provider actions (with any error messages), a VNC console URL + one-time password, and live CPU / disk / network metrics. Use to diagnose a stuck, unreachable, or misbehaving box from the outside. Requires an account API key (AGENTMETAL_API_KEY) and ownership; does not charge money. NOTE: the cloud provider exposes no text serial-console / boot log, so this returns actions + console access + metrics, not a plain-text log — open the VNC console URL for screen-level access.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id to diagnose, e.g. "srv_abc123". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description fully covers requirements (API key, ownership), confirms no charge, explains limitation of no text serial console, and clarifies what is returned versus what is not.
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?
Description is somewhat long but all information is relevant and front-loaded. No redundant sentences.
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 output schema, description fully explains return values (status, actions, console, metrics). Parameter is well described. Complete for the 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?
Only one parameter 'id' with schema description; description adds example format and clarifies it's the server to diagnose. Schema coverage is 100%, baseline 3, and description adds value.
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's for hypervisor-level diagnostics without logging in, and lists specific outputs (status, actions, console, metrics). Differentiates from siblings like get_server and exec_command.
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 use to diagnose stuck/unreachable boxes. Could be improved by contrasting with get_server or exec_command, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
verify_claimVerify an account claimA
Complete an account claim using the 6-digit code emailed by claim_account. Returns a long-lived account API key (am_live_…) — store it securely; it authorizes destroy_server and account-scoped calls. Optionally link a wallet so its existing servers attach to the account. The code expires 10 minutes after claim_account and is invalidated after 5 wrong attempts (re-run claim_account to retry).
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | The same email address you passed to claim_account. | ||
| code | Yes | The 6-digit code from the claim email. | |
| wallet | No | Optional wallet address (0x…) to link to the account, attaching its existing servers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description fully discloses behaviors: returns a long-lived API key that authorizes other tools, optionally links a wallet to attach servers, and details expiry and invalidation rules. No annotation contradiction.
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 no redundancy. Front-loaded with main purpose, then key security note about API key, then wallet option, then retry logic. 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?
Given no output schema or annotations, the description covers all needed information: inputs, output (API key), side effects, error conditions, and relationship to sibling tools. Completely adequate 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 description coverage is 100%, but the description adds context beyond the schema: emphasizes that email must match claim_account, code is 6-digit, and wallet is optional with specific effect (attaching servers). This enriches parameter understanding.
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 completes an account claim with a 6-digit code, and references the related 'claim_account' tool. It distinguishes by explaining the output (API key) and optional wallet linking, making its 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?
Provides explicit context on when to use (after claim_account), with critical usage constraints: code expires in 10 minutes, invalidated after 5 wrong attempts, and instruction to re-run claim_account to retry. This guides appropriate invocation and failure handling.
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.
11 tool updates
v0.2.1- Changed
claim_account1 field changed- changed
Input schema / properties / email / descriptionPrevious value: -"Email to receive the code"New value: +"Email address that should receive the one-time 6-digit claim code."
- Changed
destroy_server1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Server id"New value: +"Server id to destroy, e.g. \"srv_abc123\". This action cannot be undone."
- Added
exec_command - Changed
extend_server2 fields changed- changed
Input schema / properties / days / descriptionPrevious value: -"Days to add (1–30)"New value: +"Whole days to add to the current lease (1–30)." - changed
Input schema / properties / id / descriptionPrevious value: -"Server id"New value: +"Server id to extend, e.g. \"srv_abc123\"."
- Added
get_catalog - Changed
get_server1 field changed- changed
Input schema / properties / id / descriptionPrevious value: -"Server id, e.g. srv_…"New value: +"Server id returned by provision_server, e.g. \"srv_abc123\"."
- Changed
list_servers1 field changed- changed
Input schema / properties / wallet / descriptionPrevious value: -"Payer wallet to list; defaults to the configured wallet"New value: +"Optional payer wallet address (0x…) whose servers to list. Defaults to this MCP server's configured wallet."
- Changed
provision_server5 fields changed- changed
Input schema / properties / days / descriptionPrevious value: -"Lease length in days (1–30)"New value: +"Lease length in whole days (1–30). The server auto-destroys at expiry unless extended; you pay up front for the whole lease." - added
Input schema / properties / managed_keyAdded value: +{ + "description": "Generate a server-side SSH keypair, authorize it on the box, and return the private key ONCE; enables exec_command. Stored only encrypted server-side.", + "type": "boolean" +} - changed
Input schema / properties / plan / descriptionPrevious value: -"Server size"New value: +"Server size / price tier: \"nano\" (smallest, cheapest), \"small\", or \"medium\". Choose the smallest that fits the workload." - changed
Input schema / properties / ssh_key / descriptionPrevious value: -"SSH public key to authorize on the box"New value: +"Optional single-line OpenSSH public key (e.g. \"ssh-ed25519 AAAA…\") authorized for root SSH. Omit and the box has NO inbound SSH access." - changed
Input schema / properties / via / descriptionPrevious value: -"Attribution tag, e.g. the calling skill name"New value: +"Optional attribution tag (e.g. the calling skill name). Analytics only; does not affect provisioning."
- Added
reboot_server - Added
server_logs - Changed
verify_claim3 fields changed- changed
Input schema / properties / code / descriptionPrevious value: -"The 6-digit code from the email"New value: +"The 6-digit code from the claim email." - added
Input schema / properties / email / descriptionAdded value: +"The same email address you passed to claim_account." - changed
Input schema / properties / wallet / descriptionPrevious value: -"Wallet address to link to the account"New value: +"Optional wallet address (0x…) to link to the account, attaching its existing servers."
7 tool updates
v0.1.2- First observed
claim_account - First observed
destroy_server - First observed
extend_server - First observed
get_server - First observed
list_servers - First observed
provision_server - First observed
verify_claim
TDQS
Scored across 11 tools
Each tool targets a distinct operation: account claiming, server provisioning, lifecycle management, diagnostics, and catalog browsing. No overlapping purposes.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., claim_account, provision_server, get_catalog).
11 tools are well-scoped for a VPS provisioning service, covering account management, server CRUD, diagnostics, and catalog without being overly numerous or sparse.
Covers core lifecycle: account creation, provision, destroy, extend, reboot, list, get details, execute commands, logs, and catalog. Minor gaps like no explicit SSH key management beyond initial provision.
Maintenance
Related MCP Connectors
Give your AI agent an x402 wallet: discover and pay for services in USDC, or earn from your own.
Pay-per-use AI and data tools via x402: image, video, music, voice, search, crypto. USDC.
Agent infra: email, phone, social, domains, VPS, wallets. Paid per-action via x402, no API key.
Pay-per-call browser rendering and x402 marketplace ranking for AI agents, billed via USDC.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to discover and pay for x402-enabled services using natural language, with multi-chain support for Solana and EVM payments.2 npm1MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to make micropayments using USDC on Solana via the x402 protocol, supporting payment requests, on-chain verification, and revenue tracking.MIT
- AlicenseAqualityDmaintenanceMCP server enabling AI agents to purchase VPS and blockchain node products using USDC on Base via Easy Node's x402 API.76 npm7Business Source 1.1

@hpp-io/x402-mcp-bridgeofficial
AlicenseNot gradedqualityBmaintenanceEnables AI agents to autonomously pay for and discover services using HPP USDC.e over the x402 protocol, without API keys or manual signing.54 npmApache 2.0