MolForma

MCPサーバー

MolFormaのネイティブ実行ファイルに、分子編集、NWChemの入力生成・実行、計算履歴、結果表示とGUI操作用のMCPサーバーを内蔵しています。追加のPython/Node.jsランタイムやMCP SDKのインストールは不要です。

2026-10-24に確認した最新の安定版 2026-07-28 と、従来の 2025-11-25 に対応します。新しい仕様は初期化を省略し、リクエストごとにプロトコル情報を指定します。新しい仕様の server/discover、tools/list、resources/list、resources/templates/list、resources/read の結果には、必須のキャッシュ情報 ttlMs: 0 と cacheScope: "private" を付けます。文書はGUI操作でも変わるため、クライアントにキャッシュさせません。旧版の initialize に対しては 2025-11-25 を返します。それより古い版のみ対応するクライアントは更新してください。

ツールとリソースに加えて、次の機能を提供します。

2026-07-28で廃止された ping は、新しい仕様のリクエストでは -32601 を返します。旧版の接続では引き続き使えます。

参照した公式仕様:

接続設定

MCPクライアントのサーバー設定で、実行ファイルの絶対パスと引数を指定します。mcpServers 形式を使うクライアントでは次のように設定します。

{
  "mcpServers": {
    "molforma": {
      "command": "/absolute/path/to/molforma",
      "args": ["--mcp-gui"]
    }
  }
}

--mcp-gui はクライアントが新しいMolFormaウィンドウを起動し、そのウィンドウの文書を操作します。既に起動している別のウィンドウには接続しません。GUIの表示には通常のデスクトップ環境が必要です。起動時のファイルも指定できます。

"args": ["--mcp-gui", "/absolute/path/to/molecule.molforma.json"]

画面が不要な自動処理では "args": ["--mcp"] を指定します。このモードは空の文書で始まり、DISPLAYやQtの画面用プラグインを必要としません。両モードは23個の文書・設定ツールを共有します。--mcp はさらに計算・結果用の4ツールを提供し、合計27個です。--mcp-gui は同名の4ツールを含む17個のGUI・実行・結果ツールを提供し、合計40個です。GUI機能を表示なしで自動検証する場合は --mcp-gui に QT_QPA_PLATFORM=offscreen、MOLFORMA_RENDERER=painter を設定できます。

ツールの名前・説明・スキーマは英語です。結果に含まれるメッセージ(エラー・警告・検査結果など)とGUIの表示は、MolFormaの表示言語(環境設定の「表示言語 / Language」、未設定ならシステムの言語)に従います。サーバー設定の環境変数に MOLFORMA_LANGUAGE(ja / en)を指定すると、その言語に固定できます。

通信は標準入力・標準出力の改行区切りUTF-8 JSON-RPCです。標準出力にはプロトコルメッセージだけを書き、診断は標準エラーへ出します。標準入力を閉じると、GUIモードを含めてプロセスが終了します。必要な文書は切断前に保存してください。 接続終了時の保存ダイアログや自動保存はありません。

通常の起動ではMCPは無効です。ネットワークポートは開きません。MCPクライアントが許可した呼び出しによって、起動したMolFormaプロセスの権限でローカルファイルを読み書きします。ファイル操作のパスは各呼び出しで明示的に指定します。読み書きする場所を限る方法と、実行するプログラムの保護は安全のための制限を参照してください。

Claude Codeでの登録

Claude Code 2.1.310で、新しい仕様(2026-07-28)による接続とツールの呼び出しを確認しています。Claude Codeは server/discover で接続するため、互換モードは使いません。

自分の環境だけで使う場合は、claude mcp add で登録します。-- より後ろがMolFormaの起動コマンドです。

claude mcp add molforma -- /absolute/path/to/molforma --mcp-gui

既定の登録範囲は local で、現在のプロジェクトだけで有効です。すべてのプロジェクトで使う場合は --scope user を付けます。どちらも設定は ~/.claude.json に保存されます。

チームで設定を共有する場合は --scope project を付けます。設定はリポジトリ直下の .mcp.json に保存されます。利用者ごとに実行ファイルの場所が違う場合は、環境変数の展開を使い、絶対パスを書かないようにします。

