Skip to main content
Glama

Attach a custom domain (step 1 of 2)

add_custom_domain
Idempotent

Start attaching a user-owned domain to an existing site: returns the DNS records the user adds at their DNS provider (a routing record that sends visitors here, plus a TXT that proves ownership). Idempotent: the same siteName and domain return the existing record. Once the records are published (usually minutes, up to 24h), call verify_custom_domain with the returned recordId; VibeDeploy also re-checks automatically for a few days and emails the user when the domain is live. The site must already exist; call deploy_site first if it does not.

Input Schema

NameRequiredDescriptionDefault
domainYesThe user-owned hostname to attach, e.g. 'shop.example.com'. Must be a valid FQDN.
siteNameYesThe VibeDeploy site name to attach the domain to (e.g. 'tester').

Output Schema

NameRequiredDescriptionDefault
domainYes
statusYespending_verification on first attach; verified if the domain was already set up earlier.
nextCallNoStructured hint for the next tool call (e.g. verify_custom_domain). Lets an agent chain without parsing instructions.
recordIdYesPass this to verify_custom_domain after the TXT is in place.
dnsRecordsNoEvery record to add at the DNS provider: routing (sends visitors to VibeDeploy), ownership (TXT) and the optional www/apex twin. Only present when status is pending_verification.
dnsProviderNoThe provider that hosts the domain's DNS, recognised from its nameservers. Absent when unknown.
instructionsYesPlain-English instructions for the user.
alreadyAttachedNoTrue when the call returned an existing record instead of creating one (idempotent path).
dnsAutoConfiguredNoTrue when the verification TXT was written automatically (domain registered through VibeDeploy): call verify_custom_domain right away. Otherwise the user adds the record at their DNS provider first.
verificationRecordNoOnly present when status is pending_verification.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedOutput schema / properties / dnsProvider
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The provider that hosts the domain's DNS, recognised from its nameservers. Absent when unknown.",
      +  "properties": {
      +    "helpUrl": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "type": "null"
      +        }
      +      ],
      +      "description": "The provider's own help article on DNS records, when known."
      +    },
      +    "id": {
      +      "type": "string"
      +    },
      +    "name": {
      +      "description": "The company that hosts the domain's DNS, e.g. Combell, OVHcloud, Cloudflare.",
      +      "type": "string"
      +    },
      +    "panelUrl": {
      +      "description": "Where the user logs in to edit the DNS records.",
      +      "type": "string"
      +    },
      +    "steps": {
      +      "description": "Steps specific to this provider, in order. Relay them with the records.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "required": [
      +    "id",
      +    "name",
      +    "panelUrl",
      +    "helpUrl",
      +    "steps"
      +  ],
      +  "type": "object"
      +}
  2. Changed3 schema fields changed
    • addedOutput schema / properties / dnsRecords
      Added value: +{
      +  "description": "Every record to add at the DNS provider: routing (sends visitors to VibeDeploy), ownership (TXT) and the optional www/apex twin. Only present when status is pending_verification.",
      +  "items": {
      +    "additionalProperties": false,
      +    "properties": {
      +      "alternative": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "type": {
      +            "type": "string"
      +          },
      +          "value": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "type",
      +          "value"
      +        ],
      +        "type": "object"
      +      },
      +      "fqdn": {
      +        "type": "string"
      +      },
      +      "host": {
      +        "description": "Value for the provider's Host/Name field ('@' is the domain itself).",
      +        "type": "string"
      +      },
      +      "purpose": {
      +        "enum": [
      +          "routing",
      +          "ownership",
      +          "www"
      +        ],
      +        "type": "string"
      +      },
      +      "type": {
      +        "type": "string"
      +      },
      +      "value": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "purpose",
      +      "type",
      +      "host",
      +      "fqdn",
      +      "value"
      +    ],
      +    "type": "object"
      +  },
      +  "type": "array"
      +}
    • addedOutput schema / properties / verificationRecord / properties / host
      Added value: +{
      +  "description": "What to type in the DNS provider's Host/Name field (e.g. '_vibedeploy.shop'); most providers append the domain themselves.",
      +  "type": "string"
      +}
    • changedOutput schema / properties / verificationRecord / properties / name / description
      Previous value: -"DNS record name to add (e.g. '_vibedeploy.shop.example.com')."New value: +"Full DNS record name (e.g. '_vibedeploy.shop.example.com')."
  3. Changed3 schema fields changed
    • changedInput schema / properties / domain / description
      Previous value: -"The user-owned hostname to attach (e.g. 'tester.subsite.site'). Must be a valid FQDN."New value: +"The user-owned hostname to attach, e.g. 'shop.example.com'. Must be a valid FQDN."
    • changedOutput schema / properties / dnsAutoConfigured / description
      Previous value: -"True when the verification TXT was written automatically because the domain is managed through VibeDeploy's Gandi account. The caller can call verify_custom_domain immediately without waiting for the user to add a TXT manually. Absent / false means the user has to add the record at their own DNS provider before verify will succeed."New value: +"True when the verification TXT was written automatically (domain registered through VibeDeploy): call verify_custom_domain right away. Otherwise the user adds the record at their DNS provider first."
    • changedOutput schema / properties / verificationRecord / properties / name / description
      Previous value: -"DNS record name to add (e.g. '_vibedeploy.tester.subsite.site')."New value: +"DNS record name to add (e.g. '_vibedeploy.shop.example.com')."
  4. Changed1 schema field changed
    • removedOutput schema / properties / request_id
      Removed value: -{
      -  "description": "Server-assigned request correlation id. Quote it when contacting support.",
      -  "type": "string"
      -}
  5. Changed1 schema field changed
    • addedOutput schema / properties / request_id
      Added value: +{
      +  "description": "Server-assigned request correlation id. Quote it when contacting support.",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / siteName / description
      Previous value: -"The vibedeploy.be site name to attach the domain to (e.g. 'tester')."New value: +"The VibeDeploy site name to attach the domain to (e.g. 'tester')."
  7. First observed

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag idempotentHint=true and destructiveHint=false, but the description adds real substance: the idempotency key (same siteName + domain returns the existing record), DNS propagation timing (minutes up to 24h), automatic re-checking for a few days, and an email notification on success. That is exactly the operational context an agent cannot get from the annotation block.

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

Conciseness5/5

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

Three sentences, front-loaded with the action and return payload, then behavior, then sequencing/prerequisite. No sentence is filler; timing and idempotency details are compactly packed.

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

Completeness5/5

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

For a two-parameter, non-destructive mutation with an output schema, the description covers the remaining burden: what is produced, how long it takes, what the caller does next, and what must exist beforehand. Return-value shape is delegated correctly to the output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented as domain FQDN and site name. The description reinforces that the domain is user-owned and must be pointed at their DNS provider, but adds no format, validation, or edge-case detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Start attaching a user-owned domain to an existing site') and immediately says what the call returns: the DNS routing record plus ownership TXT record. The title's 'step 1 of 2' framing plus the named follow-up make it unmistakable versus verify_custom_domain or check_domain_availability.

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

Usage Guidelines5/5

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

Gives explicit when-to-use and sequencing: publish the records, then call verify_custom_domain with the returned recordId. It also names the prerequisite ('The site must already exist; call deploy_site first if it does not') and the alternative path when the site is missing.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.