Cruncher MCP

A calculadora científica construída como um servidor Model Context Protocol (MCP)

Documentação

Cruncher: O Servidor MCP de Calculadora Científica

Version Node.js Version License: MIT Tests Status

Uma calculadora científica poderosa para o seu assistente de IA, construída como um servidor Model Context Protocol (MCP). O Cruncher permite que clientes de IA compatíveis (como o Claude Desktop) realizem cálculos matemáticos complexos, gerenciem memória, façam análises estatísticas e acessem constantes científicas com uma interface simples, segura e padronizada.

🌟 A Promessa de Pureza (Zero Dependências)

O Cruncher é construído como uma ferramenta altamente educacional e extremamente leve. Ele alcança recursos poderosos sem depender de bibliotecas externas pesadas (sem mathjs, sem zod, sem @modelcontextprotocol/sdk). Tudo é tratado usando capacidades nativas do Node.js:

  • Avaliação Segura de Expressões: Em vez de depender de mathjs ou de eval() perigosos, o Cruncher usa new Function() protegido por uma Regex de lista de permissões estrita que garante que apenas números e operadores matemáticos possam passar.
  • Validação de Entrada: Em vez de bibliotecas de esquema pesadas como Zod, uma função de validação recursiva personalizada impõe rigidamente as entradas da IA contra JSON Schemas diretamente.
  • Proteção contra Timeout: Em vez de gerenciadores de processos complexos, ele aproveita o worker_threads do Node.js para gerar cálculos. Se uma IA solicitar um fatorial de loop de milhões, o thread principal termina facilmente o worker após um timeout estrito (padrão de 3 segundos). Esse timeout é configurável através da variável de ambiente CRUNCHER_TIMEOUT (em milissegundos), garantindo que o servidor permaneça responsivo mesmo durante cargas computacionais pesadas.
  • Precisão de Ponto Flutuante: Em vez de usar decimal.js, ele resolve o clássico erro de matemática JS (0.1 + 0.2 = 0.30000000000000004) via lógica dinâmica de escalonamento de inteiros nos bastidores.

📚 Uma Abordagem Educacional para MCP

Este projeto serve como um excelente recurso de aprendizado para desenvolvedores que desejam entender profundamente o Model Context Protocol (MCP). Como ele evita deliberadamente usar o @modelcontextprotocol/sdk oficial, toda a implementação do protocolo MCP, manipulação de mensagens JSON-RPC, validações de entrada e formatação de erros é exposta em JavaScript puro.

Ler o cruncher.js fornece uma visão incomparável e transparente de exatamente como um servidor MCP se comunica via stdio, analisa solicitações recebidas (initialize, tools/list, tools/call) e responde de volta ao cliente de IA—desmistificando a "mágica" que os SDKs geralmente escondem.

O que é o Model Context Protocol?

O Model Context Protocol (MCP) é um padrão aberto que permite que aplicações de IA se conectem com segurança a fontes de dados e ferramentas externas. Pense nele como uma API universal para IA. Ao implementar o Cruncher como um servidor MCP, qualquer IA que entenda MCP pode ganhar instantaneamente capacidades poderosas de calculadora integradas, sem integrações personalizadas.

✨ Recursos

