Servidor MCP

Última atualização: 2026-09-08

O hdply traz um servidor MCP embutido. Qualquer cliente MCP — Claude Code, Claude Desktop ou o seu próprio agente — pode listar seus sites, criar um, ler o HTML que está no ar, publicar uma nova versão e consultar o histórico de deploys. Cinco ferramentas, uma chave de API, nada para rodar localmente.

Seguro para entregar a um agente

Não existe ferramenta de exclusão. Remover um site só é possível pelo console web, de propósito. Um agente com todos os direitos de deploy pode publicar uma versão ruim, mas não consegue destruir seu trabalho.

Todo deploy — humano ou agente — fica versionado. Um deploy errado é restaurado com um clique no console, e get_deploy_history mostra exatamente quais deploys vieram pelo MCP ("source": "mcp"). Essa é a diferença para um MCP de deploy genérico: o hdply se limita a um arquivo HTML por site, então o pior caso é uma página que fica feia por um minuto.

O caso de uso principal

O Claude escreve uma página para você — uma proposta, um dashboard, um mockup — como artefato HTML. Em vez de salvar o arquivo e subir em algum lugar, você diz "publica isso" e a mesma conversa termina com uma URL pública para enviar. Depois, "muda o título e republica" é mais um único turno.

Conectar

Claude Code, um comando:

claude mcp add --transport http hdply https://api.app.hdply.com/mcp \
  --header "Authorization: Bearer hdply_sk_…"

Claude Desktop, em claude_desktop_config.json (via mcp-remote, já que o Desktop só executa comandos locais):

{
  "mcpServers": {
    "hdply": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.app.hdply.com/mcp",
               "--header", "Authorization: Bearer hdply_sk_…"]
    }
  }
}

Qualquer outro cliente: é um endpoint Streamable HTTP sem estado. Envie JSON-RPC para a URL abaixo com o mesmo cabeçalho bearer.

POST https://api.app.hdply.com/mcp
Authorization: Bearer hdply_sk_…
Content-Type: application/json

{"jsonrpc": "2.0", "id": 1, "method": "tools/list"}

A chave vem do painel do console (card "API key"). Ela aparece uma única vez e dá acesso a todos os sites da conta — trate como uma senha.

Ferramentas

Cada ferramenta recebe um objeto JSON e devolve conteúdo em texto. Erros voltam como texto com isError: true, nunca como falha de transporte, para que o agente leia o motivo e tente de novo.

list_sites

Todos os sites que você pode gerenciar, pessoais e de equipe, com a URL no ar e se há algo publicado. Sem argumentos.

Exemplo de chamada

{ "name": "list_sites", "arguments": {} }

Resultado

[
  {
    "id": 42,
    "name": "Q3 proposal",
    "subroute": "k3v9x2m7q1",
    "url": "https://k3v9x2m7q1.hdply.com",
    "live": true
  },
  {
    "id": 43,
    "name": "Launch page",
    "subroute": "launch",
    "url": "https://launch.hdply.com",
    "live": false,
    "team_id": 7,
    "team_name": "Design"
  }
]

create_site

Cria um site. Com html ele está no ar assim que a chamada retorna, em um subdomínio aleatório atribuído pelo servidor; sem, o site existe vazio até deploy_site.

Entrada

{
  "html":    string   // optional — full HTML document, max 1 MB; live immediately when given
  "name":    string   // optional — falls back to the HTML <title>
  "team_id": number   // optional — create inside a team (0 = personal)
}

Exemplo de chamada

{
  "name": "create_site",
  "arguments": {
    "html": "<!doctype html><html><head><title>Q3 proposal</title></head><body><h1>Q3 proposal</h1></body></html>"
  }
}

Resultado

Site "Q3 proposal" live at https://k3v9x2m7q1.hdply.com (id 42, subroute k3v9x2m7q1)

get_site_html

O HTML que os visitantes recebem agora. Leia antes de editar para que o agente altere o que está realmente no ar, não o que ele lembra.

Entrada

{
  "site": string   // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}

Exemplo de chamada

{ "name": "get_site_html", "arguments": { "site": "k3v9x2m7q1" } }

Resultado

<!doctype html><html><head><title>Q3 proposal</title>…

deploy_site

Publica HTML novo em um site existente. No ar quando a chamada retorna, versionado como qualquer deploy e marcado mcp no histórico.

Entrada

{
  "site": string   // required — numeric project id or subdomain
  "html": string   // required — full HTML document, max 1 MB
}

Exemplo de chamada

{
  "name": "deploy_site",
  "arguments": {
    "site": "k3v9x2m7q1",
    "html": "<!doctype html>…"
  }
}

Resultado

Deployed. Live at https://k3v9x2m7q1.hdply.com

get_deploy_history

O histórico de deploys: quem, quando, qual tamanho e por qual caminho (web, api, mcp, restore). Mais recente primeiro.

Entrada

{
  "site": string   // required — numeric project id ("42") or subdomain ("k3v9x2m7q1")
}

Exemplo de chamada

{ "name": "get_deploy_history", "arguments": { "site": "k3v9x2m7q1" } }

Resultado

[
  {
    "id": 918,
    "size": 4812,
    "hash": "3f9c1a7b2d4e6f80",
    "source": "mcp",
    "actor_email": "you@example.com",
    "created_at": "2026-09-08T09:41:12Z"
  },
  {
    "id": 902,
    "size": 4790,
    "hash": "b81e0c5d9a2f4711",
    "source": "web",
    "actor_email": "you@example.com",
    "created_at": "2026-09-07T18:02:55Z"
  }
]

Erros

Erros de ferramenta são resultados comuns com isError: true. O texto começa com um código estável quando existe: file_too_large (acima de 1 MB), project_limit (limite do plano atingido), site not found. Os únicos erros no nível HTTP são os de autenticação (401).

{ "content": [{ "type": "text", "text": "file_too_large: html exceeds the 1MB size limit" }], "isError": true }

Limites

Descoberta

O servidor se descreve em duas URLs sem autenticação: um server card com a lista de ferramentas e esquemas ao vivo, e o manifesto usado nos diretórios MCP.

https://api.app.hdply.com/.well-known/mcp/server-card.json   # tools + schemas, live
https://api.app.hdply.com/.well-known/mcp/server.json        # registry manifest (com.hdply/hdply)

Prefere HTTP simples? As mesmas operações existem como API REST, e hdply.com/llms.txt resume as duas para agentes.