Servidor MCP do VoiceBooker
O servidor MCP (Model Context Protocol) do VoiceBooker permite que um cliente de IA compatível gerencie os recursos VoiceBooker do utilizador autenticado. É possível consultar e editar bots e stages, configurar contas SIP e investigar o histórico de chamadas sem criar uma integração REST separada.
Adicionar o servidor
O servidor usa MCP Streamable HTTP e está disponível em:
https://voicebooker.de/app/api/v1/mcpCada solicitação deve incluir um token de API do VoiceBooker no cabeçalho X-API-TOKEN:
X-API-TOKEN: <seu-token-de-api>O token define o contexto da empresa; recursos de outras empresas não podem ser lidos ou alterados. Compartilhe o token apenas com o cliente MCP necessário e não o coloque em configurações compartilhadas.
Exemplo de configuração JSON:
{
"mcpServers": {
"voicebooker": {
"url": "https://voicebooker.de/app/api/v1/mcp",
"headers": { "X-API-TOKEN": "<seu-token-de-api>" }
}
}
}Dependendo do cliente, o campo pode se chamar headers, httpHeaders ou ser definido por uma variável de ambiente. Reconecte o cliente depois de salvar a configuração para que ele descubra as ferramentas.
Usar o servidor
Os campos de ID dos recursos usam camelCase nos schemas e nas respostas MCP: botId, stageId, botStageId, sharedBotId e callSessionId.
O servidor retorna IDs para os seus recursos. Reutilize-os exatamente como foram retornados. Para inspecionar um bot, use list_bots e depois list_stages com o ID do bot: os stages contêm os prompts, ferramentas, funções e o comportamento real. Leia todos os stages antes de fazer alterações.
Para investigar uma conversa, use primeiro list_call_history e depois get_trace_conversation com o ID da sessão retornado. O trace contém turnos, estado, stack e chamadas de funções ou webhooks.
Ferramentas disponíveis
Bots e stages
| Ferramenta | Função |
|---|---|
list_bots | Lista os contêineres de bots. |
create_bot | Cria um contêiner com um stage Welcome. name é obrigatório; settings, initial_state, wizard e editable_keys são opcionais. |
update_bot | Altera os metadados sem substituir o comportamento dos stages. botId é obrigatório. |
get_bot_definition | Retorna a definição completa do bot, incluindo stages, prompts, ferramentas, funções e metadados do fluxo. botId é obrigatório. |
update_bot_definition | Substitui a definição completa do bot após a validação. botId e definition são obrigatórios; expectedVersion evita sobrescritas e dryRun: true valida sem salvar. |
delete_bot | Exclui ou oculta um bot; bots com stages ficam ocultos. |
list_bot_snapshots | Lista os snapshots versionados de um bot, do mais recente ao mais antigo. botId é obrigatório. |
create_bot_snapshot | Salva a definição e os stages atuais como uma nova versão. botId é obrigatório; message é opcional. |
restore_bot_snapshot | Restaura um snapshot e cria primeiro um backup automático. botId e snapshotId são obrigatórios. |
diff_bot_snapshots | Compara as definições completas de dois snapshots. botId, fromSnapshotId e toSnapshotId são obrigatórios. |
list_stages | Lista todos os stages ordenados de um bot. botId é obrigatório. |
create_stage | Cria um stage ligado a um bot. botId e name são obrigatórios. |
update_stage | Altera um stage e sua configuração por bot. botId e stageId são obrigatórios. |
delete_stage | Remove um stage do fluxo. botId e stageId são obrigatórios. |
prompt e tools têm, cada um, seu próprio modo de execução. As opções settings.promptExec e settings.toolsExec são independentes e afetam apenas o campo correspondente:
- Se
promptExecestiver ausente ou forfalse,promptserá processado como texto Liquid e enviado ao LLM como mensagem do sistema. CompromptExec: true,promptdeve conter JavaScript definindoprompt(params). A função deve retornar um objeto:{ prompt: "..." }cria uma mensagem do sistema usada pelo LLM na próxima resposta, enquanto{ text: "..." }cria uma mensagem direta do assistente, retornada sem alterações. Se os dois campos forem retornados, somentepromptserá usado. - Se
toolsExecestiver ausente ou forfalse, um valortoolsnão vazio deve ser uma string JSON que seja convertida em um array de ferramentas de função compatíveis com OpenAI. Cada ferramenta local também precisa de um handler com o mesmo nome emfunctions; uma função presente apenas emfunctionsnunca é executada automaticamente. ComtoolsExec: true,toolsdeve conter JavaScript definindotools(params), e a função deve retornar{ tools: [...] }; retornar o array diretamente é inválido. Ferramentas geradas dinamicamente também precisam de handlers com o mesmo nome emfunctions. - Os dois campos podem usar modos diferentes. Por exemplo, um
promptJavaScript com ferramentas JSON estáticas ou umpromptLiquid com ferramentas JavaScript geradas dinamicamente são válidos. Apenas a mistura de formatos dentro do mesmo campo é proibida:promptnão pode conter texto Liquid e uma função JavaScript ao mesmo tempo, etoolsnão pode conter uma string JSON e código JavaScript ao mesmo tempo.
Em um handler de ferramenta, data é enviado ao LLM como resultado da ferramenta para que ele formule a próxima resposta. text é retornado diretamente como fala do assistente, sem alterações. Se ambos forem retornados, data terá precedência e text não será enviado diretamente.
list_stages também retorna botEngine: lightweight usa JavaScript síncrono com api() e webhook; extendedNodeJs usa JavaScript baseado em Promises e permite fetch. Um settings.packageJson não nulo ativa extendedNodeJs; ausente ou nulo ativa lightweight. Não use async, await, fetch, Promise, import ou require no motor leve.
Os nomes dos stages diferenciam maiúsculas e minúsculas. settings.initialStages define o stack inicial. O código do prompt pode mudar de stage retornando o stack atualizado:
function prompt(params) {
params.stack.push("Booking");
return { state: params.state, stack: params.stack, prompt: "Peça a data da reserva." };
}Uma ferramenta pode mudar de stage com transitionTo: "Booking"; dropStage: true remove o stage atual antes do handler. Ferramentas dinâmicas usam function tools(params) { return { tools: [...] }; } e cada ferramenta local precisa de um handler com o mesmo nome em functions. toolsState/toolsStack aplicam-se a tools(params); state/stack ao seu handler.
Use wizard para assistentes simples de um único stage. Para fluxos avançados ou multi-stage, crie ou altere os stages separadamente.
Testes de bots
As ferramentas de teste de bots gerem configurações para dois bots diferentes da empresa autenticada. O bot de origem
inicia a conversa e o bot de destino responde. As respostas usam a estrutura pública com srcBotId e destBotId.
| Ferramenta | Função |
|---|---|
list_bot_tests | Lista os testes de bots da empresa autenticada. |
create_bot_test | Cria um teste. name, srcBotId e destBotId são obrigatórios; settings é opcional. |
update_bot_test | Atualiza um teste. id é obrigatório e os campos omitidos são mantidos. |
delete_bot_test | Elimina um teste. id é obrigatório. |
settings pode incluir convInitBot, maxConvTurns, asCall, startTimeout e stateUpdate. Ambos os bots devem
estar visíveis, pertencer à empresa autenticada e ser diferentes.
Contas SIP
| Ferramenta | Função |
|---|---|
list_sip_accounts | Lista contas usadas para registro, roteamento, webhooks e transferências. include_inactive é true por padrão. |
create_sip_account | Salva uma conta SIP editável e atualiza o registro do connector; não compra nem provisiona um número. |
update_sip_account | Atualiza uma conta preservando campos não informados; id é obrigatório e as configurações são mescladas. |
delete_sip_account | Exclui contas editáveis. Contas gerenciadas pelo sistema são desregistradas com register: false. |
As senhas SIP são somente para escrita e nunca são retornadas. Ao atualizar, omitir uma senha preserva a existente; uma string vazia a remove.
Histórico e traces
| Ferramenta | Função |
|---|---|
list_call_history | Pesquisa sessões telefônicas e de chat. Todos os parâmetros são opcionais: botId, start, end_date, call, limit e offset. Sem parâmetros, pesquisa todos os bots. |
get_trace_conversation | Retorna turnos e eventos de trace de uma sessão. callSessionId é obrigatório e limit tem máximo de 1000. |
list_call_webhook_events | Retorna os eventos completos persistidos de webhook e JavaScript de uma sessão, incluindo headers, corpos, erros, URLs e tempos. callSessionId é obrigatório; limit tem máximo de 1000. |
get_trace_conversation inclui chamadas webhook resumidas como fsCalls. Use list_call_webhook_events para obter os detalhes completos. Conversas sujeitas a retenção de dados são excluídas e filtros de APIs ocultas são aplicados.