mcpField
C
Cruncher Mcp

Cruncher Mcp

ローカル
github.com科学・教育123 週間前に更新

Cruncher Mcp について

Cruncherは、AIクライアントやMCP実装を学ぶ開発者向けの軽量な科学計算MCPサーバーです。数学、統計、単位変換のツールを備え、Node.jsの機能で入力検証と計算タイムアウトを実装しています。

主な機能

  1. 01基本演算と数式評価
  2. 02三角関数、対数、数論
  3. 03統計とパーセント計算
  4. 0480種類以上の単位変換
  5. 05科学定数と任意のメモリ機能
  6. 06段階別ツールセットと計算タイムアウト

活用シーン

  1. 01数式や科学計算式の評価
  2. 02統計による数値データの分析
  3. 03対応単位間の測定値変換
  4. 04プレーンなJavaScriptによるMCP実装の学習

MCP 対応

stdio経由で計算機能を個別のツールとしてMCPクライアントに公開します。公式SDKを使わず、JavaScriptでMCPとJSON-RPCの処理を実装しています。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"cruncher": {
"command": "npx",
"args": [
"-y",
"@slbdn/cruncher-mcp"
],
"env": {
"CRUNCHER_TOOL_SET": "<CRUNCHER_TOOL_SET>",
"CRUNCHER_TIMEOUT": "<CRUNCHER_TIMEOUT>"
}
}
}
}
起動コマンドnpx -y @slbdn/cruncher-mcp
設定が必要な環境変数
CRUNCHER_TOOL_SETTool exposure tier: 'minimal' (5 tools), 'standard' (34 tools, default), or 'full' (43 tools)
CRUNCHER_TIMEOUTWorker thread timeout in milliseconds for heavy calculations (default: 3000, range: 100-60000)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@slbdn/cruncher-mcp1.2.29

ツール

34

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
anumberはい
bnumberはい

詳細

Cruncher:科学計算機 MCP サーバー

Version Node.js Version License: MIT Tests Status

AI アシスタント向けの強力な科学計算機です。**Model Context Protocol(MCP)**サーバーとして構築されています。Cruncher を使うと、互換性のある AI クライアント(Claude Desktop など)が、シンプルで安全、標準化されたインターフェースを通じて、複雑な数学計算、メモリの処理、統計分析、科学定数へのアクセスを実行できます。

🌟 純粋さへのこだわり(依存関係ゼロ)

Cruncher は、教育に最適な非常に軽量なツールとして構築されています。重い外部ライブラリ(mathjs、zod、@modelcontextprotocol/sdk など)を一切取り込まずに、強力な機能を実現しています。すべて Node.js の標準機能を使って処理します。

  • 安全な式の評価:mathjs や危険な eval() に頼る代わりに、Cruncher は厳格な許可リストの Regex で保護された new Function() を使い、数値と数学演算子だけが通過できるようにしています。
  • 入力の検証:Zod のような重いスキーマライブラリの代わりに、カスタムの再帰的な検証関数を用いて、JSON Schema に基づき AI の入力を厳密に検証します。
  • タイムアウト保護:複雑なプロセスマネージャーの代わりに、Node.js の worker_threads を利用して計算を実行します。AI が数百万回のループを伴う階乗計算を要求した場合でも、メインスレッドは厳格なタイムアウト(デフォルトは 3 秒)の後にワーカーを簡単に終了できます。このタイムアウトは CRUNCHER_TIMEOUT 環境変数(ミリ秒単位)で設定でき、負荷の高い計算中でもサーバーの応答性を維持できます。
  • 浮動小数点数の精度:decimal.js を使う代わりに、動的な整数スケーリングのロジックを内部で用いて、よくある JavaScript の計算誤差(0.1 + 0.2 = 0.30000000000000004)を解消します。

📚 MCP を学ぶためのアプローチ

このプロジェクトは、Model Context Protocol(MCP)を深く理解したい開発者にとって、優れた学習リソースとなります。公式の @modelcontextprotocol/sdk をあえて使用していないため、MCP プロトコルの実装、JSON-RPC メッセージの処理、入力の検証、エラーの整形をすべてプレーンな JavaScript で確認できます。