{
  "mcpServers": {
    "molforma": {
      "command": "${MOLFORMA_BIN:-molforma}",
      "args": ["--mcp-gui"]
    }
  }
}

${MOLFORMA_BIN:-molforma} は、環境変数 MOLFORMA_BIN が設定されていればその値、なければ PATH 上の molforma を使います。プロジェクトの .mcp.json を対話セッションで初めて使うときは、Claude Codeが利用の承認を求めます。承認をやり直す場合は claude mcp reset-project-choices を実行します。

Claude Codeは起動時の環境変数をそのまま子プロセスへ渡すため、Linuxでも DISPLAY などの追加設定は通常不要です。画面のない環境で起動したClaude Codeから --mcp-gui を使うと、表示先がないためMolFormaが起動直後に終了します。その場合は --mcp を指定してください。

接続の確認と問題の調査には次の方法を使います。

Claude Code 2.1.310の動作は次のとおりです(2026-10-24確認)。

Claude Codeは1回のツール結果が既定で25,000トークン(環境変数 MAX_MCP_OUTPUT_TOKENS で変更可能)、または50,000文字を超えると、結果を会話に直接入れずファイルへ保存します。MolFormaは編集結果を変更の要約にとどめ、GUI一覧・表・結果を約40 KiBで区切るため、通常はこの上限内に収まります。get_document、export_document、get_results には _meta["anthropic/maxResultSizeChars"] を付け、10万文字までは会話に直接入れます。それより大きな文書では get_document の include で必要な部分だけを取得してください。詳細はClaude Code公式のMCP設定を参照してください。

Codexでの登録

LinuxでGUIを表示する場合、Codexが子プロセスへ渡す環境変数も指定します。codex mcp add molforma -- /absolute/path/to/molforma --mcp-gui だけでは、デスクトップの接続情報が引き継がれず、初期化前に終了する場合があります。

~/.codex/config.toml の該当サーバーを次のように設定してください。既存の [mcp_servers.molforma] があれば、そのセクションを編集します。

[mcp_servers.molforma]
command = "/absolute/path/to/molforma"
args = ["--mcp-gui"]
env_vars = ["DISPLAY", "WAYLAND_DISPLAY", "XDG_RUNTIME_DIR", "XAUTHORITY", "DBUS_SESSION_BUS_ADDRESS"]

env_vars は変数の値を固定せず、Codexの起動環境から引き継ぐ設定です。Codex自体も同じ利用者のデスクトップ環境から起動してください。画面のない環境では args = ["--mcp"] を使い、env_vars は不要です。通常は互換モードのMCP 2025-11-25で接続します。

設定を反映するためCodexのMCP設定を再読み込みするかCodexを再起動し、/mcp で molforma: connected (38 tools)(GUIモード)を確認します。実行ファイルを更新した場合も再接続が必要です。アカウントへの再ログインやMolForma用の認証は不要です。Codex公式のMCP設定 も参照してください。

failed (0 tools) と初期化時の connection closed が表示される場合は、上記の環境変数を最初に確認してください。Linuxで表示先が未指定のときは、MolFormaも標準エラーに requires a desktop display と設定方法を出します。無効な表示先や画面のアクセス権の問題も、GUIの起動前に解決する必要があります。

安全のための制限

MCPクライアント(とその背後のLLM)は、読み込んだファイルや計算結果の内容に影響されることがあります。MolFormaは次の制限をサーバー側で適用します。どちらも起動引数でだけ変更でき、MCPのリクエストからは変更できません。現在の制限は get_execution の policy で確認できます。

実行ファイル・ランチャー・環境変数・追加入力の保護

NWChem実行ファイル(executable)、MPIランチャー(launcher)、追加の環境変数(environment)を変えると、任意のプログラムを起動したり、LD_PRELOAD などで任意のコードを読み込ませたりできます。計算条件の追加入力(set_nwchem の extra_input / extra_tasks)はMolFormaが検査せずにNWChem入力へ加えるため、同じ扱いにしています(task shell と python ブロックは常に拒否します)。既定では、これらをMCPから変更できません。

