DoDomain MCP
Conecte os domínios personalizados dos clientes ao seu produto: configuração de DNS guiada, verificação e certificados, gerenciados pelo DoDomain. Servidor remoto com login via OAuth.
Servidor MCP hospedado
npx add-mcp 'https://app.dodomain.io/api/mcp'Instala no Claude Code, Codex, Cursor e outros
Documentação
Servidor MCP remoto do DoDomain — uma única URL, login com OAuth 2.1 e oito ferramentas com escopo para verificar domínios e executar sessões de conexão.
O DoDomain disponibiliza um servidor MCP (Model Context Protocol) remoto, para que assistentes e agentes de IA — Claude, agentes de codificação, qualquer coisa que fale MCP — possam verificar o provedor de DNS de um domínio, criar uma sessão de conexão, entregar ao seu usuário o link de conexão hospedado e verificar o DNS, usando a mesma API REST e permissões que sua integração já possui.
Uma única URL, nada mais para configurar
O servidor está disponível em:
https://app.dodomain.io/api/mcp
Deixe seu agente de codificação se configurar sozinho
Cole esta frase no Claude Code, Codex, Cursor, OpenCode ou GitHub Copilot. O agente busca as instruções de configuração do DoDomain, adiciona este servidor, instala o SDK para sua stack e verifica o resultado:
Fetch and execute the appropriate instructions to set me up for DoDomain from https://dodomain.io/agent-setup/prompt.md
Os mesmos comandos, uma página por agente, estão em dodomain.io/agent-setup. A configuração manual para cada cliente vem a seguir.
Como funciona o login
Ele fala Streamable HTTP (sem estado) e autentica com OAuth 2.1 — PKCE mais registro dinâmico de clientes — publicando os documentos de descoberta padrão (RFC 9728 protected-resource e RFC 8414 authorization-server metadata). Clientes MCP encontram o servidor de autorização, registram-se e iniciam o fluxo de login automaticamente. Você adiciona a URL, faz login com sua conta DoDomain e aprova os escopos solicitados na página de consentimento. Sem chaves de API, sem configuração manual de cliente.
Claude Code
claude mcp add --transport http dodomain https://app.dodomain.io/api/mcp
Inicie uma nova sessão, execute /mcp, escolha dodomain e selecione Authenticate.
Codex
codex mcp add dodomain --url https://app.dodomain.io/api/mcp
codex mcp login dodomain
Cursor
Adicione o servidor a ~/.cursor/mcp.json (todos os projetos) ou .cursor/mcp.json (um projeto), mesclando em mcpServers se o arquivo existir:
{
"mcpServers": {
"dodomain": {
"url": "https://app.dodomain.io/api/mcp"
}
}
}
OpenCode
Adicione o servidor a opencode.json na raiz do projeto (ou ~/.config/opencode/opencode.json) e faça login:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dodomain": {
"type": "remote",
"url": "https://app.dodomain.io/api/mcp",
"enabled": true
}
}
}
opencode mcp auth dodomain
GitHub Copilot (VS Code)
Adicione o servidor a .vscode/mcp.json, inicie-o a partir de MCP: List Servers e faça login quando o VS Code solicitar:
{
"servers": {
"dodomain": {
"type": "http",
"url": "https://app.dodomain.io/api/mcp"
}
}
}
Claude.ai (conector personalizado)
No aplicativo web ou desktop do Claude, abra Settings → Connectors → Add custom connector e cole a URL acima como a URL do servidor MCP remoto. O Claude guia você pelo login e pela tela de consentimento do DoDomain, e as ferramentas aparecem nas suas conversas.
Qualquer cliente MCP
Qualquer cliente que suporte servidores MCP remotos via Streamable HTTP com OAuth funciona da mesma forma — MCP Inspector, configurações de conector do ChatGPT ou seu próprio agente construído com um SDK MCP. A URL é a única configuração.
As oito ferramentas
Cada ferramenta chama a mesma superfície REST /api/v1 documentada na referência da API, nos times que você escolheu ao aprovar a conexão (veja Times). Nenhuma é destrutiva — nada que um agente possa chamar exclui aplicativos, conexões ou registros de DNS.
| Ferramenta | O que faz | Escopo | Acesso |
|---|---|---|---|
check_domain | Pré-valida um domínio antes de conectá-lo: qual provedor de DNS o gerencia, a zona registrável, o nível de conexão que seu provedor suporta (um clique, Domain Connect ou manual guiado; os níveis de um clique precisam de uma sessão Pro ou Scale), nameservers e um guia de configuração específico do provedor. | domains:read | Somente leitura |
list_teams | Lista os times que esta conexão pode usar — id e nome. A fonte do teamId que as outras ferramentas recebem quando a conexão cobre mais de um time. | teams:read | Somente leitura |
list_apps | Lista os aplicativos do seu time — id, nome, chave pública (widget), flag de sandbox. Nunca retorna chaves secretas. A fonte do appId que outras ferramentas recebem. | apps:read | Somente leitura |
list_connections | Lista conexões de domínio verificadas e sua saúde de DNS em tempo real (ativa vs. quebrada), filtrável por aplicativo ou domínio. | connections:read | Somente leitura |
get_connect_session | Busca o estado de uma sessão de conexão pelo token: domínio, registros de DNS solicitados, status, provedor detectado, expiração. Faça polling para ver se o usuário final concluiu. | sessions:read | Somente leitura |
create_connect_session | Inicia uma sessão de conexão para um domínio. Retorna um connectUrl que o agente entrega ao seu usuário final para concluir a configuração de DNS no navegador, além do fqdn composto onde cada registro será verificado. Recusado com quota_exceeded no limite mensal; no Free, o limite é compartilhado entre os times Free dos proprietários e sessões não concluídas contam contra ele (veja Limites de taxa e preços). | sessions:write | Gravação |
verify_connect_session | Dispara uma verificação de DNS ao vivo dos registros esperados de uma sessão contra nameservers autoritativos. Quando todos os registros correspondem, a conexão é finalizada e webhooks são disparados. | sessions:write | Gravação |
reverify_connection | Enfileira uma reavaliação de saúde de DNS sob demanda de uma conexão existente. O resultado chega de forma assíncrona como um webhook connection.verified / connection.failed e no painel. | connections:write | Gravação |
Escopos e consentimento
O acesso é limitado por escopo. Quando um cliente se conecta, a página de consentimento lista exatamente o que foi solicitado, e o token que ele recebe carrega apenas os escopos que você aprova. A lista de ferramentas que um agente vê é filtrada pelos escopos concedidos — um cliente com apenas escopos de leitura nunca vê nem create_connect_session.
Estes são os sete escopos, redigidos como a tela de consentimento os apresenta:
| Escopo | Concede |
|---|---|
domains:read | Verificar qual provedor de DNS gerencia um domínio e como ele pode se conectar |
apps:read | Listar os aplicativos do seu time |
connections:read | Listar conexões de domínio verificadas |
connections:write | Solicitar re-verificação de uma conexão existente |
sessions:read | Ler o status de sessões de domain-connect |
sessions:write | Criar sessões de domain-connect e disparar verificação de DNS |
teams:read | Ver quais dos seus times esta conexão pode usar |
Times
Se você pertence a mais de um time DoDomain, a tela de consentimento pergunta quais times a conexão pode usar: os times que você marcar (seu time atual já vem marcado), ou Todos os meus times, que também cobre times que você entrar depois. A conexão pode agir em um time apenas enquanto você ainda for membro dele; ao sair de um time, a conexão o perde na próxima solicitação. Se você voltar a um time ao qual a conexão foi concedida, ela pode usá-lo novamente; para impedir isso, desconecte o cliente (painel, Aplicativos conectados) ou conecte-o novamente sem esse time. Para alterar os times depois, conecte o cliente novamente e escolha de novo: a nova escolha substitui a antiga para toda a conexão, incluindo os tokens de acesso que o cliente já possui.
Quando uma conexão cobre mais de um time, o agente informa para qual time cada chamada é feita. list_teams retorna os times que pode usar, e as ferramentas que leem ou gravam dados do time (check_domain, list_apps, list_connections, create_connect_session, reverify_connection) aceitam um teamId opcional. Com mais de um time, uma chamada sem teamId é recusada com TEAM_REQUIRED (exceto check_domain, cuja resposta não depende do time), e uma chamada nomeando um time que a conexão não pode usar é recusada com TEAM_NOT_FOUND; ambas listam os times utilizáveis. Com um único time, teamId pode ser omitido.
Via REST, a mesma escolha é o cabeçalho DoDomain-Team (um id de time de GET /api/v1/teams); veja a referência da API. Uma chave secreta (dd_sk_) pertence a exatamente um time, então não precisa de cabeçalho, e um cabeçalho nomeando qualquer outro time é recusado com 404 TEAM_NOT_FOUND.
Revogando acesso
Cada cliente conectado está listado no painel em Aplicativos conectados. Revogar um tem efeito imediato: tanto o token de acesso quanto o de atualização param de funcionar na próxima solicitação.
Limites de taxa e preços
O acesso MCP está incluído em todos os planos — não há SKU separado. As solicitações usam os mesmos medidores por minuto do plano que a API REST (Free 60, Pro 300, Scale 1.200 solicitações/min por time), e a cota mensal de conexões é medida de forma idêntica ao REST: criar uma sessão não custa nada, e uma unidade é cobrada quando um domínio é verificado pela primeira vez. create_connect_session é recusado com quota_exceeded exatamente quando o endpoint REST recusaria: em todos os planos quando o limite mensal do time é atingido, e no Free também quando os times Free de qualquer um dos proprietários deste time juntos o atingem, ou quando suas sessões não concluídas atingem o que resta do mês mais 10 (veja Preços).
Segurança
Chamadas MCP autenticam exclusivamente com OAuth 2.1: PKCE em todos os fluxos, tokens de acesso de curta duração e atualização apenas para clientes que receberam essa permissão no consentimento. Suas chaves secretas dd_sk_ nunca são expostas a agentes — o endpoint MCP não as aceita. As concessões são por usuário, por cliente, limitadas por escopo e revogáveis instantaneamente pelo painel.
[
Testando sua integração
Conduza o fluxo de conexão hospedado a partir da sua própria suíte Playwright — o caminho de automação suportado, o que precisa de DNS real e como validar o resultado sem um.
](https://dodomain.io/docs/testing-your-integration)[
Preços
Free, Pro e Scale — o que cada plano inclui e como funcionam as cotas.