mcpField
C
Calculator

Calculator

ローカル
github.com科学・教育0今日更新

Calculator について

Calculatorは、正確な式評価を必要とするエージェント向けの算術MCPサーバーです。ASTの許可リストで式を解析し、任意の桁数の整数を正確に扱いながら、リソース使用量も制限します。

主な機能

  1. 01算術式と数学関数を評価
  2. 02任意の桁数の整数を正確に処理
  3. 03AST許可リストで構文を制限
  4. 04式の長さ、深さ、結果サイズを制限
  5. 05エラーを読みやすいテキストで返却

活用シーン

  1. 01複雑な算術式を検算
  2. 02大きな整数の積を計算
  3. 03エージェントのワークフローで数学関数を実行
  4. 04リソースを使い果たす可能性のある式を拒否

MCP 対応

MCPクライアントに単一の`calculate`ツールを提供し、式を受け取って結果文字列または読みやすいエラーを返します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"slettmayer-calc": {
"command": "uvx",
"args": [
"calc-mcp-server"
]
}
}
}
起動コマンドuvx calc-mcp-server

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

パッケージ
pypicalc-mcp-server0.1.9

ツール

1

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

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

詳細

Calculator MCP Server

PyPI Python License: MIT

LLM が暗算しなくても済むよう、正確に算術演算を行う MCP サーバーです。

ツールは calculate の 1 つだけで、手作りの AST 許可リストに照らして式を評価します。eval() も sympy も、際限のない依存関係もありません。

2 + 3 * (4 - 1) / 2 ** 2   ->  4.25
sqrt(16) + sin(pi/2)       ->  5.0
123456789 * 987654321      ->  121932631112635269

これを作った理由

広く使われている mcp-server-calculator パッケージは放棄されており(最終コミットは 2025 年 5 月)、上限を設けずに mcp>=1.4.1 を宣言しています。MCP Python SDK が v2 をリリースして mcp.server.fastmcp を削除すると、これを uvx …@latest でインストールしたものはすべて、インポート時にクラッシュするようになりました。その結果、このパッケージをホストしていた MCP プロキシ全体と、同じプロキシ上のほかのすべてのサーバーが停止しました。

保守が続けられている Python の代替品はありません。現在も積極的に保守されている npm の計算機は float64 で計算するため、123456789 * 987654321 の結果は 121932631112635260 となり、9 ずれます。モデルが算術演算そのものをしなくて済むようにするのが目的のツールとして、これは大きな欠点です。

そのため、このサーバーでは次のようにしています。

  • 唯一の依存関係にバージョン範囲を指定しています(mcp[cli]>=2,<3)。上記の問題はここでは再発しません。
  • どんな桁数の整数も正確に保ちます。浮動小数点数への変換は行いません。
  • コードの実行だけでなく、リソース使用量にも上限を設けています。詳細は以下をご覧ください。

安全性

問題は 2 つありますが、ほとんどの計算機サーバーが解決しているのは最初の問題だけです。

コードの実行。 式は ast.parse で解析し、明示的なノード型の許可リストに照らして走査します。Attribute は許可リストにないため、(1).__class__.__bases__ は拒否されます。Call は、呼び出し先が関数の許可リストにある単独の名前である場合にのみ評価されるため、__import__('os').system(…) は引数が評価される前に拒否されます。

リソースの枯渇。 許可リストだけでは、上限のない巨大整数のべき乗計算で 9**9**9 が数分間プロセスを占有する可能性があります。従来のサーバーはこれで 5 秒以上ハングします。4 つの上限でこれを防ぎます。式の長さ(500 文字)、ネストの深さ(32)、結果のサイズ(4300 桁。べき乗の前にオペランドを確認)、階乗の引数(1000)です。

詳細は docs/tech/SAFE-EVALUATION.md をご覧ください。

インストール

uvx calc-mcp-server

バージョンを固定してください。@latest は追加しないでください。置き換え対象のパッケージが壊れた原因がそれです。

設定

stdio MCP サーバーとして使用する場合:

{
  "mcpServers": {
    "calculator": {
      "command": "uvx",
      "args": ["calc-mcp-server"]
    }
  }
}

calculate ツール

引数型説明
expressionstr評価する式

結果は文字列で返されます。式が拒否された場合は、理由を説明する Error: で始まる行が返されます。このツールは例外を送出しないため、不正な式もツール呼び出しの失敗ではなく、エージェントが読み取れる回答になります。

演算子 — + - * / // % **、括弧、単項演算子の +/- を使用できます。^ はべき乗演算子として受け付けます。また、× · ÷ − はそれぞれ ASCII の同等記号として受け付けます(音声認識ではこれらの記号が出力されます)。

定数 — pi、e、tau。

関数 — abs round min max sqrt exp log log2 log10 sin cos tan asin acos atan atan2 degrees radians hypot floor ceil factorial gcd lcm。

結果 — 整数演算では、どんな桁数の整数でも正確に返します。浮動小数点数は有効数字 12 桁で表示するため、IEEE-754 の表現誤差が取り除かれます(0.1 + 0.2 は 0.30000000000000004 ではなく 0.3 と表示されます)。一方で、計算機の結果に必要な精度を十分に上回る精度を保ちます。整数値の浮動小数点数には .0 が残るため、8 / 2 は 4.0 と表示され、正確な整数の 4 と区別されます。

開発

uv sync
uv run pytest tests/ -v
uv run ruff check .
uv run ruff format .

プロジェクトガイドについては AGENTS.md を、ドキュメント一式については docs/ をご覧ください。

ライセンス

MIT — LICENSE をご覧ください。

コメント

MCP は初めてですか?

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

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