O Cruncher fornece um conjunto abrangente de funções de calculadora construídas completamente do zero, sem dependências pesadas:

  • Arquitetura Robusta:
    • Zero Dependências: Depende puramente das bibliotecas padrão do Node.js.
    • Validação Estrita de Entrada: Validador de esquema personalizado previne alucinações da IA e dados inválidos.
    • Proteção contra Loop Infinito: Utiliza o worker_threads do Node.js com um timeout estrito de 3 segundos para evitar que cálculos complexos congelem o servidor.
    • Matemática Decimal Precisa: Usa uma abordagem de escalonamento de inteiros para prevenir erros clássicos de ponto flutuante do JS (por exemplo, 0.1 + 0.2 === 0.3).
  • Exposição de Ferramentas em Camadas: Três camadas (minimal, standard padrão, full) para otimizar o uso de tokens de contexto.
  • Aritmética Básica: Adição, Subtração, Multiplicação, Divisão, Módulo.
  • Avaliação de Expressões: Calcule com segurança strings matemáticas inteiras em texto simples (por exemplo, (5 + 3) * 10 / 2).
  • Potências e Raízes: Exponenciação (a^b), Raiz Quadrada.
  • Teoria dos Números: Fatorial (n!).
  • Trigonometria: Seno, Cosseno, Tangente, Arco Seno (asin), Arco Cosseno (acos) e Arco Tangente (atan) (com suporte para graus e radianos).
  • Logaritmos: Logaritmo de Base 10 e Logaritmo Natural (ln).
  • Funções Estatísticas: Soma, Média, Mediana, Mínimo, Máximo, Amplitude, Contagem, Variância e Desvio Padrão para arrays de números.
  • Funções de Porcentagem: Porcentagem de, variação percentual e cálculos de porcentagem reversa.
  • Conversão de Unidades: Mais de 80 conversões em 8 categorias (comprimento, peso, temperatura, área, volume, tempo, velocidade, armazenamento digital).
  • Funções de Conveniência: Valor Absoluto.
  • Constantes: Acesso fácil a constantes de Matemática (pi, e, tau, phi, sqrt2, euler_mascheroni), Física (c, g, G, h, k, R) e Química (NA, e_charge, m_e, m_p).
  • Funções de Memória: M+, M-, MR (Recuperação de Memória) e MC (Limpeza de Memória) - apenas na camada completa.

🚀 Instalação e Uso

Coloque o Cruncher em funcionamento com o Claude Desktop em apenas alguns minutos.

Passo 1: Pré-requisitos

Certifique-se de ter o Node.js (versão 18.0.0 ou mais recente) instalado no seu sistema. Você pode baixá-lo em nodejs.org.

Passo 1: Início Rápido com npm

Recomendado: Instale via npm e use diretamente:

npx @slbdn/cruncher-mcp

Isso baixa e executa a versão mais recente automaticamente.

Passo 2: Configure o Claude Desktop

Recomendado: Use o pacote npm para atualizações automáticas:

{
  "mcpServers": {
    "cruncher": {
      "command": "npx",
      "args": ["-y", "@slbdn/cruncher-mcp"]
    }
  }
}

Passo 3: Arquivo Manual (Alternativa)

Se você preferir baixar o arquivo manualmente:

  1. Baixe o arquivo cruncher.js diretamente do GitHub.

  2. Coloque-o em um local permanente (por exemplo, C:\mcp-servers\cruncher.js ou /home/user/mcp-servers/cruncher.js).

  3. Localize o arquivo de configuração do Claude Desktop:

    • Windows: %APPDATA%\Claude\claude_desktop_config.json
    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  4. Adicione a configuração do servidor apontando para o arquivo baixado:

    {
      "mcpServers": {
        "cruncher": {
          "command": "node",
          "args": ["C:/Users/YOUR_USERNAME/mcp-servers/cruncher.js"],
          "env": {
            "CRUNCHER_TOOL_SET": "standard"
          }
        }
      }
    }
    

    Nota para usuários de macOS/Linux: Use um caminho no estilo POSIX, por exemplo, "/home/YOUR_USERNAME/mcp-servers/cruncher.js". Certifique-se de que o executável node esteja no PATH do seu sistema.

Passo 4: Comece a Calcular!

  1. Salve o arquivo de configuração e saia completamente do aplicativo Claude Desktop.
  2. Reinicie o Claude Desktop. Ele se conectará automaticamente ao servidor Cruncher.
  3. Comece a fazer perguntas!

OpenWebUI (Antigo Ollama WebUI)

O OpenWebUI suporta nativamente a conexão a servidores MCP stdio.

Opção A: Usando o pacote npm

  1. Vá para Painel de Administração > Configurações > Ferramentas > Servidores MCP.
  2. Clique em Adicionar Servidor.
  3. Nomeie-o como "Cruncher", selecione Comando e insira npx, defina Args como @slbdn/cruncher-mcp.

Opção B: Usando arquivo baixado

  1. Vá para Painel de Administração > Configurações > Ferramentas > Servidores MCP.
  2. Clique em Adicionar Servidor.
  3. Nomeie-o como "Cruncher", selecione stdio, use node como o comando e /path/to/cruncher.js como o argumento.

