コンテンツにスキップ

MCPサポート

デスクトップ版のシンデレラは、いわゆるMCPサーバーを通じたアクセスを提供しており、AIアシスタントがシンデレラの機能をプログラムから利用できます。具体的には、現在の作図にアクセスして変更したり、CindyScriptの関数を評価したりできます。また、ユーザーの入力をシミュレートすることもできます(下のモードとアクションを参照)。

暫定的な機能

現在の実験的なMCP実装はシンデレラのベータ版で利用でき、将来のバージョンでは予告なく変更されることがあります。

MCP(Model Context Protocol)は、AIアシスタントが外部のプログラムをツールとして使えるようにするオープンな標準です。シンデレラに接続したアシスタントは、たとえば、あなたが説明した作図を描き、その結果を見て、作図のスクリプトを書き、自分の間違いを直すことができます。シンデレラがエラーをアシスタントに報告するからです。

設定のヒント

必要なことは2つです。シンデレラのMCPサーバーを有効にすることと、AIアシスタントにサーバーの場所を教えることです。

MCPサーバーを有効にする

インスペクタを開き、全体の設定を選んで、Advanced Options の MCPサーバーを有効にする にチェックを入れます。シンデレラはこの設定を記憶するので、次回の起動時にはサーバーが自動的に開始されます。停止するにはチェックを外します。

サーバーの動作中は、次のアドレスで利用できます。

http://localhost:3001/mcp

サーバーはMCPの Streamable HTTP トランスポートを使います。ポート3001がすでに他のプログラムで使われている場合、サーバーは開始されません。別のポートを使うには、Javaのシステムプロパティ cinderella.mcp.port を指定してシンデレラを起動します(例: -Dcinderella.mcp.port=3005)。プロパティ -Dcinderella.mcp=true を指定すると、インスペクタの設定にかかわらずサーバーが有効になります。

Claude Code

Claude Code はサーバーに直接接続します。次のコマンドで一度だけ登録してください。

claude mcp add --transport http cinderella http://localhost:3001/mcp

Claude Desktop

Claude Desktop はローカルのMCPサーバーをプログラムとして起動し、その標準入出力を通じて通信します。この方式とシンデレラのアドレスとの間は、小さなブリッジプログラムが仲介します。そのようなブリッジのひとつが mcp-remote で、Node.js がインストールされている必要があります。Claude Desktop の設定(Developer → Edit Config)から開けるファイル claude_desktop_config.json に次の項目を追加し、Claude Desktop を再起動してください。

{
  "mcpServers": {
    "cinderella": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://localhost:3001/mcp"]
    }
  }
}

Claude Desktop を起動する前に、MCPサーバーを有効にしたシンデレラを起動しておく必要があります。

ChatGPT とその他のアシスタント

自分のコンピュータ上で動作し、MCPに対応しているアシスタントであれば、上に示した2つの方法のどちらかで接続できます。Streamable HTTP トランスポートに対応していればサーバーのアドレスを指定し、そうでなければ mcp-remote のようなブリッジを使います。

ChatGPT のように、ウェブブラウザや提供元のサーバー上で動作するアシスタントは、インターネット経由でMCPサーバーに接続します。それらはあなたのコンピュータ上のプログラムには到達できず、シンデレラもそのような要求を意図的に拒否します(下記参照)。そのため、このようなアシスタントをシンデレラに直接接続することはできません。接続するには、要求をシンデレラに中継するプロキシプログラムをあなたのコンピュータ上で動かす必要がありますが、ここでは説明しません。

セキュリティ

