Pular para o conteúdo
cajulang

Caju para assistentes de IA

caju mcp é um servidor Model Context Protocol embutido no comando caju. Claude Code, Claude Desktop, Cursor e outros assistentes usam o compilador por meio de ferramentas com resultados estruturados: leem a referência da linguagem, consultam a biblioteca padrão e verificam, executam e testam código.

$ claude mcp add caju -- caju mcp

CLI ou MCP: medido

As mesmas três tarefas, feitas pelo Claude Code só com o comando caju num shell, ou só com as ferramentas MCP. Mesmo modelo, mesmo prompt, um diretório vazio com os arquivos da tarefa; cada resultado conferido depois.

cli5/6Correto
mcp6/6Correto
Turnos3,3×
cli30,3
mcp9,2
Chamadas ao compilador10,5×
cli17,8
mcp1,7
Tokens de entrada (milhares)4,2×
cli540
mcp129
Tempo (s)4×
cli48,6
mcp12,2
Custo (US$)2,1×
cli0,168
mcp0,079
TarefaCorretoTurnosChamadas ao compiladorTempo (s)
Escrever um programaAs 5 palavras mais frequentes de um texto, ordenadas pela contagem e depois em ordem alfabética.
cli2/2161023,7
mcp2/25,51,59,7
De Go para CajuUm programa escrito em estilo Go precisa virar Caju válido e imprimir duas linhas dadas.
cli1/2533188,1
mcp2/2101,512
Escrever testesPelo menos 4 testes para um módulo de pilha que tem um bug escondido.
cli2/22212,534
mcp2/212214,8

Ele lê antes de escrever

Com MCP, toda execução começou com caju_reference e caju_docs e depois escreveu o programa uma vez. A maioria dos programas saiu certa na primeira tentativa.

Sem ele, o compilador é o manual

Com a CLI, o assistente aprendeu Caju pelas mensagens de erro: caju --help, depois pequenos programas de teste, uma construção por vez, reescrevendo após cada erro. Uma execução atingiu o limite de 40 turnos ainda sondando a sintaxe.

Os erros apontam a correção

Um diagnóstico com linha, coluna e etapa leva o assistente direto à linha a mudar, em vez de ler texto e adivinhar.

Ele foi atrás do servidor

Numa primeira rodada em que caju mcp não estava bloqueado, as execuções com CLI o encontraram no caju --help e falaram JSON-RPC com ele pelo shell para ler a referência.

Duas execuções por tarefa e modo, um modelo e tarefas pequenas: a direção é clara, as proporções exatas não. As execuções com CLI não podiam usar outros comandos do shell. Programas, resumo dos logs e método em bench/mcp do repositório da linguagem. bench/mcp/RESULTS.md

Uma sessão real

Um assistente (Claude Sonnet 5.5) convertendo um programa em estilo Go para Caju com as ferramentas MCP. É uma das execuções da comparação abaixo, resumida, no inglês original.

Tarefa

main.caju was written in Go style, but it must be a valid program in the Caju programming language. Rewrite it so that it prints exactly "CASHEW, MANGO" and "total: 16.00".

Passo 1 de 9

Cinco ferramentas

Checar, rodar e testar respondem em JSON, então o assistente nunca interpreta a saída de texto do compilador. As ferramentas do grafo de código respondem com uma linha curta por símbolo, em vez de arquivos inteiros: o grafo fica na memória do servidor e responde em cerca de 2 ms.

Verifica os tipos sem gerar código. Cada erro vem com arquivo, linha, coluna e etapa (sintaxe, tipo, link...).

Requisição · caju_check
{ "files": {
    "main.caju": "x := 1\nx = \"a\"\n"
} }
Resposta · caju_check
{ "ok": false, "diagnostics": [ {
    "file": "main.caju", "line": 2, "col": 5, "stage": "type",
    "message": "\"x\" (line 1) is int, but got str"
} ] }

Configuração

Ele vem com o comando caju: não há mais nada para instalar.

Claude Code
claude mcp add caju -- caju mcp
Claude Desktop, Cursor, VS Code e outros clientes
{
  "mcpServers": {
    "caju": { "command": "caju", "args": ["mcp"] }
  }
}

Use o caminho completo do caju (~/.local/bin/caju com o instalador) se o cliente não enxergar o seu PATH. O servidor lê mensagens JSON-RPC da entrada padrão, uma por linha.

Por que uma linguagem nova precisa disso

Um assistente nunca viu Caju durante o treinamento, e Caju se parece o bastante com Go para ser escrita como Go. O servidor dá a ele a referência real, os nomes reais da biblioteca e a posição exata de cada erro, então ele para de adivinhar.