IDE Cursor

Você pode dar à IA integrada do Cursor a capacidade de executar matemática e calcular hashes.

Opção A: Usando o pacote npm

  1. Abra as Configurações do Cursor (ícone de engrenagem) > Recursos > Servidores MCP.
  2. Clique em + Adicionar Novo Servidor MCP.
  3. Defina o Tipo como command, Nome como cruncher e Comando como npx @slbdn/cruncher-mcp.

Opção B: Usando arquivo baixado

  1. Abra as Configurações do Cursor (ícone de engrenagem) > Recursos > Servidores MCP.
  2. Clique em + Adicionar Novo Servidor MCP.
  3. Defina o Tipo como command, Nome como cruncher e Comando como node /path/to/cruncher.js.

Cline (Extensão do VS Code)

Se você usa o Cline para codificação agêntica no VS Code, abra o arquivo de configuração MCP (cline_mcp_settings.json) e adicione:

Opção A: Usando o pacote npm

{
  "mcpServers": {
    "cruncher": {
      "command": "npx",
      "args": ["-y", "@slbdn/cruncher-mcp"]
    }
  }
}

Opção B: Usando arquivo baixado

{
  "mcpServers": {
    "cruncher": {
      "command": "node",
      "args": ["/path/to/cruncher.js"],
      "env": {
        "CRUNCHER_TOOL_SET": "standard"
      }
    }
  }
}

Goose (Agente de Terminal)

O Goose é um assistente de IA leve baseado em terminal que suporta totalmente MCP.

Opção A: Usando o pacote npm

  1. Edite ~/.goose/config.yaml (ou a configuração do projeto local).
  2. Adicione uma nova entrada de servidor:
mcpServers:
  cruncher:
    command: npx
    args:
      - -y
      - "@slbdn/cruncher-mcp"

Opção B: Usando arquivo baixado

  1. Edite ~/.goose/config.yaml (ou a configuração do projeto local).
  2. Adicione uma nova entrada de servidor:
mcpServers:
  cruncher:
    command: node
    args:
      - "/path/to/cruncher.js"
    env:
      CRUNCHER_TOOL_SET: "standard"
  1. Reinicie o Goose. Agora você pode pedir ao Goose para executar cálculos como evaluate_expression ou median diretamente.

Editor Zed (Painel de IA)

O painel de IA integrado do Zed suporta conexões MCP.

Opção A: Usando o pacote npm

  1. Abra Configurações → IA → Servidores MCP.
  2. Clique em Adicionar Servidor e preencha:
    • Nome: cruncher
    • Comando: npx
    • Args: @slbdn/cruncher-mcp
  3. Salve. A IA do Zed agora pode chamar o Cruncher para aritmética e estatísticas precisas.

Opção B: Usando arquivo baixado

  1. Abra Configurações → IA → Servidores MCP.
  2. Clique em Adicionar Servidor e preencha:
    • Nome: cruncher
    • Comando: node
    • Args: /absolute/path/to/cruncher.js
    • Env (opcional): CRUNCHER_TOOL_SET=standard
  3. Salve. A IA do Zed agora pode chamar o Cruncher para aritmética e estatísticas precisas.

LM Studio (LLM Local + MCP)

O LM Studio executa LLMs totalmente offline e agora inclui um cliente MCP.

Opção A: Usando o pacote npm

  1. Abra Configurações → MCP no LM Studio.
  2. Clique em Adicionar Servidor e forneça:
    • Executável: npx
    • Argumentos: @slbdn/cruncher-mcp
  3. Confirme. Seu modelo privado agora pode transferir matemática para o Cruncher sem nenhum tráfego de rede.

Opção B: Usando arquivo baixado

  1. Abra Configurações → MCP no LM Studio.
  2. Clique em Adicionar Servidor e forneça:
    • Executável: node
    • Argumentos: /absolute/path/to/cruncher.js
    • Ambiente (opcional): CRUNCHER_TOOL_SET=standard
  3. Confirme. Seu modelo privado (por exemplo, Llama 3, DeepSeek-V2) agora pode transferir matemática para o Cruncher sem nenhum tráfego de rede.

