ELITEDOMAINS MCP Server — 17 tools via DADL
The ELITEDOMAINS DADL turns ELITEDOMAINS's API into an MCP server that Claude, GPT or any MCP-compatible agent can consume directly. One YAML file declares all 17 tools — domain, catcher, handle, offer, address, authinfo, and more — and ToolMesh serves them at runtime. No Python boilerplate, no per-endpoint code, no separate MCP server process.
Below: the endpoint coverage matrix, a two-block ToolMesh setup, the full tool reference grouped by ELITEDOMAINS feature area.
Source: ELITEDOMAINS API
Which ELITEDOMAINS endpoints are covered?
100% (17 of ~17 endpoints)
Focus: Beta — REST API not yet stable. ELITEDOMAINS .de domain reseller: domains (register, transfer, AuthInfo, redirector, DNS records, tags), handles (PERSON, ORG, address validation), catcher (RGP backorders, dropdate, max bid), offers (Sedo marketplace, sale pages, visitor stats).
Missing: no standalone DNS-record CRUD (records are managed inline via redirector_settings), no transfer-status polling endpoint, no billing/invoice or price-list endpoints
How do you configure the ELITEDOMAINS DADL?
- Ask ELITEDOMAINS support to enable API access for your account (the API is opt-in and off by default).
- Log in to the dashboard at https://app.elitedomains.de
- Open account settings and go to the API / Personal Access Tokens section.
- Create a new personal access token and copy it immediately (it is shown only once).
- Store it in the ToolMesh credential store under the name 'elitedomains_token'.
Environment variable: CREDENTIAL_ELITEDOMAINS_TOKEN
Personal access tokens are account-scoped (no granular scopes). Append ?sandbox=1 to any request to test without registry writes. Standard rate limit is 100 req/min and 1000 req/day; during droptime (02:00-04:00 UTC) it drops to 10 req/min and catcher add/remove is rejected with HTTP 405. Ordering an AuthInfo2 letter requires an account on monthly invoicing (Sammelrechnung).
How do you install the ELITEDOMAINS MCP server with ToolMesh?
Add to your backends.yaml:
- name: elitedomains
transport: rest
dadl: elitedomains.dadl
url: "https://api.elitedomains.de"
Set the credential:
CREDENTIAL_ELITEDOMAINS_TOKEN=your-token-here What 17 tools does the ELITEDOMAINS DADL expose?
GET list_domains List all domains in the account (paginated). Each row includes `name`, `redirector_settings`, `authinfo`, `auto_expire`, `paid_until`, `expires_at`, `tags` and `created_at`. Domains are keyed by `name` -- use it for every other domain operation. GET check_domain Check whether a single domain is available for registration. Returns { name, message } where `message` is "free" (available) or "connect" (already registered -- only obtainable via transfer/connect, not new registration). POST register_domain Register a new domain OR transfer an existing one into the account. For a TRANSFER, supply `authinfo` (the transfer code from the losing registrar); for a fresh REGISTRATION omit it. `period` is the term in MONTHS (default 12). Optionally set the owner contact via `handle_id` and initial hosting via `redirector_settings`. Errors: 400 invalid input, 403 registry rejection, 409 already registered/owned. PATCH update_domain Update an existing domain's settings: change its hosting/redirect via `redirector_settings` and/or reassign the owner contact via `handle_id`. Identify the domain by `name`. Errors: 400 validation, 404 not found. DELETE delete_domain Delete (give up) a domain, or put it into TRANSIT for an outbound transfer. With `transit`=1 the domain is moved to the transit/KK-out state instead of being deleted. A plain delete returns the domain to the registry and is irreversible. Errors: 400 missing name, 403 registry error, 404 not found. POST add_domain_tags Set/replace the internal organizational tags on a domain. Returns the updated `tags` array and a confirmation `message`. Errors: 400 invalid domain, 404 not found. GET get_domain_authinfo Get or generate the outbound AuthInfo (KK / transfer) code for a domain you own -- needed to transfer it to another registrar. Returns { message, name, authinfo, expires_at }. The code is time-limited; note `expires_at` here is German format "DD.MM.YYYY HH:mm:ss" (unlike the ISO 8601 timestamps elsewhere). Errors: 400 missing name, 403 registry error, 404 not found. GET check_domain_authinfo2 Check whether a DENIC AuthInfo2 letter can be ordered for a .de domain. Returns { name, available, message }. AuthInfo2 is the paper-letter fallback used when an AuthInfo1 code is not obtainable. Only relevant for monthly-invoice (Sammelrechnung) accounts. Call this before order_domain_authinfo2. POST order_domain_authinfo2 Order a DENIC AuthInfo2 letter for a .de domain (added to the next collective invoice; confirmation arrives by email). Requires an account on monthly invoicing. Errors: 400 not orderable, 403 account restriction. POST add_domain_to_sedo List a domain for sale on the external Sedo marketplace at a fixed price. `price` is a EUR amount greater than 0. Errors: 400 invalid input, 404 domain not found, 500 processing error. GET list_catcher_orders List all RGP catcher (backorder) orders (paginated). Each row includes `name`, `status`, `users` (number of competing backorderers), `price` (your max bid), `dropdate_at` (expected drop) and `created_at`. POST add_catcher_order Place an RGP catcher (backorder) on a dropping domain. `price` is your MAXIMUM bid in EUR (minimum 2). Requires a valid contact handle on the account. Errors: 400 missing/ invalid domain or missing handle, 405 droptime restriction (02:00-04:00 UTC), 409 already added. DELETE delete_catcher_order Cancel a catcher (backorder) order for a domain. This only removes your backorder; it is reversible by re-adding. Errors: 400 missing name, 404 not found, 405 droptime restriction (02:00-04:00 UTC). GET list_offers List the account's domain offers / sale pages (paginated, richly filterable). Each row includes `name`, `type` (paynow|4sale), `status`, `price`, `template`, `is_internal`, `redirect_status`, `hide_on_marketplace`, `visitors` (last_30_days/last_7_days/referrer_30_days), `template_data` and `tags`. Use the filters to narrow by type, status, price band, traffic and template, and sort with order_by/order_direction. This endpoint returns `total` and `last_page` for paging. GET list_handles List all contact handles in the account (paginated). Each row includes `id`, `alias`, `type` (PERSON|ORG), `handle_name`, address fields (`street_name`, `street_number`, `postalcode`, `city`, `country_id`), `email`, `phone` and `created_at`. Use a handle's `id` as `handle_id` when registering/updating a domain. Note: the country is read back as `country_id` but written as `country_iso`. POST create_handle Create a new contact handle (domain owner/admin contact). `type` is PERSON or ORG. Set `address_suggest` to "keep" to bypass address auto-correction. Returns the full handle object including the assigned `id`. Errors: 400 validation, 500 unknown error. PATCH update_handle Update an existing contact handle by numeric id. Any subset of the writable fields may be supplied. (`type` cannot be changed after creation.) Returns the updated handle object. Errors: 400 validation, 404 handle not found.