ファイルを扱う場所の制限

起動引数に --mcp-allow-dir <ディレクトリ> を指定すると、MCPが読み書きする場所をそのディレクトリ以下に限ります。複数回指定できます。存在しないディレクトリを指定すると起動しません。指定しない場合は制限しません。

"args": ["--mcp-gui", "--mcp-allow-dir", "/home/user/molforma-work"]

編集の流れ

  1. list_documents から documentId を取得します。
  2. get_document にそのIDを渡し、revision、確定済み project、未確定の candidate を読みます。原子参照には project.document.atoms の安定IDを使います。include に ["project"] / ["candidate"] を指定するとその部分だけを、[] を指定すると版・組成式・原子数と hasCandidate だけを返します。省略時は両方を返します。
  3. 編集ツールに documentId と expectedRevision を渡します。標準では候補だけを作成します(preview: true)。
  4. 編集ツールと history は、プロジェクト全体ではなく要約を返します。要約は新しい revision、確定文書の formula / atomCount、候補の formula / atomCount と、追加・削除・変更された原子ID(addedIds / removedIds / changedIds、各100件まで。超過時は idsTruncated: true)です。候補がなければ candidate は null です。候補の内容は get_document(include: ["candidate"])で確認します。その後、新しい revision を expectedRevision に指定して history の action: "confirm" で確定、"cancel" で取消します。
  5. export_document で文字列を取得するか、save_file でプロジェクトを保存します。

GUIでも候補は通常の「確定」「取消」で扱えます。preview: false を明示すると検証後に直接確定し、GUIのUndo履歴に追加します。history の undo / redo も同じ履歴を使います。候補がある間の別の編集とUndo/Redoは拒否します。GUI側で整形ワーカーが動作中の場合も編集を拒否します。

revision は版番号で、確定文書か候補が変わるたびに新しくなります(編集・Undo/Redo・候補の作成・確定・取消し。元の内容に戻しても版は戻りません)。GUIでの編集などで版が変わると、古い版を指定した変更は失敗します。失敗時は再取得して差分を確認してください。文書IDはプロセスごとに異なり、切断後は無効になります。複数の呼び出し元が同じプロセスを共有する場合も、各操作にIDを渡す必要があります。

固定原子の移動、不正な参照、重複座標、不正な引数などは文書を変えずに失敗します。部分編集はプロジェクトの未知のenvelopeフィールドも保持します。open_file(プロジェクト)と import_document(format: "project") は指定したプロジェクト全体を読み込み、元のプロジェクトはUndoで復元できます。open_file でXYZ/MOL/SDF/Mol2/CML/PDBを開いた場合は、座標の表の「構造ファイルを読み込む…」と同じく構造だけを置き換え、計算条件・実行設定を保持します。NWChem入力(.nw)とGaussian入力(.gjf / .com)は電荷・多重度も設定し、NWChem入力はMolFormaと共通の計算条件も取り込みます(詳細設定と追加入力は保持)。複数フレームのXYZは frame(0始まり)が必要です。

公開ツール