Configuração do LibreChat

Se você estiver usando o LibreChat, pode adicionar a seguinte configuração ao seu arquivo librechat.yaml:

Opção A: Usando o pacote npm

  cruncher:
    type: stdio
    command: npx
    args:
      - -y
      - "@slbdn/cruncher-mcp"

Opção B: Usando arquivo baixado

  cruncher:
    type: stdio
    command: node
    args:
      - "/opt/mcp/cruncher.js"
    env:
      CRUNCHER_TIMEOUT: "5000"

Exemplos de Perguntas para o Claude

"Qual é o ângulo em graus cujo seno é 0,5?"

"Calcule a média, a mediana e a amplitude destes números: [15, 22, 8, 41, 19, 30]"

"Quanto é 2 elevado à potência de 10?"

"Qual é o desvio padrão de [10, 12, 8, 14, 6]?"

"Quanto é 15% de 240?"

"Uma ação foi de $50 para $75. Qual é a variação percentual?"

"Qual é a variância das notas do teste [85, 92, 78, 90, 88]?"

"Calcule a amplitude dos valores em [3, 7, 2, 9, 1]"

"Avalie a expressão: sin(pi/4) + sqrt(16) + log10(100)"

"Quanto é 10 fatorial?"

"Quanto é 17 módulo 5?"

Exemplos da Camada Completa (com CRUNCHER_TOOL_SET=full):

"Armazene 99 na memória, adicione 5 e depois recupere o total."

"Qual é o 75º percentil de [10, 20, 30, 40, 50]?"

"Converta 11010 de binário para decimal."

"Lote: raiz quadrada de 144, adicione 10 e depois eleve à potência de 2."

"Mude as funções trigonométricas para o modo radianos."

"Limpe o cache de resultados e mostre as estatísticas do cache."

"Recupere o que está na memória, depois subtraia 15 e armazene o resultado."

"Qual é o 95º percentil de [23, 45, 12, 67, 89, 34, 56, 78, 90, 11]?"

"Converta 0xFF de hexadecimal para binário."


📋 Ferramentas Disponíveis

O Cruncher expõe suas funções como ferramentas MCP individuais. Aqui está a lista completa:

Nome da FerramentaDescriçãoArgumentos
Aritmética Básica
evaluate_expressionAvalia uma expressão matemática em texto simples (ex.: (5 + 3) * 10 / 2).expression (string)
addSoma dois números (a + b).a (número), b (número)
subtractSubtrai o segundo número do primeiro (a - b).a (número), b (número)
multiplyMultiplica dois números (a * b).a (número), b (número)
divideDivide o primeiro número pelo segundo (a / b).a (número), b (número)
moduloCalcula o resto (a mod b).a (número), b (número)
Potência e Raízes
powerCalcula a elevado à potência de b (a^b).base (número), exponent (número)
sqrtCalcula a raiz quadrada de um valor.value (número)
Teoria dos Números
factorialCalcula o fatorial de um inteiro não negativo (n!).n (número, inteiro não negativo)
Conversão de Unidades
convert_unitConverte entre unidades comuns. 8 categorias, mais de 80 unidades.value (número), category (string), from (string), to (string)
Conversão de Base (Nível Completo)
convert_baseConverte entre bases 2, 8, 10, 16.value (string), from_base (2, 8, 10, 16), to_base (2, 8, 10, 16)
Trigonometria
sineCalcula o seno de um ângulo.angle (número), unit (graus/radianos, opcional)
cosineCalcula o cosseno de um ângulo.angle (número), unit (graus/radianos, opcional)
tangentCalcula a tangente de um ângulo.angle (número), unit (graus/radianos, opcional)
asinCalcula o seno inverso (arco seno) de um valor. Retorna um ângulo.value (número), unit (graus/radianos, opcional)
acosCalcula o cosseno inverso (arco cosseno) de um valor. Retorna um ângulo.value (número), unit (graus/radianos, opcional)
atanCalcula a tangente inversa (arco tangente) de um valor. Retorna um ângulo.value (número), unit (graus/radianos, opcional)
Logaritmos
logarithmCalcula o logaritmo na base 10 de um valor.value (número)
natural_logCalcula o logaritmo natural (base e) de um valor.value (número)
Funções Estatísticas
sumCalcula a soma de um array de números.numbers (array de números)
avgCalcula a média de um array de números.numbers (array de números)
medianCalcula a mediana de um array de números.numbers (array de números)
minEncontra o valor mínimo em um array de números.numbers (array de números)
maxEncontra o valor máximo em um array de números.numbers (array de números)
countConta o número de elementos em um array.numbers (array de números)
rangeCalcula a amplitude (máx - mín) de um array.numbers (array de números)
percentileCalcula o valor em um determinado percentil (0-100). Nível completo.numbers (array de números), percentile (número, 0-100)
varianceVariância de um array. Amostra (n-1) ou população (n).numbers (array de números), population (booleano, opcional)
std_devDesvio padrão. Amostra (n-1) ou população (n).numbers (array de números), population (booleano, opcional)
percentage_ofQuanto é X% de Y? Ex.: 15% de 200 = 30.percent (número), total (número)
percentage_changeVariação % de A para B. Ex.: 50→80 = 60%.from (número), to (número)
percentage_reverseX é Y% de quanto? Ex.: 30 é 15% de 200.value (número), percent (número)
Outros
absoluteCalcula o valor absoluto de um número.value (número)
Constantes
get_constantRetorna o valor de uma constante matemática, física ou química.name ("pi", "e", "tau", "phi", "sqrt2", "euler_mascheroni", "c", "g", "G", "h", "k", "R", "NA", "e_charge", "m_e", "m_p")
Funções de Memória (Nível Completo)
memory_clearLimpa a memória da calculadora (MC).(sem argumentos)
memory_recallRecupera o valor armazenado na memória (MR).(sem argumentos)
memory_addAdiciona um valor à memória atual (M+).value (número)
memory_subtractSubtrai um valor da memória atual (M-).value (número)
Modo de Ângulo (Nível Padrão)
set_angle_modeDefine o modo de ângulo global (padrão: graus).unit ("degrees" ou "radians")
get_angle_modeObtém o modo de ângulo atual.(sem argumentos)
Ferramentas de Administração (Nível Completo)
batchExecuta múltiplas chamadas de ferramentas sequencialmente.operations (array de {tool, arguments})
cache_clearLimpa o cache de computação.(sem argumentos)
cache_infoMostra estatísticas do cache.(sem argumentos)

⚙️ Configuração

Variáveis de Ambiente

VariávelPadrãoDescrição
CRUNCHER_TIMEOUT3000Tempo limite de execução do thread de trabalho (ms). Intervalo 100-60000
CRUNCHER_TOOL_SETstandardControla a exposição de ferramentas: minimal (5), standard (34 padrão), full (43)

Níveis de Ferramentas - Referência Completa

O Cruncher expõe 3 níveis por meio da variável de ambiente CRUNCHER_TOOL_SET. Cada nível é um superconjunto estrito do anterior.

Visão Geral dos Níveis

NívelFerramentasCaso de Uso
Mínimo (5)Apenas aritmética básicaCalculadoras leves, agentes matemáticos simples
Padrão (34 - padrão)Todo o mínimo + trigonometria, estatísticas, constantes, conversão de unidadesMatemática geral para assistentes de IA
Completo (43)Todo o padrão + memória, lote, cache, conversão de base, estatísticas avançadasUsuários avançados, fluxos de trabalho com múltiplas etapas

Nível Mínimo (5 Ferramentas)

Todas as ferramentas são executadas no thread de trabalho com proteção de tempo limite.

#FerramentaDescrição
1evaluate_expressionAvalia uma string de expressão matemática
2addAdição (a + b)
3subtractSubtração (a - b)
4multiplyMultiplicação (a × b)
5divideDivisão (a ÷ b)

Nível Padrão (34 Ferramentas - inclui todas as 5 do Mínimo)

