Skip to main content
Glama

@amplerun/mcp

An MCP server that lets AI agents find and rent GPUs on AmpleRun: browse templates and offers, price a rental, rent within a budget you set, check its state and access, and stop it. It runs locally over stdio and wraps the TypeScript SDK, @amplerun/sdk.

Read-only by default. Nothing can be rented or stopped until you start the server with AMPLERUN_MCP_ALLOW_SPEND=1.

No install needed: the same tools are hosted at https://amplerun.com/api/mcp (Streamable HTTP, Authorization: Bearer ark_...). There, a key with the renter scope can rent and stop on its own and any other key is read-only; AMPLERUN_MCP_ALLOW_SPEND applies only to this local server. See https://amplerun.com/docs/agents.

Configure

Variable

Required

Meaning

AMPLERUN_API_KEY

For account tools

An API key with the renter scope, from Account → Security. list_templates and search_offers work without it.

AMPLERUN_MCP_ALLOW_SPEND

No

1 enables create_rental, stop_rental and a paying top_up. Any other value, or unset, keeps the server read-only.

AMPLERUN_MCP_WALLET_KEY_FILE

No

File holding a Base wallet's private key (0x…). With AMPLERUN_MCP_ALLOW_SPEND=1, top_up pays USDC from it with x402. Without spend allowed the key is never read.

AMPLERUN_MCP_MAX_TOPUP_MICRO

No

Cap per top-up payment, in micro-USDC.

AMPLERUN_BASE_URL

No

API origin. Defaults to https://amplerun.com.

AMPLERUN_AGENT_WALLET_KEY

No

A 0x-prefixed EVM private key. register_agent_account signs its challenge with it, so the agent opens its own account with no email, and the server then uses the key it was issued. The private key never leaves this process and is never printed.

top_up without a wallet returns the x402 payment requirements for your own wallet to sign. See the agents guide. Use a dedicated wallet holding only what the agent may spend.

The key is sent only as the Authorization header to the API. The server never writes it to its output, logs or error messages. It does live in your client's config file: use a renter-scoped key with an expiry, and revoke it at Account → Security when you are done.

Claude Code

# Read-only: browse and price
claude mcp add amplerun -e AMPLERUN_API_KEY=ark_... -- npx -y @amplerun/mcp

# Allow renting and stopping
claude mcp add amplerun -e AMPLERUN_API_KEY=ark_... -e AMPLERUN_MCP_ALLOW_SPEND=1 -- npx -y @amplerun/mcp

For a shared .mcp.json, add -s project and pass -e 'AMPLERUN_API_KEY=${AMPLERUN_API_KEY}' in single quotes: the file then stores a reference, and each person exports their own key.

Claude Desktop

Edit claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\) and restart Claude Desktop:

{
  "mcpServers": {
    "amplerun": {
      "command": "npx",
      "args": ["-y", "@amplerun/mcp"],
      "env": { "AMPLERUN_API_KEY": "ark_..." }
    }
  }
}

Add "AMPLERUN_MCP_ALLOW_SPEND": "1" to env to allow renting.

Other MCP clients

Any client that launches stdio servers works. Command npx, arguments -y @amplerun/mcp, plus the environment above. Node.js 20 or later is required. Pin a version (@amplerun/mcp@0.1.0) where reproducibility matters.

Related MCP server: agentmetal/mcp

Tools

Tool

Kind

What it does

list_templates

read

Published templates (pinned images such as PyTorch or an inference server), with minimum VRAM and GPU count. Filter by kind or by the VRAM you have.

search_offers

read

Machines you can rent now, cheapest first. Filters: GPU model, minimum VRAM, maximum hourly price, region, GPU count, template fit.

get_quote

read

A free, non-binding 60-second quote for a template on an offer, with the fee split. Nothing is reserved.

create_rental

write

Quotes and reserves in one step. Requires an explicit budget_micro; returns the rental_id.

get_rental

read

State, charge so far and, once running, access details (endpoints, SSH command, per-rental endpoint key for model templates).

list_rentals

read

Your rentals with state and charge, to find a rental_id again.

stop_rental

write

Stops a rental and its metering. Stopping again is harmless.

get_balance

read

USDC and USDT balances: spendable, held, pending, disputed, withdrawable, 30-day spend.

top_up

read, or write with a wallet