cruncher.js を読むことで、MCP サーバーが stdio 経由でどのように通信し、受信リクエスト(initialize、tools/list、tools/call)を解析して AI クライアントに応答するかを、SDK が通常隠している「仕組み」を明らかにしながら、比類ない透明性で理解できます。

Model Context Protocol とは?

Model Context Protocol(MCP)は、AI アプリケーションが外部のデータソースやツールに安全に接続できるようにするオープン標準です。AI 向けのユニバーサル API のようなものと考えてください。Cruncher を MCP サーバーとして実装することで、MCP を理解するあらゆる AI が、カスタム統合を行わずに、強力な組み込みの計算機能をすぐに利用できるようになります。

✨ 機能

Cruncher は、重い依存関係を使わず、完全にスクラッチから構築された包括的な計算関数セットを提供します。

  • 堅牢なアーキテクチャ:
    • 依存関係ゼロ:Node.js の標準ライブラリのみを使用します。
    • 厳格な入力検証:カスタムスキーマバリデーターにより、AI の誤った生成や無効なデータを防ぎます。
    • 無限ループ保護:Node.js の worker_threads と厳格な 3 秒のタイムアウトを利用し、複雑な計算によるサーバーのフリーズを防ぎます。
    • 高精度の小数計算:整数スケーリング方式を使用し、従来の JS 浮動小数点演算の誤差(例:0.1 + 0.2 === 0.3)を防ぎます。
  • 段階的なツール公開:コンテキストのトークン使用量を最適化するための 3 つの段階(minimal、デフォルトの standard、full)があります。
  • 基本的な算術演算:加算、減算、乗算、除算、剰余。
  • 式の評価:プレーンテキストの数式全体を安全に計算できます(例:(5 + 3) * 10 / 2)。
  • べき乗と平方根:べき乗(a^b)、平方根。
  • 数論:階乗(n!)。
  • 三角関数:サイン、コサイン、タンジェント、アークサイン(asin)、アークコサイン(acos)、アークタンジェント(atan)(度数法とラジアンに対応)。
  • 対数:常用対数と自然対数(ln)。
  • 統計関数:数値配列の合計、平均、中央値、最小値、最大値、範囲、個数、分散、標準偏差。
  • パーセント関数:割合、パーセント変化、逆算によるパーセント計算。
  • 単位変換:8 カテゴリ(長さ、重量、温度、面積、体積、時間、速度、digital_storage)にわたる 80 種類以上の変換。
  • 便利な関数:絶対値。
  • 定数:数学定数(pi、e、tau、phi、sqrt2、euler_mascheroni)、物理定数(c、g、G、h、k、R)、化学定数(NA、e_charge、m_e、m_p)を簡単に利用できます。
  • メモリ関数:M+、M-、MR(メモリ呼び出し)、MC(メモリクリア)。full 段階のみで利用できます。

🚀 インストールと使い方

わずか数分で、Claude Desktop で Cruncher を使えるようになります。

Step 1: 前提条件

システムに Node.js(バージョン 18.0.0 以降)がインストールされていることを確認してください。nodejs.org からダウンロードできます。

Step 1: npm ですぐに始める

推奨:npm でインストールして、そのまま使用します。

npx @slbdn/cruncher-mcp

これにより、最新バージョンが自動的にダウンロードされ、実行されます。

Step 2: Claude Desktop を設定する

推奨:自動更新を利用するには、npm パッケージを使用してください。

{
  "mcpServers": {
    "cruncher": {
      "command": "npx",
      "args": ["-y", "@slbdn/cruncher-mcp"]
    }
  }
}
Step 3: ファイルを手動で用意する(別の方法)

ファイルを手動でダウンロードする場合は、次の手順に従ってください。

  1. GitHub から cruncher.js ファイルを直接ダウンロードします。

  2. ファイルを永続的に保存できる場所に配置します(例:C:\mcp-servers\cruncher.js または /home/user/mcp-servers/cruncher.js)。

  3. Claude Desktop の設定ファイルを探します。

    • Windows:%APPDATA%\Claude\claude_desktop_config.json
    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
  4. ダウンロードしたファイルを指定するサーバー設定を追加します。

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

    macOS/Linux ユーザーへの注意: "/home/YOUR_USERNAME/mcp-servers/cruncher.js" のような POSIX 形式のパスを使用してください。node の実行ファイルがシステムの PATH に含まれていることを確認してください。