#FerramentaCategoria
6sqrtRaiz quadrada
7powerExponenciação (a^b)
8absoluteValor absoluto
9moduloResto (a mod b)
10factorialFatorial (n!)
11logarithmLogaritmo na base 10
12natural_logLogaritmo natural (ln)
13get_constantBuscar constantes físicas/matemáticas
14-16sine, cosine, tangentTrigonometria
17-19asin, acos, atanTrigonometria inversa
20set_angle_modeAlternar graus/radianos (global)
21get_angle_modeVerificar modo de ângulo atual
22-25sum, avg, min, maxEstatísticas básicas
26countContar elementos
27varianceVariância (amostra ou população)
28std_devDesvio padrão (amostra ou população)
29percentage_ofX% de Y
30percentage_changeVariação % A→B
31percentage_reverseX é Y% de quanto?
32medianValor mediano
33rangeAmplitude (máx - mín)
34convert_unitMais de 80 conversões de unidades, 8 categorias

Nível Completo (43 Ferramentas - inclui todas as 34 do Padrão)

#FerramentaCategoria
35percentileValor no enésimo percentil
36convert_baseConversão de base 2/8/10/16
37memory_addAdicionar ao total acumulado
38memory_subtractSubtrair do total acumulado
39memory_recallObter valor atual da memória
40memory_clearRedefinir memória para zero
41batchExecutar até 50 operações em uma chamada
42cache_clearLimpar cache de resultados
43cache_infoMostrar estatísticas do cache

Correspondência Difusa de Nomes de Ferramentas

Se o LLM chamar uma ferramenta que não existe, o Cruncher usa a distância de Levenshtein para encontrar a correspondência mais próxima e sugerir:

Erro de digitaçãoSugestãoTipo de Correspondência
factfactorialCorrespondência de prefixo
facfactorialCorrespondência de prefixo
sinnsineErro de 1 caractere
squrtsqrtTransposição
addddaddLetras extras
dividdivideSufixo ausente
totally_wrong(nenhum)Muito diferente - sem sugestão

Formato de resposta:

{
  "error": {
    "code": -32601,
    "message": "Tool 'fact' not found. Did you mean 'factorial'?"
  }
}

Built-ins Estendidos do evaluate_expression

Além da aritmética básica, o evaluate_expression suporta estas funções nativamente:

FunçãoDescriçãoExemploResultado
sin(x)Seno (radianos, sempre em expressões)sin(pi / 2)1
cos(x)Cosseno (radianos, sempre em expressões)cos(pi)-1
tan(x)Tangente (radianos)tan(pi / 4)~1
asin(x)Arco seno (resultado em radianos)asin(1)π/2
acos(x)Arco cosseno (resultado em radianos)acos(0)π/2
atan(x)Arco tangente (resultado em radianos)atan(1)π/4
sqrt(x)Raiz quadradasqrt(144)12
log10(x)Logaritmo na base 10log10(1000)3
ln(x)Logaritmo natural (base e)ln(e)1
log(x, b)Logaritmo em base arbitrárialog(8, 2)3
abs(x)Valor absolutoabs(-5)5
round(x)Arredondar para o inteiro mais próximoround(3.7)4
floor(x)Arredondar para baixofloor(3.9)3
ceil(x)Arredondar para cimaceil(3.1)4
min(a,b,...)Valor mínimomin(3, 1, 4)1
max(a,b,...)Valor máximomax(3, 1, 4)4

Combine livremente: sin(pi/6) + sqrt(16) + log10(100) = 6.5

Mensagens de Erro Melhoradas

Erros de domínio agora informam o que deu errado:

  • sqrt(-1) → "Verifique: sqrt(negativo), log(negativo/zero), asin/acos fora de [-1,1]"
  • 1/0 → "Verifique divisão por zero ou estouro"
  • asin(5) → "asin/acos fora de [-1,1]"

Constantes em Expressões

Agora você pode usar nomes de constantes matemáticas e físicas diretamente dentro de evaluate_expression:

ConstanteDescriçãoValor
piπ (razão da circunferência)3.14159...
eNúmero de Euler2.71828...
tauτ = 2π6.28318...
phiProporção áurea (φ)1.61803...
sqrt2√21.41421...
euler_mascheroniEuler-Mascheroni (γ)0.57721...
cVelocidade da luz (m/s)299792458
gGravidade (m/s2)9.80665
GConstante gravitacional6.6743e-11
hConstante de Planck (J·s)6.62607015e-34
kConstante de Boltzmann (J/K)1.380649e-23
RConstante dos gases ideais (J/mol·K)8.314462618
NAConstante de Avogadro (1/mol)6.02214076e23
e_chargeCarga elementar (C)1.602176634e-19
m_eMassa do elétron (kg)9.1093837015e-31
m_pMassa do próton (kg)1.67262192369e-27

