Cross-platform desktop app and MCP server for domain management across multiple registrars (Dynadot, GoDaddy, etc.). Provides tools for portfolio queries, domain operations, registrar management, and DNS/contact/forwarding configuration.
DomBot MCP server demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive parameter descriptions, and well-structured schemas. All 17 tools follow domain-specific conventions (domain_*, portfolio_*, registrar_*). Schemas are present and typed for all tools. However, tool descriptions vary in depth, some are excellent (domain_get_detail: 180 chars), others are adequate but could be more prescriptive about when to use them. Parameter descriptions are consistently present and specific. Output schemas are not explicitly documented in the source, requiring inference from code. Error handling guidance is minimal, tools return OperationResult but lack recovery hints for common failure modes (e.g., 'domain not found, try portfolio_sync first'). No tool annotations (readOnlyHint/destructiveHint) visible in schema definitions, though risk classification is provided in metadata.
Fetches detailed information for a single domain: contacts, nameservers, DNS records, email/URL forwards, auto-renew status, privacy setting, and pricing.
Gets the live renewal price for a domain from the registrar.
Registers a new domain at a registrar. Requires a registrant contact and supports optional nameservers, privacy, auto-renew, and consent parameters.
Renews a domain for a specified number of years.
Enables or disables auto-renewal for a domain.
Updates the registrant, admin, tech, and/or billing contacts for a domain.
Updates DNS records for a domain. Replaces the full set at the registrar.
Output schemas not explicitly documented. Tool descriptions state what is returned (e.g., 'returns aggregated results') but JSON Schema output structure is not visible in source. LLMs cannot reliably plan downstream tool calls without knowing response field names and types.
Error handling lacks recovery guidance. Tools return OperationResult with success/message, but descriptions do not explain what to do on failure. E.g., domain_get_detail says 'Fetches detailed information' but does not say 'If domain not found, run portfolio_sync first' or 'If registrar is ambiguous, pass accountId explicitly'.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Updates email forwards for a domain. Replaces the full set at the registrar.
Updates the nameservers for a domain. Replaces the full set at the registrar.
Enables or disables WHOIS privacy for a domain.
Updates URL/domain forwards for a domain. Replaces the full set at the registrar.
Transfers a domain into a registrar. Requires the EPP/auth code from the current registrar.
Initiates an outbound transfer of a domain from a registrar. Generates the EPP/auth code needed to transfer elsewhere.
Reads the *cached* portfolio (assembled from the per-registrar sync slices, merged with any cached per-domain detail) rather than hitting registrars. Supports filtering by registrar, folder, expiry, and other criteria with pagination.
Syncs the portfolio from all configured registrars, refreshing the cache. Runs the sync for each registrar in parallel and returns aggregated results.
Lists all configured registrar accounts with their metadata, credentials status, and sync state.
Syncs a single registrar's portfolio, refreshing the cache for that provider.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not visible in schema definitions. Risk metadata is provided in the evaluation (READ_ONLY vs WRITE) but not encoded in the MCP tool schema where the LLM can see it. This prevents the LLM from understanding which tools are safe to retry.
Parameter 'contacts' in domain_set_contacts and domain_register lacks detailed schema. Described as 'Contact object with optional registrant, admin, tech, billing fields' but the nested structure (required fields, field types, validation rules) is not formally defined. LLMs cannot construct valid contact objects without explicit schema.
Pagination guidance incomplete. portfolio_query accepts limit/offset but does not document max result count, default limit behavior, or whether a total_count is returned. Without this, LLMs cannot reliably iterate through large portfolios.