Step 4: 計算を始めましょう!
  1. 設定ファイルを保存し、Claude Desktop アプリを完全に終了します。
  2. Claude Desktop を再起動します。Cruncher サーバーに自動的に接続されます。
  3. 質問を始めましょう!
OpenWebUI(旧称 Ollama WebUI)

OpenWebUI は、stdio MCP サーバーへの接続を標準でサポートしています。

オプション A:npm パッケージを使用

  1. Admin Panel > Settings > Tools > MCP Servers に移動します。
  2. Add Server をクリックします。
  3. 名前を「Cruncher」にし、Command を選択して npx を入力し、Args に @slbdn/cruncher-mcp を設定します。

オプション B:ダウンロードしたファイルを使用

  1. Admin Panel > Settings > Tools > MCP Servers に移動します。
  2. Add Server をクリックします。
  3. 名前を「Cruncher」にし、stdio を選択します。コマンドに node を、引数に /path/to/cruncher.js を指定します。
Cursor IDE

Cursor に組み込まれた AI に、計算やハッシュの算出を行う機能を追加できます。

オプション A:npm パッケージを使用

  1. Cursor の設定(歯車アイコン)> Features > MCP Servers を開きます。
  2. + Add New MCP Server をクリックします。
  3. Type に command、Name に cruncher、Command に npx @slbdn/cruncher-mcp を設定します。

オプション B:ダウンロードしたファイルを使用

  1. Cursor の設定(歯車アイコン)> Features > MCP Servers を開きます。
  2. + Add New MCP Server をクリックします。
  3. Type に command、Name に cruncher、Command に node /path/to/cruncher.js を設定します。
Cline(VS Code 拡張機能)

VS Code でエージェント型コーディングに Cline を使用している場合は、MCP 設定ファイル(cline_mcp_settings.json)を開き、次の内容を追加します。

オプション A:npm パッケージを使用

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

オプション B:ダウンロードしたファイルを使用

{
  "mcpServers": {
    "cruncher": {
      "command": "node",
      "args": ["/path/to/cruncher.js"],
      "env": {
        "CRUNCHER_TOOL_SET": "standard"
      }
    }
  }
}
Goose(ターミナルエージェント)

Goose は、MCP を完全にサポートする軽量なターミナルベースの AI アシスタントです。

オプション A:npm パッケージを使用

  1. ~/.goose/config.yaml(またはローカルプロジェクトの設定ファイル)を編集します。
  2. 新しいサーバーエントリーを追加します。
mcpServers:
  cruncher:
    command: npx
    args:
      - -y
      - "@slbdn/cruncher-mcp"

オプション B:ダウンロードしたファイルを使用

  1. ~/.goose/config.yaml(またはローカルプロジェクトの設定ファイル)を編集します。
  2. 新しいサーバーエントリーを追加します。
mcpServers:
  cruncher:
    command: node
    args:
      - "/path/to/cruncher.js"
    env:
      CRUNCHER_TOOL_SET: "standard"
  1. Goose を再起動します。これで、Goose に evaluate_expression や median などを直接実行するよう依頼できます。
Zed Editor(AI ペイン)

Zed に組み込まれた AI ペインは、MCP 接続をサポートしています。

オプション A:npm パッケージを使用

  1. Settings → AI → MCP Servers を開きます。
  2. Add Server をクリックし、次の内容を入力します。
    • Name:cruncher
    • Command:npx
    • Args:@slbdn/cruncher-mcp
  3. 保存します。これで Zed AI は、正確な算術計算や統計処理のために Cruncher を呼び出せます。

オプション B:ダウンロードしたファイルを使用

  1. Settings → AI → MCP Servers を開きます。
  2. Add Server をクリックし、次の内容を入力します。
    • Name:cruncher
    • Command:node
    • Args:/absolute/path/to/cruncher.js
    • Env(任意):CRUNCHER_TOOL_SET=standard
  3. 保存します。これで Zed AI は、正確な算術計算や統計処理のために Cruncher を呼び出せます。