Exemplos:

2 * pi * 5       → 31.4159...
phi ^ 2          → 2.61803...
G * 1e11         → 6.6743
sqrt2 * sqrt2    → 2
e * e            → 7.38906...
c * 2            → 599584916

Regras:

  • Use operadores explícitos: 2 * pi funciona, 2pi não (sem multiplicação implícita)
  • Constantes coexistem com notação científica: 1e6 e e * 2 funcionam corretamente
  • Nomes de constantes mais longos são correspondidos primeiro: euler_mascheroni não se tornará 299792458uler_mascheroni

Exposição de Ferramentas em Camadas

A variável de ambiente CRUNCHER_TOOL_SET permite otimizar o uso de tokens de contexto expondo apenas as ferramentas que você realmente precisa:

CamadaFerramentasOrçamento de TokensCaso de Uso
minimal5~160 tokensAritmética básica. Toda matemática complexa via evaluate_expression
standard34~1.150 tokensAritmética, trigonometria, estatísticas, porcentagens, constantes, conversão de unidades (padrão)
full43~1.500 tokensPadrão + memória, conversão de base, percentil, lote, cache

Nota: Mesmo no modo minimal, o evaluate_expression lida com matemática complexa - ferramentas individuais (sin, sqrt, etc.) simplesmente não são registradas como chamadas de ferramentas MCP separadas. Isso economiza até 90% em tokens de contexto.

Exemplo de configuração MCP (claude_desktop_config.json):

{
  "mcpServers": {
    "cruncher-minimal": {
      "command": "node",
      "args": ["/path/to/cruncher.js"],
      "env": { "CRUNCHER_TOOL_SET": "minimal" }
    }
  }
}

⛏️ Como Funciona (Para Desenvolvedores)

Cruncher é um aplicativo JavaScript Node.js simples que se comunica via entrada/saída padrão (stdio). Isso o torna um servidor MCP leve, portátil e seguro. O fluxo completo para uma única chamada de ferramenta é assim:

  1. Inicialização: Na inicialização, o servidor escuta uma solicitação initialize do cliente MCP e responde com suas capacidades e informações de versão (v1.2.31).
  2. Descoberta de Ferramentas: O cliente envia uma solicitação tools/list, e o servidor responde com a lista completa de ferramentas de calculadora disponíveis e seus inputSchema, que define os argumentos necessários e seus tipos.
  3. Validação de Entrada: Antes de qualquer ferramenta ser executada, o servidor executa uma função recursiva personalizada validateArguments contra o inputSchema da ferramenta. Isso garante que os campos obrigatórios estejam presentes, os tipos estejam corretos (número, string, array), os valores de enum sejam válidos e as restrições de mínimo/máximo sejam respeitadas - tudo sem qualquer biblioteca externa.
  4. Execução em Thread de Trabalho: Uma vez validada, a chamada de ferramenta é repassada para um worker_thread Node.js isolado. Isso protege completamente o thread principal (e sua comunicação stdio) de ser bloqueado por um cálculo de longa duração ou infinito.
  5. Proteção por Tempo Limite: Um temporizador configurável (CRUNCHER_TIMEOUT, padrão 3000ms) monitora o worker. Se o worker demorar demais, o thread principal o encerra à força via worker.terminate() e retorna um erro -32000 ao cliente de IA.
  6. Matemática Segura e Resultado: O worker executa a função de manipulação usando safeMath (escala de inteiros) para aritmética segura com decimais, e então envia o resultado de volta ao thread principal, que formata e escreve a resposta final JSON-RPC 2.0 para stdout.

🤝 Contribuindo

Contribuições são bem-vindas! Se você quiser adicionar uma nova função, corrigir um bug ou melhorar a documentação, sinta-se à vontade para abrir uma issue ou enviar um pull request.

📜 Licença

Este projeto está licenciado sob a Licença MIT.