ツール 用途
list_documents / get_document 文書ID、版、プロジェクト、候補の取得。include で取得範囲を指定
list_templates / place_template 組み込み部品の検索と配置
add_atom 元素・Å座標による追加。任意の結合先と水素補完を指定
set_positions / translate 安定IDによる座標変更・平行移動
set_bond / delete_atoms 結合の変更・除去、原子削除と参照更新(全電荷が形式電荷・酸化数の合計と一致していれば削除後の合計に追従)
measure 2/3/4原子の距離・角度・二面角
set_dimension 2/3/4原子の距離(Å)・角度・二面角(度)の設定。GUIと同じく後の原子の側(結合していない別々の分子では後の原子の分子全体)を動かす
set_atom_properties 安定IDの原子の元素(hydrogens で水素の調整)、形式電荷、不対電子、同位体(質量数、0で解除)または質量(amu)、固定、ゴースト、原子名の変更
import_document XYZ文字列またはMolFormaプロジェクト(.molforma.json、version 1)のJSON文字列の取込。XYZは append: true で今の分子の横に追加
open_file ローカルXYZ/MOL/SDF/Mol2/CML/PDB/MolFormaプロジェクト、NWChem・Gaussian入力の取込。複数フレームのXYZは frame で選択
export_document 確定文書のXYZ、MolFormaプロジェクトのJSON、検証済みNWChem入力文字列
save_file 確定文書をMolFormaプロジェクト(.molforma.json)として保存。既存ファイルは overwrite: true か、利用者の上書き承認が必要
get_nwchem / set_nwchem 計算条件・既定値・選択肢(choices)・検証結果の取得と条件変更。溶媒(SMD・溶媒名)、相対論、RI-J、物性、遷移状態探索・IRC・拘束(constraints、原子は安定ID)・スキャン(scan_atoms 等)、BSSE、後続の一点計算を含む。追加入力(extra_input / extra_tasks)は変更不可。変更で新たに生じたエラーだけで拒否し、変更前からあるエラー(原子がまだない、多重度が未設定など)はほかの条件の変更を妨げない
get_advanced / set_advanced 詳細・可視化出力設定の型、選択肢、適用条件、値を取得・変更。null で個別リセット
get_execution / set_execution 実行ファイル、MPI、スレッド数、作業場所、環境変数、時間制限の取得・変更(計算条件のエラーは実行設定の変更を妨げない。set_advanced も同じく、変更で新たに生じたエラーだけで拒否)
history 候補の確定・取消、Undo/Redo

set_atom_properties は座標表・属性パネルと同じ検証を使います。形式電荷は−99〜20、不対電子は0〜8、原子名は制御文字を含まない16文字以内です。同位体データにない質量数は候補にも確定済み分子にも反映しません。任意の質量は mass で指定できます。

次の4ツールは --mcp で追加されます。--mcp-gui にも同名のツールがあり、GUIの画面と同じ計算・結果を扱います。

ツール 用途
get_app_state 候補の有無、計算・結果読込の状態
calculation NWChem実行・停止、入力一式の保存
get_results 読込済み結果の要約(計算のエネルギー final_energy(最後のtask・振動数の参照構造・BSSE補正後)・熱化学・双極子・最適化状態・スキャンとIRCの各点・BSSE・溶媒和・原子ごとのMulliken/ESP/RESP電荷・NMR遮蔽・分極率を含む properties)、構造列・エネルギー・軌道(number はスピンごとの軌道番号で、ログに一部の軌道しかなくてもMOLDENと同じ番号)・振動数(並進・回転は rigid)・励起状態・最適化ステップ・変位・ログ
results_action 結果ファイル・計算フォルダーの読込、再読込、読込の取消

画面なしモードの計算と読込はバックグラウンドで進み、calculation / results_action はすぐに戻ります。完了はタスクか get_app_state で確認します。計算はMolFormaの終了(標準入力を閉じる)とともに停止します。結果の表示・再生・画像取得はGUIモードだけです。

次のツールは --mcp-gui で追加されます。

ツール 用途
get_app_state 選択、候補、整形、計算、結果読込・再生、履歴走査の状態
get_ui / get_ui_item ウィジェット・メニュー・ショートカット・ダイアログの一覧、入力値、選択肢、表・ツリー・ログの取得。3D画面(moleculeView・resultsView)では原子ごとの安定ID・ラベル(C1 など)と、ui_input でクリックする部品内の座標、表示範囲内か(visible)、配位サイト(center・site)と末端の追加ハンドル(residue・terminus)の位置を返す
get_ui_command GUI操作の進行状態と失敗理由の取得
ui_activate ボタン、メニュー項目、ショートカットの実行
ui_set_value テキスト・数値・チェック・スライダーの変更。テキストは入力した場合と同じく変更済みとして確定するため、変更時だけ反映する欄(ジョブ保存先など)にも効きます。commit: false は入力確定を省略
ui_select / ui_edit_cell タブ・選択肢・表・ツリーの選択、編集可能セルの変更
ui_input MolForma内のクリック・ドラッグ・ホイール・キー・部品ドロップ(templateId は list_templates のID、atom:元素記号、center:元素記号。不明なIDは何も置かず、ほかの拒否された編集と同じ警告ダイアログを開きます)
ui_file_dialog ファイル選択・保存ダイアログのパスとフィルター指定、確定・取消
capture_screenshot MolFormaのウィンドウまたは指定部品のPNG取得・保存
set_selection 安定IDによる原子選択。空配列で解除
chemistry SMILES生成(置換)、SMILESからの断片の追加(fragment)、全体・局所整形、3D再生成、配座探索(conformers、最安定の配座を候補にする。今の構造と同じなら候補を作らない)、中止。結果は候補として確認
calculation 入力一式の保存、NWChem実行・停止
get_results / results_action 結果読込・取消、構造列・エネルギー・軌道・振動数・励起状態・最適化ステップ・変位・ログ取得、選択・再生・停止、XYZ保存、表示中の構造を文書の候補にする apply_structure
history_action 履歴の走査・取消、ジョブ選択・再利用・結果表示、記録の修復(repair: このPCで実行中と記録されたままプロセスが終了したジョブを「中断」に直す)、ごみ箱への移動、絞り込まれた一覧のCSV保存