Adds USDC with x402. Without a wallet it returns the payment requirements; with AMPLERUN_MCP_WALLET_KEY_FILE and spending allowed it pays them. The credit lands after Base finality.

host_this_machine

read

How to list this machine's GPU so its owner earns: the installer command, steps and earnings links. Runs nothing; the owner must approve. The installer answers at amplerun.com/host (Linux with an NVIDIA GPU, rented whole, for now).

get_agent_account_challenge

write

Step 1 of an agent opening its own account: an EIP-4361 message for its wallet to sign.

register_agent_account

write

Step 2: the signed message returns an agent-tagged account and an API key (shown once). No free credit. On the hosted server both work without a key, and they are the only tools served without one.

Read tools carry readOnlyHint; write tools carry destructiveHint, so clients that honour annotations can ask before each write. In an auto-approve mode the environment flag and the budget are the guards, so leave AMPLERUN_MCP_ALLOW_SPEND unset unless the agent may spend.

Money

  • Amounts are integer strings in micro-units of the asset: "1000000" is 1 USDC. They are passed through exactly as the API returns them, never converted to floats.

  • Offer prices are per hour for the whole machine, fee included. The platform fee is a flat 5%, shown on every quote and receipt, and it comes out of the charge rather than on top.

  • fee_split in get_quote and create_rental is the most a rental can cost (the smaller of the full-duration estimate and your budget) split with the ledger's formula: fee = floor(charge × platform_fee_bps / 10000), host share = charge − fee.

  • budget_micro is a hard cap. AmpleRun holds it from your balance and meters from verified readiness, so the final charge can be lower.

Retries

create_rental sends one Idempotency-Key for its quote and its reservation and returns it. Retrying with the same idempotency_key never creates a second rental. If the first attempt reserved, the retry is refused, usually because the machine is now taken and otherwise with IDEMPOTENCY_CONFLICT, and list_rentals shows the rental. If the first attempt failed or never reached AmpleRun, the retry reserves normally.

Why a local stdio server

The MCP deployment options are a hosted remote server, a bundled local server (MCPB), or a local stdio process. This package is the third, distributed through npm, because:

  • The key can spend money. An AmpleRun API key with the renter scope spends a prepaid balance. Running locally keeps it on your machine, sent only to the AmpleRun API. A hosted MCP server would have to receive and hold every user's key, a new custodial surface, until AmpleRun offers OAuth for third-party clients.

  • The spend switch belongs to the person who owns the balance. AMPLERUN_MCP_ALLOW_SPEND is a per-install setting. A shared remote server could only offer one policy for everyone.

  • No new service to run. The package ships alongside the SDKs; a remote server would need its own hosting and release path.

  • Who uses it. Agents in Claude Code and similar tools, on machines that already have Node.js.

Update 2026-09-26: the hosted Streamable HTTP server now exists (apps/web/server/mcp.ts), authenticated with the caller's own API key per request and holding no keys; the owner chose scope-gated spending there. Still open: OAuth for clients that only accept OAuth connectors, and an MCPB bundle for Claude Desktop users without Node.js.

Development

This repository mirrors the MCP server that AmpleRun ships as @amplerun/mcp. Issues and pull requests are welcome here.

npm install
npm test               # builds this package, then runs the tests
npm run typecheck
node dist/index.js     # speaks MCP on stdin/stdout; diagnostics on stderr

test/server.test.ts drives every tool through a real MCP client with the SDK stubbed. test/stdio.test.ts spawns the built server over stdio against a local HTTP stub of the API.

Built on @modelcontextprotocol/server 2.1.0 (the official TypeScript SDK, v2).

Available Tools

12 tools
create_rentalRent a GPU (spends balance)A
Destructive

