8月中旬に発表されたプレスリリースで、「NetSuite AI Connector Service」という名前でOracle NetSuiteにMCPサーバー機能が実装されることが発表されました。MCPとは、「Model Context Protocol (モデル・コンテキスト・プロトコル)」のことで、大規模言語モデル (LLM)が外部のシステムやデータと連携するためのオープンな通信規格 (プロトコル)です。
- 2025/8/12: 「NetSuite AI Connector Service: Have AI Your Way」
この記事では、早速この仕組みを使ってClaude DesktopからNetSuiteの業務データを呼び出し、現時点でAIがどのように分析を行うのかを試行錯誤してみました。色々な学びがありました。
クラウドERPがMCPサーバーを実装するとできるようになること
本題に入る前に、今回の発表の意義を考えてみましょう。
NetSuiteのようなクラウドERPがMCPサーバー機能に対応することには大きな意味があります。MCPサーバーは様々なデータソースに問い合わせを行い、その内容を加工してMCPホスト (OpenAIやClaudeといったコアのAI) に返します。
いままでもRAGや MoE (Mixture of Experts) など、AIを外部データで拡張したりAI同士を連携させる技術やコンセプトは様々なものが出ていました。もともと、LLMはリアルタイムの最新データやクローズドな組織内にあるデータを情報として持っていないという課題があったり、LLMは限りなく大規模化したほうが良いのか、機能別に特化型を作って連携させたほうが高い性能が出るのか、という議論もありました。
そのため、「LLMが外部データ参照を行ったり、LLM同士を連携させて回答を作成する」ための工夫は初期から行われてきました。AIエージェントが流行るようになっても同様で、「AIエージェントから外部データを参照したり、AIエージェント同士を連携させて作業を完結させる」というコンセプトが発表されています。ただし、今までは各ベンダーがそれぞれ独自の非公開プロトコルで実装を行っていたため、互換性がなく限られたもの同士の連携にとどまっていました。(例: OpenAIのFunction Calling)
MCPはClaudeを開発しているAnthropicが発表したオープンなプロトコルであるため、MCPの規格に対応することで、AIはさまざまな種類のさまざまなベンダー/開発元のデータソースと連携することができるようになります。「生成AI界のUSB-C」という表現をされることもあります。(ちなみに、AI同士 (AIエージェント同士)の連携は、Googleが中心に提唱している「Agent2Agent (A2A)プロトコル」という別のプロトコルで通信させる方向性となっています。)
クラウドERPがMCPを実装することで、AIはパブリックに利用可能な一般的な情報だけでなく、日々の業務データが詰まったクラウドERPから必要なデータを、MCPを通して参照して分析結果に活用して回答を作成できるようになります。
...一方、MCPは万能薬ではない
しかし、単純にクラウドERPがMCPを実装しさえすれば、AIから日々のデータを参照できなかった問題がすべて解決するわけではありません。MCPはあくまでもAIとクラウドERPとの間の標準プロトコルに過ぎないので、実際には、人間が欲しい答えをAIがきちんと回答できるように、クラウドERPからAIへ渡す情報の内容、粒度、書式、タイミング、順番などを最適化する必要があります。
たとえば、外部リソースの利用という意味では、人間がプログラミングで使う「API」と、AIが実行できる「アクション」を定義した、MCPサーバー上の機能である「ツール」は同じような位置づけであり、同じように実装すれば良いように思うかもしれません。
しかし、ウェブサービスAPIのように沢山の似たようなツールをMCPサーバーに実装してしまうと、AIはどのツールを使えばいいか分からず迷走しがちになってしまう、APIを低抽象度レベルなインターフェイスだとするとツールは高抽象度レベルにまとめる必要がある、ツールの説明 (アノテーション) は人間ではなくAIが分かりやすいように記載する必要がある、など、APIとMCPでは実装基準が異なります。
加えて、AIからMCPサーバーを通してクラウドERPが呼び出された際に、長時間操作の場合に進捗状況レポートを返すなどの適切な対応、大量のリソース消費をする場合の機能制限、タイムアウトの設定をはじめとした、さまざまなチューニングを実装時に考慮する必要があります。
あわせて、ツールが高度なものになってくる場合は、AI側もツールを使いこなせるだけの知識と技能を持ち合わせている必要があります。
NetSuiteにおけるMCPサーバーの実装は、2025年8月にリリースされたものはサンプルの位置づけとなっており、13個のツール実装に限定されていて、できることは限られています。10月のSuiteWorldに向けて、より成熟したバージョンがリリースされるものと思われますので、追加情報が待ち遠しいところです。
updateCustomer
searchCustomer
Run Custom SuiteQL
getSalesOrderWithFilters
getSalesOrder
getItemDetails
getFinancialPerformance
getCustomerTransactions
getCustomerDetails
getCustomerBalance
generateSalesReport
createCustomer
checkInventoryLevels
Claude Desktopで動作させてみた
さて、前置きが長くなりましたが、ここからがこの記事における本題です。
2025年8月にリリースされたNetSuiteのMCPサーバー機能である「NetSuite AI Connector Service」を、MCPクライアントであるClaude Desktopから繋いで呼び出してみました。後の章に記載されているサーバー側とクライアント側の「事前準備」をあらかじめ完了させている環境であるとします。言語モデルはClaude Sonet 4を使用します。
Claude DesktopからMCPサーバーに接続するには、Claude Pro以上の有料サブスクリプションへの加入が必要です。
売上高トップ5顧客を求めてみる~ファースト・トライ
Claude Desktopでプロンプトとして「売上が高いトップ5の顧客を教えて」と出してみます。
「売上高トップ5顧客」に関するプロンプトということで、一般的な質問ではないとClaudeが判断し、NetSuiteコネクタを使うと判断します。「NetSuiteで売り上げが高いトップ5の顧客を調べますね。」というように、回答を返してツールのうちのひとつ「runCustomSuiteQL
」を呼び出します。ツールの呼び出しから回答を得るまでには、通常は2~5秒くらいです。
数あるツールの中でどのツールを呼び出すのが最適なのかは、MCPホストであるClaude側が判断します。アノテーション等を見て呼び出し方の理解をしますが、AIの理解とツールの仕様が異なることも多々あり、「LIMITが使えないようです」や「フィールド名を修正してもう一度試します」など、試行錯誤をするシーンも見られます。うまくいかない場合は「generateSalesReport
」や「searchCustomer
」など他のツールを試すこともあります。
試行錯誤の上、複数のツールから該当するデータが取得できたとAIが判断すると、データの集計とフォーマットを始めます。分析には数十秒かかることがあります。
最終的に「素晴らしい結果が得られました!」ということで、レポート形式でウィンドウ右側に綺麗に成形したレポートを表示してくれました。ここまで11回のツール呼び出しを行い、完了まで合計3分くらいかかりました。それでは、期待して内容を見てみましょう!
...!? 表示された結果ですが、「売上高 (売上金額)」トップ5ではなく、「売上の取引回数」トップ5を数えてしまったようです。通常の日本語で言うと「売上が高い」というと金額のことを指しているはずなのですが、AIに対してはもっと厳密な言葉を使わないといけないということでしょうか。
売上高トップ5顧客を求めてみる~セカンド・トライ
気を取り直して、もう一度同じプロンプト「売上が高いトップ5の顧客を教えて」で試してみます。
分析の結果、売上高トップ5が求められたようです。「完璧です!」ということで、楽しみです。
今度は売上金額のトップ5が求まりました。同じプロンプトだったのですが、今度は売上の取引回数でなく、売上金額とClaudeが解釈しました。
「結果をシンプルな表にして」と指示すると、見やすい表でレポートを整理してくれます。ちなみに、「シンプルな」を付けないと、場合によってはとてもこってりした表になることがあるので、つけています。
参考: プロンプトと回答の全文 - ツール呼び出し時の引数や応答内容も全容を見ることができます。
売上高トップ5顧客を求めてみる~サード・トライ以降
途中経過は省略しますが、その後も少しずつプロンプトを変えながら同じ指示を繰り返し試してみました。
何度か試して分かったことは、「出力結果が安定しない」という課題があることです。
「売上が大きいトップ5の顧客を教えて」で指示してみると、今度は4回のツールの呼び出しのみで回答を得ましたが、さきほどのレポートの「サンリオテック」が1位だったのと異なり「丹羽繊維」が1位になっており、それぞれの会社の売上金額も異なります。
特定のツールを使うように、また集計期間も「全期間」と指示をしましたが、最初は指示に近いツールを使ってくれたものの厳密には指示した「getSalesOrder
」とは違うツール「getSalesOrderWithFilters
」を使ってしまい、また、集計結果も全く違った結果となりました。
考察
いろいろと試している中で、AIからMCPを使って外部データソースを呼び出すことについて、いくつか課題が見えてきました。特に今回の「クラウドERP」のような複雑な構造を持ったデータソースで、データ取得の方法にもさまざまな選択肢が利用できる場合に特有の課題があるように見えました。
- 問題の解法に複数の経路や異なるツールを使える可能性がある場合、結果が安定しない。
- 似たような出力をしたり、似たような名前のツールがあるとAIが迷ってしまう。
- どの解法が最適なのかをAIが本来理解していないといけないが、一般のAI (LLM)にはその知識がない。
- AIの知識不足を補うために、人間がプロンプト内で細かい指示を与える必要があるが、限界がある。
今回のMCP Sample Toolsは、まだサンプルのレベルですので、SuiteWorldに向けて、より実用的なバージョンが出てくるはずです。同時に、今回のサンプルで、クラウドERPにMCPサーバーが実装されるとどういう世界観になるか、ということは十分に楽しめました。
また、MCPサーバー側だけでなく呼び出すAI側にも課題があります。上記の課題を抜本的に解決したり、これから実装されてくるであろうより多くの種類の複雑な作業を正しく実行するには、NetSuite側はMCPサーバーだけでなく、ERPデータの扱いに長けた「NetSuite AIエージェント」の実装が必要で、ClaudeとNetSuite AIエージェントによるA2Aによる共同作業が必要になってくるものと思われます。
ERPで売上を求める方法も、顧客カットで行くか、商談カットで行くか、発注書カットで行くか、請求書カットで行くか、など色々なアプローチが考えられます。それぞれの方法により求められる値も異なってくる可能性があります。人間でも、ERPをよく知らない人に売上高トップ5レポートを作って、といったときに、今回と同じような課題が出てきそうなことは容易に想像できます。単純にツールの使い勝手の課題ではなく、使う側も知識を持っている必要がある、ということです。
今回のトライアルは以上になります!最後までお読みいただきありがとうございました。
(以下は事前準備の章です。)
(事前準備) NetSuite環境のセットアップ
NetSuiteにおけるセットアップ手順をまとめました。管理者など、SuiteAppマーケットプレイスにアクセスしてインストールできる権限やテナントの設定変更権限を持ったユーザーで、あらかじめ実施しておく必要があります。
OAuth2.0とサーバーSuiteScript機能の有効化
NetSuiteのサーバー機能として、OAuth2.0によるログイン機能とサーバーSuiteScript機能をあらかじめ有効にしておく必要があります。
[設定]-[会社]-[機能を有効化] の「SuiteCloud」タブから設定を変更します。
特に「OAuth2.0」は初期状態でオフになっているので、オンにしてください。
OAuth2.0をオンにして「保存」ボタンを押し、再びチェックボックスを確認してください。
MCP Sample Tools SuiteAppのインストール
[カスタマイゼーション]-[SuiteCloud開発]-[SuiteAppマーケットプレイス] で、「MCP」と検索します。すると、「MCP Sample Tools」という名前で、NetSuite製のSuiteAppがヒットします。
ダイアログボックスが表示されますが、「インストール」ボタンを押します。
しばらくすると、「インストール済み」のステータスに変わります。
[カスタマイゼーション]-[SuiteCloud開発]-[インストール済のSuiteAppリスト] で、「MCP Tools」が表示されていればOKです。
利用するロールへの権限の割り当て
MCPクライアントからの接続には管理者ロールは使えないため、通常のユーザーロールを使う必要があります。たとえば「セールス・マネージャー」ロールを使うとすると、このロールに「MCP Server Connection」権限と「OAuth 2.0アクセス・トークンを使用してログイン」権限の2つを割り当てておく必要があります。
[設定]-[ユーザー/ロール]-[ロール管理] より、設定対象として「セールス・マネージャー」を選択します。
「権限」タブの「設定」サブタブを表示して、権限として「MCP Server Connection」と「OAuth 2.0アクセス・トークンを使用してログイン」の2つを探して権限リストに追加します。
追加されたら「保存」ボタンを押して確定します。
これで、「セールス・マネージャー」ロールでMCPサーバーにアクセスできる権限が付与されました。このロールを使ってMCPクライアントであるClaude DesktopからNetSuiteにアクセスしていきます。
(事前準備) NetSuiteをClaude Desktopにコネクタとして追加
Claude Desktopより、NetSuiteにつなぐためのコネクタをセットアップします。「検索とツール」ボタンから「コネクタを管理」を選択します。
「カスタムコネクタを追加」画面にて、「名前」と「リモートMCPサーバーURL」を入力します。「名前」は「NetSuite」と入れましょう。「リモートMCPサーバーURL」には以下のURLを入力します。ここで<accountid>
は "TD12345678" のように、NetSuiteのURLの先頭についているアカウントの識別子です。
https://<accountid>.suitetalk.api.netsuite.com/services/mcp/v1/all
これで、コネクタ一覧に「NetSuite」が追加されました。「連携/連携させる」ボタンを押して、認証を行います。Claude側とNetSuite側で両方とも認証が走ります。あらかじめ、標準ブラウザーでClaudeとNetSuiteの両方にサインインを行ってからこの操作を行うとスムーズです。
NetSuiteとの接続は、アクセスがないまま一定時間経過するとタイムアウトして切断されるため、「連携/連携させる」ボタンによるNetSuiteへの認証は必要に応じて利用前に毎回実施する必要があります。
ClaudeからNetSuiteへのアクセス許可を要求する画面が表示されるので「許可」ボタンを押します。
Claude Desktopの「検索とツール」ボタンで「NetSuite」が表示されるようになっていれば成功です。これで、事前設定が完了しました。