hetzner-mcp
hetzner-mcp is a Model Context Protocol server that lets an AI assistant read and manage an entire Hetzner account — Cloud, Storage Box, and Robot dedicated servers — with guards on anything that costs money.
Raw API access to all three surfaces:
cloud_request,storagebox_request, androbot_requestcall any relative endpoint (GET/POST/PUT/PATCH/DELETE) with query params and JSON body.Free read shortcuts (27 list tools): Cloud servers, SSH keys, networks, firewalls, volumes, load balancers, floating/primary IPs, placement groups, certificates, images, ISOs, DNS zones, server types, LB types, locations, datacenters, pricing; Storage Box list/types; Robot servers, IPs, subnets, vSwitches, failover IPs, SSH keys, storage boxes, rDNS.
Create cloud servers:
cloud_create_serverwith server type, image, location, SSH keys, networks, firewalls, cloud-init user data, labels, and start flag.Delete cloud servers:
cloud_delete_serverpermanently removes a server and stops billing.Cost safety: reads are free; billed creates require
confirm: trueand a live price shown first, and stay disabled unlessHETZNER_MCP_ALLOW_BILLED=1; a read-only mode and destructive-action guards apply to every write.Token-efficient output: compact views by default, with
verbose: truefor full payloads.Contribution loop:
contribute_or_reportreturns a prefilled GitHub issue link and PR steps when an endpoint is missing or misbehaving.Also documented in the README but not in this schema:
infra_map,infra_audit,spend_history,find_capacity, plus thesetup,doctor,map,audit, andprojectsCLI commands.
Manages Hetzner Cloud servers, networks, volumes, firewalls, load balancers, floating and primary IPs, DNS zones, SSH keys, images, certificates, placement groups, storage boxes, and Robot dedicated servers with vSwitches, including cost guards on billable resources.
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., "@hetzner-mcplist my cloud servers"
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.
Manage your entire Hetzner platform from any AI assistant. Cloud servers, networks, volumes, firewalls, load balancers, IPs and DNS, plus Storage Boxes and Robot dedicated servers. One Model Context Protocol server, every surface, tested live, with a hard cost guard so you never get a surprise bill.
If this saves you time, please sponsor the project, leave a star, and follow along. Sponsorship is what lets me put real hours into building this out.
Star | Sponsor | Fork | Follow on GitHub | Follow on X | next8n.com
The Hetzner wordmark above is a trademark of Hetzner Online GmbH, shown only to identify the service this tool integrates with. This project is independent and is not affiliated with, endorsed by, or sponsored by Hetzner Online GmbH, and claims no rights to the logo. See docs/CREDITS.md.
See it in 90 seconds
Can't see the player? Watch the video.
Related MCP server: mcp-hetzner
What you get
Answers from your real account, in plain words. Ask "what am I running and what does it cost?" and get the list with the monthly price, no Console clicking and no API to learn.
No surprise bills. Reading is always free. Anything that costs money shows its live price and waits for your yes, and it stays off until you turn it on.
One page for everything. A local map shows every project, server, network, volume and IP with its cost, plus a short list of what is worth fixing.
Setup that checks itself. One command asks for your token, confirms with Hetzner that it works, and connects your assistant for you. A second command tells you if anything stopped working.
From zero to your first answer
About five minutes, and you need Node 18 or newer.
Make a token. In the Hetzner Console, open your project, then Security, then API tokens, then Generate API token. Choose Read & Write, and copy it right away, Hetzner shows it only once.
Connect your assistant. Run the command below and paste the token when asked. It checks the token with Hetzner and sets up Claude Desktop, Claude Code, Cursor, Windsurf or VS Code for you.
npx hetzner-mcp setupRestart that app. Setup prints the exact step for each one.
Ask your first question. For example, "List my Hetzner servers and show this month cost."
See it all at once. Run
npx hetzner-mcp map --open. It uses the token you just saved, so there is nothing else to set up. Just curious?npx hetzner-mcp map --demo --openshows a sample first, no account needed.
Something not working? npx hetzner-mcp doctor checks the token saved in each app and says what to fix.
Please sponsor this project
This is built and maintained in the open, for free, under a license that only asks for attribution. If your team relies on it, becoming a sponsor directly buys the time to cover more endpoints, keep the endpoint audit current as Hetzner changes, and respond to issues and pull requests faster. Even a small monthly amount makes a real difference. Thank you.
Validated live, not theorized
Every tool and every scenario in this server was run live against the real Hetzner API, not described from theory. 91 automated checks across cloud, Storage Box, and Robot, with 0 failures. Every billed resource was created and then destroyed, a full load balanced stack was deployed and proven to round robin across two backends, and the account was left clean.
Checks run live | Failures | Tools exercised | Surfaces |
91 | 0 | every registered tool | cloud, storage box, robot |
Read the full validation report for the per tool table, the cost discipline, the diagrams, and the exact commands to reproduce it yourself (npm run validate:live, npm run eval, npm run deploy:demo).
Watch it work
Hetzner, managed from Claude Desktop in plain language. Open a chat, ask in plain words, and the answer comes straight back from your live account. No commands to memorize, no API to learn.
Set up in one command
If you have Node, this is the whole setup.
npx hetzner-mcp setupIt asks for your Hetzner API token, checks it against the live Hetzner API on the spot, then writes the config for whichever assistant you use. It detects and wires Claude Desktop, Claude Code, Cursor, Windsurf, and VS Code, and backs up any existing config first.
No token yet? The wizard lists the exact steps. In the Hetzner Console, open your project, then Security, then API tokens, then Generate API token, and choose Read & Write. The same token also covers Storage Boxes. Dedicated (Robot) servers are optional and need separate webservice credentials, which setup explains when you say yes to them.
Check it anytime.
npx hetzner-mcp doctorDoctor checks the token saved in each connected assistant against the live API, one free read request, and says in one line what to fix. It writes nothing. Run setup again at any time to replace a token; the previous config is kept as a .bak file.
Where your token is stored
Your token goes nowhere except Hetzner. The wizard saves it locally, inside your assistant's own config file, with owner only file permissions, and never prints it.
Assistant | Where the token is written |
Claude Desktop | the Claude config in your user Library (macOS), AppData (Windows), or .config (Linux) |
Claude Code |
|
Cursor |
|
Windsurf | the Windsurf |
VS Code |
|
Using a different assistant?
hetzner-mcp is a standard MCP server, so it works with any MCP client. For an assistant the wizard does not write to directly, print the block and paste it where that client keeps its MCP servers.
npx hetzner-mcp setup --printThe block shows placeholders, so it is safe to share or screenshot. Add --print-secrets to include the credentials you pass in. For scripts, pipe the token in with --token-stdin (or set HETZNER_CLOUD_TOKEN) rather than --token, which other users on the same computer can see in the process list. The interactive prompts never echo the token or the Robot password.
A note on ChatGPT. OpenAI's MCP support is built around remote connectors rather than a local config file, so the desktop assistants above are the most direct fit for a local server like this. Any client that speaks MCP over stdio needs only the printed block.
Set it up by pasting one prompt
No setup effort. Copy the block below, paste it into Claude Code, Codex, Cursor, or any AI coding tool, and it installs the server, wires it into your flow, and walks you through the one manual step, getting a token.
Set up the hetzner-mcp server from https://github.com/mjmirza/hetzner-mcp so that from now on I can manage my whole Hetzner platform, Cloud servers, networks, volumes, firewalls, load balancers, IPs, DNS, Storage Boxes, and Robot dedicated servers, from this AI assistant, safely.
Steps:
1. Register the MCP server. Run this, replacing MY_TOKEN with my Hetzner Cloud API token:
claude mcp add -s user hetzner -e HETZNER_CLOUD_TOKEN=MY_TOKEN -- npx -y hetzner-mcp
For dedicated servers also add: -e HETZNER_ROBOT_USER=my-ws-user -e HETZNER_ROBOT_PASSWORD=my-ws-password
2. If I do not have a token yet, walk me through it. Hetzner Cloud Console at https://console.hetzner.com, my project, Security, API Tokens, Generate. Choose Read and Write to manage resources. The same token also works for Storage Boxes.
3. Install the provision skill so you can spin up a full stack end to end. Copy skills/hetzner-provision from the repo into my agent skills directory, for Claude Code that is ~/.claude/skills/hetzner-provision/.
4. Add a standing rule for yourself. never create a billed resource without showing me the live price and getting my explicit yes, and always offer to tear down test resources to stop cost.
5. Confirm it works with a free read. list my servers, my storage boxes, and if Robot is set, my dedicated servers.
6. Tell me exactly what you installed and how I provision or tear down anything from now on.Want only a one time look, no install? Paste this instead.
Connect to my Hetzner account through the hetzner-mcp server, run npx -y hetzner-mcp with my Cloud API token, then show me everything I am running across Cloud, Storage Box, and Robot, with the monthly cost. Do not create or delete anything. Reads are free.What this is, in plain words
Hetzner is a hosting company. It runs cloud servers, storage, and physical dedicated servers, and it exposes APIs to control all of it. This project is a small program, an MCP server, that lets an AI assistant like Claude do that controlling for you, safely. You ask in normal language, the assistant calls the right Hetzner endpoint, and the result comes back. You do not need to learn the API. You do need to give it an access token once, which this guide walks you through.
The single most important promise. Reading and listing are always free, and the tool will never create something that costs money without asking you first and showing you the price.
The three surfaces it covers
Surface | What it manages | Credential needed |
Cloud | servers, networks, volumes, firewalls, load balancers, floating and primary IPs, placement groups, SSH keys, images, certificates, and DNS zones | one Cloud API token |
Storage Box | backup storage boxes | the same Cloud API token |
Robot | physical dedicated servers and vSwitches | a separate Robot webservice user and password, only if you use dedicated servers |
All three are live tested against a real account. See docs/ENDPOINT-AUDIT.md for the exact, dated, per endpoint results.
See your whole estate on one canvas
Open a live map of every project, server, network, volume, firewall, load balancer, IP, snapshot, storage box, and dedicated server you run on Hetzner, with the monthly cost on every card.
npx hetzner-mcp map --open # your account, at http://127.0.0.1:43390
npx hetzner-mcp map --demo --open # a labelled sample estate, nothing neededWith no token in your terminal, the map uses the one setup saved for your assistant and says which app it came from, so it works straight after setup. A token in the environment always wins.
The address it prints ends in a one-time key (#k=...) made fresh at every launch. Only a page opened with that key can call the map's API, so other users on the same computer and other web pages cannot. The key stays in the tab after you open it, so reloading works.
What you get:
Where the money goes. Monthly cost per account, per project, per resource type, and the top cost drivers.
Risks to fix. Server types Hetzner is retiring, servers with no firewall, SSH or database ports open to the whole internet, and certificates about to expire.
What you are paying for and not using. Powered off servers, unattached volumes, unassigned IPs, and snapshots of deleted servers, each with the monthly amount tied to it. One click takes you to it on the canvas.
A layout that stays readable. Cards are laid out automatically, left to right or top to bottom with one click, cards grow to fit their content, and no card ever overlaps another. Drag cards where you want them, the map remembers, and Reset puts every card back, shows everything again, and centers the map. Turn on Flow to watch dots run along the lines like a workflow executing.
Plain names instead of codes. A location reads "Falkenstein, Germany", not "fsn1", and a server shows "4 vCPU · 8 GB · 160 GB disk" under its type. Select anything and the side panel explains every code, for example "cpx31 is x86 CPU, shared, regular".
Three ways to look. Hierarchy shows what sits inside what. Connections also places linked resources next to each other, so you can see which firewall protects which server and which load balancer sends traffic where. List is a calm, flat list grouped by project, most urgent first, with filters for Needs attention, Can save money, and Costs money, and it works well on a phone. Every card also says its links in words, for example "Protected by web-fw".
How many projects you have, and what each costs. The side panel lists every account and project with its resource count and monthly total. Click one to show only that project.
Create from the map. Pick Create, choose what you want, and you see the real Hetzner price before anything happens. Billed creates stay off until you start the map with
HETZNER_MCP_ALLOW_BILLED=1, and even then you tick a box that states the monthly amount. Deleting asks you to type the exact name and tells you what else is affected.Add a project from the map. Hetzner has no API to create projects, so the map walks you to the Console, you paste the project's token, it is checked against Hetzner, then saved on this computer only (owner-only file permissions) and never sent back to the page. Tokens from environment variables work too, for example
HETZNER_CLOUD_TOKEN_STAGING, grouped withHETZNER_ACCOUNT_STAGING=Acme GmbH.
Many clients and accounts with workspaces
A workspace groups the accounts of one client. If you only run your own projects, nothing changes, everything sits in one workspace called Personal. When you manage many clients, the map loads one workspace at a time, so 100 accounts never load at once, and one broken token only marks that project as unreadable.
Import every client token in one go, from a CSV with the columns workspace,account,project,token or a JSON array of the same fields.
npx hetzner-mcp projects import clients.csv --verify # checks each token with one read call
npx hetzner-mcp projects list # tokens shown as ****abcd only
npx hetzner-mcp projects remove "Client A/Client A GmbH/prod"Tokens are saved on this computer only, owner-only file, never printed. Account labels must be unique across workspaces. Environment tokens can join a workspace with HETZNER_WORKSPACE_STAGING=Client A, and HETZNER_WORKSPACE_NAME renames the default one. Ask your assistant to map one client by passing the workspace name as the target of infra_map, or one project as Client A/Client A GmbH/prod. Every other tool still acts on the HETZNER_CLOUD_TOKEN project only.
In the map, a workspace switcher sits at the top of the side panel as soon as there is more than one workspace. It searches by client name, loads only the one you pick, and remembers it next time.
Your situation | What to set up | What you see |
One account, one project |
| Everything, no switcher |
One account, several projects | One | All projects in one workspace |
Your own account plus a few clients |
| A switcher, one workspace per client |
An agency with 100+ client accounts |
| A searchable switcher; only the active client loads |
One token stops working | Nothing, the rest keep loading | That project is marked unreadable and the audit lists it |
Dedicated (Robot) servers |
| Listed in the default workspace |
Before you create a server, ask "where can I get a 4 core server right now". The find_capacity tool lists what Hetzner can actually sell you today, by location and price, so a create does not fail with resource unavailable.
Your assistant can open it too. Ask it to "map my Hetzner infrastructure" and the infra_map tool returns the cost summary, the savings list, and the canvas link, or a Mermaid diagram with mermaid: true.
It is local and guarded. It listens on 127.0.0.1 only, refuses requests addressed to any other host name or sent from another website, and never sends your token to the page. Every create and delete goes through the same cost, read-only (HETZNER_MCP_READONLY=1), and destructive guards as the MCP tools, and the sample map cannot change anything. Port 43390 is unassigned in the IANA registry; set HETZNER_MCP_MAP_PORT to change it, and it moves to the next free port if that one is busy. Costs are estimates from Hetzner list prices, not your invoice, because Hetzner has no Cloud billing API.
An audit that runs by itself
Every time the map loads, it audits your estate. Nobody has to press a button, and the first audit also runs at the end of npx hetzner-mcp setup, so you see what is worth fixing before you ask.
A score out of 100 and a grade, per project and overall.
Every finding says what is wrong, why it matters, numbered steps in the Hetzner Console, and the exact sentence to ask your AI, with the monthly saving where there is one.
Checks include open SSH and database ports, public servers with no firewall, retiring server types, expiring certificates, powered-off servers still billed, unattached volumes and IPs, load balancers with no or one target, production servers without backups, and projects running everything in one location.
It says out loud what it cannot see, such as settings inside the operating system, so silence never reads as all clear.
npx hetzner-mcp audit # short summary
npx hetzner-mcp audit --out audit.md # full report with fix steps
npx hetzner-mcp audit --fail-on high # exit 1 in CI when a high or critical finding appearsIn the map, open the Audit tab. From your AI, the infra_audit tool returns the summary first and one finding's steps on request (finding: 3), which keeps the conversation short.
Spend history
Open the Spend tab to see what your Hetzner account has been costing you, month by month. Hetzner has no billing API, so the tab works in two layers.
Estimated from your account, with no setup. Every resource the map already reads has a creation date and a price. From those, the tab shows this month so far, the projected full month, and an estimate for every past month since each resource was created, per project and per resource type, with the top cost drivers. It counts each started hour up to the monthly price, the way Hetzner bills. It is labelled as an estimate everywhere: resources you already deleted are not included, and past months assume today's sizes. Amounts are in euro, net of VAT.
Exact, from your invoices, when you want it. Download your invoice PDFs in the Hetzner Console under Invoices (or at accounts.hetzner.com) and drop them on the Spend tab. The PDF is read in your browser. Only the invoice number, date, per-project totals and line items are kept, saved on this computer next to your projects (owner-only file). Names, addresses, customer numbers and bank details are never read or stored.
Every invoice is checked before it is saved, in the browser and again on this computer. Line items must add up to each project's subtotal, the projects to the invoice total, net plus tax to gross, and the tax to the stated rate. An invoice that does not add up is refused with the exact numbers that disagree, the same invoice is never counted twice, and a project month billed on two invoices is flagged.
With invoices added, each finished month shows the billed amount next to the estimate for the same projects:
Status | Meaning |
Matches | The invoice is within 5 % of the estimate |
Invoice higher | Often resources you already deleted, extra traffic, or a resize during the month |
Invoice lower | Often credits, or resources turned off for part of the month |
Invoice missing | The estimate shows usage but no invoice for that month was added, so you know which PDF to download |
A one-line summary sits at the top, for example "12 invoices, all totals check out. 4 of 6 months match the estimate." From your AI, the read-only spend_history tool returns the same figures and the same summary. The sample map (npx hetzner-mcp map --demo) shows a full example with synthetic invoices.

Small on tokens, by design
Every answer is shaped to cost your AI as few tokens as possible. Lists come back as a compact view where nested objects collapse to their name (a server type reads cx23, not its full price table), empty fields are dropped, and JSON is not indented. Pass verbose: true whenever you need everything. Measured on a live account, this cut server type lists by 49%, locations by 47%, and images by 40%.
The tool list itself costs tokens in every conversation. Set HETZNER_MCP_TOOLS=lean to skip the 27 list shortcuts; cloud_request with GET reads the same data, and the tool list drops from about 9,400 to 5,900 tokens. A test in CI fails if the tool list or the common answers grow past their budget.
Cost safety, the part you actually worry about
Upgrading from 0.4? Paid resources are now off by default. Rerun npx hetzner-mcp setup and answer yes when it asks about paid resources, or add HETZNER_MCP_ALLOW_BILLED=1 to your client config. Two tools were retired along with the Hetzner endpoints behind them. cloud_list_datacenters is replaced by cloud_list_locations and find_capacity, and robot_list_storageboxes by storagebox_list.
A wrong API call should never cost you money you did not intend. This tool is built around that.
Every list and get is free on Hetzner. Use them as much as you like.
Resources that are free to create, such as SSH keys, networks, firewalls, and placement groups, are created normally.
Resources that cost money, such as servers, volumes, load balancers, floating and primary IPs, and storage boxes, are guarded. Billed creation is off until you set
HETZNER_MCP_ALLOW_BILLED=1, and even then the tool refuses each one unless you pass an explicit confirm, after it fetches and shows you the live hourly and monthly price.Actions that interrupt a running machine, such as power off, reboot, rebuild, or a password reset, also need an explicit confirm.
Every write waits for Hetzner to finish the work and tells you if it failed, instead of reporting success while the job is still running.
Nothing in the test suite leaves a billed resource running. The whole build is tracked in a cost ledger in docs/ROADMAP.md, with a target of under five cents total.
Quick start
The fastest path is npx hetzner-mcp setup above. The steps below are the manual path, for wiring a client by hand or scripting it in CI.
Use it with Claude Code or any MCP client
It is published on npm. Point your MCP client at the package and give it your token. This uses npx, so nothing is installed permanently.
claude mcp add hetzner -e HETZNER_CLOUD_TOKEN=your-token -- npx -y hetzner-mcpFor Robot dedicated servers, also add the webservice credentials.
claude mcp add hetzner \
-e HETZNER_CLOUD_TOKEN=your-token \
-e HETZNER_ROBOT_USER=your-ws-user \
-e HETZNER_ROBOT_PASSWORD=your-ws-password \
-- npx -y hetzner-mcpInstalling from GitHub Packages instead of npm
Most people should use the npm commands above. They need no account.
The copy of this package on GitHub Packages is published as @mjmirza/hetzner-mcp. The install command GitHub shows on its package page fails when pasted as is, for two reasons that come from GitHub, not from this package. npm looks for the name on npmjs.com unless told otherwise, and GitHub requires a login to download any npm package, even a public one. These steps work:
Create a GitHub token (classic) with the
read:packagesscope at https://github.com/settings/tokensTell npm where the
@mjmirzapackages live and give it the token:
npm config set @mjmirza:registry https://npm.pkg.github.com
npm config set //npm.pkg.github.com/:_authToken YOUR_GITHUB_TOKENRun it:
npx @mjmirza/hetzner-mcp setupInstall globally with npm
Install once and the hetzner-mcp command is on your PATH.
npm install -g hetzner-mcpThen point your MCP client at the installed command instead of npx.
claude mcp add hetzner -e HETZNER_CLOUD_TOKEN=your-token -- hetzner-mcpRun it from source
git clone https://github.com/mjmirza/hetzner-mcp
cd hetzner-mcp
npm install
npm run build
HETZNER_CLOUD_TOKEN=your-token npm startGetting your credentials
Full, beginner friendly, step by step instructions, including the German console labels, are in docs/SETUP.md. The short version.
Cloud token. https://console.hetzner.com, your project, Security, API Tokens, Generate. This one token also works for Storage Boxes.
Robot user, only for dedicated servers. https://robot.hetzner.com, Settings, Web service and app settings, set a password, the username is assigned to you.
Visual walkthrough, getting the Cloud token
Open the Cloud Console, then your project.

Open Security, then the API Tokens tab, and generate the token.

For dedicated servers, create a Robot webservice user.

What is tested, and how this compares
This project tests every endpoint live and records the result. The running inventory, including a deprecation log, is in docs/ENDPOINT-AUDIT.md.
There is no official Hetzner MCP. Several community servers exist, and this project studied them. The goal here is broader, tested coverage across all three surfaces, a real cost guard, and a documented endpoint audit, rather than Cloud only.
Project | Surfaces | Notable focus |
this project, hetzner-mcp | Cloud, Storage Box, Robot | full coverage, cost guard, live endpoint audit, contribution loop |
dkruyt/mcp-hetzner | Cloud | Python, structured functions |
Xodus-CO/hcloud-mcp | Cloud | standalone, works with many clients |
lazyants/hetzner-mcp-server | Cloud | servers, networks, volumes, firewalls, load balancers |
MahdadGhasemian/mcp-hetzner-go | Cloud | Go implementation |
valerius21/hetzner-mcp | Cloud | Cloud API integration |
nityeshaga/hetzner-mcp-server | Cloud | aimed at Claude Code |
If another project covers something this one does not, that is a great pull request. See below.
Why this instead of building your own
You could write your own. Most people say they will and never do, and the ones who do end up rebuilding the same things this already has, tested.
A cost guard. Your own script will happily create a billed server. This one refuses without a confirm and shows the live price first, which matters most when an AI agent is the one calling it.
The safety layer. Secret redaction, relative-path-only requests so an agent cannot be pointed at another host, request timeouts, and input validation on every call.
Coverage that does not rot. Three generic tools reach every endpoint, so it keeps working when Hetzner adds a new one, and every endpoint is validated live, 39 of 39.
Prefer infrastructure as code? Use Terraform or the hcloud CLI, they are excellent for that. This is for the other case, when your AI assistant should do the work in plain language, safely, without you writing or maintaining the glue. It is free at and below a real revenue threshold under the OpenRoots ORA 2.3 license, so if you would rather build on it than from zero, fork it.
Common questions, technical and non technical, are answered in docs/FAQ.md.
Missing something? The contribution loop
This MCP is designed to grow from real use. If you ask it for something it does not cover yet, it will hand you a prefilled link to open a feature request, and if you already have the fix, the steps to open a pull request. Every gap becomes a contribution.
Read CONTRIBUTING.md for the pull request flow.
Contributors are credited in docs/CREDITS.md.
Not included yet, on purpose. an on-server service layer (restart services, tail logs, database health) is a planned, opt-in, allow-listed feature, kept out of the default so the server stays safe by default. See docs/ROADMAP.md Phase 7, and open an issue if you want it prioritized.
Quality
This is engineered, not vibe coded. The repository runs the fallow hygiene gate to block new dead code, builds and type checks in CI, and every endpoint carries a live test result. See docs/ROADMAP.md for the full quality and phase plan.
Real problems this solves
Hetzner is loved for its price, roughly one fifth to one tenth of comparable AWS, but its automation has real friction that users write about.
"API tokens must be created by hand in the console, you cannot bootstrap them as code." After that one manual step, this MCP automates the rest, and the setup guide makes it foolproof.
"SSH keys attached at creation cannot be changed later without recreating the server." The MCP exposes the full server and key surface so an agent can script rotation and replacement.
"Network setup needs extra config files and commands run on the server." The orchestration skill builds network, firewall, and server together with cloud-init in one verified flow.
Sourced from real community writeups. See docs/COMMUNITY-PAINPOINTS.md and the market gap in docs/MARKET-ANALYSIS.md.
License
OpenRoots Agent License 2.3. Free and unconditional at or below USD 20,000,000 annual revenue, and for any individual, nonprofit, school, or government body at any size. Above that threshold, a small self-reported royalty applies, capped per year. AI training on this code is not granted by either tier and needs a separate Compute license; human reading and search indexing are unaffected. The canonical text lives at openroots.org/licenses/ora/2.3. See LICENSE.
Disclaimer
Independent community project. Not affiliated with, endorsed by, or sponsored by Hetzner Online GmbH. Hetzner and the Hetzner logo are trademarks of their respective owner. You are responsible for your own Hetzner account, credentials, and any resources you create.
Available Tools
59 toolscloud_assign_floating_ipAssign a floating IPC
Assign a floating IP to a server.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Floating IP id. | |
| server | Yes | Server id. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden for what is clearly a mutating operation. It does not say whether the operation is idempotent, whether assigning over an already-assigned IP errors or overwrites, what permissions are needed, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler or redundancy. It is efficient, though its brevity is a byproduct of under-specification rather than deliberate tightness.
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 two-required-parameter mutation tool with no annotations and no output schema, the description omits nearly everything an agent would need: required preconditions, error behavior, and post-assignment state. The schema covers the parameters, but the behavioral surface is unaddressed.
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%: both 'id' (floating IP id) and 'server' (server id) are documented in the schema. The description adds nothing beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (assign) and resource (floating IP) plus the target (a server), which is immediately distinguishable from the sibling cloud_unassign_floating_ip. It stops short of any explicit sibling differentiation or scope qualifiers, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this tool versus cloud_unassign_floating_ip, cloud_create_floating_ip, or cloud_assign_primary_ip, and no prerequisites are stated (e.g., the IP must exist and be unassigned, the server must exist). Usage is left entirely to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_assign_primary_ipAssign a primary IPA
Assign a primary IP to a server. The server must be off.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Primary IP id. | |
| assignee_id | Yes | Server id. | |
| assignee_type | No | Defaults to server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It helpfully discloses the required server state (off, implying a forced/blocked operation otherwise), but says nothing about permissions, reversibility, or what happens to a pre-existing primary IP.
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 tight sentences with the action front-loaded and the constraint second, no filler. Well-sized for a simple assignment tool.
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 mutation tool with no annotations and no output schema, the description covers the action and a key precondition but omits permission requirements, side effects on existing IPs, and response behavior. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, assignee_id and assignee_type. The description only adds that the assignment targets a server, which is baseline reinforcement rather than new detail.
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?
Clear specific verb+resource: assign a primary IP to a server. It is distinguishable from cloud_assign_floating_ip by the resource name, though it does not explicitly call out that sibling.
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 a crucial precondition ('the server must be off'), which is genuine usage guidance, but gives no guidance on when to choose this over cloud_assign_floating_ip or cloud_create_primary_ip, nor what to do if a primary IP is already assigned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_attach_volumeAttach a volumeC
Attach a volume to a server.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Volume id. | |
| server | Yes | Server id. | |
| automount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose permissions, prerequisites such as volume/server state, side effects, idempotency, automount behavior, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with no wasted words. However, it is under-specified for a mutation tool rather than appropriately concise given the missing behavioral context.
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 mutation tool with no annotations, no output schema, and one undocumented parameter, the description is too thin. It never states prerequisites, side effects, or what automount does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents id and server (67% coverage), but the description adds no parameter meaning. The automount parameter is undocumented in both the schema and the 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?
States a specific verb ('attach') and resource ('volume') with a target ('server'), clearly distinct from detach/create/delete/list siblings. However, it provides no explicit sibling comparison or scope conditions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are given. The agent must infer that this is for attaching an existing volume to a server, likely after creation and before detach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_firewallCreate a firewallC
Create a firewall with rules. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Firewall name. | |
| rules | No | Rule objects: direction, protocol, port, source_ips or destination_ips. | |
| apply_to | No | Resources to apply the firewall to on creation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It only adds that rules are included and that the operation is free; it does not disclose permissions, immediate effect, reversibility, or what happens when apply_to is omitted.
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 extremely short and front-loaded, with no wasted wording. However, the terse 'Free.' fragment is useful but not structurally integrated into a fuller sentence that would earn a 5.
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 mutation tool with no annotations and no output schema, the description is too minimal. It does not explain required vs optional parameters, default behavior for rules or apply_to, or any operational side effects the agent needs to call it safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema itself documents name, rules, and apply_to. The description adds 'with rules' but no syntax, defaults, or constraints beyond what the schema already provides, making the baseline of 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Create a firewall with rules.' This is clear and directly distinguishes the action from sibling list/delete operations, but it does not differentiate from other create tools such as cloud_create_network beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. 'Free' is a pricing note rather than usage context, leaving the agent to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_floating_ipCreate a floating IPB
Create a floating IP. Billed. Requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | ||
| type | Yes | ipv4 or ipv6. | |
| server | No | Server id to assign the floating IP to. | |
| confirm | No | Must be true. A floating IP costs money. | |
| description | No | ||
| home_location | No | For example nbg1. Use this or server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose real traits beyond structured data: that the operation is billed and gated behind confirm=true, which is valuable. However it omits what the IP is attached to by default, reversibility, permissions, and how the created IP is identified.
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 short, front-loaded sentences with no filler; the cost warning is not buried. It is terse to the point of choppiness but every sentence carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter, cost-incurring mutation with no annotations and no output schema, the description is only minimally sufficient. It covers billing and the confirm gate but says nothing about the remaining parameters, defaults, or what the caller receives back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, so the schema already documents type, server, home_location, and confirm. The description only reinforces the confirm/billing semantics, adding no syntax or format detail beyond the schema's own 'Must be true. A floating IP costs money.' Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a floating IP'), which is clear and unambiguous. It does not differentiate from near-siblings like cloud_create_primary_ip or cloud_assign_floating_ip, but the resource noun alone is specific enough to route correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites beyond confirm, and no routing to alternatives (cloud_assign_floating_ip, cloud_create_primary_ip). The 'confirm true' note is a precondition, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_load_balancerCreate a load balancerB
Create a load balancer. Billed. Requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Load balancer name. | |
| confirm | No | Must be true. A load balancer costs money. | |
| targets | No | ||
| location | No | For example nbg1. Use this or network_zone. | |
| services | No | ||
| algorithm | No | For example { type: round_robin }. | |
| network_zone | No | For example eu-central. Use this or location. | |
| public_interface | No | ||
| load_balancer_type | Yes | For example lb11. List options with cloud_list_load_balancer_types. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses a cost side effect ('Billed') and the mandatory confirm flag, which is genuine non-schema context. However it omits that this is a mutating/state-creating operation, any permission requirements, and what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three terse fragments, front-loaded with the action and then the critical billing/confirm constraints. Efficient, though the extreme brevity shades into under-specification rather than pure conciseness.
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?
A 9-parameter create tool with nested objects, no annotations, and no output schema needs substantially more than this. The description leaves the agent without guidance on most parameters or on the operation's side effects and failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description only echoes the confirm parameter that the schema already documents ('Must be true. A load balancer costs money'). The nested targets, services, and algorithm objects plus public_interface are undocumented in both places, and the description does nothing to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a load balancer'), which plainly separates it from the delete/list siblings. It stops short of naming or contrasting an alternative create path, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies one real precondition ('Requires confirm true') which tells the agent how to invoke it successfully. It says nothing about when to prefer this tool, prerequisites like networking/location setup, or what alternatives exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_networkCreate a networkC
Create a private network. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Network name. | |
| subnets | No | Optional subnets to create with the network. | |
| ip_range | Yes | CIDR of the whole network, for example 10.0.0.0/16. | |
| expose_routes_to_vswitch | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Private' and 'Free' are the only behavioral disclosures; there is no information about authentication requirements, whether the network is immediately usable, how optional subnets behave, or what happens if the name collides. For a creation tool with zero annotation coverage this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, and the core action is front-loaded. Both sentences carry content ('private' narrows scope, 'Free' is a real cost disclosure), though the extreme brevity reflects under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation/creation tool with no annotations, no output schema, and four parameters, yet the description explains almost nothing an agent needs to call it correctly. Nothing covers whether subnets can be added later, whether the network is immediately usable, or what the response contains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, below the high-coverage threshold, and one parameter (expose_routes_to_vswitch) has no description at all. The description adds no parameter meaning whatsoever - no syntax for ip_range, no explanation of subnet structure or the expose_routes flag - so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('Create a private network'), so the basic action is identifiable, but it essentially restates the title 'Create a network' with the word 'private' added. It does not distinguish this tool from siblings like cloud_create_server, cloud_create_firewall, or cloud_create_volume beyond the resource noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as cloud_create_server's networking options, nor any prerequisites. 'Free' hints at a cost consideration but is not framed as usage guidance. The agent gets no explicit when/when-not context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_placement_groupCreate a placement groupC
Create a placement group. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Placement group name. | |
| type | No | For example spread. | |
| labels | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses one useful trait — that the operation is 'Free' (no cost) — but says nothing about permissions, whether creation is idempotent, what happens on duplicate names, or what side effects occur. For a mutation tool with zero annotation coverage, this is a substantial gap.
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?
It is extremely short and front-loaded, with no wasted words, but the 'Free.' fragment reads as an afterthought rather than structured disclosure. Conciseness here borders on under-specification for a 3-parameter mutation tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, a nested 'labels' object, and an undocumented enum-like 'type' parameter, the description is too thin to be complete. An agent lacks the behavioral and usage context needed to call this mutation tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, and the description adds no meaning beyond the schema. The 'type' parameter is documented only as 'For example spread' with no enum, and 'labels' is completely undocumented in both schema and description. The description does not compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Create a placement group'), which is enough for an agent to distinguish it from the create_* siblings by resource type. It stops short of explaining what a placement group is or how it differs functionally from other create operations, but the core purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no mention of prerequisites (e.g., needing a location or server context), and no exclusions. The agent is left to infer everything about usage context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_primary_ipCreate a primary IPA
Create a primary IP. Billed. Requires confirm true. Assign to a server, or create standalone with a location.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Primary IP name. | |
| type | Yes | ipv4 or ipv6. | |
| confirm | No | Must be true. A primary IP costs money. | |
| location | No | For a standalone unassigned IP, for example fsn1. | |
| assignee_id | No | Server id to assign to. | |
| auto_delete | No | Delete the primary IP when its server is deleted. | |
| assignee_type | No | For example server, when assigning on creation. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It valuably discloses that the operation is billed and gated behind confirm=true, but omits permission requirements, reversibility, and any rate/lifecycle behavior. The cost disclosure is meaningful context beyond the schema, but coverage is incomplete for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clipped sentences with zero waste, front-loaded with the core action. The telegraphic style ('Billed. Requires confirm true.') is efficient, though slightly terse for a money-spending operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key decision points an agent needs: purpose, cost, the confirm gate, and the two creation modes. With a fully documented schema, the main remaining gap is that no return value is described and there is no output schema, but nothing critical to correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented. The description only restates location-for-standalone and assign-to-server usage, adding no syntax or format meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a primary IP') and clarifies the two creation modes (assigned vs. standalone). It does not distinguish this from the sibling cloud_create_floating_ip, which an agent may confuse with a primary IP, so it stops short of full sibling differentiation.
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 'Assign to a server, or create standalone with a location' clause implies the two usage paths, and 'Requires confirm true' signals a prerequisite. However, there is no explicit comparison against alternatives like cloud_create_floating_ip or cloud_assign_primary_ip, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_serverCreate a cloud serverA
Create a Hetzner Cloud server. This is billed. It requires confirm true and shows the live hourly and monthly price first. Optionally attach SSH keys, a private network, firewalls, cloud-init user_data, and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Server name. | |
| image | Yes | For example ubuntu-24.04. List options with cloud_list_images. | |
| labels | No | Key value labels. | |
| confirm | No | Must be true. Creating a server costs money. | |
| location | No | For example nbg1, fsn1, hel1. | |
| networks | No | Private network ids to attach. | |
| ssh_keys | No | SSH key ids or names. | |
| firewalls | No | Firewall ids to apply. | |
| user_data | No | cloud-init user data run at first boot. | |
| server_type | Yes | For example cx23 or cax21. List options with cloud_list_server_types. | |
| start_after_create | No | Start the server after creation. Default true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does well: it discloses that the operation is billed, requires confirm=true, and previews live hourly/monthly pricing before committing. It stops short of covering auth requirements, failure/reversibility behavior, or what is returned.
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 tight sentences, zero waste, with the cost/confirm constraint front-loaded before the optional-parameter list. 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?
For an 11-param mutating tool with no annotations and no output schema, the description covers the critical cost and confirm gate plus the optional attachments. Remaining gaps (return value shape, error behavior) are less essential given a rich schema, but not fully closed.
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 the schema already documents all 11 parameters thoroughly. The description restates the optional attachment params (SSH keys, network, firewalls, user_data, labels) but adds no format or syntax beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Create a Hetzner Cloud server") that unambiguously distinguishes it from the many sibling creation tools like cloud_create_volume or cloud_create_network without needing the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It surfaces a key usage prerequisite (confirm must be true, operation is billed, price shown first), but gives no explicit when-to-use/when-not guidance or alternatives relative to siblings. Usage is implied rather than framed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_ssh_keyCreate an SSH keyC
Add an SSH public key. Free.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Key name. | |
| labels | No | ||
| public_key | Yes | The public key text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'Free' is a useful cost signal, but nothing is said about authentication/permissions required, idempotency or duplicate-name handling, or what the operation returns. For a mutation tool with zero annotation coverage this is a substantial gap.
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 very short sentences, front-loaded with the action. The 'Free.' fragment is low-cost and does convey a pricing trait, though it reads as an afterthought rather than structured guidance.
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 write tool with no annotations, no output schema, and an undocumented nested-object parameter, the description is far too thin. It omits auth requirements, failure modes, and return behavior that an agent would need to invoke it reliably.
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 67% and the description mentions no parameters at all. The 'labels' parameter is a nested object with no description in either the schema or the description, so it is completely undocumented. The description adds no meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Add an SSH public key'), which cleanly separates it from the list_ssh_keys and delete_ssh_key siblings. It does not, however, explicitly name those siblings or clarify scope (e.g. account-level vs. project-level key).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus cloud_list_ssh_keys/cloud_delete_ssh_key, nor any prerequisites or preconditions for creation. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_create_volumeCreate a volumeA
Create a Hetzner Cloud volume. Billed. Requires confirm true. Attach to a server or place in a location.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Volume name. | |
| size | Yes | Size in GB (minimum 10). | |
| format | No | Filesystem to format with, for example ext4 or xfs. | |
| server | No | Server id to create and attach the volume to. | |
| confirm | No | Must be true. Creating a volume costs money. | |
| location | No | For example nbg1, fsn1, hel1. Use this or server. | |
| automount | No | Automount on the attached server. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It usefully discloses that the operation is billed and that 'confirm true' is required — critical behavioral context for a paid mutation. It doesn't state reversibility, idempotency, or permission needs, but the billing/confirm disclosure is the most important trait here.
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 short sentences, front-loaded with the action, then cost, then placement options. Efficient, though the placement clause is compressed to the point of ambiguity (server vs. location as alternatives).
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 7-param paid mutation with no annotations and no output schema, the description covers the essential cost/confirm gate but omits permission requirements, what the returned volume looks like, and clear guidance on choosing server vs. location. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all seven params including the confirm flag's billing note. The description restates the confirm requirement but adds no syntax or semantics beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Create a Hetzner Cloud volume'), clearly distinguished from sibling operations like cloud_delete_volume or cloud_attach_volume. The core action is unambiguous, though the trailing 'Attach to a server or place in a location' reads like usage guidance rather than purpose.
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?
Implies how to place the volume (server vs. location) but doesn't explicitly say when to use this tool versus cloud_attach_volume or when to prefer server-attach over location. No when-not guidance or prerequisites beyond the confirm flag.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_firewallDelete a firewallB
Delete a firewall. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Firewall id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the two most important traits: the operation is destructive and is gated behind confirm true, plus the cost angle ('free'). It omits irreversibility, permission requirements, and side effects on servers referencing the firewall.
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 terse sentences with the action front-loaded and zero filler; the destructive/confirmation constraints follow immediately. Nothing is padded.
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 mutation tool with no annotations and no output schema, the essential invocation facts (destructive, confirm gate, free) are present, but reversibility, resulting state, and any impact on dependent resources are unaddressed.
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 exactly 50% – id is documented in the schema, but confirm has no schema description. The description compensates by specifying that confirm must be true, resolving the undocumented parameter's required 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?
The description states a clear verb and resource ('Delete a firewall'), matching the title and distinguishing it from siblings like cloud_create_firewall and cloud_list_firewalls by operation type. It does not, however, explicitly differentiate itself from other delete tools or call out the sibling relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the invocation requirement (confirm true) but gives no when-to-use guidance, no exclusions, and no reference to alternatives such as cloud_list_firewalls for verifying the target first. An agent learns how to call it, not when it should.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_floating_ipDelete a floating IPA
Delete a floating IP. Free but destructive, requires confirm true. Note. an assigned IP must be unassigned first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Floating IP id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does a good job: it discloses that the operation is destructive, that it is free of charge, that confirmation is mandatory, and that a dependent state (assigned) blocks it. It omits nothing critical for a delete, though it doesn't mention reversibility or auth requirements.
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 short sentences, front-loaded with the core action, then cost/destructiveness, then the prerequisite. The stray 'Note. an assigned IP' punctuation is slightly awkward but costs no meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no annotations and no output schema, the description covers destruction, cost, confirmation requirement, and the unassign dependency — everything an agent needs to call it correctly. Only minor gaps (auth/scope) remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50% (only 'id' is documented). The description compensates by explaining the undocumented 'confirm' parameter ('requires confirm true'), which the schema leaves as a bare boolean. The 'id' parameter needs no further explanation than the schema already gives.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a floating IP') that clearly distinguishes it from the many list_* and create_* siblings. It does not name the closely related cloud_unassign_floating_ip or cloud_create_floating_ip directly, but the prerequisite note implicitly routes to unassign.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit precondition ('an assigned IP must be unassigned first') and a required calling condition ('requires confirm true'). It lacks an explicit alternative-tool pointer, but the when-to-use context is clear from the prerequisite.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_load_balancerDelete a load balancerB
Delete a load balancer. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Load balancer id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose two meaningful traits: the operation is free and it is destructive, plus the confirm-true guard. It says nothing about irreversibility, what happens to attached resources or dependent services, or permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the destructive/cost warning and the confirm requirement front-loaded and nothing wasted. The phrasing is terse but complete.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter delete with no output schema, the description covers the essentials an agent needs: it is destructive, it is free, and confirm must be true. Only the consequence of deletion (irreversibility, cascading effects) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% (id documented, confirm not). The description partially compensates by telling the agent that confirm must be true, which the schema leaves as a bare boolean with no description. It adds no format or id-resolution detail beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (load balancer), matching the title and clearly distinct from the sibling cloud_create_load_balancer. It does not explicitly name alternatives or note that the id must reference an existing LB, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternatives are named. The only condition supplied is the mechanical prerequisite 'requires confirm true', which is a parameter requirement rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_networkDelete a networkA
Delete a private network. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Network id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does add real context: the operation is flagged as destructive, free of cost, and gated behind a confirm flag. It stops short of disclosing what happens to attached members, whether the action is reversible, or what permissions are required.
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 short clauses with zero filler, and the identity of the operation is front-loaded ahead of the cost, destructiveness, and confirmation details. Nothing needs to be trimmed.
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 destructive tool with no annotations and no output schema, the description covers the essential safety signal and the confirm gate, which is roughly minimum viable. It omits the downstream effects on network members and the irreversibility of deletion, which an agent would need before calling it.
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 only 50% – 'id' is documented in the schema, but 'confirm' has no schema description. The description compensates by stating that confirm must be true, giving the otherwise undocumented parameter meaning and a required 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?
The description states a specific verb and resource ('Delete a private network'), which cleanly separates it from the many sibling delete tools for volumes, servers, firewalls, and load balancers. An agent can identify the operation 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a precondition ('requires confirm true') but never says when to use this versus alternatives, nor what conditions should precede deletion. No exclusions or routing guidance to siblings are given, leaving usage to inference from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_placement_groupDelete a placement groupA
Delete a placement group. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Placement group id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the important traits: the operation is destructive, free (no billing impact), and requires an explicit confirm flag. However, it omits material behavior such as what happens to servers still assigned to the group, whether the group must be empty, or whether the call is idempotent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, and the key operational fact (destructive + confirm requirement) is front-loaded right after the purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter mutation with no output schema or annotations, the description covers purpose, cost, destructiveness, and the confirm requirement. It still leaves gaps about side effects on member servers and error behavior, which an agent running this destructive call would benefit from knowing.
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 only 50% — 'id' is documented but 'confirm' has no schema description. The phrase 'requires confirm true' compensates by telling the agent the flag must be set true to proceed, adding real meaning beyond the bare boolean type, though it doesn't explain the failure mode when confirm is false/absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Delete a placement group') that is immediately distinguishable from sibling cloud_create_placement_group, cloud_list_placement_groups, and the other cloud_delete_* tools that each name their own resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when/when-not guidance or named alternatives, but the 'Free but destructive' note implies the cost/safety tradeoff an agent should weigh. Usage is largely self-evident from the verb, so guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_primary_ipDelete a primary IPA
Delete a primary IP. Free but destructive, requires confirm true. An assigned IP must be unassigned first.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Primary IP id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does well: it discloses that the operation is destructive, that it is free, and that confirm=true is mandatory. It omits permission/auth requirements and whether deletion is irreversible, which a mutation tool would ideally state.
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 tight sentences, front-loaded with the action, then cost/safety, then precondition. No filler and every clause conveys distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema or annotations exist, so the description must stand alone; it covers destructive intent, cost, the confirm flag, and the unassign prerequisite, which is nearly everything needed for a simple delete. Only auth/permission and post-deletion state are absent.
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 only 50% — 'id' is documented in the schema but 'confirm' is not — and the description compensates by stating 'requires confirm true', which explains both the parameter's meaning and its required value. That closes the coverage gap for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a primary IP'), which is unambiguous against list/create siblings. It does not explicitly name cloud_unassign_primary_ip as the alternative, though the phrase 'must be unassigned first' implicitly separates the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear precondition for calling: the IP must be unassigned before deletion, which is the key when-to-use rule for this tool. It does not spell out fallback alternatives or error behavior, so it stops just short of the top tier.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_serverDelete a cloud serverA
Delete a Hetzner Cloud server. Deleting is free and stops billing, but it destroys the server, so it requires confirm true. Auto-created primary IPs are released by Hetzner shortly after.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Server id. | |
| confirm | No | Must be true. Deletes the server for good. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that deletion is irreversible, that it stops billing, that a confirm flag is mandatory, and that auto-created primary IPs are released shortly after. It omits permission requirements and any dependency handling (e.g. attached volumes), keeping it short of 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with zero filler; the destructive nature and confirm requirement are front-loaded ahead of the secondary IP-release detail. 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.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter destructive tool with no annotations and no output schema, the description covers the key risks: irreversibility, billing impact, the confirm gate, and one notable side effect. Minor gaps remain around prerequisites (server state, dependent resources), but nothing critical for correct invocation is missing.
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 already 100%, so the baseline is 3, but the description adds real semantic weight by explaining the purpose of confirm (gate for permanent destruction) and clarifying the downstream billing/IP effects. It does not add syntax beyond what the schema documents for id.
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?
Specific verb + resource ('Delete a Hetzner Cloud server') that immediately separates it from siblings like cloud_delete_volume, cloud_delete_network, or cloud_delete_primary_ip. An agent knows exactly which resource is targeted 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the precondition (confirm true) and the consequence, which implies when to use it, but names no alternatives and gives no explicit when-not guidance (e.g. powering off first, or deleting attached volumes/IPs separately). Usage is inferred rather than directed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_ssh_keyDelete an SSH keyA
Delete an SSH key. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | SSH key id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well by warning the operation is 'destructive' and requires 'confirm true'. It does not explain idempotency, error behavior for invalid IDs, or consequences beyond deletion, but the critical safety warning is present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the core action and immediately follow with critical safety context. No waste, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-param deletion tool with no output schema and no annotations, the description covers the essential safety warning and parameter requirement. It lacks details on failure modes or idempotency, but those are not strictly necessary for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 50%: 'id' is documented in the schema, but 'confirm' has no schema description. The description compensates by mentioning 'confirm true', adding meaning beyond the schema for that parameter. Baseline 3 is appropriate given the mixed coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Delete) and resource (SSH key), matching the title exactly. It is clearly distinguishable from sibling cloud_create_ssh_key and cloud_list_ssh_keys 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives or prerequisites like needing an existing key ID. However, the operation is straightforward and the required 'confirm' flag provides some implicit guidance on the destructive intent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_delete_volumeDelete a volumeA
Delete a volume. Free but destructive, requires confirm true.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Volume id. | |
| confirm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full burden and does disclose meaningful traits: the operation is free of cost and destructive, and requires an explicit confirmation flag. It stops short of stating whether deletion is permanent/irreversible or what happens to attached volumes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short clauses, front-loaded with the action then the key constraints. Efficient, though slightly terse given the destructive nature of the operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter mutation with no annotations and no output schema, the description covers the essentials (cost, destructiveness, confirmation) but omits irreversibility, permission requirements, and the fate of dependent resources.
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 only 50% (id is documented, confirm is not), so the description must compensate. It does explain that confirm must be true, adding semantics beyond the bare boolean type, though the exact consequence of omitting it isn't spelled out.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete a volume') that maps cleanly to the tool name. It does not, however, distinguish itself from close siblings like cloud_detach_volume or cloud_list_volumes, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions the confirm=true requirement, which is practical usage information, but gives no explicit when-to-use vs detach/delete alternatives and no prerequisites or warnings about attached volumes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_detach_volumeDetach a volumeA
Detach a volume from its server. Requires confirm true, because a running workload may lose its disk.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Volume id. | |
| confirm | No | Must be true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden. It does the most important part by warning that detachment can cost a running workload its disk and by requiring an explicit confirm flag. It stops short of stating permission requirements or whether the operation is reversible.
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 tight sentences, zero filler. The risk/reason sentence immediately follows and justifies the confirm requirement, so nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with no annotations and no output schema, the description covers the essential risk and the confirm gate. Minor gaps remain: reversibility, auth/permission needs, and whether the server must be stopped first.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented ('Volume id.', 'Must be true.'). The description echoes confirm=true and adds the rationale for it, which is mildly useful, but adds little semantic detail beyond the schema 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 opens with a specific verb+resource: 'Detach a volume from its server.' This clearly distinguishes it from the sibling tools cloud_attach_volume and cloud_delete_volume without requiring the schema to be opened.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states a concrete prerequisite (confirm must be true) and the condition that motivates it (a running workload may lose its disk). It does not name alternatives or state when-not-to-use, but the gating requirement gives clear invocation context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_get_pricingC
Get full pricing for the account currency. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read only' is a useful safety signal, but it says nothing about whether pricing is cached or live, whether it requires any permission scope, or how large the payload is even when verbose is off.
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 very short sentences with the resource and scope front-loaded and no filler. It is arguably too terse rather than bloated, so it loses a point only for the near-redundant 'Read only' tail.
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?
A three-parameter tool with a nested query object, no output schema, and no annotations should explain more: what the return shape roughly is, how 'full' interacts with verbose, and whether the id lookup returns a single price. The description leaves an agent with meaningful unknowns.
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% (id, query, verbose are each documented in the schema), so the baseline is 3. The description adds no parameter meaning beyond that, but there is no gap it needs to fill.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get full pricing') plus a scope qualifier ('for the account currency'), so an agent knows exactly what is returned. It does not distinguish itself from any sibling, but no sibling in the list covers pricing, so differentiation is largely moot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives, nor any prerequisites (e.g., whether an account/currency must be configured first). The scope phrase 'account currency' implies context but stops short of stating usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_certificatesC
List certificates. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read only' is the only behavioral claim and it merely mirrors what a readOnlyHint would state. Nothing is said about pagination, filter semantics, or what 'verbose' changes in the response.
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 terse sentences, front-loaded with the core action. Nothing is wasted, though 'Read only' sits oddly as a fragment trailing the main clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters (including a nested free-form filter object), no annotations, and no output schema, the description is too thin. An agent gets no help on the shape of the query filters or the meaning of verbose, which the schema handles only partly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose. The description adds nothing beyond the schema, which earns the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (certificates), and the 'Read only' clause reinforces the operation class. It does not differentiate from the many cloud_list_* siblings (volumes, networks, images, etc.), but the resource is unambiguous, so an agent can pick it correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the sibling list tools, nor when to pass id versus query versus verbose. The 'Fetch one by id' hint lives only in the schema, not the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_dns_zonesC
List DNS zones, part of the Cloud API. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Read only' is a genuine behavioral disclosure that a safe read is being performed, but for a list tool it omits pagination behavior, result limits, default filtering, and authentication/permission requirements — all material to correct invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the verb and resource, with zero filler. It is efficient, though the extreme brevity is arguably under-specification rather than tight editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter list tool with fully documented schema fields and no output schema, the description is minimally adequate. An agent can call it, but gets no return-shape or pagination expectations and no guidance on the nested 'query' filter semantics, which the description should supply.
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% (id, query, verbose are all documented inline), so the baseline is 3. The description adds nothing about the parameters — notably it does not explain the interaction of 'id' (single fetch) with list behavior or the shape of the 'query' filter object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List DNS zones'), which is enough to distinguish it from the volume, network, firewall and image list siblings by resource noun. However, it gives no scope detail (e.g. project/region filtering) to separate it from a hypothetical filtered variant, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no named alternative. 'Read only' hints at the safety profile but does not tell the agent when this tool is the right choice versus, say, a single-zone fetch via the id parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_firewallsB
List firewalls. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and delivers only "Read only." It omits pagination, result limits, auth context, and what the default payload looks like, leaving the agent to infer everything about how the call behaves.
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 terse fragments, front-loaded with the action and followed by the safety note. Given the absence of annotations, "Read only" earns its place and there is no filler whatsoever.
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 3-parameter tool with a nested query object and no output schema, the description is minimally adequate: the schema covers every parameter, but nothing explains filtering behavior or what a listing returns. It is usable but thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, query and verbose are already documented in the schema; per the baseline rule this earns a 3. The description adds nothing beyond that about filter syntax or the verbose payload, so no credit above 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?
"List firewalls" states a clear verb and resource, and the sibling set (cloud_create_firewall, cloud_delete_firewall) makes the list-vs-mutate distinction obvious without naming them. It stops short of 5 because it neither names an alternative nor scopes the listing (e.g. all vs filtered).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusions, and no alternatives named. "Read only" hints at the safe-read context but does not tell the agent when this list tool is the right choice over cloud_list_networks or other inventory calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_floating_ipsC
List floating IPs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read only' is a genuine and useful safety disclosure, but nothing is said about pagination, result volume, or the effect of the query/verbose flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the resource front-loaded and zero filler. It is efficient, though extremely terse rather than richly structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list with fully documented parameters and no output schema, the description covers the essentials. It leaves pagination/return-shape and filtering behavior unaddressed, which is a minor but real gap given the absent annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (id, query, verbose) are already documented in the schema. The description adds no parameter syntax or semantics beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List floating IPs'), which cleanly separates it from siblings like cloud_list_primary_ips and cloud_list_ssh_keys. It does not, however, name or contrast with any sibling explicitly, so it stops short of the top band.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the many other list tools, nor any prerequisites or exclusions. Usage can only be inferred from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_imagesB
List images. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden; 'Read only' usefully discloses the safety profile. It stops there, offering nothing about pagination, result volume, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler. The brevity is appropriate for a simple list tool, though it borders on under-specification.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 100% schema coverage, the omission of parameter detail is tolerable, and no output schema exists so return values need not be described. Still, for a tool with a nested query object and no annotations, the description is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, query, and verbose are already documented in the schema. The description adds no parameter meaning beyond that baseline, which is acceptable but not additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List images') that an agent can immediately act on. It does not, however, differentiate from the many other cloud_list_* siblings, so an agent must rely on the resource noun alone.
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 gives no when-to-use or when-not-to-use guidance and names no alternatives. Given the density of similar list tools in the sibling set, basic routing context is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_isosB
List ISOs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description must carry the full behavioral burden, and "Read only" does disclose the single most important trait: this tool does not mutate state. It still omits return shape, pagination, and any permission or scoping notes, so the coverage is thin for a fully un-annotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences totalling four words, with the resource identified first and the safety trait second. Nothing is padded and nothing is buried.
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?
There is no output schema and no annotations, so the description is the only place return behavior or filtering semantics could be explained, and it explains neither. The 100% schema coverage on parameters limits the damage, leaving the definition minimally viable rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with id, query, and verbose each documented in the schema itself, so the baseline of 3 applies. The description adds no syntax, example filters, or explanation of the nested query object beyond what the schema already states.
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?
"List ISOs" gives a clear verb plus resource, so an agent immediately knows this is a read of the ISO catalog. However, it offers no differentiation from adjacent siblings like cloud_list_images or cloud_list_volumes, leaving the agent to infer the distinction from the name alone.
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 says nothing about when to reach for this tool versus cloud_list_images or how the id/query parameters change its behavior. "Read only" is a safety note, not usage guidance, so the agent gets no when/when-not context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_load_balancersC
List load balancers. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read only' is a useful safety signal, but it gives no information about pagination, filtering behavior, return shape, or whether an id lookup returns a single object vs a list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the operation front-loaded and no filler. It is efficient, though the extreme brevity leaves useful context unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three fully documented parameters and no output schema, the main gaps are pagination behavior and how the id/query/verbose options interact (e.g., whether id bypasses query). For a list tool with no annotations, it is minimally but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose. The description adds no parameter meaning beyond that, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List load balancers'), which is unambiguous about the operation. It does not, however, differentiate from the sibling cloud_list_load_balancer_types, which lists the types rather than instances.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the many sibling list tools or the load balancer type listing. The only context offered is an implicit read-only statement, not a usage condition or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_load_balancer_typesB
List load balancer types. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'Read only' usefully declares the safety profile for a mutation-free listing. However, it says nothing about pagination, result size, or whether the list is account-scoped or global — details an agent would want before calling a list endpoint.
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 terse sentences, zero waste, with scope stated first and the read-only trait second. It is efficient though arguably under-specified rather than truly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, three optional params, and a nested query object: the agent gets no sense of what a 'load balancer type' contains (flavor, size, bandwidth) or what the default vs verbose payload looks like. Adequate minimum, but gaps remain for a catalog-listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id ('fetch one by id'), query filters, and verbose ('full payload'). The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list load balancer types. An agent can distinguish it from cloud_list_load_balancers (instances) by the 'types' noun, though the description never draws that distinction explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the adjacent cloud_list_load_balancers or cloud_create_load_balancer siblings that would tell an agent when this enumeration is needed (e.g. before creating a load balancer).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_locationsB
List locations. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose the key trait: 'Read only.' That is a genuine safety signal for an agent deciding whether the call mutates state. However, nothing is said about pagination, result size, or what a 'location' contains, which are the remaining behaviors an agent would want.
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 terse sentences, front-loaded with the action and followed by the safety trait; nothing is wasted. It is efficient but borders on under-specification rather than true conciseness.
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 a nested-object filter, an optional verbose flag, and no output schema, the description is too thin: it never explains what a location represents, what verbose changes, or how the query filter behaves. An agent could call it, but not confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and each of the three parameters is documented inline, so the schema does the heavy lifting and a 3 baseline applies. The description adds no parameter meaning beyond the schema and never mentions the id-based single-fetch path.
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 names a specific verb and resource ('List locations'), which is unambiguous and distinct from every sibling, none of which touch locations. It stops short of 5 because it offers no scope detail (filtering, pagination, region) that would let an agent anticipate behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, and no alternative is named. The agent must infer that this is the tool to call whenever location data is needed; the 'id' parameter's single-fetch mode is never mentioned as a usage branch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_network_membersB
List everything attached to a private network. Pass the network id. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It does declare the safety profile with 'Read only', which is genuinely useful, but it omits pagination behavior, result shape, and what 'everything' encompasses (subnets, IPs, members).
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 short sentences, zero filler, with the core action front-loaded before the parameter hint and the safety note. Nothing needs to be cut.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description should do more work, particularly for the nested query object and what a member record contains. It is minimally adequate for a read-only list tool but leaves real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each of the three parameters is already documented in the schema. The description restates the id usage but adds no meaning about the nested 'query' filters or the 'verbose' payload option. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List everything attached to a private network'), which distinguishes it from sibling cloud_list_networks (which lists the networks themselves). It doesn't explicitly name or contrast any sibling, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Pass the network id' is an invocation instruction, not guidance about when this tool is appropriate. There is no mention of when-not to use it or which alternative (e.g., cloud_list_networks) to prefer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_networksC
List private networks. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, and "Read only" is the only trait it discloses. It says nothing about pagination, filtering behavior, authentication requirements, or the shape of results, leaving most behavioral questions unanswered.
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 terse sentences with zero filler, and the purpose is front-loaded before the read-only qualifier. Nothing is padded.
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 a nested filter object, no output schema, and no annotations, the description does far too little. It never explains the query filters, the verbose flag's effect, or what a listing returns, so an agent cannot confidently invoke it with intended semantics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, query, and verbose are already documented in the schema. The description adds nothing about parameter usage, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("private networks"), which cleanly distinguishes it from write siblings like cloud_create_network and cloud_delete_network. It does not, however, differentiate from other list tools such as cloud_list_network_members.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of alternatives. The agent must infer usage purely from the name and the fact that it is read-only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_placement_groupsC
List placement groups. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Read only' is the only trait disclosed; it says nothing about pagination, result limits, permissions, or what happens when the optional id is omitted versus supplied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, the purpose front-loaded before the read-only note. Nothing is padded, though the brevity tips into under-specification rather than tightness.
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?
Three parameters including a nested free-form filter object and no output schema. The description does not explain the filter key semantics, whether results are paginated, or what the default (non-verbose) payload looks like, leaving real gaps for a filtered-list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so id, query, and verbose are already documented in the schema, including the nested filter object. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (placement groups), which is enough to separate it from the create/delete placement-group siblings. It does not, however, differentiate itself from the many other cloud_list_* tools beyond the resource name.
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?
'Read only' signals the operation class but gives no guidance on when to call this versus cloud_create_placement_group/cloud_delete_placement_group, or on filtering strategy. No prerequisites or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_primary_ipsC
List primary IPs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read only' usefully discloses that this is a non-mutating operation, but nothing is said about authentication requirements, pagination, rate limits, or result volume—significant gaps for a list tool with no annotation coverage.
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 terse sentences, front-loading the resource before the safety note; nothing is wasted. It is arguably under-specified rather than overly wordy, so it lands just short of a 5.
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?
There is no output schema, the query parameter is a nested free-form object, and the description does not explain what a 'primary IP' is, what fields are returned, or how filtering behaves. For a list tool in a large cloud/robot family, this is thin.
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%, with id, query, and verbose each documented in the schema, so the baseline is 3. The description adds no meaning beyond the schema, but it does not need to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (primary IPs), so an agent knows exactly what the tool returns. It does not differentiate itself from the numerous sibling list tools (cloud_list_floating_ips, robot_list_ips, cloud_list_servers), so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use guidance, no prerequisites, and no routing to alternatives such as robot_list_ips or cloud_list_floating_ips. Usage is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_serversC
List cloud servers. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Read only' is a useful safety signal, but there is no mention of pagination, result limits, authentication needs, or the shape/size of the returned payload, which matters for a list endpoint.
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 terse fragments, front-loaded with the core action. Very efficient, though 'Read only' is nearly redundant phrasing that could have carried more useful detail instead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a list tool with no annotations and no output schema, the description should explain result format, filtering behavior via the query object, and pagination. None of that is present, leaving the agent under-informed despite full schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose. The description adds nothing about parameter semantics, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List cloud servers'), so the agent knows exactly what it returns. However, it offers no differentiation from the many sibling list tools (cloud_list_volumes, cloud_list_networks, etc.) beyond the resource noun.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives such as robot_list_servers or the other cloud_list_* tools, and no prerequisites or filtering conditions are stated. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_server_typesB
List server types and specs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read only' is a useful safety signal, but the description says nothing about pagination, whether results are cached, or what 'specs' actually contains. For a tool with zero annotation coverage this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, with no filler. Everything stated 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?
A no-params-required read tool with a fully documented schema needs little prose, but with no annotations and no output schema, the description leaves the agent guessing about the shape of 'specs' and whether the id and query parameters are mutually exclusive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and all three parameters (id, query, verbose) are documented in the schema itself, so baseline 3 applies. The description adds no syntax or format detail about the query filter object or the id-lookup mode.
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?
Names a specific verb and resource ('List server types and specs'), and the phrase 'server types' distinguishes it from the many cloud_list_* siblings that list instances, images, or load balancer types. It stops short of naming which sibling to prefer when an agent wants actual servers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to call this versus cloud_list_servers or cloud_list_load_balancer_types, and no prerequisites or filtering guidance beyond what the schema already shows. The agent must infer that this is a catalog lookup rather than an inventory listing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_ssh_keysB
List SSH keys. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the key behavioral trait 'Read only,' which is genuinely useful safety context, but it says nothing about pagination, permissions, or result shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler; the verb+resource and the safety hint come first. It is efficient, though arguably terse given the absence of annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple optional-param list tool with a fully documented schema and no output schema, the description is minimally adequate. It omits pagination behavior and any routing versus robot_list_ssh_keys, which a mutation-free listing tool of this kind would benefit from.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query filters, and verbose. The description adds no meaning beyond that, which is the baseline 3 when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List SSH keys'), which distinguishes it from the many other list siblings by resource type. However, it does not differentiate itself from the closely-named sibling robot_list_ssh_keys, leaving the agent to guess which listing tool applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no mention of the robot_list_ssh_keys alternative that appears in the sibling list. The agent gets no help deciding between the cloud and robot SSH key listings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_list_volumesB
List volumes. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It usefully states "Read only," confirming this is a safe read operation, but it does not disclose auth needs, rate limits, pagination, or return format, leaving significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, front-loaded sentences with no wasted words. Both "List volumes" and "Read only" earn their place by conveying purpose and a key behavioral trait.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with full schema coverage and no output schema, the description is minimally adequate. However, it lacks any usage context around filtering, fetching by id, or verbose behavior, so an agent gets only a partial picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema documents id, query, and verbose. The description adds no parameter meaning, so the baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource, "List volumes," which clearly identifies the operation. It does not differentiate from sibling list tools or describe scope/filtering, but the name and phrase make the purpose clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of alternatives such as cloud_create_volume or cloud_delete_volume, and no prerequisites or filtering context. "Read only" describes behavior rather than usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_requestcloud raw requestA
Call any Hetzner Cloud (api.hetzner.cloud) endpoint directly. Use a relative path like /servers. Reads are free. Writes obey the read-only and cost guards. If an endpoint you need is missing or misbehaving, use the contribute_or_report tool to open a prefilled issue or pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body for write methods, as a JSON object, for example {"name":"web1","type":"spread"}. A JSON string is also accepted and parsed. | |
| path | Yes | Relative API path, for example /servers or /servers/123. | |
| query | No | Query string parameters. | |
| method | No | HTTP method. Defaults to GET. | |
| confirm | No | Must be true to create a billed resource. Reads and free resources do not need it. | |
| verbose | No | Return the full payload. Default false returns a compact, token-efficient view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose real behavior beyond the schema: reads are free, writes are subject to read-only and cost guards, and confirm is needed for billed resources. It still omits auth requirements, error/retry behavior, and rate limits, but the safety and cost profile is unusually well surfaced.
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 short sentences, front-loaded with the core capability, then the cost/guard behavior, then the escalation path. Every sentence earns its place with no 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?
For a generic 6-parameter proxy tool with no output schema and no annotations, the description covers purpose, cost, guards, and verbose/token tradeoffs adequately. It leaves auth and error-handling expectations unstated, but nothing critical to making a correct call is missing.
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 the baseline is 3; each parameter (path, method, body, query, confirm, verbose) is already documented in the schema. The description reinforces path format and read/write cost semantics but adds no syntax or format detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Call any Hetzner Cloud endpoint directly' at api.hetzner.cloud) with a concrete path example. This clearly differentiates the raw escape hatch from the dozens of typed siblings like cloud_list_servers and robot_request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives operational context (relative paths, reads free, writes guarded) and routes missing/broken endpoints to contribute_or_report, which is a useful escape instruction. However, it never says when to prefer this raw tool over the many specific siblings (cloud_list_servers, cloud_create_server, etc.), which is the main selection decision an agent faces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_unassign_floating_ipUnassign a floating IPB
Unassign a floating IP from its server. Requires confirm true, because traffic to that address stops.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Floating IP id. | |
| confirm | No | Must be true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key consequence – traffic to the address stops. However, it omits whether the IP is released or merely detached, whether the action is reversible, and any permission requirements, so it only partially covers the behavioral surface.
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 tight sentences, front-loaded with the action and followed by the constraint and its reason. Every clause earns its place with no 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?
For a service-affecting mutation tool with no annotations and no output schema, the description conveys the core requirement and warning. It still leaves gaps about the resulting state of the IP and permission needs, making it adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both id and confirm are already documented, establishing the baseline of 3. The description adds a rationale for confirm (traffic stops) but no format or syntax detail 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 names a specific verb (Unassign) and resource (floating IP) with scope (from its server), so an agent can distinguish it from cloud_assign_floating_ip and cloud_delete_floating_ip. It does not explicitly contrast itself against those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states the confirm prerequisite but never says when to choose unassign versus deleting or reassigning the IP. No alternatives or exclusions are given, leaving selection to inference from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cloud_unassign_primary_ipUnassign a primary IPA
Unassign a primary IP from its server. The server must be off. Requires confirm true, because the address stops reaching the server.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Primary IP id. | |
| confirm | No | Must be true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the gating precondition, the mandatory confirm flag, and the operational consequence ('the address stops reaching the server'). It stops short of saying whether the change is reversible, whether auth is required, or what happens to the unassigned address.
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 short sentences, front-loaded with the action and followed by the two blocking conditions. No filler words and nothing repeated from the title or schema.
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 two-parameter mutation with no annotations and no output schema, the description covers the essential preconditions and the effect of the call. Remaining gaps (auth requirements, post-state of the IP, reversibility) are minor but real.
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 the baseline is 3, but the description adds rationale beyond the schema's bare 'Must be true.' for confirm — it explains that confirmation is required because connectivity to the server is severed, which helps an agent understand the parameter's intent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Unassign a primary IP from its server') that cleanly separates it from cloud_assign_primary_ip, cloud_delete_primary_ip, and cloud_unassign_floating_ip. An agent can route to it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete precondition ('The server must be off') and a hard requirement ('Requires confirm true'), which tells the agent when the call can succeed. It does not name alternative tools (e.g. delete vs unassign) or state what to do if the server is running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
contribute_or_reportReport a gap or contributeA
When a Hetzner capability is missing or misbehaving, this returns a prefilled GitHub issue link and the steps to open a pull request. Every gap can become a contribution.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | missing capability or a bug. Default missing. | |
| what | Yes | Describe what you wanted to do or what went wrong. | |
| surface | No | Which surface, if known. | |
| endpoint | No | Method and path if known, for example POST /servers. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It describes the output (a link and steps) without mentioning side effects, implying a safe read-only operation. Could be more explicit about not modifying state, but is clear enough.
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 front-loaded sentences with no fluff. Each sentence adds value: first states trigger and output, second reinforces the value proposition.
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 adequately describes the return value and purpose. It covers the main use case of reporting gaps, though could mention whether the link is generated locally or requires an API call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema covers all parameters with descriptions (100% coverage), so the description adds little extra. It reinforces the purpose but doesn't elaborate on parameter usage beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports missing or misbehaving Hetzner capabilities and returns a prefilled GitHub issue link and pull request steps. It distinguishes from sibling tools that list or manipulate resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'When a Hetzner capability is missing or misbehaving', providing a clear trigger. No exclusions are given, but the context makes it obvious when to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_capacityFind buyable server capacityA
Read-only, free. Lists which server types can be ordered right now and where, recommended first then cheapest, with the monthly price, whether Hetzner recommends it, and retirement dates. Use it before creating a server to avoid resource_unavailable errors and to pick a fallback location.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | How many rows to return. Default 15. | |
| location | No | Only this location, for example fsn1, nbg1, hel1, ash, hil, sin. | |
| min_cores | No | At least this many vCPUs. | |
| server_type | No | Only this type, for example cx33. | |
| architecture | No | CPU architecture. | |
| min_memory_gb | No | At least this much RAM in GB. | |
| include_retiring | No | Also list types that are being retired. Default false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and rises to it by declaring 'Read-only, free' and disclosing the ordering and included fields. It does not state auth requirements or pagination behavior, but for a safe read-only listing the safety and cost profile is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the key behavioral facts ('Read-only, free') then the result shape, then the usage guidance. Every sentence earns its place with no 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?
There is no output schema, and the description compensates by enumerating returned fields (monthly price, recommendation flag, retirement dates). Purpose, usage, and return content are covered; only minor behavioral detail like auth and pagination is absent, leaving it near but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 7 parameters (limit, location, min_cores, server_type, architecture, min_memory_gb, include_retiring). The description adds only marginal framing ('where', retirement dates) beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource with precise scope: 'Lists which server types can be ordered right now and where.' It clearly differentiates from siblings like cloud_list_server_types and cloud_list_locations by emphasizing live availability and ordering logic (recommended first, then cheapest), so an agent can tell them apart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use trigger: 'Use it before creating a server to avoid resource_unavailable errors and to pick a fallback location,' naming the scenario and the payoff. It does not explicitly name a competing sibling or a when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infra_auditAudit infrastructureA
Read-only. Audits every configured Hetzner project for security, cost, reliability and hygiene issues. Returns a score, counts and the top findings. Pass finding=N for one finding's full fix steps, or full=true for the whole report.
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | Summary size. Default 8. | |
| demo | No | Use the labelled sample estate. | |
| full | No | Full report, 10 findings per page. | |
| page | No | Page of the full report. | |
| finding | No | One finding, with fix steps. | |
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the safety-critical 'Read-only' property and sketches the return shape (score, counts, top findings). It says nothing about permissions required, cost/rate of running a full estate audit, or whether the report is cached versus freshly computed.
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 short sentences, front-loaded with the read-only guarantee and the core purpose, then the outputs, then the mode flags. Zero filler, though the mode sentence compresses two distinct invocation paths into one line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does cover what the tool returns (score, counts, top findings) and the principal invocation modes. It leaves refresh and demo semantics undocumented, but an agent could still call the tool correctly in its default form.
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 83%, so the schema already documents most parameters, and the description largely restates finding=N and full=true. It does add the useful interplay between the summary, full-report and single-finding modes, but notably omits top, page, demo and refresh.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Audits every configured Hetzner project') plus the audit domains (security, cost, reliability, hygiene). It is clearly distinguishable from the sibling list/create/delete tools, none of which perform portfolio-wide auditing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains mode selection within the tool (finding=N for one fix, full=true for the whole report), which helps invocation. However, it gives no guidance on when to reach for this audit versus related siblings like spend_history, find_capacity or infra_map.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
infra_mapMap infrastructure and costsA
Read-only. Maps every configured Hetzner project and account with estimated monthly cost per project and resource, top cost drivers, and idle resources still billed. Starts a local map at http://127.0.0.1:43390 and returns its URL. Pass target to map one workspace or project. Other tools use the default token only.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Use the labelled sample estate. | |
| serve | No | Start the local map. Default true. | |
| target | No | "workspace" or "workspace/account/project". Names: npx hetzner-mcp projects list | |
| mermaid | No | Add a Mermaid diagram. | |
| refresh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it declares 'Read-only', discloses that it starts a local server at http://127.0.0.1:43390 and returns its URL (a side effect worth knowing), and notes the token scoping. It stops short of stating auth prerequisites or whether the local server persists after the call.
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?
Four short sentences, front-loaded with the safety hint ('Read-only') and ending with the token caveat. Each sentence carries a distinct fact; only the URL/serve sentence could be marginally tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations, so the description must cover return behavior — it does by naming the returned URL and the report contents. It is adequate for a 5-param, 0-required read tool, though it omits any auth/permission detail.
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 80%, so the schema already documents demo, serve, target, and mermaid. The description adds the practical scoping semantics for target ('one workspace or project') but says nothing about demo, mermaid, or refresh, matching the baseline 3 for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Maps every configured Hetzner project and account') and enumerates the outputs (cost per project/resource, top cost drivers, idle billed resources), which clearly separates it from the cloud_list_*/robot_list_* siblings and from pricing lookups.
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?
'Pass target to map one workspace or project' gives a usage cue for scoping, but does not distinguish this tool from adjacent cost/audit siblings such as infra_audit, spend_history, find_capacity, or cloud_get_pricing. No explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_failoverB
List failover IPs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does disclose the key safety trait ('Read only'), which tells the agent this is a non-mutating operation, but it says nothing about pagination, result limits, auth requirements, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core purpose is front-loaded before the read-only qualifier. It is arguably under-specified rather than wasteful, but nothing needs trimming.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with a fully documented schema and no output schema, the definition is minimally adequate. It leaves the relationship to the sibling robot_list_ips and any pagination behavior unexplained, which an agent would need in a crowded listing-tool namespace.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose, including the nested filter object. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List failover IPs'), so an agent knows exactly what the tool returns. However, it does not distinguish itself from the closely-named sibling robot_list_ips, so the boundary between the two must be inferred from the name alone.
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 only guidance is the trailing 'Read only' note; there is no statement of when to prefer this tool over robot_list_ips or other listing tools, and no prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_ipsC
List single IPs. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it does state the most decision-relevant trait for an agent: that this is a read-only operation with no side effects. It omits everything else, though – pagination behavior, whether results are truncated, and any filter-time constraints are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero filler, and the core purpose is front-loaded ahead of the read-only note. It is efficient, though the extreme brevity is under-specification rather than the only possible concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple list tool with a fully documented schema, so not much prose is required. But with no annotations and no output schema, the description should at least indicate what a listed IP contains or how results are bounded, and it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters (id, query, verbose) and the baseline is 3. The description adds nothing beyond that, and notably never mentions the single-record fetch path implied by the id parameter.
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?
"List single IPs" names a verb and a resource, so the purpose is not a tautology. However, the term "single IPs" is jargon that does not clearly distinguish this tool from sibling listings such as robot_list_failover, cloud_list_primary_ips, or cloud_list_floating_ips, leaving the agent to infer the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use context, no prerequisites, and no routing to alternatives despite a large sibling set of IP- and network-listing tools. "Read only" is a safety note, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_rdnsC
List reverse DNS entries. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses only that the operation is read-only. It says nothing about pagination, result limits, authentication needs, or what the verbose/filter behavior actually yields, which is a substantial gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the resource being listed and zero wasted wording. It is appropriately sized, though the 'Read only' fragment is the only thing keeping it from being purely a restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested filter object, no required parameters, and no output schema or annotations, the description is too thin. It never explains what a reverse DNS entry contains, how filtering by label_selector works, or what 'verbose' changes, leaving the agent under-informed.
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%, with each of the three parameters documented in the schema (id, query filters, verbose). The description adds no parameter meaning beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List reverse DNS entries'), which is clear enough for an agent to know what the tool returns. However, it does nothing to distinguish itself from the many sibling list tools such as robot_list_ips or robot_list_servers, so the sibling differentiation that a 5 requires is absent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. 'Read only' hints at the operation class but is not a usage guideline, leaving the agent to infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_serversC
List dedicated servers. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it offers only 'Read only'. It says nothing about pagination, result limits, permissions, or how the id/query/verbose modes differ in behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with no filler; the resource comes first and the safety note second. It is efficiently structured, though extremely terse.
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 three-param, no-required-arg list tool with full schema coverage and no output schema, the description is minimally adequate. It omits any hint of return shape or how verbose changes the payload size, which an agent would want when deciding between modes.
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% – id ('Fetch one by id'), query (filters), and verbose ('Full payload') are all documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List dedicated servers'), and the word 'dedicated' implicitly separates it from the cloud_* siblings. It never explicitly names cloud_list_servers as the alternative, so an agent must infer the robot-vs-cloud distinction from the prefix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to or away from siblings such as cloud_list_servers or robot_list_ips. 'Read only' describes the operation type, not when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_ssh_keysB
List Robot SSH keys. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden; 'Read only' is a genuinely useful safety disclosure that would otherwise be absent. Beyond that it says nothing about authentication requirements, result limits, or whether pagination applies for a listing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, front-loaded sentences with zero filler. The second sentence earns its place because it supplies the read-only trait that no annotation provides.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With fully documented optional params and no required ones, the description is minimally adequate. But with no output schema and no annotation coverage, it omits any sense of the returned payload or handling of the nested query filter object, leaving gaps an agent would notice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query filters, and verbose. The description adds no interpretation of these parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List Robot SSH keys'), which is enough to distinguish from the many create/delete siblings. However, it never contrasts itself with the near-identical sibling cloud_list_ssh_keys, so the robot-vs-cloud distinction rests entirely on the reader inferring it from the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus the sibling cloud_list_ssh_keys, nor any prerequisite or context about Robot accounts. The agent must guess which of the two SSH-key listers applies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_subnetsC
List subnets. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and 'Read only' merely restates what 'List' already implies. It says nothing about auth requirements, whether query filters on nested objects are combinable, pagination, or result limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no wasted prose, and the operation is front-loaded. But the second sentence ('Read only.') is redundant with the first and the overall brevity stems from under-specification rather than tight writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with three parameters including a nested filter object, no output schema, and no annotations, the description is too thin. It does not explain how the id path differs from the query path, nor what verbose changes about the response.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose (including 'name, label_selector' examples). The description adds no syntax, format, or interaction detail beyond that, warranting the baseline 3 rather than more.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource ('List subnets'), so the core operation is identifiable. However, it gives no scope, return shape, or relation to near-neighbors like robot_list_vswitches or robot_list_ips, so an agent cannot tell from the description alone how this differs from the other robot_list_* tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Read only' is a property, not guidance on when to use this tool versus alternatives such as robot_list_vswitches (whose subnets these may be). There is no context, no prerequisite, and no pointer to a sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_list_vswitchesC
List vSwitches. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Read only' is the sole behavioral claim and it is thin: nothing is said about pagination, filtering semantics, auth requirements, or result size even though the 'query' and 'verbose' params imply variable output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short fragments with zero filler, front-loading the core action. It is efficient, though bordering on under-specification rather than true conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, one a nested filter object, and no output schema, the description should at least hint at filtering/return shape. Instead it leaves all of that to the schema, which is thin given the nested 'query' object.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id, query, and verbose; the baseline of 3 applies. The description adds nothing about how 'query' filters interact or what 'verbose' expands, so it does not exceed 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 names a specific verb and resource ('List vSwitches'), so an agent knows exactly what is returned. There are no sibling vSwitch tools to differentiate from, but it is otherwise crisp and 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?
There is no when-to-use guidance, no mention of alternatives (e.g. other robot_list_* tools), and no prerequisites. 'Read only' restates safety rather than telling the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
robot_requestrobot raw requestA
Call any Hetzner Robot dedicated servers (robot-ws.your-server.de) endpoint directly. Use a relative path like /servers. Reads are free. Writes obey the read-only and cost guards. If an endpoint you need is missing or misbehaving, use the contribute_or_report tool to open a prefilled issue or pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body for write methods, as a JSON object, for example {"name":"web1","type":"spread"}. A JSON string is also accepted and parsed. | |
| path | Yes | Relative API path, for example /servers or /servers/123. | |
| query | No | Query string parameters. | |
| method | No | HTTP method. Defaults to GET. | |
| confirm | No | Must be true to create a billed resource. Reads and free resources do not need it. | |
| verbose | No | Return the full payload. Default false returns a compact, token-efficient view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose meaningful behavior beyond the schema: reads are free and writes are subject to read-only/cost guards. It stops short of describing auth requirements, rate limits, or what the guards actually do when they trigger.
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?
Four compact sentences, front-loaded with what the tool does, followed by the path convention, guard behavior, and the escalation route. Little waste, though the contribute_or_report sentence is somewhat tangential to invoking the tool.
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 generic request tool with no annotations and no output schema, the description covers purpose, path convention, guard behavior, and a fallback route. Return shape is handled by the verbose param in the schema, so this is largely complete despite the absence of auth/rate-limit detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters (path, body, query, method, confirm, verbose) are already documented in the schema, establishing a baseline of 3. The description only restates the relative-path convention for path and adds no param detail 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?
States a specific verb (Call) and resource (any Hetzner Robot endpoint at robot-ws.your-server.de), and gives the relative-path convention. It is clearly the generic escape hatch versus the specific robot_list_* and cloud_* siblings, though it never names a sibling to explicitly differentiate from.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It conveys useful context ('Reads are free', 'Writes obey the read-only and cost guards') and routes the missing-endpoint case to contribute_or_report. However, it never says when to prefer a dedicated sibling (e.g. robot_list_servers) over this generic tool, leaving that 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.
spend_historySpend historyC
Read-only. Estimated spend per month and project from running resources, checked against invoices added on the map's Spend tab.
| Name | Required | Description | Default |
|---|---|---|---|
| demo | No | Use the labelled sample estate. | |
| months | No | ||
| refresh | No | ||
| workspace | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose the key trait: it is read-only. It also explains data provenance (estimates from running resources vs. invoices). However, it says nothing about whether refresh triggers recomputation, cost/latency, or how stale estimates can be.
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?
Very compact – a read-only marker followed by one information-dense sentence. Front-loaded with the safety trait and the core output, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A four-parameter tool with no annotations, no output schema, and mostly undocumented parameters deserves more than one sentence. Return shape (per-month/per-project breakdown) and the meaning of refresh/workspace are left entirely to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 25% (just the 'demo' flag), and the description never addresses the months, refresh, or workspace parameters. It implies a monthly dimension but gives no syntax, defaults, or effect for any of the four inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource and scope: estimated monthly and per-project spend derived from running resources, reconciled against invoices. It is clear what data the tool surfaces, though it does not explicitly contrast itself with siblings like get_pricing or infra_map.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives (e.g. get_pricing or infra_audit), nor any preconditions. The reference to the 'map's Spend tab' hints at context but does not tell the agent when this tool is the right choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storagebox_listC
List storage boxes. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. 'Read only' usefully declares the safety profile, but nothing is said about pagination, auth/permissions, or why a list tool also supports fetching one by id.
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 terse sentences with zero filler, and the resource is stated before the safety note. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested query object, a fetch-by-id mode embedded in a 'list' tool, and no output schema or annotations, the description is too thin. It never explains how id and query interact or what the listing returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters (id, query, verbose) are already documented in the schema, including the nested-filter example. The description adds no syntax or semantics beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List storage boxes') so the agent knows exactly what the tool returns. It does not differentiate itself from the sibling storagebox_list_types, which an agent could easily confuse with this 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?
No guidance on when to prefer this over storagebox_list_types or storagebox_request. The only cue is the implicit 'list' semantics; there are no stated preconditions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storagebox_list_typesC
List storage box types. Read only.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Fetch one by id. | |
| query | No | Filters, e.g. name, label_selector. | |
| verbose | No | Full payload. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Read only' usefully signals a safe non-mutating operation, but nothing is said about pagination, result size, or what 'types' contain, which is thin for a tool with zero annotation coverage.
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 terse, front-loaded sentences with zero filler and the safety signal placed immediately after the purpose. The brevity is defensible, though it borders on under-specification for a tool with no annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with 3 optional params, no output schema, and 100% schema coverage, the description is minimally adequate. It omits any explanation of the query filter semantics or the id single-fetch mode, and provides no annotations to fall back on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents id ('Fetch one by id'), query filters, and verbose ('Full payload'). The description adds nothing about parameters; the baseline of 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List storage box types'), which an agent can distinguish from the sibling storagebox_list. However, it does not explain what a 'storage box type' is or how it relates to storagebox_list, so sibling differentiation is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance is given: nothing tells the agent when to call this instead of storagebox_list, nor that the id/query/verbose parameters allow drilling into a single type. Usage is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storagebox_requeststoragebox raw requestA
Call any Hetzner Storage Box (api.hetzner.com) endpoint directly. Use a relative path like /servers. Reads are free. Writes obey the read-only and cost guards. If an endpoint you need is missing or misbehaving, use the contribute_or_report tool to open a prefilled issue or pull request.
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Request body for write methods, as a JSON object, for example {"name":"web1","type":"spread"}. A JSON string is also accepted and parsed. | |
| path | Yes | Relative API path, for example /servers or /servers/123. | |
| query | No | Query string parameters. | |
| method | No | HTTP method. Defaults to GET. | |
| confirm | No | Must be true to create a billed resource. Reads and free resources do not need it. | |
| verbose | No | Return the full payload. Default false returns a compact, token-efficient view. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does well: it discloses that reads are free, that writes are gated by read-only and cost guards, and that a prefilled issue/PR route exists. It does not describe auth requirements, rate limits, or error behavior for failed writes.
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?
Four short sentences, front-loaded with the core action, then constraints, then the escape hatch. No filler, though the cost-guard and contribute_or_report sentences could be tightened slightly.
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 generic passthrough with no output schema, the description covers the essential call semantics and safety guards. It leaves return formatting/pagination and error-shape behavior unstated, but the verbose flag partially covers response shape.
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 body/path/query/method/confirm/verbose are all already documented with examples. The description adds no parameter syntax or format information beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: call any Hetzner Storage Box endpoint directly with a relative path. It is clearly the raw/escape-hatch tool distinct from the typed siblings like storagebox_list, though it never explicitly contrasts itself with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context ('Use a relative path like /servers') and an explicit escalation rule naming the alternative: 'If an endpoint you need is missing or misbehaving, use the contribute_or_report tool.' It does not say when to prefer storagebox_list/storagebox_list_types over this generic path.
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.
60 tool updates
v0.7.0- Added
cloud_assign_floating_ip - Added
cloud_assign_primary_ip - Added
cloud_attach_volume - Added
cloud_create_firewall - Added
cloud_create_floating_ip - Added
cloud_create_load_balancer - Added
cloud_create_network - Added
cloud_create_placement_group - Added
cloud_create_primary_ip - Changed
cloud_create_server2 fields changed- removed
Input schema / properties / ssh_keys / items / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - } -] - added
Input schema / properties / ssh_keys / items / typeAdded value: +[ + "string", + "number" +]
- Added
cloud_create_ssh_key - Added
cloud_create_volume - Added
cloud_delete_firewall - Added
cloud_delete_floating_ip - Added
cloud_delete_load_balancer - Added
cloud_delete_network - Added
cloud_delete_placement_group - Added
cloud_delete_primary_ip - Changed
cloud_delete_server2 fields changed- changed
Input schema / properties / confirm / descriptionPrevious value: -"Must be true. This permanently deletes the server."New value: +"Must be true. Deletes the server for good." - changed
Input schema / properties / id / anyOfPrevious value: -[ - { - "type": "string" - }, - { - "type": "number" - } -]New value: +[ + { + "exclusiveMinimum": 0, + "maximum": 9007199254740991, + "type": "integer" + }, + { + "pattern": "^[0-9]+$", + "type": "string" + } +]
- Added
cloud_delete_ssh_key - Added
cloud_delete_volume - Added
cloud_detach_volume - Changed
cloud_get_pricing5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_certificates5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Removed
cloud_list_datacenters - Changed
cloud_list_dns_zones5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_firewalls5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_floating_ips5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_images5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_isos5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_load_balancer_types5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_load_balancers5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_locations5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Added
cloud_list_network_members - Changed
cloud_list_networks5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_placement_groups5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_primary_ips5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_server_types5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_servers5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_ssh_keys5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_list_volumes5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
cloud_request2 fields changed- removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +]
- Added
cloud_unassign_floating_ip - Added
cloud_unassign_primary_ip - Added
find_capacity - Added
infra_audit - Added
infra_map - Changed
robot_list_failover5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_list_ips5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_list_rdns5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_list_servers5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_list_ssh_keys5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Removed
robot_list_storageboxes - Changed
robot_list_subnets5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_list_vswitches5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
robot_request2 fields changed- removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +]
- Added
spend_history - Changed
storagebox_list5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
storagebox_list_types5 fields changed- changed
Input schema / properties / id / descriptionPrevious value: -"Optional resource id to fetch a single item."New value: +"Fetch one by id." - removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +] - changed
Input schema / properties / query / descriptionPrevious value: -"Optional query parameters such as name or label_selector."New value: +"Filters, e.g. name, label_selector." - changed
Input schema / properties / verbose / descriptionPrevious value: -"Return full payload instead of the compact view."New value: +"Full payload."
- Changed
storagebox_request2 fields changed- removed
Input schema / properties / query / additionalProperties / anyOfRemoved value: -[ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - } -] - added
Input schema / properties / query / additionalProperties / typeAdded value: +[ + "string", + "number", + "boolean" +]
34 tool updates
v0.3.0- First observed
cloud_create_server - First observed
cloud_delete_server - First observed
cloud_get_pricing - First observed
cloud_list_certificates - First observed
cloud_list_datacenters - First observed
cloud_list_dns_zones - First observed
cloud_list_firewalls - First observed
cloud_list_floating_ips - First observed
cloud_list_images - First observed
cloud_list_isos - First observed
cloud_list_load_balancer_types - First observed
cloud_list_load_balancers - First observed
cloud_list_locations - First observed
cloud_list_networks - First observed
cloud_list_placement_groups - First observed
cloud_list_primary_ips - First observed
cloud_list_server_types - First observed
cloud_list_servers - First observed
cloud_list_ssh_keys - First observed
cloud_list_volumes - First observed
cloud_request - First observed
contribute_or_report - First observed
robot_list_failover - First observed
robot_list_ips - First observed
robot_list_rdns - First observed
robot_list_servers - First observed
robot_list_ssh_keys - First observed
robot_list_storageboxes - First observed
robot_list_subnets - First observed
robot_list_vswitches - First observed
robot_request - First observed
storagebox_list - First observed
storagebox_list_types - First observed
storagebox_request
TDQS
Scored across 59 tools
Each named tool targets a distinct resource+action (list/create/delete/attach per resource), so most are easy to tell apart. The three generic *_request tools overlap with every specific tool, creating a dual path an agent must reason about, but their descriptions clearly frame them as fallbacks for missing endpoints.
The dominant pattern is product_verb_noun (cloud_create_server, robot_list_ips, storagebox_list_types), which is predictable and readable. A handful of infra utilities (infra_map, spend_history, find_capacity, contribute_or_report) break the convention, but this is a minor deviation rather than chaos.
59 tools is very heavy for this server and well past the 25-tool threshold, inflated by exhaustive list coverage across cloud/robot/storagebox plus three catch-all request tools that partly duplicate the named tools. The domain is large, but the surface is clearly oversized.
Coverage is broad: list for nearly every resource plus create/delete for servers, volumes, networks, firewalls, load balancers, IPs, keys, and placement groups. Some lifecycle gaps exist (no server start/stop/reboot, no volume resize, no update/edit tools), but the generic *_request tools provide a usable escape hatch so agents are not stranded.
Maintenance
Related MCP Connectors
Manage Vozora VPS servers, SSH keys, firewalls, DNS and usage from an AI agent.
Manage VeriTeknik servers, DNS, backups and support tickets from your AI assistant.
- mcpOAuthnet.hepcloud
Manage HepCloud (Turkish cloud) servers and managed PostgreSQL from your AI assistant. OAuth 2.1.
European cloud hosting. Deploy and manage apps with your favorite AI coding assistant.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables users to manage Hetzner Cloud resources including servers, load balancers, and volumes through natural language commands. It facilitates infrastructure operations such as resource creation, security configuration, and real-time pricing queries within AI-powered environments.71 npm1-
- AlicenseBqualityDmaintenanceEnables conversational management of Hetzner Cloud, DNS, and Storage Box infrastructure through 137 MCP tools for CRUD operations and actions like server power control, DNS zone management, and storage box snapshots.100MIT
- AlicenseNot gradedqualityAmaintenanceModel Context Protocol server for full Hetzner Cloud + Storage API automation. Exposes all official Hetzner operations as MCP tools so AI agents can manage servers, networking, load balancers, firewalls, volumes, DNS zones, and storage boxes from one server.1MIT
- AlicenseBqualityAmaintenanceManage AWS, Hetzner, OVH, and custom SSH servers from AI agents — commands, logs, CloudWatch/CloudTrail, IP banning, and S3, with guard tiers and a full audit trail.691,058 PyPI29MIT