Rent a GPU on AmpleRun: quotes the template on the offer and reserves the machine in one step, holding up to budget_micro from the account balance. budget_micro is required and is a hard cap: the rental is never charged more, and metering starts only once the machine is verified ready. Returns rental_id, state, the quote, fee_split and the idempotency_key used; retrying with the same idempotency_key never creates a second rental. get_rental reports state and access. Spends money. Write tool: refused unless the server was started with AMPLERUN_MCP_ALLOW_SPEND=1 (the default is read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoBalance to pay from. USDC when omitted.
offer_idYesoffer_id from search_offers.
templateYesTemplate slug such as "pytorch-cuda", or its id (UUID), from list_templates.
budget_microYesSpending cap in micro-units of the asset ("1000000" = 1 USDC). The rental is never charged more than this.
ssh_public_keyYesOne-line OpenSSH public key (the .pub file), e.g. "ssh-ed25519 AAAA... you@laptop". Installed for SSH access.
idempotency_keyNoUUID that makes retries safe. Generated when omitted and returned in the result.
duration_limit_sYesMaximum runtime in seconds (60 to 31536000), e.g. 7200 for two hours.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotations: hard-cap guarantee that the rental is never charged above budget_micro, metering only starting once the machine is verified ready, retry safety via idempotency_key, and the explicit fact that the tool spends money and is refused unless the server started with AMPLERUN_MCP_ALLOW_SPEND=1. The destructiveHint=true annotation is corroborated rather than merely repeated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense and front-loaded: purpose first, then cost/idempotency behavior, then the spend gate. It is longer than strictly necessary (the return-field enumeration partly duplicates its own later statements) but every sentence carries real information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no output schema, the description covers the return shape (rental_id, state, quote, fee_split, idempotency_key), the cost model, the idempotency contract, the auth prerequisite, and the follow-up sibling. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all seven parameters including budget_micro's cap semantics and idempotency_key's retry behavior; the description largely restates these. Baseline 3 is appropriate since the description adds little parameter detail beyond what the schema carries.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Rent a GPU'), and further pins the semantics: quotes the template on the offer AND reserves the machine in one step. This distinguishes it from the sibling get_quote (quote only) and get_rental (observe only).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly contrasts the one-step quote+reserve with the quote-only sibling and points to get_rental for state, and it explicitly states the spend gating condition (AMPLERUN_MCP_ALLOW_SPEND=1). It does not literally say 'use get_quote first if you only want a preview', so it stops short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_account_challengeStart registering this agent's own AmpleRun accountA

Step 1 of 2. Returns an EIP-4361 (Sign-In with Ethereum) message for a wallet address this agent controls, valid five minutes, single use. Signing it accepts the AmpleRun Terms version it names. Sign the message exactly as returned with personal_sign (EIP-191), then call register_agent_account with message and signature. Never send a private key to any tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
addressNoThe agent's wallet address (0x...). Defaults to this server's wallet when it has one.

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-idempotent, open-world behavior, and the description adds the traits the annotations cannot convey: five-minute validity, single-use, that signing constitutes acceptance of a named Terms version, and the required signing scheme. The 'single use' note coherently explains the idempotentHint=false annotation rather than contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads 'Step 1 of 2', then the return, then the constraints, then the required sequence. Every clause (TTL, single-use, exact signing method, key-safety warning) earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains exactly what is returned (a SIWE message), how long it lives, and how to consume it, plus the security constraint and the handoff to the sibling tool. An agent has everything needed to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter and 100% schema description coverage, the schema already documents the address and its server-wallet default. The description adds genuine semantic value by specifying it must be 'a wallet address this agent controls', narrowing how the parameter should be chosen beyond the regex/format in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: returns an EIP-4361 (SIWE) message tied to the agent's own account registration. It positions itself as 'Step 1 of 2' and names register_agent_account as the follow-up, so it is unambiguous against its only sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit ordering (step 1 of 2), the exact next action (sign with personal_sign/EIP-191, then call register_agent_account with message and signature), and a hard exclusion ('Never send a private key to any tool'). Nothing about when to use it is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_balanceGet account balanceA
Read-onlyIdempotent

Get the AmpleRun account's USDC and USDT balances as micro-unit strings: spendable (available for new rentals), held by live rentals, pending, disputed and withdrawable, plus the last 30 days' spend. Read-only; needs AMPLERUN_API_KEY.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnlyHint, idempotentHint and destructiveHint=false, so the description's 'Read-only' is partly redundant. It earns credit by disclosing the auth prerequisite (AMPLERUN_API_KEY) and by enumerating what the response breaks down into, which the structured fields do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence that front-loads the asset and unit (micro-unit strings) before the field breakdown. Every clause carries information; no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters and no output schema, the description carries the return-shape burden and does so reasonably, naming units and categories plus a 30-day spend window and the auth requirement. It stops short of stating pagination/format details or precision semantics of micro-units, so a token of clarification is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the baseline-4 case; nothing about parameter meaning needs explaining. The description correctly does not invent parameters and focuses on the return payload instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Get) and resource (AmpleRun account balances), and enumerates the exact assets (USDC/USDT) and balance categories returned. An agent can distinguish this from siblings like get_quote or get_rental without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The listed balance categories (spendable, held, pending, disputed, withdrawable) imply when an agent would want this tool, i.e. checking funds before renting or withdrawing. However, there is no explicit when-to-use statement, no exclusions, and no pointer to any alternative sibling such as top_up or get_quote.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_quoteGet a rental quoteA
Read-only

Price a rental without committing: creates a free, non-binding AmpleRun quote (valid 60 seconds; nothing is reserved or charged) for a template on an offer, capped by budget_micro. Returns the quote exactly as the API sent it plus fee_split: the most the rental can cost and how that divides into the platform fee (platform_fee_bps) and the host's share. Needs AMPLERUN_API_KEY with the renter scope. create_rental quotes again when it reserves, so this step is optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetNoBalance to pay from. USDC when omitted.
offer_idYesoffer_id from search_offers.
templateYesTemplate slug such as "pytorch-cuda", or its id (UUID), from list_templates.
budget_microYesSpending cap in micro-units of the asset ("1000000" = 1 USDC). The rental is never charged more than this.
duration_limit_sYesMaximum runtime in seconds (60 to 31536000), e.g. 7200 for two hours.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: the quote is free and non-binding, valid only 60 seconds, nothing is reserved or charged, and it requires AMPLERUN_API_KEY with the renter scope. It also discloses the return payload (raw API response plus fee_split, platform_fee_bps, host share). This is consistent with readOnlyHint=true since no state is mutated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and tightly packed, but the final sentences covering auth scope and return shape make it longer than strictly necessary for a quote call. Every sentence still carries information, so only minor trimming is possible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the return shape (raw API response plus fee_split breakdown). Combined with the auth requirement and non-commitment guarantee, an agent has everything it needs to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so every parameter is already documented. The description restates the budget_micro cap ('capped by budget_micro') and mentions offer/template sourcing, but adds no syntax or semantics beyond what the schema provides. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Price a rental without committing: creates a free, non-binding AmpleRun quote') and immediately distinguishes itself from create_rental, which does the reserving. An agent can tell exactly what this does versus its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly frames the call as optional ('this step is optional') and names create_rental as the alternative that quotes again when it reserves. The when-to-use relationship between the two tools is fully spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_rentalGet rental status and accessA
Read-onlyIdempotent

Get one AmpleRun rental by rental_id: state, cumulative charge (micro-units), rate and funded-through time. While it is RUNNING (verified ready), and read-only for a limited window after STOPPED, also returns access: endpoints, SSH host-key fingerprint, a ready-made command and, for model templates, the endpoint's per-rental API key. Read-only. list_rentals finds rental ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
rental_idYesrental_id from create_rental or list_rentals.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/idempotent/non-destructive, but the description adds genuinely new behavioral context: access data (endpoints, SSH host-key fingerprint, ready-made command, per-rental API key) is only returned while RUNNING or during a limited post-STOPPED window. That temporal constraint and the disclosure of sensitive credential material go well beyond the structured fields and directly affect how an agent should call and handle the result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the core resource and its fields, then adds the conditional access behavior and the sibling pointer. Dense but every clause carries information; only the run-on sentence about access is slightly awkward to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description carries the full burden of describing the return shape, and it does so field-by-field, including the conditional access payload. An agent knows what it will receive and under what runtime conditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One parameter with 100% schema coverage (UUID pattern and provenance already documented in the schema). The description adds meaning by naming the upstream tools that produce the id, which is useful routing context but not syntax beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get one AmpleRun rental by rental_id') and immediately enumerates the returned fields (state, cumulative charge, rate, funded-through time). It is clearly distinguishable from list_rentals, which it names as the source of ids.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent where to get the required rental_id ('list_rentals finds rental ids') and when access fields are available (while RUNNING, or read-only for a limited window after STOPPED). It lacks explicit exclusions or a statement of what to use instead when no access is needed, so it falls short of a full when/when-not treatment.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

host_this_machineEarn with this machine's GPUA
Read-onlyIdempotent

Explains how to add the GPU of the machine this agent runs on to AmpleRun, so its owner earns from rentals. Returns the one-line installer command, the steps and the earnings links. It runs nothing itself. The installer needs root, so ask the machine's owner before running it, and the owner must approve the machine from the approve_url it prints: nothing is listed without that approval.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/non-destructive/idempotent, and the description reinforces this with 'It runs nothing itself', then adds behavior the annotations cannot convey: root requirement, owner consent needed, and that listing depends on approval via the printed approve_url. That is genuinely additive safety context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with purpose, then return values, then the safety condition. No filler and no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-param, no-output-schema tool this covers everything an agent needs: what it does, that it is side-effect free, what it returns, and the consent/approval gate before the returned command is run.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema has no semantics to add; the baseline for a 0-param tool applies. The description correctly implies no input is required to obtain the installer instructions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Explains how to add the GPU of the machine this agent runs on to AmpleRun') and specifies the return payload (installer command, steps, earnings links). It is unmistakably distinct from the rental/account siblings in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear precondition chain: ask the machine's owner before running the installer because it needs root, and the owner must approve via approve_url or nothing is listed. It stops short of naming alternatives (e.g. what to use if the owner declines), but the context of use is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_rentalsList my rentalsA
Read-onlyIdempotent

