Liga o cliente ao MCP da Ockto em https://mcp.ockto.ai/mcp, com OAuth 2.1 e escopos granulares, sem gravar token, e cobre canais, templates, chat bubble e link direto.
Install
npx skillscat add ocktoai/ockto-plugins/conectar Install via the SkillsCat registry.
Conectar a Ockto
Servidor: https://mcp.ockto.ai/mcp. Transporte Streamable HTTP, stateless.
Não peça client id, client secret nem access token. Não grave credencial em arquivo, header de mcp.json ou variável do plugin. O cliente descobre o Authorization Server e registra o próprio cliente.
Descoberta
- Protected Resource Metadata:
https://mcp.ockto.ai/.well-known/oauth-protected-resource/mcp. - O documento aponta
authorization_serversparahttps://api.ockto.ai. - Metadata do Authorization Server:
https://api.ockto.ai/.well-known/oauth-authorization-server, com registro dinâmico de cliente (DCR). - Na tela de consentimento o membro escolhe a organização. O papel dele na organização limita os escopos que podem ser concedidos.
Deixe client id e client secret em branco.
Onde informar a URL
- Cursor: Customize, servidor MCP com essa URL, ou o plugin
ockto. - Claude Code:
claude mcp add --transport http ockto https://mcp.ockto.ai/mcp, ou o plugin. - Claude.ai, Cowork e Claude Desktop: Customize → Connectors → Add custom connector. Em plano Team ou Enterprise, um Owner adiciona antes em Organization settings → Connectors → Add → Custom → Web.
- ChatGPT: Developer mode em Settings → Security and login, depois ChatGPT Plugins → + com nome, descrição e
https://mcp.ockto.ai/mcp. Crie a conexão e conclua o OAuth. O developer mode depende do plano e da política do workspace. - Gemini CLI: a extensão usa
httpUrl. O CLI faz o OAuth na conexão. Não declare API key emsettings.
Escopos
leads:read leads:write leads:deletejourneys:read journeys:write journeys:deleteassistants:read assistants:write assistants:deletebusinesses:read businesses:write businesses:deleteautomations:read automations:write automations:activate automations:deleteconversations:read conversations:write integrations:read integrations:write analytics:read billing:read organization:readpages:read pages:write pages:publish pages:deletepixels:read pixels:write pixels:delete domains:read
Cada ferramenta exige o escopo dela. Sem esse escopo a chamada é recusada. Escopo não substitui a permissão do membro.
pages:read, pages:write, pages:publish, pages:delete, pixels:read, pixels:write, pixels:delete e domains:read só entram num consentimento novo, como integrations:write, billing:read, conversations:write e organization:read. Chat bubble e link direto usam integrations:read e integrations:write. Quem já conectou não recebe escopo novo na renovação do token. Se a ferramenta não estiver na lista do cliente, ou a chamada responder insufficient_scope, reconecte o MCP e aceite esses escopos na tela de consentimento.
Canais e conexões
Estas ferramentas só leem e não devolvem credencial. pagina começa em 1, limite tem padrão 20 e teto 50. A resposta traz total, pagina, limite e tem_mais.
listar_integracoes(integrations:read) é a visão geral: canais (WhatsApp, Instagram, Messenger) e conexões de automação, com nome, provedor, status e identificador.buscaopcional.recorteopcional:canaisouconexoes.listar_canais(integrations:read; com status ao vivo, consulta a Meta) lista só canais de atendimento.provedor:whatsapp,instagram,facebook,meta(instagram e facebook),canaisoutodos(padrão). O registro traz funcionário e, no WhatsApp, a jornada padrão. Comconexao_ideprovedorwhatsappoutodos, o status ao vivo sai para a Graph API da Meta.obter_saude_canais(integrations:read) lê o status monitorado.conexao_idopcional restringe a uma conexão. Não força checagem externa.listar_templates_whatsapp(integrations:read) lista templates armazenados de uma conexão WhatsApp. Exigeconexao_id(delistar_canais). Não sincroniza com a Meta. Para buscar na Meta, usesincronizar_templates_whatsapp.listar_provedores_conexao(integrations:read) lista o catálogo de provedores (Slack, Jira, HTTP, banco). Não devolve id de conexão já criada.obter_conexao(integrations:read) detalha uma conexão de automação, sem credencial. Exigeconexao_iddelistar_integracoescomrecorteconexoes.
Valor mascarado *** (ou URL ://***@) não é o segredo. Não o reenvie para gravar por cima.
Confirmação em dois passos
A skill de cada ferramenta diz quando a primeira chamada só descreve. Entram aí responder_conversa, vincular_funcionario_canal, desvincular_funcionario_canal, criar_template_whatsapp, publicar_pagina, despublicar_pagina, criar_formulario_externo, atualizar_formulario_externo, criar_pixel, atualizar_pixel, associar_pixel_jornadas, criar_chat_bubble, atualizar_chat_bubble, criar_link_direto, atualizar_link_direto, ativar e reativar automação, importar contatos, sincronizar fonte de cérebro, resetar mapeamento de nó e as ferramentas de exclusão, remoção e desvínculo. sincronizar_templates_whatsapp, criar_pagina e atualizar_pagina não pedem código. O argumento codigo_confirmacao não entra no schema da ferramenta: o servidor acrescenta.
- Chame sem
codigo_confirmacao. A resposta descreve o efeito e devolve um código. - Mostre esse efeito ao usuário. Só então chame de novo com os mesmos argumentos e
codigo_confirmacaoigual ao código recebido. - O código expira em 120 segundos e vale uma vez. Qualquer argumento diferente invalida o código. Para obter outro, chame de novo sem
codigo_confirmacao.
Não invente o código e não reutilize código de outra ferramenta.
Funcionário do canal
Estas ferramentas trocam quem atende um canal já conectado. Conectar o canal, desconectar e token ficam no console (https://console.ockto.ai).
canal aceita whatsapp, instagram, facebook ou messenger. messenger é tratado como Facebook. canal_id é o id da conexão em listar_integracoes (no WhatsApp, o id da instância ou o connectionId). O funcionario_id sai de listar_funcionarios, da mesma organização. Id de outra organização, ou que a API responda 404 ou 403, recusa antes de gravar e devolve o aviso para usar listar_funcionarios.
vincular_funcionario_canal(integrations:write; repetir o mesmo funcionário não acumula). Exigecanal,canal_idefuncionario_id. Confirmação em dois passos. Semcodigo_confirmacaoa ferramenta só descreve: canal (nome, identificador e id), funcionário atual e funcionário novo, e o efeito na jornada. Mostre canal, atual e novo ao usuário e espere o ok. A segunda chamada repete os mesmos argumentos comcodigo_confirmacao. 120 segundos, uso único.
No WhatsApp com jornada padrão, a troca da etapa WhatsApp é tentativa. Se a sincronização der certo, a etapa passa a ter o funcionário novo como responsável e é criada se não existir. Se falhar, o vínculo do canal permanece e a etapa fica para o webhook. Sem jornada padrão, nenhuma etapa muda. No Instagram e no Facebook, só muda o funcionário vinculado ao canal.
desvincular_funcionario_canal(integrations:write, destrutiva; repetir não acumula). Tira o funcionário de IA. Exigecanalecanal_id. Não desconecta o canal. Confirmação em dois passos, no mesmo formato: a primeira chamada mostra canal, funcionário atual e o estado novo (nenhum funcionário de IA). Mostre canal, atual e novo ao usuário antes da segunda chamada, com os mesmos argumentos ecodigo_confirmacao. 120 segundos, uso único.
No WhatsApp, nas mensagens novas da instância o dono da conta fica responsável e a IA não responde. Com jornada padrão, a etapa WhatsApp deixa de ter responsável de IA só se a sincronização der certo; se falhar, a etapa fica para o webhook. Sem jornada padrão, nenhuma etapa muda. No Instagram e no Facebook, nenhum funcionário de IA responde o canal e conversas novas ficam com o dono da organização.
Templates de WhatsApp
sincronizar_templates_whatsapp(integrations:write; fala com a Meta; repetir converge). Busca os templates na Meta e atualiza a cópia local. Não cria nem apaga template na Meta e não pedecodigo_confirmacao. Exigecanal_iddo WhatsApp emlistar_integracoes(id da instância ou connectionId). A resposta trazid,nome,idioma,categoriaestatus. Sem corpo, componente nem e-mail. WhatsApp sem id de conexão para templates é recusado.criar_template_whatsapp(integrations:write; cada chamada pode criar outro; fala com a Meta). Cria o template e envia para revisão da Meta. Enquanto não for aprovado, não pode ser usado. Não exclui template e não envia o template a um contato.
Exige canal_id, nome, idioma (por exemplo pt_BR), categoria e corpo. categoria só aceita MARKETING ou UTILITY. Opcionais: cabecalho, rodape, exemplos (lista de textos das variáveis {{1}}, {{2}} do corpo) e botoes.
Botões: no máximo 3. Cada item tem tipo (QUICK_REPLY ou URL) e texto. URL exige url. Botão de URL não combina com outro botão. A API recusa nome acima de 40 caracteres, corpo acima de 1024, cabeçalho ou rodapé acima de 60, texto de botão acima de 25, URL acima de 2000 e mais de 20 exemplos. A confirmação mostra o nome enviado. A API grava minúsculas, sem acento, com espaço virando _.
Confirmação em dois passos. Sem codigo_confirmacao a ferramenta mostra canal, nome, idioma, categoria e o corpo entre aspas, mais cabeçalho, rodapé e botões quando houver, e avisa que o template vai para revisão da Meta. Mostre o corpo exato ao usuário e espere o ok. A segunda chamada repete os mesmos argumentos com codigo_confirmacao. 120 segundos, uso único.
Template aprovado é o caminho para falar com o cliente fora da janela de 24h. O envio do template na conversa fica no console (https://console.ockto.ai/chat). Excluir template também.
Chat bubble e link direto
Widgets de atendimento. Usam integrations:read e integrations:write, os mesmos escopos de canal e template. Não devolvem URL de mídia assinada. A resposta não traz o código para embutir nem o endereço público: copie no console (https://console.ockto.ai). O avatar do chat bubble também fica no console.
O funcionario_id vem de listar_funcionarios (skill funcionarios).
Chat bubble
listar_chat_bubbles(integrations:read, só lê). Sem argumento. Cada item trazid,nome,ativo,funcionario_id,nome_exibicao,tema,posicao,salvar_contatoedominios_permitidos.obter_chat_bubble(integrations:read, só lê). Exigebubble_id.criar_chat_bubble(integrations:write; cada chamada cria outro). Exigenome(até 200),funcionario_idenome_exibicao(até 200). Opcionais:mensagem_boas_vindas(até 1000; ao enviar, a boas-vindas fica ligada),tema(lightoudark),posicao(leftouright),salvar_contatoedominios_permitidos(lista de textos dos sites em que o widget pode aparecer; não é a lista delistar_dominios). Sem avatar. Confirmação em dois passos. Semcodigo_confirmacaoa ferramenta mostra o nome e o funcionário e avisa que o widget passa a poder ser embutido. Mostre isso ao usuário. A segunda repete os mesmos argumentos comcodigo_confirmacao. 120 segundos, uso único.atualizar_chat_bubble(integrations:write). Exigebubble_ide ao menos um campo entre os de criar eativo. Sem URL de mídia. Confirmação em dois passos. A segunda repete os mesmos argumentos comcodigo_confirmacao. 120 segundos, uso único.excluir_chat_bubble(integrations:write, destrutiva). O widget deixa de responder. Exigebubble_id. Confirmação em dois passos. Semcodigo_confirmacaoa ferramenta mostra o nome e avisa que o widget deixa de responder. A segunda repete o mesmobubble_idcomcodigo_confirmacao. 120 segundos, uso único.
Link direto
listar_links_diretos(integrations:read, só lê). Sem argumento. Cada item trazid,nome,ativo,funcionario_id,salvar_contato,coletar_nome,coletar_whatsappecoletar_email.obter_link_direto(integrations:read, só lê). Exigelink_id.criar_link_direto(integrations:write; cada chamada cria outro). Exigenome(até 200) efuncionario_id. Opcionais:salvar_contato,coletar_nome,coletar_whatsappecoletar_email. Confirmação em dois passos. Semcodigo_confirmacaoa ferramenta mostra o nome e o funcionário. A segunda repete os mesmos argumentos comcodigo_confirmacao. 120 segundos, uso único.atualizar_link_direto(integrations:write). Exigelink_ide ao menos um campo, inclusiveativo. Confirmação em dois passos. A segunda repete os mesmos argumentos comcodigo_confirmacao. 120 segundos, uso único.excluir_link_direto(integrations:write, destrutiva). O endereço deixa de abrir o chat. Exigelink_id. Confirmação em dois passos. Semcodigo_confirmacaoa ferramenta mostra o nome e esse efeito. A segunda repete o mesmolink_idcomcodigo_confirmacao. 120 segundos, uso único.
Fora do MCP
Não há ferramenta para isto. Mande o usuário ao console (https://console.ockto.ai):
- credencial, token, senha e fluxo de autorização OAuth
- upload de documento ou áudio para um cérebro
- teste de nó de automação
- SQL livre
- exportação em massa
- criar domínio, DNS, repetir a configuração e excluir domínio
- convite, papel, remoção de membro, conta, MFA e senha
- pagamento, fatura e troca de plano
- agente de biblioteca com visibilidade pública
- eventos de agenda
- super-admin
- conectar e desconectar canal, e o token desse canal
- excluir template de WhatsApp
- enviar template de WhatsApp na conversa (janela de 24h fechada)
- conteúdo HTML, CSS e JavaScript da página (o editor da Ockto)
- pixel manual com script
- avatar do chat bubble, o código para embutir e o endereço público do link direto
- anexo e mídia na conversa
Responder, transferir, atribuir, fechar, reabrir e marcar conversa como lida estão na skill conversas. Membros, limites do plano, saldo e extrato de créditos estão na skill organizacao. Páginas, formulários externos e leitura de domínios estão na skill paginas. Pixels de integração estão na skill pixels.