bio_img_japan-community

MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

MATLAB の Model Context Protocol (MCP) Core Server を Claude Desktop で試してみた

※この投稿は 2025 年 11 月 3 日に The MATLAB Blog へ 投稿されたものの抄訳です。

1つ前のブログでは、同僚の Yann Debray と Akshay Paul が、MathWorks 初の MCP サーバーである MATLAB MCP Core Server のリリースを発表しました。
MCP(Model Context Protocol)は、2024年11月に Anthropic によって導入された、AI アプリケーションが外部ツールやデータに接続するためのオープンスタンダードです。一部の人々はこれを「AI のための USB-C」と呼んでいます。というのも、AI モデルを他のものに接続するための標準的な方法だからです。このプロトコルには多くの注目が集まっており、その一部は正当なものかもしれません。また、仕組みを詳細に解説する記事やチュートリアルも数多く登場しています。しかし私たちにとって、MCP の核心となる原則は非常にシンプルです…

MATLAB MCP Core Server は AI モデルから MATLAB を使えるようにする

ある意味では、MCP は本質的に新しいものを提供しているわけではありません。たとえば先月初め、私は Ollama を設定して MATLAB で定義されたツールを呼び出す方法を紹介しました。ChatGPT やその他の AI システムについても同様の記事を書くことは可能でしたが、それぞれのケースでコードを少し調整する必要がありました。MCP を使えば、ツールの定義方法を一度だけ示せば済むのです。

先週の金曜日、私たちは MATLAB 用の MCP サーバーをひとつリリースしましたが、Yann のブログ記事でも紹介されていたように、すでに VSCode、Claude Desktop、Gemini CLI など多くの MCP クライアントと連携しています。実際、少し設定を加えるだけで、どの MCP クライアントでも動作するはずです。

このことの実用的な意味は、今や MATLAB MCP Core Server を使えば、どんな AI システムにも MATLAB を接続できるということです。そこで私はまず、Claude Desktop に接続してみました。

Claude Desktop での第一歩と、最初の「ハルシネーション」

インストールの詳細はプロジェクトの README.md に記載されています。すべてがうまくいけば、Claude Desktop を起動すると MATLAB も同時に起動されます。また、Claude Desktop の「Search and Tools」ボタンから利用可能なツールを確認することもできます。

ご覧のとおり、このサーバーは AI に対して 5 つのツールを提供しています。それらは以下の通りです:

  • Detect MATLAB Toolboxes:インストールされている MATLAB ツールボックスを確認します
  • Check MATLAB Code:MATLAB の checkcode 関数を使用して、コードに潜在的な問題がないかをチェックします
  • Evaluate MATLAB Code:文字列として送信された MATLAB コードを実行します
  • Run MATLAB File:.m ファイルを実行します
  • Run MATLAB Test file:MATLAB のテストファイルを実行します

すべてが正常に動作しているかを確認するための簡単なテストとして、 detect_matlab_toolboxes ツールを使っています。これは AI と MATLAB の間で最もシンプルな接続なので、このツールが動作しない場合、他のツールも動作しない可能性が高いのです。

私は Claude に「インストールされている MATLAB ツールボックスは何ですか?」と尋ねます。

AI は detect_matlab_toolboxes ツールを呼び出します。このツールはローカルの MATLAB で ver コマンドを実行し、その結果を AI に返します。

すると AI は、ツールボックスを自ら考えたカテゴリにグループ化して、きれいに整形された結果を返してくれます。私はその分類には完全には同意していませんが、それはまた別の話です。

見た目には問題なさそうですが、私がインストールしているツールボックスは 102 ではなく 99 であることを知っています。そこで私は AI に対して、「すべてのツールボックスを 1 行ずつ、行番号付きで表示して」と頼みました。AI は正確にそれを実行し、抜け漏れもありませんでした。実際の出力は退屈なのでここでは省略します。
そして私は次の質問をしました:
Claude が「インストールされているツールボックスは 102 個」と述べたのは、典型的な「幻覚(hallucination)」の例であり、幻覚は LLM(大規模言語モデル)ベースの技術における根本的な制限です。技術的に回避することは可能ですが、完全になくすことはできません。このトピックについては、私の別の記事「Giving LLMs new capabilities: Ollama tool calling in MATLAB」で詳しく解説しています。そこでは、AI が弱い領域を補うためのツール開発の動機として幻覚を取り上げています。

 detect_matlab_toolboxes 自体は完璧に動作しました。少し幻覚を起こしたのは Claude 本体であり、こうしたことは時々起こると考えておくべきです。実際、現在の Claude Desktop のチャットの最後には、免責事項が表示されるようになっています。