List the account's AmpleRun rentals with state, charge so far (micro-units), rate and funded-through time. Ordered by id, not by time; page with next_cursor. Read-only. get_rental gives details and access for one rental.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1 to 100.
cursorNonext_cursor from the previous page.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnlyHint, idempotentHint, destructiveHint=false), so the bar is lower. The description adds genuinely non-obvious behavior: ordering is by id, not time, and pagination is driven by next_cursor, which an agent could not infer from the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses front-load what is returned, then ordering, then the sibling pointer. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description takes responsibility for the return fields and pagination model, and it does so. An agent has everything needed to call and interpret this listing correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both limit and cursor fully documented, so the baseline is 3. The description's 'page with next_cursor' merely restates the schema's cursor semantics rather than adding format or edge-case detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (list the account's rentals) and enumerates the fields returned (state, charge, rate, funded-through time). It explicitly differentiates from the sibling get_rental, so an agent can distinguish the two without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence names the alternative (get_rental for one rental's details/access), which tells the agent when to prefer this listing tool. It stops short of explicitly stating 'use this to browse all rentals', so it is strong but not a full when/when-not statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList GPU templatesA
Read-onlyIdempotent

List published AmpleRun templates: pinned container images a rental runs, such as an inference server with fixed model weights or a PyTorch or Jupyter runtime. Returns each template's id, slug (template_id), name, kind, engine, minimum VRAM in bytes and minimum GPU count, plus next_cursor. Read-only; no API key needed. search_offers finds machines for a template.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNomodel: an inference server with pinned weights; classical: a general runtime; custom: other images.
limitNoPage size, 1 to 100.
cursorNonext_cursor from the previous page.
gpu_vram_gibNoOnly templates that fit on a GPU with this much VRAM, in GiB (e.g. 24).

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered; the description adds the meaningful auth fact that no API key is needed. It also enumerates returned fields and pagination (next_cursor), giving behavioral context beyond annotations, though no rate limits or ordering guarantees.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the operation and object, then returns, then the safety/auth note and sibling pointer. Slightly dense but every clause carries information; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by listing the returned fields and the pagination cursor, and it covers auth and read-only nature for a 4-param list tool. An agent has everything needed to call and interpret it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter (kind, limit, cursor, gpu_vram_gib) is documented in the schema itself with enums and units. The description's enumeration (id, slug, kind, engine, VRAM, GPU count) describes return values rather than adding parameter meaning, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (List published AmpleRun templates) and immediately defines what a template is, so the agent understands the domain object, not just the operation. It also contrasts with the sibling search_offers, making the distinction clear without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives context ('no API key needed') and routes the agent to search_offers for finding machines, which is a useful alternative pointer. However, it does not state explicit when-not conditions or prerequisites (e.g. filtering behavior, whether unauthenticated listings are scoped).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

