Medi MCP versus um CLI para busca de agentes. O MCP usou 17x mais tokens por chamada.
Rodei a mesma busca no Google pelo servidor serpapi-mcp oficial da SerpApi e pelo serp, o pequeno CLI open-source (MIT) que construí para a mesma tarefa. Antes de eu ter buscado qualquer coisa, o MCP já tinha colocado 771 tokens no contexto do modelo. O CLI colocou zero. Quando eu busquei, o MCP retornou 6.047 tokens e o CLI retornou 351. Mesma query, mesma biblioteca serpapi por baixo, mesma máquina.
Esse custo fixo, pago a cada turno, busque você ou não, é o número que ninguém coloca na demo. Então anotei tudo.
TL;DR: para busca stateless dentro de um loop de agente, um CLI custa aproximadamente 0 tokens fixos contra ~771 por turno de uma ferramenta MCP, e ~351 por chamada contra ~6.047. A lógica de compactação dos dois lados é idêntica; o CLI apenas corta para os campos que você pede e fica fora do contexto quando ocioso. Escolha o transporte que serve à chamada.
Custo fixo, pago a cada turno
| SerpApi MCP | CLI serp | |
|---|---|---|
| Schema da ferramenta em contexto, por turno | 771 tokens | ~0 (binário no PATH) |
| Metadados da skill | n/a | ~110 tokens, e só até disparar |
O MCP injeta o schema da sua ferramenta search, 771 tokens, em cada requisição. O CLI não injeta nada. É um binário no PATH; o agente aprende que ele existe uma vez e esquece dele até chamá-lo.
Custo de descoberta, pago uma vez
| SerpApi MCP | CLI serp | |
|---|---|---|
| Aprender a interface | recurso de engine (google.json) = 5.816 tokens | --help = ~290 tokens |
Os dois são sob demanda. Para aprender os parâmetros de uma engine pelo MCP você lê o recurso dela, e google.json tem 5.816 tokens. Para aprender o CLI você lê o --help, cerca de 290.
Por chamada, a mesma query do google, byte a byte
| Resposta | Tokens |
|---|---|
MCP complete (o padrão) | 6.047 |
MCP compact | 4.577 |
CLI --format complete | 5.321 |
CLI compact, sem --fields | 3.940 |
CLI --fields title,link | 351 |
O modo padrão do MCP é complete, então de fábrica uma busca aporta cerca de 6.000 tokens no seu contexto. O CLI tem padrão compact e deixa você pedir só os campos que quer, então os mesmos dez resultados voltam em 351. Isso é aproximadamente 17x menor que o padrão do MCP, e 13x menor que o próprio modo compact do MCP.
Por que o CLI custa 13x menos tokens
A parte honesta primeiro: a lógica de compactação dos dois lados é idêntica. Ambos descartam os mesmos cinco blocos de metadados (search_metadata, search_parameters, search_information, pagination, serpapi_pagination). O MCP da SerpApi é um bom software, e 771 tokens para uma ferramenta universal que cobre todas as engines é um schema razoável, não inchaço. Não estou batendo nele.
A diferença vem de três coisas que o CLI faz de propósito. Primeiro, ele projeta campos: --fields title,link corta cada resultado para as chaves que você nomeou, enquanto o modo compact do MCP tira os metadados mas ainda devolve todos os campos de todos os resultados. Esse recurso sozinho é a maior parte dos 13x. Segundo, ele minifica, enquanto o MCP faz pretty-print com indent=2, o que por si só é cerca de 15% mais caracteres. Terceiro, ele não custa nada quando ocioso. O custo fixo de um servidor MCP é barato sozinho. O problema é que ele acumula: ligue dez deles e você está carregando alguns milhares de tokens de schema sempre carregado antes de o agente ter feito qualquer trabalho.
Outras pessoas mediram o mesmo efeito, com mais força
O princípio não é meu. O enquadramento da Anthropic é que a janela de contexto é um bem público, e dois benchmarks publicados apontam na mesma direção. O artigo deles sobre code-execution-with-MCP levou um fluxo de Drive-para-Salesforce de cerca de 150.000 tokens para cerca de 2.000 ao chamar ferramentas como código em vez de carregar suas definições, um corte de 98,7%. O benchmark OnlyCLI cronometrou uma tarefa do GitHub em 44.026 tokens pelo MCP contra 1.365 por um CLI, cerca de 32x. Esses são cenários grandes de ponta a ponta com muitas ferramentas e resultados intermediários. Meus 13-17x em uma única busca são a versão pequena e conservadora do mesmo mecanismo.
Quando você realmente quer o MCP
Isto não é “CLI ganha do MCP.” É escolher o transporte que serve à chamada.
Vá de MCP quando a conexão é a parte difícil: OAuth ou auth multi-usuário, governança de quota e rate-limit no servidor, um endpoint hospedado compartilhado por muitos clientes, uma sessão que mantém estado entre passos. A SerpApi roda o serpapi-mcp e uma versão hospedada em mcp.serpapi.com, e é aí que ele faz por merecer.
Vá de CLI quando a chamada é stateless. Query entra, resultados saem, um passo, uma chave no ambiente, e um payload gordo que você quer cortar antes de ele chegar ao modelo. Uma busca é o caso clássico. Você lê o --help uma vez, e toda chamada depois disso retorna só o que você pediu.
O que é o serp
Ele envolve o endpoint REST da SerpApi e compila para um único binário com bun build --compile, sem dependências de runtime. compact descarta os blocos de metadados, --fields projeta cada resultado para as chaves que você nomeia, e as flags de geo (--location, --gl, --hl) só vão para a rede quando você as define. A saída é JSON minificado no stdout, porque o que está lendo é uma máquina. A chave é lida de SERPAPI_API_KEY e tem fallback para SERP_API_KEY.
As partes que importam para teste são funções puras: o construtor de URL, o parser de argumentos, a formatação de resultados. A chamada de rede e o ponto de entrada run() recebem um fetch injetado e streams injetados, então a suíte inteira, 37 testes, roda offline sem chave e sem requisições. Essa é a parte com que estou realmente satisfeito.
Há uma skill do Claude Code ao lado dele, searching-with-serpapi, que guarda o procedimento: qual engine serve a qual intenção, compact versus complete, operadores, quando deduplicar e citar, quando não buscar nada. Ela custa cerca de 110 tokens até disparar. A capacidade vem do CLI (ou do MCP), o como-fazer vem da skill.
Duas ressalvas que eu gostaria se estivesse lendo isto
Prompt caching estreita a diferença de custo fixo em sessões quentes onde o conjunto de ferramentas não muda, já que o bloco de schema estático é amortizado. O número de 771-por-turno morde com mais força em cold starts e sempre que você adiciona ou troca uma ferramenta. A diferença por chamada não liga para caching; você a paga fresca em toda busca.
E code execution é uma alavanca maior que tudo isso. É de onde vêm os 98,7%. Mas precisa de um sandbox real com limites de recursos e monitoramento, que uma simples chamada de CLI pula. Tradeoff diferente, vale dizer em voz alta.
Conclusão
Combine o transporte com a chamada. Para busca stateless em um loop de código, um CLI pequeno mais uma skill é mais barato em contexto (cerca de 0 fixo contra 771 por turno, cerca de 350 por resultado contra 6.000) e a economia fixa se acumula conforme você adiciona ferramentas. Para uma conexão hospedada, governada e multi-cliente, o MCP é a escolha certa.
Se você roda agentes com uma pilha de servidores MCP, o custo fixo vale medir no seu próprio setup. O método está no apêndice, então é fácil de reproduzir. Eu gostaria genuinamente de saber que números você obtém.
O repositório é open-source e MIT: github.com/aryrabelo/serpapi-agent-toolkit. O CLI e a skill vêm juntos, ambos complementos ao serpapi-mcp da SerpApi.
Apêndice: como eu medi
Tokens são caracteres / 4, o mesmo proxy dos dois lados, então confie mais nas razões que nos números absolutos.
O custo fixo do MCP é o payload real de tools/list do serpapi-mcp rodando em FastMCP, contando os campos que um cliente de fato recebe (name, description, inputSchema): 771 tokens para a única ferramenta search. O servidor também expõe 107 recursos de engine; listar todos eles dá cerca de 4.300 tokens, e ler google.json dá 5.816.
Por chamada é uma busca live no google para a mesma query, puxada pela mesma biblioteca Python serpapi que o MCP usa, depois serializada de dois jeitos: json.dumps(indent=2) para casar com o MCP, e minificada com projeção de campos para casar com o CLI. Tokens exatos: MCP complete 6.047, MCP compact 4.577, CLI complete 5.321, CLI compact 3.940, CLI --fields title,link 351. O custo fixo do CLI e o --help vêm do texto enviado na v0.1.0, cerca de 110 e 290.
Fontes: “Code execution with MCP”, “Writing tools for agents” e “Effective context engineering” da Anthropic; o benchmark de custo de tokens OnlyCLI; os repositórios serpapi-mcp e serpapi-javascript da SerpApi.