このような間違いを指摘して、LLM ベースの AI 技術を使うべきではないと主張する人もいます。しかし私は、ただ注意深くあることを心がけ、Claude が提案するように「回答をダブルチェックする」ことを選びます。
LLM が常に正確に数を数えられるわけではないことを知っているので、もし本当にインストールされているツールボックスの数を気にするのであれば、MATLAB を使って数えることができます。ただし、LLM のおかげで、自分でコードを書く必要はありません。
私は Claude にこう尋ねました:「インストールされている MATLAB ツールボックスを調べて、MATLAB を使って数えてください。」
ここでは、Claude が MATLAB MCP Core Server の 2 つのツール、detect_matlab_toolboxes evaluate_matlab_code を使用しました。どちらのツール呼び出し結果も展開して確認することができます。以下は、それぞれのツール呼び出しの冒頭部分です:
evaluate_matlab_code ツール呼び出しの一番下までスクロールすると、MATLAB から AI に返された応答も確認できます。
AI が書いたコードもすべて表示されていました。参考までに、Claude が生成したコードは以下の通りです:
v = ver;
% Count the number of installed products (MATLAB + toolboxes)
total_count = length(v);
% Display the count
fprintf(‘Total number of MATLAB products installed: %d’, total_count);
% Also show MATLAB and Simulink separately if present
matlab_idx = find(strcmp({v.Name}, ‘MATLAB’));
simulink_idx = find(strcmp({v.Name}, ‘Simulink’));
if ~isempty(matlab_idx)
fprintf(‘MATLAB Version: %s’, v(matlab_idx).Version);
end
if ~isempty(simulink_idx)
fprintf(‘Simulink Version: %s’, v(simulink_idx).Version);
end
% Count toolboxes (excluding MATLAB and Simulink base products)
toolbox_count = total_count – length(matlab_idx) – length(simulink_idx);
fprintf(‘Number of additional toolboxes/blocksets: %d’, toolbox_count);
このシンプルな例でも、いくつかの重要な概念が示されています。MCP サーバーは、Claude が自分で書いた MATLAB コードを私のローカルマシン上で実行できるようにします。ローカルの MATLAB は、コード実行の結果を Claude に返し、それを Claude がさらなる推論に活用することができます。

 

ファイルシステムの問題とその回避策

Claude Desktop で MATLAB MCP Core Server を使い始めた当初、ファイルシステムに関するトラブルが多く発生しました。簡単に言えば、Claude は /home/claude/ のような内部ファイルシステムに .m ファイルを書き込もうとし、それを MATLAB に実行させようとしていました。当然ながら、MATLAB は私のローカルマシン上にあるため、Claude のファイルシステムを見ることができません。その結果、Claude は異なる場所で何度も試したり、MATLAB を別の方法で起動しようとしたりしましたが、結局うまくいきませんでした。

MathWorks の他の Claude Desktop ユーザーと話したところ、私と同じような問題を経験した人もいれば、まったく問題がなかった人もいました。つまり、状況は人によって異なるようです。

最終的に私は、Connect to local MCP servers (MCP) の手順に従って Node.js と Filesystem MCP Server をインストールすることでこの問題を解決しました。現在、私の Claude Desktop の設定ファイル claude_desktop_config.json には、MATLAB MCP Core Server と Claude Filesystem Server の両方の設定が含まれており、以下のようになっています:

{
“mcpServers”: {
“matlab-mcp”: {
“command”: “C:\\Users\\walki\\Downloads\\matlab-mcp-core-server.exe”,
“args”: [
“–matlab-root=C:\\Program Files\\MATLAB\\R2025b”,
“–initial-working-folder=C:\\Users\\walki\\Downloads\\work”
],
“env”: {}
},
“filesystem”: {
“command”: “npx”,
“args”: [
“-y”,
“@modelcontextprotocol/server-filesystem”,
“C:\\Users\\walki\\Downloads\\work”
]
}
}
}

Claude Desktop を使うために、ローカルマシン上に C:\Users\walki\Downloads\work というフォルダーを作成しました。プロンプトを入力する際には、このフォルダーを明示的に指定するようにしたところ、動作がかなり改善されました。

さて、準備作業はここまでにして、このセットアップを使ってもっと面白いことをやってみましょう。

データセットに最適な多項式を見つける

5 次の多項式にランダムなノイズを加えてデータセットを作成しました。参考までに、これがその生成方法です。

x = linspace(-4, 4, 60);
y_true = 0.05*x.^5 – 0.8*x.^3 + 2*x;
noise = 0.5 * randn(size(x));
y_noisy = y_true + noise;
Claude はそのことを知りません。Claude が受け取るのは、xy_noisy の2列を含む .csv ファイルと、次のプロンプトだけです。

プロンプト内容:

ローカルマシンの C:\Users\walki\Downloads\work フォルダー内に polynomial_data.csv というファイルがあります。
そのフォルダー内で、以下を満たす MATLAB スクリプトを作成し、実行してください。

  • このデータを MATLAB に読み込み、プロットする。ただし、点を線で結ばないこと。
  • データはノイズを加えた多項式から生成されています。どの次数の多項式が最もよくフィットするかを見つける処理を作成してください。
    複数の異なる手法を使って最適なものを判断してください。
  • 複数のプロットを作成する際は、subplot ではなく tiledlayout を使用してください。
  • 最後に、元のデータと最適なフィット多項式を組み合わせたプロットを作成してください。

このプロンプトはかなり具体的です。たとえば、subplot よりも tiledlayout を優先するという指示や、データ点を結ばないように明示的に求めている点です。これは、今回が初めてではないからです!最初のプロンプトはもっとシンプルでしたが、結果はあまり良くありませんでした。その後、より良い結果を示すために何度も試行を重ねてきました。

次の動画で、その結果を見てみましょう。

動画の中で Claude がコードを書いている部分は、見どころが少ないので早送りしました。早送り部分は明確にマークされています。それ以外の部分はすべてリアルタイムです。全体の処理にかかった実際の時間は約 3 分でした。その間、私が追加の入力をすることなく、

  • Claude はローカルマシン上のデータファイルを確認し、指定に従って MATLAB コードを書き、マシンに保存しました。
  • そのコードをローカルの MATLAB で実行しました。コードは失敗し、Claude はエラーメッセージを解析しました。
  • Claude は crossvalind 関数を使用していましたが、これは Bioinformatics Toolbox に含まれる関数で、私の環境にはインストールされていなかったためエラーが発生しました。
  • Claude は crossvalind を使わないように MATLAB スクリプトを書き直しました。
  • 新しいスクリプトは正常に実行され、結果と複数のプロットを含む Markdown レポートが生成されました。

スクリプトは、5次の多項式が最適なフィットであることを正しく判断し、私が手動で実行した際には次のように報告しました。

=== BEST POLYNOMIAL ORDER BY DIFFERENT CRITERIA ===
RMSE: Order 10
Adjusted R²: Order 5
AIC: Order 5
BIC: Order 5
Cross-Validation: Order 7
*** CONSENSUS BEST ORDER: 5 ***
Analysis complete! Best polynomial order: 5
Polynomial coefficients (highest to lowest degree):
0.0524 0.0010 -0.8361 -0.0194 2.0813 0.0502

MATLAB の Curve Fitting Toolbox を使ってこれらのパラメータを確認しましたが、正しいことがわかりました。

Claude に対して、クロスバリデーションやベイズ情報量規準(BIC)などの指標を使うように指示したわけではありません。これらは Claude が自分で考えて取り入れたものです。BIC については名前を聞いたことがある程度で、ここで本当に関連があるのかはわかりません ― これは私の ToDo リストに追加です。また、クロスバリデーションが正しく実装されているかどうかも、まだ詳しく確認していません。

次のステップ

次はコードを GitHub にアップロードして手作業で編集を始めることもできます。ある時点で、他の人とコードレビューを共有できる状態になるでしょう。あるいは、さらに調査を行ったうえで、プロンプトをもう少し改善することもできます。たとえば、Bioinformatics Toolbox をインストールして crossvalind を必ず使うようにするのか、それとも使わないようにするのかを決める必要があります。

プロンプトに追加できることとして、

  • Markdown レポートファイルを生成してくれたのは良かったです ― これは私が頼んだわけではありません。しかし、プロットは含まれていませんでした。これについてもプロンプトに明記すべきかもしれません。
  • Claude が使用した手法の中に、良くないものがあるかどうかを専門家に相談するつもりです(あるいはブログ読者に尋ねるかもしれません)。もしそうなら、それらを除外するようにします。
  • また、Claude に MATLAB コーディングガイドラインを参照させ、それに従うよう指示することも考えています。
  • 動画を見ればわかりますが、プロットの凡例は見た目がひどいです。これをプロンプトで改善できるでしょうか?
  • さらに、「Original Data」の色選択も、ダークモードを使っていることを考えると、もう少し良くできるはずです。プロットの見た目について、もっと具体的に指示する必要があります。

興味深いことに私の気持ちは、このコードを捨てて、プロンプトの改善や問題のさらなる調査にもっと時間をかけてから、コードの手作業編集を始める方向に傾いています。このプロンプトに何を追加すべきだと思いますか?
どちらを選ぶにしても、ここまでの過程で私はすでに多くを学びました…しかも、MATLAB MCP Core Server が提供する 5 つのツールのうち、まだ 2 つしか使っていません。

次のステップ(読者のみなさんに向けて)

MATLAB MCP Core Server をダウンロードし、あなたが選んだ MCP 対応 AI ツールと統合してください。問題や提案があれば、プロジェクトの GitHub リポジトリに issue を投稿してください。

この新しい技術を使って、皆さんがどんなことをするのか楽しみにしています。

|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.