register_agent_accountRegister this agent's own AmpleRun accountA

Step 2 of 2. Opens an AmpleRun account for this AI agent, tagged as agent-created, with its wallet as the verified payout wallet, and returns an API key (shown once; keep it secret). The same wallet again returns the same account and a new key. There is no free credit: renting needs a deposit first. Pass message and signature from get_agent_account_challenge. scopes defaults to ["renter"]; add "host" to host machines.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
scopesNo
messageNoThe challenge message, exactly as returned.
signatureNo0x-prefixed EIP-191 signature of message.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as non-read-only, open-world, and non-idempotent. The description adds real behavioral context beyond them: the API key is shown once and must be kept secret, the same wallet re-registers to the same account but yields a new key (consistent with idempotentHint=false), and no free credit is granted. It does not cover permissions or rate limits, so not a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the stage marker and core action, then packs key constraints (key secrecy, idempotent re-registration, credit requirement, scopes default) into tight sentences. No filler; every clause carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with no output schema, it covers the return value (API key), the prerequisite sibling call, and the credit prerequisite. Missing only secondary details such as error handling on invalid signatures or what happens if the wallet is already registered under different agent metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 50%, but the description compensates on the ambiguous parts: scopes default to ["renter"] and adding "host" enables hosting, and it clarifies that message/signature come from the challenge tool. The nested agent object's fields (name, vendor, model, homepage, operator_contact) rely entirely on the schema, leaving a modest gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb+resource ('Opens an AmpleRun account for this AI agent') with its distinguishing properties: agent-created, wallet as verified payout wallet, returns an API key. It also positions itself explicitly as 'Step 2 of 2', cleanly separating it from the sibling get_agent_account_challenge (step 1).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the prerequisite flow clearly ('Pass message and signature from get_agent_account_challenge') and shifts expectations about credit ('no free credit: renting needs a deposit first'). It does not explicitly state when-not to call or what to do if the challenge is missing/expired, so it stops short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_offersSearch GPU offersA
Read-onlyIdempotent

