Hetzner Cloud API MCP server — full vendor surface (189 tools, BYOK, DRY_RUN + READ_ONLY)
Server exposes 15 tools (sample of 189 total) with complete JSON Schema input definitions and Zod validation. Tool names follow verb_noun convention (get_, list_, create_, delete_, update_). However, descriptions are problematic: many are truncated API field descriptions rather than LLM-optimized explanations of WHEN and WHY to call the tool. Example: 'get_action' has description 'Action ID.' (9 chars, below 20-char floor). 'list_certificates' description is a pagination boilerplate fragment, not a tool purpose statement. No output schemas documented. Error handling and recovery guidance absent. Tool annotations (readOnlyHint/destructiveHint) are present and correctly assigned, which is a strength. Overall: solid schema structure undermined by weak descriptions and missing output documentation.
Name of the Certificate.
Certificate ID.
Action ID.
Filter the actions by ID. May be used multiple times. The response will only contain actions matching the specified IDs.
Certificate ID.
Certificate ID.
Action ID.
Critical: 9 of 15 tools have descriptions under 20 characters or are single-field names (e.g., 'get_action' → 'Action ID.', 'get_certificate' → 'Certificate ID.'). LLMs cannot determine tool purpose from bare parameter names.
High: No output schemas documented for any tool. Responses are inferred from OpenAPI spec but not explicitly stated in tool definitions. LLMs cannot plan downstream calls or extract required fields (e.g., certificate_id for chaining to update_certificate).
High: Pagination descriptions are boilerplate fragments appended to list_* tools, not integrated into a coherent tool purpose. 'Returns up to `per_page` items...' is implementation detail, not a reason to call the tool. Descriptions should explain WHEN to use list_certificates vs get_certificate.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Datacenter ID.
Certificate ID. Returns up to `per_page` items (default 25, max 50). The response includes `meta.pagination.last_page` and `meta.pagination.total_entries` — if more pages exist, call this tool again with `page` incremented. Use `label_selector` to filter results server-side. Per-resource scope: returns actions for ONE specific certificate identified by its ID. For a project-wide action lookup by action ID alone, use the plural-noun variant (list_certificates_actions / get_certificates_action).
Sort resources by field and direction. May be used multiple times. For more information, see "[Sorting](#description/sorting)". Returns up to `per_page` items (default 25, max 50). The response includes `meta.pagination.last_page` and `meta.pagination.total_entries` — if more pages exist, call this tool again with `page` incremented. Use `label_selector` to filter results server-side.
Filter the actions by ID. May be used multiple times. The response will only contain actions matching the specified IDs. Returns up to `per_page` items (default 25, max 50). The response includes `meta.pagination.last_page` and `meta.pagination.total_entries` — if more pages exist, call this tool again with `page` incremented. Use `label_selector` to filter results server-side. Project-wide scope: looks up actions across all certificates in the project, identified by action ID alone. For one specific certificate's actions, use the singular-noun variant (e.g. list_certificate_actions / get_certificate_action), which takes the certificate ID as well.
Filter resources by their name. The response will only contain the resources matching exactly the specified name. Returns up to `per_page` items (default 25, max 50). The response includes `meta.pagination.last_page` and `meta.pagination.total_entries` — if more pages exist, call this tool again with `page` incremented. Use `label_selector` to filter results server-side.
Sort resources by field and direction. May be used multiple times. For more information, see "[Sorting](#description/sorting)". Returns up to `per_page` items (default 25, max 50). The response includes `meta.pagination.last_page` and `meta.pagination.total_entries` — if more pages exist, call this tool again with `page` incremented. Use `label_selector` to filter results server-side.
Certificate ID.
Certificate ID.
Medium: Plural/singular action tool naming (list_certificates_actions vs list_certificate_actions, get_certificates_action vs get_certificate_action) is confusing without clear descriptions. Descriptions mention the distinction but are too brief to guide LLM selection.
Medium: No error handling or recovery guidance. Tools do not document what happens on invalid input (e.g., non-existent certificate_id), whether errors are retryable, or what the LLM should do next.