GUIのファイル一覧で振動アニメーションを選んだ場合、get_results.source は元のステップXYZのパスです。results_action(action: "reload") は同じモードの元XYZ群を読み直し、ステップの追加・削除も反映します。

引数の型と必須項目は tools/list のJSON Schemaを参照してください。全ツールは content のJSONテキストと structuredContent の両方を返します。画面取得は追加でMCPの image コンテンツを返します。引数や編集内容のエラーは isError: true、不正なJSON-RPCや未知のツールはプロトコルエラーを返します。

リソース

resources/list は次のリソースを返します。resources/read は読んだ時点の内容を返します。リソースの購読や更新通知は提供しません。

URI 形式 内容
molforma://documents/<documentId> JSON get_document と同じ確定文書・候補・版
molforma://documents/<documentId>/xyz XYZ 確定文書の構造(Å)
molforma://documents/<documentId>/nwchem テキスト 確定文書から生成したNWChem入力。生成できない場合は -32603 と理由を返す
molforma://app/state JSON get_app_state と同じ状態
molforma://calculation/output テキスト 現在または最後の計算の output.out の末尾
molforma://calculation/stderr テキスト 現在または最後の計算の stderr.err(MPI・ランチャーのメッセージ)の末尾
molforma://results/summary JSON get_results の要約
molforma://results/log テキスト 読込済み結果のログの末尾

テキストのリソースは末尾の10万文字までです。それより前を省いた場合は、先頭に注記を付けます。

save_file は保存先を明示する独立した操作で、GUIの既存の保存先や「未保存」表示を変更しません。候補がある状態では保存を拒否します。export_document は常に確定済みの文書を返します。

保存先に既にファイルがある場合の動作は次のとおりです。

Prompts

prompts/list は次のプロンプトを返します。prompts/get は、引数を埋め込んだ作業手順を1件のユーザーメッセージとして返します。引数はすべて文字列です。不明なプロンプト、必須引数の不足、文字列以外の値は -32602 になります。Claude Codeでは /mcp__molforma__<名前> のスラッシュコマンドとして使えます。

名前 モード 引数 内容
review_candidate 両方 なし 未確定の候補を要約し、利用者の判断を待ってから確定・取消する
geometry_optimization 両方 method、basis、frequencies(yes で振動数計算も実行) 計算条件を設定して構造最適化を行う。--mcp では入力ファイルの出力まで
build_from_smiles --mcp-gui smiles(必須) SMILESから3D候補を作成し、確認してから確定する
frequency_analysis --mcp-gui path(出力ファイルまたは実行フォルダー) 結果を開き、虚振動を報告し、モードを再生して画像を取得する

プロンプトはLLMへの指示文です。MolFormaの状態は変更しません。

GUIの操作と完了確認

