Cruncher Mcp について
Cruncherは、AIクライアントやMCP実装を学ぶ開発者向けの軽量な科学計算MCPサーバーです。数学、統計、単位変換のツールを備え、Node.jsの機能で入力検証と計算タイムアウトを実装しています。
主な機能
- 01基本演算と数式評価
- 02三角関数、対数、数論
- 03統計とパーセント計算
- 0480種類以上の単位変換
- 05科学定数と任意のメモリ機能
- 06段階別ツールセットと計算タイムアウト
活用シーン
- 01数式や科学計算式の評価
- 02統計による数値データの分析
- 03対応単位間の測定値変換
- 04プレーンなJavaScriptによるMCP実装の学習
MCP 対応
stdio経由で計算機能を個別のツールとしてMCPクライアントに公開します。公式SDKを使わず、JavaScriptでMCPとJSON-RPCの処理を実装しています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @slbdn/cruncher-mcpCRUNCHER_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 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
34掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| a | number | はい | |
| b | number | はい |
詳細
Cruncher:科学計算機 MCP サーバー
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: ファイルを手動で用意する(別の方法)
ファイルを手動でダウンロードする場合は、次の手順に従ってください。
-
GitHub から
cruncher.jsファイルを直接ダウンロードします。 -
ファイルを永続的に保存できる場所に配置します(例:
C:\mcp-servers\cruncher.jsまたは/home/user/mcp-servers/cruncher.js)。 -
Claude Desktop の設定ファイルを探します。
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
-
ダウンロードしたファイルを指定するサーバー設定を追加します。
{ "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: 計算を始めましょう!
- 設定ファイルを保存し、Claude Desktop アプリを完全に終了します。
- Claude Desktop を再起動します。Cruncher サーバーに自動的に接続されます。
- 質問を始めましょう!
OpenWebUI(旧称 Ollama WebUI)
OpenWebUI は、stdio MCP サーバーへの接続を標準でサポートしています。
オプション A:npm パッケージを使用
- Admin Panel > Settings > Tools > MCP Servers に移動します。
- Add Server をクリックします。
- 名前を「Cruncher」にし、Command を選択して
npxを入力し、Args に@slbdn/cruncher-mcpを設定します。
オプション B:ダウンロードしたファイルを使用
- Admin Panel > Settings > Tools > MCP Servers に移動します。
- Add Server をクリックします。
- 名前を「Cruncher」にし、stdio を選択します。コマンドに
nodeを、引数に/path/to/cruncher.jsを指定します。
Cursor IDE
Cursor に組み込まれた AI に、計算やハッシュの算出を行う機能を追加できます。
オプション A:npm パッケージを使用
- Cursor の設定(歯車アイコン)> Features > MCP Servers を開きます。
- + Add New MCP Server をクリックします。
- Type に
command、Name にcruncher、Command にnpx @slbdn/cruncher-mcpを設定します。
オプション B:ダウンロードしたファイルを使用
- Cursor の設定(歯車アイコン)> Features > MCP Servers を開きます。
- + Add New MCP Server をクリックします。
- 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 パッケージを使用
~/.goose/config.yaml(またはローカルプロジェクトの設定ファイル)を編集します。- 新しいサーバーエントリーを追加します。
mcpServers:
cruncher:
command: npx
args:
- -y
- "@slbdn/cruncher-mcp"
オプション B:ダウンロードしたファイルを使用
~/.goose/config.yaml(またはローカルプロジェクトの設定ファイル)を編集します。- 新しいサーバーエントリーを追加します。
mcpServers:
cruncher:
command: node
args:
- "/path/to/cruncher.js"
env:
CRUNCHER_TOOL_SET: "standard"
- Goose を再起動します。これで、Goose に
evaluate_expressionやmedianなどを直接実行するよう依頼できます。
Zed Editor(AI ペイン)
Zed に組み込まれた AI ペインは、MCP 接続をサポートしています。
オプション A:npm パッケージを使用
- Settings → AI → MCP Servers を開きます。
- Add Server をクリックし、次の内容を入力します。
- Name:
cruncher - Command:
npx - Args:
@slbdn/cruncher-mcp
- Name:
- 保存します。これで Zed AI は、正確な算術計算や統計処理のために Cruncher を呼び出せます。
オプション B:ダウンロードしたファイルを使用
- Settings → AI → MCP Servers を開きます。
- Add Server をクリックし、次の内容を入力します。
- Name:
cruncher - Command:
node - Args:
/absolute/path/to/cruncher.js - Env(任意):
CRUNCHER_TOOL_SET=standard
- Name:
- 保存します。これで Zed AI は、正確な算術計算や統計処理のために Cruncher を呼び出せます。
LM Studio(ローカル LLM + MCP)
LM Studio は LLM を完全にオフラインで実行し、MCP クライアントも備えています。
オプション A:npm パッケージを使用
- LM Studio で Settings → MCP を開きます。
- Add Server をクリックし、次の内容を入力します。
- Executable:
npx - Arguments:
@slbdn/cruncher-mcp
- Executable:
- 確認します。これで、プライベートモデルはネットワーク通信なしで計算を Cruncher に委任できます。
オプション B:ダウンロードしたファイルを使用
- LM Studio で Settings → MCP を開きます。
- Add Server をクリックし、次の内容を入力します。
- Executable:
node - Arguments:
/absolute/path/to/cruncher.js - Environment(任意):
CRUNCHER_TOOL_SET=standard
- Executable:
- 確認します。これで、プライベートモデル(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(文字列) |
add | 2 つの数値を加算します(a + b)。 | a(数値)、b(数値) |
subtract | 2 つの数値の差を計算します(a - b)。 | a(数値)、b(数値) |
multiply | 2 つの数値を乗算します(a * b)。 | a(数値)、b(数値) |
divide | 1 つ目の数値を 2 つ目の数値で除算します(a / b)。 | a(数値)、b(数値) |
modulo | 剰余を計算します(a mod b)。 | a(数値)、b(数値) |
| 累乗と平方根 | ||
power | a の b 乗を計算します(a^b)。 | base(数値)、exponent(数値) |
sqrt | 値の平方根を計算します。 | value(数値) |
| 数論 | ||
factorial | 0 以上の整数の階乗(n!)を計算します。 | n(数値、0 以上の整数) |
| 単位変換 | ||
convert_unit | 一般的な単位間で変換します。8 つのカテゴリ、80 種類以上の単位に対応しています。 | value(数値)、category(文字列)、from(文字列)、to(文字列) |
| 基数変換(フルティア) | ||
convert_base | 2、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_of | Y の X%はいくつですか? 例:200 の 15% = 30。 | percent(数値)、total(数値) |
percentage_change | A から B への変化率を計算します。例:50→80 = 60%。 | from(数値)、to(数値) |
percentage_reverse | X は何の 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_TIMEOUT | 3000 | ワーカースレッドの実行タイムアウト(ms)。範囲は100~60000です |
CRUNCHER_TOOL_SET | standard | ツールの公開範囲を制御します:minimal(5)、standard(34 デフォルト)、full(43) |
ツールティア — 完全リファレンス
Cruncher は、CRUNCHER_TOOL_SET 環境変数を介して 3 つのティアを公開します。各ティアには、その前のティアの内容がすべて含まれます。
ティアの概要
| ティア | ツール数 | 用途 |
|---|---|---|
| Minimal(5) | 基本的な算術演算のみ | 軽量な計算機、簡単な数学エージェント |
| Standard(34 — デフォルト) | Minimal の全ツール + 三角関数、統計、定数、単位変換 | 汎用の数学向け AI アシスタント |
| Full(43) | Standard の全ツール + メモリ、一括処理、キャッシュ、基数変換、高度な統計 | 上級ユーザー、複数ステップのワークフロー |
Minimal ティア(5 ツール)
すべてのツールは、タイムアウト保護付きでワーカースレッド内で実行されます。
| # | ツール | 説明 |
|---|---|---|
| 1 | evaluate_expression | 数式文字列を評価します |
| 2 | add | 加算(a + b) |
| 3 | subtract | 減算(a - b) |
| 4 | multiply | 乗算(a × b) |
| 5 | divide | 除算(a ÷ b) |
Standard ティア(34 ツール — Minimal の全 5 ツールを含む)
| # | ツール | カテゴリ |
|---|---|---|
| 6 | sqrt | 平方根 |
| 7 | power | 累乗(a^b) |
| 8 | absolute | 絶対値 |
| 9 | modulo | 剰余(a mod b) |
| 10 | factorial | 階乗(n!) |
| 11 | logarithm | 常用対数 |
| 12 | natural_log | 自然対数(ln) |
| 13 | get_constant | 物理定数・数学定数を取得 |
| 14-16 | sine, cosine, tangent | 三角関数 |
| 17-19 | asin, acos, atan | 逆三角関数 |
| 20 | set_angle_mode | 度数法/ラジアンを切り替え(グローバル) |
| 21 | get_angle_mode | 現在の角度モードを確認 |
| 22-25 | sum, avg, min, max | 基本統計 |
| 26 | count | 要素数を数える |
| 27 | variance | 分散(標本または母集団) |
| 28 | std_dev | 標準偏差(標本または母集団) |
| 29 | percentage_of | Y の X% |
| 30 | percentage_change | A→B の変化率(%) |
| 31 | percentage_reverse | X は何の Y% か? |
| 32 | median | 中央値 |
| 33 | range | 範囲(最大値 - 最小値) |
| 34 | convert_unit | 8 カテゴリ、80 種類以上の単位変換 |
Full ティア(43 ツール — Standard の全 34 ツールを含む)
| # | ツール | カテゴリ |
|---|---|---|
| 35 | percentile | N パーセンタイルの値 |
| 36 | convert_base | 2/8/10/16 進数の変換 |
| 37 | memory_add | 累積値に加算 |
| 38 | memory_subtract | 累積値から減算 |
| 39 | memory_recall | 現在のメモリ値を取得 |
| 40 | memory_clear | メモリをゼロにリセット |
| 41 | batch | 1 回の呼び出しで最大 50 件の操作を実行 |
| 42 | cache_clear | 結果キャッシュをクリア |
| 43 | cache_info | キャッシュ統計を表示 |
あいまいなツール名の照合
LLM が存在しないツールを呼び出すと、Cruncher は レーベンシュタイン距離を使って最も近い候補を探し、提案します:
| 入力ミス | 提案 | 一致タイプ |
|---|---|---|
fact | factorial | 接頭辞一致 |
fac | factorial | 接頭辞一致 |
sinn | sine | 1 文字の入力ミス |
squrt | sqrt | 文字の入れ替わり |
adddd | add | 余分な文字 |
divid | divide | 接尾辞の欠落 |
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 | √2 | 1.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 環境変数を使うと、必要なツールだけを公開して、コンテキストトークンの使用量を最適化できます。
| 段階 | ツール | トークン予算 | 用途 |
|---|---|---|---|
minimal | 5 | 約160トークン | 基本的な算術演算。複雑な数学演算はすべて evaluate_expression で実行 |
standard | 34 | 約1,150トークン | 算術、三角関数、統計、パーセンテージ、定数、単位変換(デフォルト) |
full | 43 | 約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 回のツール呼び出しにおける全体の流れは次のとおりです。
- 初期化:起動時、サーバーは MCP クライアントからの
initializeリクエストを待ち受け、機能とバージョン情報(v1.2.31)を返します。 - ツールの検出:クライアントが
tools/listリクエストを送信すると、サーバーは利用可能なすべての計算ツールと、必須の引数およびその型を定義するinputSchemaの一覧を返します。 - 入力の検証:ツールを実行する前に、サーバーはカスタムの再帰的な
validateArguments関数をツールのinputSchemaに対して実行します。これにより、外部ライブラリを使わずに、必須フィールドが指定されていること、型(数値、文字列、配列)が正しいこと、列挙値が有効であること、最小値/最大値の制約が守られていることを確認します。 - ワーカースレッドでの実行:検証が完了すると、ツール呼び出しは分離された Node.js
worker_threadに渡されます。これにより、時間のかかる計算や無限ループによってメインスレッド(およびそのstdio通信)がブロックされるのを完全に防ぎます。 - タイムアウト保護:設定可能なタイマー(
CRUNCHER_TIMEOUT、デフォルトは 3000ms)がワーカーを監視します。処理に時間がかかりすぎた場合、メインスレッドはworker.terminate()でワーカーを強制終了し、AI クライアントに-32000エラーを返します。 - 安全な計算と結果:ワーカーは小数を安全に計算するための
safeMath(整数スケーリング)を使ってハンドラー関数を実行し、その結果をメインスレッドに返します。メインスレッドは最終的な JSON-RPC 2.0 レスポンスを整形してstdoutに書き込みます。
🤝 コントリビューション
コントリビューションを歓迎します!新しい関数の追加、バグの修正、ドキュメントの改善を希望される場合は、お気軽にイシューを作成するか、プルリクエストを送信してください。
📜 ライセンス
このプロジェクトは MIT ライセンス の下でライセンスされています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。