Search GPU machines that can be rented now on AmpleRun. gpu_model, gpu_count and max_rate_micro_per_hour filter on the server. min_vram_gib and region filter each fetched page here because the API has no such filters, so a page can return fewer than limit matches: scanned is how many offers were checked, and next_cursor continues. Prices are micro-units per hour for the whole machine, fee included; cheapest first. With template, each offer carries fit {fits, reason}. Read-only; no API key needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size, 1 to 100.
cursorNonext_cursor from the previous page.
regionNoCase-insensitive part of the host's cloud region, e.g. "us-east". Offers without a reported region are excluded.
templateNoTemplate slug such as "pytorch-cuda", or its id (UUID), from list_templates.
gpu_countNoMinimum number of GPUs in the machine.
gpu_modelNoCase-insensitive part of the GPU model name, e.g. "4090" or "A100".
min_vram_gibNoMinimum VRAM per GPU in GiB. Offers with unmeasured VRAM are excluded.
max_rate_micro_per_hourNoHighest machine price per hour in micro-units, e.g. "500000" for 0.50 USDC/h.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only/idempotent/openWorld, but the description adds non-obvious behavior: no API key needed, client-side filtering that can yield fewer than `limit` matches, the meaning of `scanned`, cursor continuation, and price units. This is exactly the extra context that helps an agent interpret results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and filtering model, then pagination, pricing, template fit, and safety in two tight sentences. Every clause carries information; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by explaining the return shape: cheapest-first ordering, price units, `scanned`, `next_cursor`, and the per-offer `fit` object with template. An agent has everything needed to page and interpret results.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so per-parameter docs already exist (baseline 3). The description goes further by explaining the semantic split between server-side and per-page filters and by clarifying that prices are whole-machine micro-units including fees, which the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Search GPU machines that can be rented now on AmpleRun'), which clearly distinguishes it from siblings like list_templates and create_rental. The purpose is immediately graspable without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong operational context: which filters run server-side vs per-page, how to continue with next_cursor, and that template adds fit info. It stops short of explicitly naming alternatives or when-not conditions (e.g., 'use create_rental after selecting an offer'), so it isn't a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

stop_rentalStop a rentalA
DestructiveIdempotent