シンデレラに接続したアシスタントは、スクリプトの実行や、作図の保存・クローズといったアクションを含め、あなたがシンデレラでできることをすべて行えます。次の点に注意してください。

  • サーバーは、あなた自身のコンピュータからの要求だけを受け付けます。他のコンピュータからの要求や、ブラウザで開いているウェブページからの要求は拒否されます。
  • サーバーが有効になっている間は、あなたのコンピュータ上のどのプログラムでもサーバーを利用できます。必要のないときはインスペクタで無効にしてください。
  • あなたのコンピュータ上で動作し、ブラウザからシンデレラを操作するウェブアプリケーションは、Javaのシステムプロパティ cinderella.mcp.allowedOrigins で明示的に許可する必要があります(例: -Dcinderella.mcp.allowedOrigins=https://example.org)。

試してみる

アシスタントと新しい会話を始めて、たとえば 「シンデレラで三角形とその外接円を作図してください」 と頼んでみましょう。アシスタントは開いている作図を見つけ、三角形と円を描き、結果の画像を見せてくれるはずです。

アシスタントにできること

MCPサーバーは、アシスタントに次のツールを提供します。これらをあなたが自分で呼び出すことはなく、アシスタントが必要に応じて選びます。

ツール 目的
get_open_constructions, get_version 開いている作図の一覧、シンデレラのバージョン
get_viewports, get_viewport_image 作図のビューと表示範囲の一覧、ビューの画像の取得
list_modes, list_actions, get_mode_help モードとアクションの一覧と、このマニュアルでの説明の参照
set_mode, do_action モードの選択、アクションの実行
simulate_mouse 作図の座標で指定した位置での、ビュー内のクリック、ドラッグ、マウスの移動
run_cindyscript CindyScript のコードを実行し、結果、コンソール出力、エラーを返す
get_scripts, add_script, set_script, remove_script CindyScriptエディタのスクリプトの読み取りと変更
get_cindyscript_help CindyScriptリファレンスでの関数の検索

モードとアクションの名前、ヒント、マニュアルの文章は、アシスタントがユーザーインターフェースの言語を要求しない限り、英語で渡されます。

モードとアクション

暫定的な機能

モードとアクションへのプログラムからのアクセスは暫定的なもので、シンデレラの将来のバージョンでは廃止または変更されることがあります。

シンデレラでユーザーがツールバーのツールやメニューの項目を選んで行うことは、すべて モード か アクション のどちらかです。モードは、ビュー内でのマウス操作に反応するツールで、要素を動かす、点を加える、直線を加えるなどがあります(インタラクティブモードを参照)。モードは、別のモードが選ばれるまで選択されたままになります。アクションは、取り消し や すべてを選択 のように、すぐに実行されるコマンドです。次の2つの演算子によって、スクリプトからモードとアクションを利用できます。

モードとアクションは、コンストラクタの呼び出しのような形の文字列で指定します。名前は、モードまたはアクションのクラス(先頭の de.cinderella. を除く)と、かっこ内の引数(一部のモードで必要)からなります。

名前 意味
"modes.Move()" 要素を動かすモード
"modes.SingleAdd()" 点を1つ加える
"modes.MultiAdd(algorithms.Join)" 2点を通る直線を加える
"modes.MultiAdd(algorithms.CircleMP)" 中心と1点で決まる円を加える
"actions.Undo()" 直前の操作を取り消す
"actions.SelectAll()" すべての要素を選択する
"actions.Fetch()" すべての点が見えるようにビューをズームする

これらは、設定ファイル cinderella2.properties でメニューとツールバーを構成するのに使われているのと同じ名前で、すべての名前がそこに記載されています。

モードを選択する: changemode(<string>)

説明: この演算子は、ユーザーがツールバーで選んだかのように、<string> という名前のモードを選択します。そのモードは、その後のユーザーのマウス操作に使われます。演算子は、選択後のモードの名前を返します。指定した名前のモードがない場合は、要素を動かすモードが選択されます。

例: 次の行を、たとえばボタンのスクリプトに書くと、ユーザーは次に直線を描けるようになります。

changemode("modes.MultiAdd(algorithms.Join)");

アクションを実行する: doaction(<string>)

説明: この演算子は、ユーザーがメニューで選んだかのように、<string> という名前のアクションを実行します。選択されているモードは変わりません。作図の読み込みや保存のようにダイアログを開くアクションは、ユーザーがダイアログを閉じるまで待ちます。

例: 次のコードは、すべての点を選択して削除します。

doaction("actions.SelectPoints()");
doaction("actions.Delete()");

参照: 要素を直接作成、移動、削除する演算子については、幾何要素との対話を参照してください。