get_ui の query で表示文言・クラス名・objectName を検索できます。他のタブの部品を取得する場合は includeHidden: true を使います。「1 分子」の座標の表(coordinateTable)や閉じている詳細設定の欄(advanced_<キー>)のように非表示の部品も、includeHidden: true で取得して ui_edit_cell / ui_set_value で操作できます。座標の表の表示は moleculeLayout(view / both / table)を ui_select で切り替えます。部品パレットの開閉はツールの列の paletteToggle を ui_activate します。target には返された ui-N または一意な objectName を指定します。ダイアログを閉じるとその部品のIDは失効します。名前が重複する場合は ui-N を使ってください。

GUI変更は documentId と expectedRevision を必要とし、queued の commandId を直ちに返します。GUI変更には preview 引数はありません。 対応する画面操作と同じタイミングで確定または候補化します。実行直前にも文書と候補の変更を検査します。配位子を選んだ「配置」ツールで次の空きサイトをクリックすると、画面操作と同じく前の配位子の候補を確定して次を候補にします(MCPが作った候補を利用者のクリックが確定することはありません)。文書ツールによる編集でも、分子が3D画面からはみ出たときは画面操作と同じく全体を表示し直します。

  1. get_ui_command(commandId) を呼び、queued / running / done / failed を確認します。
  2. running が続く場合は get_ui の activeModal を調べます。確認ダイアログの文言を読み、該当ボタンを別の ui_activate で明示的に操作します。
  3. ファイル選択は ui_file_dialog で操作できます。GUI MCPではQtのファイルダイアログを使うため、OSのファイル選択画面を別途自動操作する必要はありません。既存ファイルの上書き確認は通常どおり表示します。
  4. done はGUI呼出しが戻ったことを示します。画面側の検証メッセージは get_ui_item で確認してください。整形・計算・読込・履歴走査の完了は get_app_state で確認します。計算の終了コード0だけでは収束を保証しません。

モーダル表示中は、そのダイアログ内の操作を受け付けます。背景の文書編集は拒否します。保留操作は最大16件、完了記録は保留分と合わせて直近128件までです。他のアプリケーションの画面は操作しません。シェルコマンドは受け付けず、NWChemの実行ファイル・ランチャー・環境変数は安全のための制限のとおり利用者が決めます。

一覧・表・結果は offset / limit で分割取得します。nextOffset がある場合は次回の offset に使い、件数が0になったら終了します。GUI一覧・表行・結果行は1ページ約40 KiBで区切ります。1件だけで40 KiBを超える項目(大きな構造の構造列など)は、そのページに単独で返します。1件が2 MiBを超える場合は失敗します。表の parentRows はツリーの親を指定する0始まりの行番号列です。get_ui_item は表の viewport とセルの画面座標も返すため、クリックで動くリスト項目にも ui_input を使えます。タブ・表・結果の番号は0始まり、原子の指定は安定IDです。ログの offset / limit は文字数で、最大65,536文字を取得できます。

既存GUIの各操作は次の経路で利用できます。

GUIの範囲 MCPの経路
分子編集、部品・ペプチド・配位・立体化学、断片・残基・点電荷 文書ツールと get_ui → ui_*。ダイアログも同じ手順
PDBのMODEL/ALTLOC選択、診断・修復、カスタム部品、設定・プリセット 対応するメニュー・ボタンを ui_activate、内容を ui_set_value / ui_select
座標表、固定・ゴースト・質量、計算条件・詳細設定 ui_edit_cell / ui_set_value、または設定ツール
入力プレビュー、検索・コピー・保存 タブと各ボタンを ui_* で操作、本文は get_ui_item
NWChem実行と履歴 calculation / history_action と get_app_state。再利用・ごみ箱の確認もMCPで処理
振動・虚振動、構造列、軌道・CUBE、表示方向・透明度・等値・PNG保存 get_results / results_action、表示設定は ui_*、画像は capture_screenshot
メインウィンドウの保存先、未保存表示、終了時の確認 ファイルメニューを ui_activate、必要なダイアログを ui_*

これはMolFormaに実装済みの機能の公開です。未実装の計算・表示機能が新しく追加されるわけではありません。RDKit等の依存機能が無効なビルドでは、対応するGUI部品も無効です。

Tasks拡張