Stop an AmpleRun rental: ends the workload and its metering. Files inside the machine stay reachable read-only only for a limited retrieval window. Stopping again is harmless. Returns rental_id and the new state (STOPPING or a later state). Write tool: refused unless the server was started with AMPLERUN_MCP_ALLOW_SPEND=1 (the default is read-only).

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoRecorded with the stop.stopped by an AI agent via @amplerun/mcp
rental_idYesrental_id from create_rental or list_rentals.
idempotency_keyNoUUID that makes retries safe. Generated when omitted.

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: files remain reachable read-only for a limited retrieval window, the operation is safe to repeat, the return payload (rental_id plus STOPPING or later state), and the AMPLERUN_MCP_ALLOW_SPEND=1 gate that otherwise refuses the write. This is exactly the destructive/auth behavior an agent needs and annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four compact sentences, front-loaded with the core effect before the retrieval-window caveat and the auth gate. Each sentence carries non-redundant information, though the return-value sentence is slightly terse relative to the rest.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, gated mutation with no output schema, the description covers effect, consequence window, idempotency, return shape, and the auth requirement. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so rental_id, reason, and idempotency_key are already fully documented in the schema. The description adds nothing parameter-specific, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Stop an AmpleRun rental') and immediately scopes the effect: the workload and its metering end. It is clearly distinguishable from siblings like get_rental or list_rentals, which are read operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the verb and the noted idempotency ('Stopping again is harmless'), but it never explicitly says when to use this versus checking state with get_rental first, nor any prerequisites beyond the env-var gate. Adequate but leaves the when-to-use inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

top_upGet top-up payment instructionsA
Read-onlyIdempotent

Get what it takes to top up the AmpleRun USDC balance by amount_micro with x402: the payment requirements (network, USDC contract, treasury payTo, amount, EIP-712 domain). A wallet signs them as an EIP-3009 transferWithAuthorization and repeats POST /api/v1/billing/x402/top-up with the PAYMENT-SIGNATURE header (@amplerun/sdk does this with its x402 option). This server holds no wallet, so it pays nothing; an operator who configures AMPLERUN_MCP_WALLET_KEY_FILE and allows spending lets it pay.

ParametersJSON Schema
NameRequiredDescriptionDefault
amount_microYesTop-up amount in micro-USDC, e.g. "5000000" for 5 USDC.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds meaningful non-annotation context: the server holds no wallet and pays nothing, and payment only occurs if an operator configures AMPLERUN_MCP_WALLET_KEY_FILE and allows spending. That caveat is genuinely useful 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, front-loaded with the purpose and followed by the usage flow and the wallet caveat. Every sentence carries information, though the parenthetical SDK reference and final sentence are somewhat wordy for an otherwise tight definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description enumerates what is returned (network, USDC contract, treasury payTo, amount, EIP-712 domain) and explains the downstream signing/POST step. Combined with full annotation coverage, an agent has everything needed to call and consume this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 fully documented with a regex pattern and a concrete example, so the schema carries the burden. The description only restates amount_micro, adding no format or constraint detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get what it takes to top up the AmpleRun USDC balance'), names the exact protocol (x402) and enumerates the returned payment requirements (network, USDC contract, payTo, amount, EIP-712 domain). This is clearly distinguishable from siblings like get_balance and get_quote.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explains the intended flow clearly: fetch requirements here, then sign as EIP-3009 transferWithAuthorization and repeat the POST with the PAYMENT-SIGNATURE header. It gives strong context for when this tool is used, but does not explicitly name alternatives or state when not to use it.

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.

  1. 12 tool updatesv0.1.1
    • First observedcreate_rental
    • First observedget_agent_account_challenge
    • First observedget_balance
    • First observedget_quote
    • First observedget_rental
    • First observedhost_this_machine
    • First observedlist_rentals
    • First observedlist_templates
    • First observedregister_agent_account
    • First observedsearch_offers
    • First observedstop_rental
    • First observedtop_up

TDQS

A4.4/5.0

Scored across 12 tools

Disambiguation4/5

Most tools target distinct resources and actions, and the two-step account registration is clearly separated. Minor overlap exists between get_quote and create_rental because create_rental also quotes before reserving, though the descriptions explain when each is needed.

Naming Consistency4/5

The tool set consistently uses snake_case and generally follows a verb_noun pattern such as list_templates, create_rental, get_rental, and stop_rental. A few names deviate slightly, like get_agent_account_challenge and host_this_machine, but they remain readable and predictable enough.

Tool Count5/5

Twelve tools are well-scoped for a GPU rental marketplace that includes account setup, template and offer discovery, quoting, rental lifecycle, balance, top-up, and hosting. Each tool appears to earn its place without obvious redundancy or extreme thinness.

Completeness4/5

The surface covers the core renter lifecycle from account creation through renting, monitoring, stopping, and funding. A notable gap is the absence of a withdrawal or payout operation despite get_balance reporting withdrawable balances, and host management is only explained rather than fully exposed.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers