calculator-mcp-server について
calculator-mcp-serverは、数値計算や記号計算を必要とするクライアントやエージェント向けのMCPサーバーです。評価、簡約、微分に対応し、型付きエラーと実行制限を備えています。
主な機能
- 01算術、統計、行列、単位などの計算
- 02代数式と三角関数式の簡約
- 03記号微分の計算
- 04number、BigNumber、Fractionの選択
- 05リソースで構文や関数を確認
活用シーン
- 01指定精度で数値結果を確認
- 02後続処理の前に式を簡約
- 03変数名を指定して式を微分
MCP 対応
評価、簡約、微分を行う `calculate` ツールと、`calculator://help` リソースを提供します。STDIOとStreamable HTTPに対応しています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://calculator.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-calculator https://calculator.caseyjhand.com/mcp{"mcpServers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}Cursor で開く{"servers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}VS Code で開く{"mcpServers":{"cyanheads-calculator":{"type":"http","url":"https://calculator.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-calculator":{"serverUrl":"https://calculator.caseyjhand.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
1| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| scope | object | いいえ | evaluate で使用する変数の割り当てです。simplify と derivative では無視されます。例:{ "x": 5, "y": 3 } を指定すると、"x + y" の評価結果は 8 になります。 |
| variable | any | いいえ | 微分する変数です。operation が "derivative" の場合は必須です。空文字列は省略として扱われます。例:"x"。 |
| operation | enum | いいえ | 実行する操作です。"evaluate" は数値結果を計算します(デフォルト)。"simplify" は代数式を記号的に簡約します(例:"2x + 3x" -> "5 * x")。代数恒等式と三角恒等式に対応します。簡約器で式をこれ以上簡約できない場合(多項式の因数分解が必要な有理式など)、式を変更せずに返し、出力の unchanged: true が設定されます。"derivative" は記号微分を計算します(variable パラメーターが必要です)。evaluate | simplify | derivative |
| precision | any | いいえ | 数値結果の有効桁数(1~16)です。完全精度の場合は省略してください。空文字列は省略として扱われます。分数の結果は常に正確に表示され、記号操作(simplify、derivative)では無視されます。 |
| expression | string | はい | 1 回の呼び出しにつき数学式を 1 つ指定してください。`;` や改行で文を区切ることはできません。行列内では `;` で行を区切ります(例:`[1, 2; 3, 4]`)。算術(+、-、*、/、^、%)、算術・三角関数(sin、cos、sqrt、log、abs、round)、統計(mean、median、std、variance。std と variance はデフォルトで標本形式(n − 1)を返します。母集団形式には "uncorrected" を渡します。例:`std([2, 4, 6], "uncorrected")`)、組み合わせ論(factorial、permutations、combinations)、行列演算(det、inv、transpose)、定数(pi、e、phi、i)、単位(5 kg to lbs)、変数(scope が指定されている場合)に対応します。math.js の名称 `log` と `asin`/`atan` に加え、標準記法の `ln` と `arc*`(例:`arcsin`、`arctan`)も使用できます。`stdev`、`permute`、`nCr`、`length`/`len` などの一般的な同義語は、math.js の名称(`std`、`permutations`、`combinations`、`count`)に解決されます。 |
| numericType | enum | いいえ | evaluate に使用する数値型です。"number"(デフォルト):64 ビット IEEE 754 浮動小数点数。最速で、有効桁数は約 16 桁です。約 1.8e308(171!、2^1024、exp(1000))を超える値はオーバーフローし、undefined_result で失敗します。"BigNumber":有効桁数 64 桁で、指数範囲が大幅に広い十進数です。"number" より遅いため、オーバーフロー時に切り替えて再試行してください。結果は 64 桁の近似値です(10000!/9999! は 9999.99…96 を返し、precision: 16 では 10000 に丸められます)。ゼロ除算、0/0、log(0) はすべての数値型で未定義のため、数値型を変更しても解決しません。"Fraction":正確な有理数演算です(0.1 + 0.2 は 3/10 を返します)。結果が正確な有理数にならない場合(sqrt(2)、sin(1)、log(3)、Fraction モードで計算できない関数を式が呼び出す場合(sqrt(4)、5!、combinations(5, 2))、または Fraction モードが丸めた浮動小数点数としてのみ保持する値(pi、e、2^(1/2)、非整数部分を含む複素数、number(x)、random())を使用する場合は、fraction_unsupported で失敗します。これらには "number" または "BigNumber" を使用してください。無理数の変換係数を持つ単位変換(30 deg to rad)は、厳密値ではなく近似的な有理数を返します。記号操作(simplify、derivative)では無視されます。number | BigNumber | Fraction |
詳細
@cyanheads/calculator-mcp-server
MCP を介して数式の評価、簡約、微分を行います。STDIO または Streamable HTTP に対応しています。
公開ホストサーバー: https://calculator.caseyjhand.com/mcp
概要
math.js を利用した電卓です。1 つのツールで数値の結果を検証し、代数式を簡約し、記号微分を計算できます。
ツール
| ツール | 説明 |
|---|---|
calculate | 数式を評価し、代数式を簡約するか、記号微分を計算します。 |
リソース
| リソース | 説明 |
|---|---|
calculator://help | 利用可能な関数、演算子、定数、および構文のリファレンスです。 |
機能リファレンス
calculate tool
- 1 回の呼び出しにつき
expressionは 1 つです。operationではevaluate(デフォルト)、simplify、またはderivativeを選択します。導関数を求める場合はvariable(例:"x")が必要です。 - 算術、三角関数、対数、統計、行列、複素数、単位、組み合わせ論の計算に対応します。数値変数は
scopeで割り当てます(例:{ "x": 5 })。 numericTypeではnumber、BigNumber(有効桁数 64 桁。64 ビット浮動小数点数でオーバーフローする値に使用)、またはFraction(正確な有理数)を選択します。結果が正確な有理数にならない場合(sqrt(2))、Fraction モードでは計算できない関数を式が呼び出す場合(sqrt(4)、5!)、または Fraction モードが丸めた浮動小数点数としてのみ保持する値を使用する場合(pi、2^(1/2))、Fraction モードはfraction_unsupportedを返し、数値型を変更するよう案内します。precisionでは数値結果の有効桁数を 1~16 桁に設定します。空欄の省略可能なvariableとprecisionは省略されたものとして扱います。scopeとprecisionは記号演算に影響しません。- 簡略化には代数および三角関数の恒等式が含まれます(
2x + 3x→5 * x)。unchanged: trueは、多項式の因数分解や有理式の約分など、簡略化できない式を示します。 - 結果の文字列、結果の型、元の式、演算を返します。検証エラーには、型付きの理由と復旧のヒントが含まれます。
calculator://help resource
- 関数、演算子、定数、単位、式の構文についての Markdown リファレンスです。パラメーターはありません。
- 使用例では、scope、行列、複素数、精度、3 種類すべての演算を扱います。
- 公開 scope の
cacheHintを使用して 24 時間キャッシュできます。実行時に変更されない静的コンテンツです。
機能
@cyanheads/mcp-ts-core を基盤としており、stdio および Streamable HTTP トランスポート、切り替え可能な認証(none / jwt / oauth)、切り替え可能なストレージ(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1)、オプションの OpenTelemetry トレーシングに対応した構造化ログを提供します。
計算機固有の機能:
- 強化された math.js v15 インスタンス。危険な関数は無効化され、評価は
vmタイムアウト内で実行されます - 認証は不要です。すべての操作は読み取り専用で、ステートレスです
- 入力検証:式の長さ制限と複数ステートメントの拒否。行列の行区切り文字と文字列の内容は引き続き有効です
- 結果検証:結果の型(関数、パーサー、結果セット)をブロックし、結果サイズの最大値を設定できます
- サイズ制限:サイズ、積、ブロードキャスト、インデックス、精度の引数から行列または文字列を構築する関数には、呼び出しごとの上限を設定します。また、各評価には要素数の合計上限があり、上限を超えるリクエストは
result_too_largeで速やかに失敗します - scope のサニタイズ:数値のみを許可し、プロトタイプ汚染を防止します(
__proto__、constructorなどをブロック)
エージェント向けの出力:
- 実際の呼び出し内容をエコー:すべての応答で式と演算をエコーし、適用した scope 変数と精度も示すため、エージェントは実際に計算された内容を確認できます
- 判別可能な出力コントラクト:
simplifyのunchanged: trueは、同じ式を黙って返すのではなく、結果が変化しなかったことを示します - 型付きのエラー理由:検証および評価の失敗には、生の例外ではなく、型付きの
reason(例:fraction_unsupported、evaluation_timeout、disallowed_result_type)と、実行可能な復旧のヒントが含まれます
はじめに
公開ホストインスタンス
公開インスタンスは https://calculator.caseyjhand.com/mcp で利用できます。インストールは不要です。Streamable HTTP を提供しており、クライアントごとに設定形式が異なります。
Claude Code の場合:
claude mcp add --transport http calculator-mcp-server https://calculator.caseyjhand.com/mcp
Cline の場合(cline_mcp_settings.json):
{
"mcpServers": {
"calculator-mcp-server": {
"type": "streamableHttp",
"url": "https://calculator.caseyjhand.com/mcp"
}
}
}
Cursor の場合(mcp.json):
{
"mcpServers": {
"calculator-mcp-server": {
"url": "https://calculator.caseyjhand.com/mcp"
}
}
}
Claude Desktop では、Settings → Connectors からリモートサーバーを追加します。
セルフホスト/ローカル
次のいずれかを MCP クライアントの設定ファイルに追加します。
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/calculator-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、npx を使用します(Bun は不要です)。
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/calculator-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
または、Docker を使用します。
{
"mcpServers": {
"calculator-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/calculator-mcp-server:latest"
]
}
}
}
Streamable HTTP を使用する場合は、トランスポートを設定してビルド済みサーバーを起動します。
MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前提条件
- Bun v1.4.0 以上
インストール
- リポジトリをクローンします。
git clone https://github.com/cyanheads/calculator-mcp-server.git
- ディレクトリに移動します。
cd calculator-mcp-server
- 依存関係をインストールします。
bun install
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
CALC_MAX_EXPRESSION_LENGTH | 許可される式文字列の最大長(10~10,000)。 | 1000 |
CALC_EVALUATION_TIMEOUT_MS | 評価の最大時間(ミリ秒、100~30,000)。 | 5000 |
CALC_MAX_RESULT_LENGTH | 結果文字列の最大長(文字数、1,000~1,000,000)。 | 100000 |
MCP_TRANSPORT_TYPE | トランスポート:stdio または http。 | stdio |
MCP_HTTP_HOST | HTTP サーバーのホスト名。 | 127.0.0.1 |
MCP_HTTP_PORT | HTTP サーバーのポート。 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP MCP エンドポイントのパス。 | /mcp |
MCP_HTTP_MAX_BODY_BYTES | HTTP リクエストの最大受信サイズ。0 にすると制限が無効になります。 | 1048576 |
MCP_AUTH_MODE | 認証モード:none、jwt、または oauth。 | none |
MCP_SESSION_MODE | auto、stateful、または stateless。サーバーはコード内で stateless を宣言しているため、どの起動方法でも同じ設定が適用されます。この値を設定すると、その宣言が上書きされます。 | stateless |
MCP_LOG_LEVEL | ログレベル(RFC 5424)。 | info |
セッション、再開可能性、ログ記録、テレメトリの任意の設定については、.env.example を参照してください。
サーバーの実行
ローカル開発
-
本番バージョンをビルドして実行します。
bun run build bun run start:http # or start:stdio -
チェックとテストを実行します。
bun run devcheck # Lints, formats, type-checks bun run test # Runs test suite
Docker
docker build -t calculator-mcp-server .
docker run -p 3010:3010 calculator-mcp-server
イメージのデフォルト設定は、ポート 3010 での Streamable HTTP、ステートレスセッション、/var/log/calculator-mcp-server へのログ出力です。OpenTelemetry の依存関係はデフォルトでインストールされます。省略するには、--build-arg OTEL_ENABLED=false を指定してビルドしてください。
プロジェクト構成
| ディレクトリ | 用途 |
|---|---|
src/mcp-server/tools/ | ツールの定義(*.tool.ts)。 |
src/mcp-server/resources/ | リソースの定義(*.resource.ts)。 |
src/services/ | ドメインサービスとの連携(MathService)。 |
src/config/ | Zod による環境変数の解析と検証。 |
docs/ | 生成されたディレクトリツリー。 |
tests/ | 計算、設定、レスポンス契約のテスト。 |
開発ガイド
開発ガイドラインとアーキテクチャ上のルールについては、AGENTS.md または CLAUDE.md を参照してください。要点は次のとおりです。
- ハンドラーは例外をスローし、フレームワークが捕捉します。ツールのロジック内で
try/catchを使用しないでください。 - ログ記録には
ctx.logを使用してください。 - 新しいツールとリソースは
src/index.tsに登録してください。
コントリビューション
Issue を歓迎します。提出前にチェックを実行してください。
bun run devcheck
bun run test
ライセンス
Apache-2.0 — 詳細は LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。