
Dois Servidores MCP, Uma Conversa: Reconciliação de Métricas de Anúncios com Resultados de Formulários Sem um Painel
Há um tipo particular de trabalho que nunca vive em um só lugar. Você executa anúncios em uma tela. Você coleta respostas de formulários em outra. Para saber se um clique barato realmente se tornou um registro, você copia um número do painel de anúncios, abre o administrador do formulário e reconcilia manualmente. Os dois sistemas não sabem um sobre o outro, então um humano se torna a camada de junção.
Por oito dias, testei se essa junção poderia sair da minha cabeça e entrar em uma única conversa. A configuração: dois servidores MCP conectados ao mesmo cliente de IA. Um é um conector do lado do anúncio que retorna as métricas da campanha em execução. O outro é o conector do FORMLOVA, que retorna os resultados do formulário. MCP — o Protocolo de Contexto do Modelo — é a porta compartilhada através da qual um cliente de IA se conecta com segurança a um serviço externo. Com ambas as portas abertas em uma conversa, o LLM pode puxar de um lado, puxar do outro e fundir os resultados na mesma vez.
Este artigo é sobre o padrão de design que torna essa fusão limpa e sobre uma descoberta honesta que surgiu disso.
A mudança: quem realiza a junção
Quando você conecta dois produtos SaaS da maneira tradicional, um deles geralmente precisa saber sobre o outro. Você constrói um conector dentro do produto A que chama a API do produto B, mapeia os campos e armazena o resultado combinado. Esse conector é uma responsabilidade de manutenção e incorpora o modelo de dados de um fornecedor no de outro.
O MCP permite que você pule isso. Se ambos os produtos expõem servidores MCP, um cliente de IA pode se conectar a ambos ao mesmo tempo. O cliente se torna o orquestrador. Ele lê do servidor do lado do anúncio, lê do servidor do lado do formulário e realiza a junção ele mesmo, na conversa, no momento em que o usuário pergunta.
Isso reformula o que cada servidor deve retornar. Um servidor não precisa mais atravessar a fronteira e buscar os dados do outro serviço para ser útil. Ele só precisa retornar seus próprios dados, com precisão, em uma forma que o cliente possa alinhar contra outra fonte. A junção não é trabalho do servidor. A junção é trabalho do cliente.
A documentação do FORMLOVA declara essa fronteira de responsabilidade explicitamente. O trabalho do FORMLOVA é fornecer dados precisos e tornar claras as formas de entrada/saída de suas ferramentas. O trabalho do LLM é orquestrar entre vários servidores MCP e confirmar etapas sensíveis com o usuário. O trabalho do serviço conectado é aceitar e armazenar. Nenhum código de conector vive dentro do FORMLOVA para cada serviço externo que ele possa ser emparelhado. A definição da ferramenta é o contrato; se for boa, o LLM cuida do resto.
Uma ferramenta que retorna uma fonte, de propósito
A expressão concreta dessa fronteira é a ferramenta de atribuição de anúncios do lado do FORMLOVA. Seu trabalho é estreito e deliberado: quebrar as respostas do formulário por ID de anúncio, fonte UTM e campanha, e retornar visualizações, contagens de respostas e taxa de conversão por anúncio. Isso é tudo. Ela não chama a plataforma de anúncios. Não sabe os gastos, impressões ou contagens de cliques da plataforma de anúncios. Retorna os próprios dados do FORMLOVA, organizados de uma forma que outra fonte possa ser alinhada.
Conceitualmente, a ferramenta retorna linhas como esta:
// Ferramenta de atribuição de anúncios do FORMLOVA: fonte única, organizada por id de anúncio.
// Retorna a verdade do lado do formulário e NADA da plataforma de anúncios.
type AdAttributionRow = {
adId: string; // chave de junção contra o MCP do lado do anúncio
utmSource: string;
campaign: string;
views: number; // contagem de visualizações do lado do formulário
responses: number; // contagem de respostas do lado do formulário
cvr: number; // respostas / visualizações, apenas do lado do formulário
};
async function getFormAdAttribution(userId: string, formId: string): Promise<AdAttributionRow[]> {
// Verificação de propriedade primeiro; a ferramenta só vê os dados deste usuário.
const access = await checkFormAccess(formId, userId, { requiredRole: "viewer" });
if (!access.ok) return [];
// Agrega os dados de resposta do FORMLOVA por id de anúncio.
// Não há fetch() para a plataforma de anúncios em nenhum lugar aqui.
return aggregateResponsesByAdId(formId, userId);
}
A coisa que vale a pena notar é a ausência. Não há chamada HTTP para a plataforma de anúncios dentro deste manipulador. A ferramenta é intencionalmente incompleta por si só. Retorna metade de uma imagem e confia que o cliente fornecerá a outra metade de um servidor MCP diferente.
Isso parece errado se seu instinto é "uma ferramenta deve responder a toda a pergunta do usuário." Mas a pergunta inteira aqui — este anúncio produziu resultados, e a que custo? — abrange dois serviços. Se o FORMLOVA tentasse respondê-la sozinho, teria que incorporar um conector da plataforma de anúncios, manter credenciais para isso, acompanhar suas mudanças de API e reimplementá-lo para cada plataforma de anúncios que um usuário pudesse executar. Em vez disso, retorna a única fonte que possui com certeza e deixa a junção acontecer onde ambas as fontes já estão em escopo: a conversa.
Como a junção se parecia ao longo de oito dias
Aqui está como as duas metades se juntaram na prática.
A primeira metade veio do MCP do lado do anúncio. Um único pedido simples na conversa retornou as métricas padrão. Ao longo de oito dias, a campanha gastou ¥6.597, com 5.578 impressões, um alcance de 3.065, uma frequência de 1,82, 704 cliques, um CTR de 12,62%, um CPM de ¥1.183 e um CPC que o administrador arredonda para ¥9 — divida o gasto pelos cliques e o número real é cerca de ¥9,4. O gasto foi entregue de forma constante, aproximadamente na faixa de ¥570 a ¥1.080 por dia.
Tomados isoladamente, esses números parecem bons. Um CTR de 12,62% é alto para um anúncio de inscrição. Um CPC de ~¥9,4 é barato. Mas os números do lado do anúncio não podem me dizer o que aqueles cliques se tornaram. Esse é todo o ponto da fronteira: o MCP do anúncio termina em "cliques recebidos."
A segunda metade veio do MCP do FORMLOVA, na mesma conversa. Eu troquei conectores — mesma conversa, porta diferente.
A integração de servidores MCP pode otimizar processos para empresas brasileiras, permitindo uma análise mais eficiente de campanhas publicitárias e resultados de formulários. Isso reduz a dependência de integrações complexas e melhora a agilidade na tomada de decisões.