LM Studio(ローカル LLM + MCP)

LM Studio は LLM を完全にオフラインで実行し、MCP クライアントも備えています。

オプション A:npm パッケージを使用

  1. LM Studio で Settings → MCP を開きます。
  2. Add Server をクリックし、次の内容を入力します。
    • Executable:npx
    • Arguments:@slbdn/cruncher-mcp
  3. 確認します。これで、プライベートモデルはネットワーク通信なしで計算を Cruncher に委任できます。

オプション B:ダウンロードしたファイルを使用

  1. LM Studio で Settings → MCP を開きます。
  2. Add Server をクリックし、次の内容を入力します。
    • Executable:node
    • Arguments:/absolute/path/to/cruncher.js
    • Environment(任意):CRUNCHER_TOOL_SET=standard
  3. 確認します。これで、プライベートモデル(Llama 3、DeepSeek-V2 など)はネットワーク通信なしで計算を Cruncher に委任できます。
LibreChat の設定

LibreChat を使用している場合、次の設定を librechat.yaml ファイルに追加できます。

オプション A:npm パッケージを使用

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

オプション B:ダウンロードしたファイルを使用

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

Claude への質問例

「正弦が 0.5 になる角度は何度ですか?」

「次の数値の平均値、中央値、範囲を計算してください:[15、22、8、41、19、30]」

「2 の 10 乗はいくつですか?」

「[10、12、8、14、6]の標準偏差はいくつですか?」

「240 の 15%はいくつですか?」

「ある株価が 50 ドルから 75 ドルになりました。変化率は何%ですか?」

「テストの点数[85、92、78、90、88]の分散はいくつですか?」

「[3、7、2、9、1]の値の範囲を計算してください」

「式を計算してください:sin(pi/4) + sqrt(16) + log10(100)」

「10 の階乗はいくつですか?」

「17 を 5 で割った余りはいくつですか?」

フルティアの例(CRUNCHER_TOOL_SET=full を使用):

「99 をメモリに保存し、5 を加えてから、合計を呼び出してください。」

「[10、20、30、40、50]の 75 パーセンタイルはいくつですか?」

「11010 を 2 進数から 10 進数に変換してください。」

「一括処理:144 の平方根を求め、10 を加えてから、2 乗してください。」

「三角関数をラジアンモードに切り替えてください。」

「結果のキャッシュを消去し、キャッシュの統計情報を表示してください。」

「メモリの内容を呼び出し、15 を引いてから、結果を保存してください。」

「[23、45、12、67、89、34、56、78、90、11]の 95 パーセンタイルはいくつですか?」

「0xFF を 16 進数から 2 進数に変換してください。」


📋 利用可能なツール

Cruncher は、個々の MCP ツールとして機能を公開しています。以下が全リストです。

ツール名説明引数
基本的な算術演算
evaluate_expressionプレーンテキストの数式(例:(5 + 3) * 10 / 2)を評価します。expression(文字列)
add2 つの数値を加算します(a + b)。a(数値)、b(数値)
subtract2 つの数値の差を計算します(a - b)。a(数値)、b(数値)
multiply2 つの数値を乗算します(a * b)。a(数値)、b(数値)
divide1 つ目の数値を 2 つ目の数値で除算します(a / b)。a(数値)、b(数値)
modulo剰余を計算します(a mod b)。a(数値)、b(数値)
累乗と平方根
powera の b 乗を計算します(a^b)。base(数値)、exponent(数値)
sqrt値の平方根を計算します。value(数値)
数論
factorial0 以上の整数の階乗(n!)を計算します。n(数値、0 以上の整数)
単位変換
convert_unit一般的な単位間で変換します。8 つのカテゴリ、80 種類以上の単位に対応しています。value(数値)、category(文字列)、from(文字列)、to(文字列)
基数変換(フルティア)
convert_base2、8、10、16 進数間で変換します。value(文字列)、from_base(2、8、10、16)、to_base(2、8、10、16)
三角関数
sine角度の正弦を計算します。angle(数値)、unit(度/ラジアン、省略可)
cosine角度の余弦を計算します。angle(数値)、unit(度/ラジアン、省略可)
tangent角度の正接を計算します。angle(数値)、unit(度/ラジアン、省略可)
asin値の逆正弦(アークサイン)を計算します。角度を返します。value(数値)、unit(度/ラジアン、省略可)
acos値の逆余弦(アークコサイン)を計算します。角度を返します。value(数値)、unit(度/ラジアン、省略可)
atan値の逆正接(アークタンジェント)を計算します。角度を返します。value(数値)、unit(度/ラジアン、省略可)
対数
logarithm値の常用対数を計算します。value(数値)
natural_log値の自然対数(底が e の対数)を計算します。value(数値)
統計関数
sum数値の配列の合計を計算します。numbers(数値の配列)
avg数値の配列の平均を計算します。numbers(数値の配列)
median数値の配列の中央値を計算します。numbers(数値の配列)
min数値の配列の最小値を求めます。numbers(数値の配列)
max数値の配列の最大値を求めます。numbers(数値の配列)
count配列内の要素数を数えます。numbers(数値の配列)
range配列の範囲(最大値 - 最小値)を計算します。numbers(数値の配列)
percentile指定したパーセンタイル(0~100)における値を計算します。フルティア。numbers(数値の配列)、percentile(数値、0~100)
variance配列の分散を計算します。不偏分散(n-1)または母分散(n)を求めます。numbers(数値の配列)、population(ブール値、省略可)
std_dev標準偏差を計算します。不偏標準偏差(n-1)または母標準偏差(n)を求めます。numbers(数値の配列)、population(ブール値、省略可)
percentage_ofY の X%はいくつですか? 例:200 の 15% = 30。percent(数値)、total(数値)
percentage_changeA から B への変化率を計算します。例:50→80 = 60%。from(数値)、to(数値)
percentage_reverseX は何の Y%ですか? 例:30 は 200 の 15%です。value(数値)、percent(数値)
その他
absolute数値の絶対値を計算します。value(数値)
定数
get_constant数学、物理、化学に関する定数の値を返します。name("pi"、"e"、"tau"、"phi"、"sqrt2"、"euler_mascheroni"、"c"、"g"、"G"、"h"、"k"、"R"、"NA"、"e_charge"、"m_e"、"m_p")
メモリ関数(フルティア)
memory_clear計算機のメモリをクリアします(MC)。(引数なし)
memory_recallメモリに保存された値を呼び出します(MR)。(引数なし)
memory_add現在のメモリに値を加算します(M+)。value(数値)
memory_subtract現在のメモリから値を減算します(M-)。value(数値)
角度モード(スタンダードティア)
set_angle_modeグローバルな角度モードを設定します(デフォルト:度)。unit("degrees" または "radians")
get_angle_mode現在の角度モードを取得します。(引数なし)
管理ツール(フルティア)
batch複数のツール呼び出しを順番に実行します。operations({tool, arguments} の配列)
cache_clear計算キャッシュをクリアします。(引数なし)
cache_infoキャッシュの統計情報を表示します。(引数なし)

⚙️ 設定

環境変数
変数デフォルト説明
CRUNCHER_TIMEOUT3000ワーカースレッドの実行タイムアウト(ms)。範囲は100~60000です
CRUNCHER_TOOL_SETstandardツールの公開範囲を制御します:minimal(5)、standard(34 デフォルト)、full(43)
ツールティア — 完全リファレンス

Cruncher は、CRUNCHER_TOOL_SET 環境変数を介して 3 つのティアを公開します。各ティアには、その前のティアの内容がすべて含まれます。

ティアの概要
ティアツール数用途
Minimal(5)基本的な算術演算のみ軽量な計算機、簡単な数学エージェント
Standard(34 — デフォルト)Minimal の全ツール + 三角関数、統計、定数、単位変換汎用の数学向け AI アシスタント
Full(43)Standard の全ツール + メモリ、一括処理、キャッシュ、基数変換、高度な統計上級ユーザー、複数ステップのワークフロー
Minimal ティア(5 ツール)

すべてのツールは、タイムアウト保護付きでワーカースレッド内で実行されます。

#ツール説明
1evaluate_expression数式文字列を評価します
2add加算(a + b)
3subtract減算(a - b)
4multiply乗算(a × b)
5divide除算(a ÷ b)
Standard ティア(34 ツール — Minimal の全 5 ツールを含む)
#ツールカテゴリ
6sqrt平方根
7power累乗(a^b)
8absolute絶対値
9modulo剰余(a mod b)
10factorial階乗(n!)
11logarithm常用対数
12natural_log自然対数(ln)
13get_constant物理定数・数学定数を取得
14-16sine, cosine, tangent三角関数
17-19asin, acos, atan逆三角関数
20set_angle_mode度数法/ラジアンを切り替え(グローバル)
21get_angle_mode現在の角度モードを確認
22-25sum, avg, min, max基本統計
26count要素数を数える
27variance分散(標本または母集団)
28std_dev標準偏差(標本または母集団)
29percentage_ofY の X%
30percentage_changeA→B の変化率(%)
31percentage_reverseX は何の Y% か?
32median中央値
33range範囲(最大値 - 最小値)
34convert_unit8 カテゴリ、80 種類以上の単位変換
Full ティア(43 ツール — Standard の全 34 ツールを含む)
#ツールカテゴリ
35percentileN パーセンタイルの値
36convert_base2/8/10/16 進数の変換
37memory_add累積値に加算
38memory_subtract累積値から減算
39memory_recall現在のメモリ値を取得
40memory_clearメモリをゼロにリセット
41batch1 回の呼び出しで最大 50 件の操作を実行
42cache_clear結果キャッシュをクリア
43cache_infoキャッシュ統計を表示
あいまいなツール名の照合

LLM が存在しないツールを呼び出すと、Cruncher は レーベンシュタイン距離を使って最も近い候補を探し、提案します:

入力ミス提案一致タイプ
factfactorial接頭辞一致
facfactorial接頭辞一致
sinnsine1 文字の入力ミス
squrtsqrt文字の入れ替わり
addddadd余分な文字
dividdivide接尾辞の欠落
totally_wrong(なし)違いが大きすぎるため、候補なし

応答形式:

{
  "error": {
    "code": -32601,
    "message": "Tool 'fact' not found. Did you mean 'factorial'?"
  }
}
拡張版 evaluate_expression 組み込み関数

基本的な算術演算に加えて、evaluate_expression は次の関数を標準でサポートしています。

関数説明例結果
sin(x)正弦(ラジアン。式では常にラジアンを使用)sin(pi / 2)1
cos(x)余弦(ラジアン。式では常にラジアンを使用)cos(pi)-1
tan(x)正接(ラジアン)tan(pi / 4)~1
asin(x)逆正弦(結果はラジアン)asin(1)π/2
acos(x)逆余弦(結果はラジアン)acos(0)π/2
atan(x)逆正接(結果はラジアン)atan(1)π/4
sqrt(x)平方根sqrt(144)12
log10(x)常用対数(底 10)log10(1000)3
ln(x)自然対数(底 e)ln(e)1
log(x, b)任意の底の対数log(8, 2)3
abs(x)絶対値abs(-5)5
round(x)最も近い整数に丸めるround(3.7)4
floor(x)切り下げfloor(3.9)3
ceil(x)切り上げceil(3.1)4
min(a,b,...)最小値min(3, 1, 4)1
max(a,b,...)最大値max(3, 1, 4)4

自由に組み合わせられます:sin(pi/6) + sqrt(16) + log10(100) = 6.5

エラーメッセージの改善

定義域エラーが、問題の内容を示すようになりました。

  • sqrt(-1) → "次を確認してください:sqrt(負の数)、log(負の数/ゼロ)、asin/acos の範囲外の値 [-1,1]"
  • 1/0 → "ゼロ除算またはオーバーフローを確認してください"
  • asin(5) → "asin/acos の範囲外の値 [-1,1]"
式で使える定数

evaluate_expression 内で、数学定数や物理定数の名前を直接使用できるようになりました。

