AIエージェントやChatGPTの拡張連携技術として注目を集めるMCP(Model Context Protocol)。
このプロトコルを使えば、AIが外部ツールやデータソースにアクセスして、より実用的なタスクをこなせるようになります。
次々とさまざまなAIサービスがMCP対応を進めており、開発者の間でも「MCPサーバーを自作してAIを拡張する」動きが加速しています。
そこで今回は、 enebularのクラウド実行環境を使ってリモートMCPサーバーを動かすHello Worldを試してみました。
enebularでは、Node-REDベースで構築したフローをホスティングできるため、簡単にMCPサーバーを実現できます。
この記事では、enebularでMCPサーバーを動作させ、Claude Desktopと連携する手順を説明します。
※本来リモートMCPサーバーの場合、利用できるユーザーを限定するためのOAuth2認証の仕組みが必要ですが、今回の内容では、それを行っていません。あくまでお試しの参考にしていただければと思います。
フローの構成
MCPに対応するため、MCPクライアント(Claude Desktopなどの生成AIアプリに内蔵されているもの)からの要求に対するレスポンスを返す内容になってます。
enebularのフローエディタでもクラウド実行環境でも動作するようにしています。
フローは、enebularのDiscoverで公開しています。
フローの動作確認
サードパーティのノードや設定等も特に必要なく、フローをインポートすればリモートMCPサーバーとして動作するようになっています。
フローエディタで動作させる場合は、iマークから取得できるURLの後ろに、mcp-server/mcp
を追加すれば生成AIに設定するためのURLになります。
Claude DesktopでのMCPサーバーの設定は、設定メニューから開発者
を開き、設定を編集
をクリック。
claude_desktop_config.json
をテキストエディタで開き、以下を記載して保存します。
(すでに他のMCPサーバーを設定している場合は、hello-world-mcp-serverの内容を追記してください。)
{
"mcpServers": {
"hello-world-mcp-server": {
"command": "npx",
"args": [
"mcp-remote",
"https://******.herokuapp.com/mcp-server/mcp"
]
}
}
}
ファイルを保存したら、いったんClaude Desktopは終了します。
(Windowを閉じただけだと終了しないので、タスクトレイ等から終了をしてください)
再び、Claude Desktopを起動し、新規チャット等の検索とツール
で、hello-world-mcp-server
が追加されていれば成功です。
プロンプトで、以下のように入力します。
(名前は自由に記入してください)
hello worldを使ってください。
名前は****です。
するとMCPサーバーの利用を許可するか聞かれるので、許可してください。
MCPサーバーからのレスポンスに従って、答えてくれます。
今回は、単純な例なので送った名前に対しての挨拶が返ってくるだけです。
クラウド実行環境での動作
enebularのクラウド実行環境にデプロイすれば、永続的に動作も可能です。
クラウド実行環境を作り、設定からHTTPトリガーで設定したURLを同じようにclaude_desktop_config.json
に設定するだけです。クラウド実行環境の場合は、HTTPトリガーで設定したURLの後ろに/mcp
を追記します。
クラウド実行環境の設定手順は以下の記事を参考にしてください
フローの解説
今回のフローは単純な例ですが、数か所変更すれば応用が利くと思いますので、ポイントを解説します。
変更する箇所は、ほとんどMCPメッセージ処理用のサブフロー
の中に集約しています。
サーバー情報
メインフロー
のサーバー情報の応答というtemplateノードで、サーバー情報を返すようにしています。
ここはMCPというよりは、単純にエンドポイントにアクセスされた時の応答用なので、気にならなければ変更する必要はありません。
initialize応答
MCPメッセージ処理用のサブフロー
のinitialize応答というchangeノードで、MCPサーバーとしての初期情報を返しています。
プロパティを開いて、対象の値の・・・
からエディタを開きます。
ここでは、MCPサーバーの名前を必要に応じて変更するぐらいです。
ここで、toolsやprompts、resorcesを設定してもOKです。
tools/list応答
MCPメッセージ処理用のサブフロー
のtools/list応答というchangeノードで、MCPサーバーが持っているtoolのリストを返しています。
プロパティを開いて、対象の値の・・・
からエディタを開きます。
toolを変更したい場合や追加したい場合に変更します。
name
やdescription
で生成AIがどんなtoolか認識するので重要です。
生成AIからMCPクライアント経由で受け取りたい引数もinputSchema
で定義しています。
tool:hello_world応答
実際のtoolの処理です。
switchノードで、指定されたtoolで分岐しています。このフローでは、hello_world以外をエラーとしています。
変更する場合は、switchノードで判断する文字列やパターンを変更し、後続の処理を変えます。
このtoolでは、tool:hello_world応答というchangeノードで、MCPクライアント経由で生成AIに応答する内容を作っています。
content.text
の内容しだいなので、この中身を引数と組み合わせて変更すればさまざまな応答を返すtoolにできます。計算結果や他のサービスから取得した値とかでも良いです。
今後は
実は、ローカルのMCPサーバーはいろいろ試していたので、enebularのデータストアに繋げて蓄積したセンサーデータをMCPサーバーでつなげて連携させClaudeにセンサーデータの解析とかも試していました。
次は、これをリモートMCPでも試してみたいと思います。