mcpField
A
A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator)

A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator)

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

A Rust port of calc (Landon Curt Noll's arbitrary-precision calculator) について

toRustCalcMCPは、calcをRustに移植したもので、コマンドライン、ブラウザーのREPL、MCPで任意精度計算を行うユーザー向けです。共通エンジンでは厳密な有理数演算を使います。

主な機能

  1. 01厳密な有理数演算
  2. 02calc互換のコマンドライン計算機
  3. 03ブラウザーベースのWeb REPL
  4. 04MCP計算ツール
  5. 05関数、変数、制御フロー
  6. 06複素数とリスト

活用シーン

  1. 01高精度な式の評価
  2. 02MCPクライアントからの計算機利用
  3. 03ブラウザーでの対話的な計算

MCP 対応

stdio上のJSON-RPC 2.0を使うMCPサーバーを提供します。クライアントは式の評価、セッションの精度や表示設定、組み込み関数の一覧取得を行えます。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"toRustCalcMCP": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/carlomagnoglobal/torustcalcmcp:latest"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/carlomagnoglobal/torustcalcmcp:latest

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

パッケージ
ocighcr.io/carlomagnoglobal/torustcalcmcp:latest

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

toRustCalcMCP

License Rust Crates.io

calc(Landon Curt Noll による任意精度計算機)を Rust に移植したもので、以下の用途で動作します。

  • rcalc — calc 互換のコマンドライン計算機
  • Web REPL — ブラウザー上で動作する対話型計算機
  • MCP サーバー — LLM/エージェントとの連携向けの stdio 経由 JSON-RPC 2.0

3 つのインターフェイスで、1 つのエンジンを使用します。 数値コアでは 正確な有理数演算 (num-bigint 上の num-rational)を採用しています。これは calc が本来採用しているものと同じモデルです。 そのため、1/3 * 3 は厳密に 1 となり、2^256 は最後の桁まで計算されます。

👉 2 分で始める — rcalc を初めて使う方は、こちらからどうぞ。 👉 Claude Desktop MCP としてインストール — Claude Desktop と連携できます。

ビルド

cargo build --release
# binaries:
#   target/release/toRustCalcMCP   (auto-detects MCP vs CLI)
#   target/release/rcalc           (always the CLI)

任意でシンボリックリンクを作成できます:ln -s toRustCalcMCP rcalc — argv[0] が rcalc の場合、 toRustCalcMCP は計算機として動作します。

CLI の使い方(rcalc)

rcalc '2^100'                 # 1267650600228229401496703205376
rcalc '1/3 + 1/6'            # 0.5
rcalc -m frac '1/3 + 1/6'    # 1/2
rcalc 'gcd(462,1071)'        # 21
rcalc 'fact(30)'            # 265252859812191058636308480000000
rcalc 'sqrt(2)'             # 1.4142135623730950488
rcalc 'isprime(1000003)' 'nextprime(1000003)'   # 1 \n 1000033
echo '3*4' | rcalc -p        # pipe mode
rcalc                        # interactive REPL (Ctrl-D to exit)

フラグ:-p はパイプモード、-q は静音モード、-m real|frac|int はモード、-v はバージョン、-h はヘルプです。 calc の従来のフラグ(-c -C -d -e -i -O -s -u)も受け付けますが、無視されます。

Web REPL の使い方

cargo build --release
./target/release/rcalc-web
# Open browser: http://localhost:8888

最新のブラウザーベースの REPL で、以下の機能を備えています。

  • 式の対話的な評価
  • コマンド履歴(↑/↓矢印キー)
  • 構文がハイライト表示された出力
  • calc のすべての機能(組み込み名 483 個)
  • モバイル/デスクトップ向けのレスポンシブデザイン

http://localhost:8888 を開き、2^256 または sin(pi()/6) を入力してみてください。

MCP の使い方

toRustCalcMCP --mcp     # speak JSON-RPC 2.0 over stdio

ハンドシェイク → initialize、次に tools/list、続いて tools/call の順に実行します。 サーバーが出力する正式なスキーマについては docs/MCP_TOOL_SCHEMA.json を、クライアント登録用のスニペットについては examples/mcp-config.json を参照してください。

ツール
tool目的主な引数
calc_eval式を評価するexpression(必須)、mode、digits、epsilon
calc_configセッションの精度と表示設定を取得/設定するaction(get/set)、mode、digits、epsilon
calc_functions組み込み関数を一覧表示するfilter(部分文字列、省略可)

calc_eval の mode/digits/epsilon は呼び出しごとの上書き設定です。calc_config set を使うと、セッション全体の設定が変更されます。

対応言語機能

  • 演算子:+ - * /(厳密)、//(整数除算)、%(剰余)、^/** (べき乗)、比較演算子 == != < <= > >=(結果は 1/0)、単項演算子 -/+。
  • 変数と代入:x = 7; x^2。
  • ユーザー定義関数:define f(x) = x^2; f(5) → 25。
  • 制御フロー:if/else、while、for ループ、{} を使ったブロック。
  • ; で区切った文。各文の値が出力されます(calc の動作)。
  • 数値リテラル:整数、a/b 形式の有理数、小数、1.2e-3、0x/0b。
  • リスト:list(1,2,3); append(x,4); slice(x,1,3)。
  • 複素数:sqrt(-1) → i。+、-、*、/ による演算に対応します。
  • 文字列リテラル:"hello"; strlen(s); index(haystack, needle)。
  • 組み込み名 483 個(calc の 350 個と完全に同等の機能から、ドキュメント化されたインタープリター内部機能 15 個を除き、拡張機能を追加)— 以下の実装状況を参照してください。

精度モデル

数値は正確な有理数です。無理数の結果は、calc と同様に、セッションの epsilon(デフォルトは厳密な 1/10^20)以内の近似値になります。超越関数(exp、 ln、sin、cos、tan)は、テイラー級数とニュートン法を使って任意精度で計算されます。sqrt、sin、cos などは、項が epsilon 未満になるまで収束計算を続けます。 pi/e は 60 桁の定数です。real モードの出力に先頭の ~ が付いている場合は、calc と同様に、不正確な(丸められた/循環する)表現であることを示します。

実装状況 — upstream と完全に同等です ✅

calc upstream(lcn2/calc の func.c)では、350 個の組み込み関数が定義されています。この移植版では、483 個の組み込み関数名を登録し、upstream の組み込み関数 350 個のうち 335 個に対応しています(長らく未対応だった残りの 148 個は、以下の upstream との同等性を高める段階で追加されました)。さらに、upstream にない拡張機能やエイリアスも数十個あります(統計、ハッシュ、ビット演算、システム情報など)。

意図的に未実装(インタープリター内部の 15 個)

以下の upstream 名は calc の C インタープリターの内部実装に由来し、この移植版のアーキテクチャには意味のある対応付けがありません。実体のないスタブを提供するのではなく、未実装のままにしています。

access、calc_tty、calclevel、calcpath、custom、dp、estr、 inputlevel、memsize、name、param、prompt、protect、saveval、 stoponerror

upstream との既知の差異
  • 出力引数を取る組み込み関数は、代わりに値を返します。d2dm/d2dms(および g/h 系)は [deg, min]/[deg, min, sec] のリストを返し、quomod は [q, r] を返し、search/rsearch はインデックスまたは null を返します。
  • インプレース/左辺値を扱う組み込み関数は、新しい値を返します。modify、copy、swap が該当します(組み込み関数が受け取るのは値であり、参照ではありません)。
  • base2() は 0 を読み取ります(2 つ目の基数はありません)。設定するとエラーになります。レンダラーが対応する出力基数は 1 つだけです。
  • free*() は何もしません。キャッシュは使用せず、値は必要に応じて計算されます。
言語機能の全容
  • ✅ ユーザー定義関数(define name(params) = expr)、高階組み込み関数(select/forall/modify が関数値を呼び出します)
  • ✅ 制御フロー(if/else、while、for ループ)
  • ✅ 変数とスコープ
  • ✅ リストとインデックス指定(0 始まり、負のインデックスにも対応)
  • ✅ 完全な算術演算に対応した複素数
  • ✅ 文字列リテラルと、文字列関数一式
  • ✅ 基数変換(2~36、入力と出力)
  • ✅ 任意精度演算(正確な有理数、正確な 1/10^20 のイプシロン)
  • ✅ ファイルの読み込み(-f filename)、ファイル I/O 組み込み関数、REPL、パイプモード

対象範囲 — アーキテクチャと設計

calc upstream は約 92,000 行の C で構成され、約 350 個の組み込み関数と、チューリング完全なスクリプト言語を備えています。この移植版は、段階的に拡張できるよう構成された、忠実なコアです。

  • ✅ 正確な有理数を扱う数値エンジン — calc のネイティブなモデルに一致します
  • ✅ 完全な字句解析器/パーサー — 式の構文全体を処理します
  • ✅ ツリーウォーク評価器 — ユーザー定義関数、制御フロー、スコープに対応します
  • ✅ 組み込み関数レジストリ — 自動カタログ化に対応した拡張可能な関数マップ
  • ✅ CLI と MCP サーバー — 2 つのフロントエンドで 1 つのエンジンを使用します
  • 🔄 段階的な組み込み関数の追加 — 各カテゴリーを既存部分の作り直しなしに追加できます

アーキテクチャは安定しており、関数の追加は簡単です。

ライセンス

calc upstream と同じ LGPL-2.1 です。

テスト CI ワークフロー

コメント

MCP は初めてですか?

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

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