定数説明値
piπ(円周率)3.14159...
eネイピア数2.71828...
tauτ = 2π6.28318...
phi黄金比(φ)1.61803...
sqrt2√21.41421...
euler_mascheroniオイラー・マスケローニ定数(γ)0.57721...
c光速(m/s)299792458
g重力加速度(m/s2)9.80665
G万有引力定数6.6743e-11
hプランク定数(J·s)6.62607015e-34
kボルツマン定数(J/K)1.380649e-23
R気体定数(J/mol·K)8.314462618
NAアボガドロ定数(1/mol)6.02214076e23
e_charge電気素量(C)1.602176634e-19
m_e電子質量(kg)9.1093837015e-31
m_p陽子質量(kg)1.67262192369e-27

例:

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

ルール:

  • 演算子を明示してください:2 * pi は使えますが、2pi は使えません(暗黙の乗算には対応していません)
  • 定数は科学表記と共存します:1e6 と e * 2 はどちらも正しく動作します
  • 最長の定数名が最初に照合されます:euler_mascheroni が 299792458uler_mascheroni に変換されることはありません
段階的なツール公開

CRUNCHER_TOOL_SET 環境変数を使うと、必要なツールだけを公開して、コンテキストトークンの使用量を最適化できます。

段階ツールトークン予算用途
minimal5約160トークン基本的な算術演算。複雑な数学演算はすべて evaluate_expression で実行
standard34約1,150トークン算術、三角関数、統計、パーセンテージ、定数、単位変換(デフォルト)
full43約1,500トークンstandard にメモリ、基数変換、パーセンタイル、一括処理、キャッシュを追加

注:minimal モードでも、evaluate_expression で複雑な数学演算を処理できます。個別のツール(sin、sqrt など)が独立した MCP ツール呼び出しとして登録されないだけです。これにより、コンテキストトークンを最大 90% 節約できます。

MCP 設定の例(claude_desktop_config.json):

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

⛏️ 仕組み(開発者向け)

Cruncher は、標準入力/出力(stdio) 経由で通信する、シンプルな Node.js JavaScript アプリケーションです。これにより、軽量で移植性が高く、安全な MCP サーバーを実現しています。1 回のツール呼び出しにおける全体の流れは次のとおりです。

  1. 初期化:起動時、サーバーは MCP クライアントからの initialize リクエストを待ち受け、機能とバージョン情報(v1.2.31)を返します。
  2. ツールの検出:クライアントが tools/list リクエストを送信すると、サーバーは利用可能なすべての計算ツールと、必須の引数およびその型を定義する inputSchema の一覧を返します。
  3. 入力の検証:ツールを実行する前に、サーバーはカスタムの再帰的な validateArguments 関数をツールの inputSchema に対して実行します。これにより、外部ライブラリを使わずに、必須フィールドが指定されていること、型(数値、文字列、配列)が正しいこと、列挙値が有効であること、最小値/最大値の制約が守られていることを確認します。
  4. ワーカースレッドでの実行:検証が完了すると、ツール呼び出しは分離された Node.js worker_thread に渡されます。これにより、時間のかかる計算や無限ループによってメインスレッド(およびその stdio 通信)がブロックされるのを完全に防ぎます。
  5. タイムアウト保護:設定可能なタイマー(CRUNCHER_TIMEOUT、デフォルトは 3000ms)がワーカーを監視します。処理に時間がかかりすぎた場合、メインスレッドは worker.terminate() でワーカーを強制終了し、AI クライアントに -32000 エラーを返します。
  6. 安全な計算と結果:ワーカーは小数を安全に計算するための safeMath(整数スケーリング)を使ってハンドラー関数を実行し、その結果をメインスレッドに返します。メインスレッドは最終的な JSON-RPC 2.0 レスポンスを整形して stdout に書き込みます。

🤝 コントリビューション

コントリビューションを歓迎します!新しい関数の追加、バグの修正、ドキュメントの改善を希望される場合は、お気軽にイシューを作成するか、プルリクエストを送信してください。

📜 ライセンス

このプロジェクトは MIT ライセンス の下でライセンスされています。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。