クライアントが tools/call の _meta の clientCapabilities.extensions に io.modelcontextprotocol/tasks を宣言した場合、GUI変更ツールは commandId の代わりに resultType: "task" のタスクを返します。宣言しない場合は、上記の commandId の方式のままです。画面なしモードでは、calculation(start)と results_action(読込)がタスクを返します。サーバーは server/discover の capabilities.extensions でこの拡張への対応を示します。

振動アニメーションの例

以下は tools/call のツール名と arguments の例です。各変更の前に取得した文書IDと現在の版を DOC / REV に置き換え、返された操作IDの完了を確認して次へ進みます。

{"name":"results_action","arguments":{"documentId":"DOC","expectedRevision":"REV","action":"open_file","path":"/absolute/path/to/output.out"}}
{"name":"get_results","arguments":{"documentId":"DOC","section":"modes","offset":0,"limit":100}}
{"name":"results_action","arguments":{"documentId":"DOC","expectedRevision":"REV","action":"play_mode","index":0,"amplitude":0.3}}
{"name":"capture_screenshot","arguments":{"documentId":"DOC","target":"mainWindow","path":"/absolute/path/to/mode.png"}}
{"name":"results_action","arguments":{"documentId":"DOC","expectedRevision":"REV","action":"stop"}}

読込完了後、frequency < 0 の行が虚振動(imaginary: true)です。−10 cm⁻¹未満の虚振動は significant: true で、それより小さい負の値は数値誤差であることが多いです。summary の counts の imaginaryModes / significantImaginaryModes がそれぞれの数です。変位データのない行は表示・選択できますが再生できません。正振動も同じ play_mode で再生できます。mode_displacements は基準構造と変位を返します。結果操作やカメラ操作は編集文書を変更しません。

計算から行う場合は、先に set_nwchem / set_advanced / set_execution で設定を確定し、calculation(action: "start") を呼びます。NWChemの実行ファイルなどは利用者がMolFormaで設定します。get_app_state.calculation.directory が保存された実行フォルダーです。終了後に results_action(action: "open_directory", path: ...) で結果を開けます。

open_directory はGUI付き・ヘッドレスともに output.out を優先し、なければ対応する結果ファイルの一覧の先頭を開きます。XYZだけのフォルダーも開けます。読込の失敗・取消では直前の結果を保持します。

新仕様の通信例

初期化ハンドシェイクなしで次の1行を標準入力に送信できます。

{"jsonrpc":"2.0","id":1,"method":"server/discover","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}}}}

ツール呼び出しにも同じ必須メタデータを指定します。

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{}},"name":"list_documents","arguments":{}}}

正常な結果には resultType: "complete" を返します。未対応バージョンは -32022 と対応版一覧、必須メタデータ不足は -32602 で応答します。旧方式では initialize、notifications/initialized の後に通常のリクエストを送ってください。旧版の応答に resultType は追加しません。

範囲と制限

検証

ctest --test-dir build --output-on-failure -R '^mcp$' で、新旧版の通信、版の拒否、候補とUndo/Redo、固定原子・失敗時の原状保持、GUIとの競合、未知のenvelope保持、ファイル保存、NWChem入力生成を検証します。実行ファイルを子プロセスとして起動し、ダイアログ表示中の通信、ファイル選択、合成MOLDENの虚振動・正振動の再生と停止、PNG取得、模擬NWChemの実行と取消、履歴走査・選択・CSV出力、SMILES候補作成までMCPのみで検証します。数値・座標表・選択操作、古い版と破棄済み部品の拒否、ページ上限、UTF-8と分割メッセージ、通知、EOF終了も対象です。全ツールの title / outputSchema、Prompts、save_file の上書き確認(承認・拒否・改ざん・版の変更)、Tasksによるダイアログへの回答と、模擬NWChemの終了・停止までの追跡も検証します。実行設定の保護(MCPからの変更・プロジェクト読込後の実行の拒否、利用者の確認ダイアログ)、許可ディレクトリ(シンボリックリンク、ファイル選択ダイアログ)、tasks/cancel による取消、リソース、画面なしモードでの模擬NWChemの実行と結果読込も検証します。テストにネットワークや資格情報は不要です。