ExcelマクロからMCPサーバを呼び出してみよう!
はじめに
最近、AIと外部システム連携の標準化プロトコルとして MCP(Model Context Protocol) が注目を集めています。OpenAIが採用を発表したこともあり、今後業界標準となる可能性を秘めた技術です。
MCPは、Anthropic社によって2023年頃から提唱されているプロトコルで、AIが外部のツールやAPIと対話する際の形式を標準化することを目的としています。いわゆるデータベース接続におけるJDBCやODBCのような役割を果たすもの、と考えると分かりやすいですかね?
このような標準化は、対応するツールやサービスの開発を促進し、エコシステムの発展に貢献しますね!
しかしながら、MCPを直接利用するには、MCPサーバーを別途起動し、呼び出し側でMCPクライアントを実装する必要があり、やや複雑な側面もあります。
この課題を解決するために、MCPサーバーへのアクセスを簡略化する 「Node MCP Bridge」 を開発しました。このブリッジサーバーを利用することで、HTTPリクエストを通じて、様々なプログラムから簡単にMCPサーバーの機能を呼び出すことが可能になります。
最近では便利なMCPサーバーも増えてきました。これらはAIエージェントだけでなく、様々なアプリケーションで活用できる可能性を秘めています。
そこで本記事では、Node MCP Bridgeを使い、多くの人に馴染み深いExcelマクロからMCPサーバー(今回はMicrosoft PlaywrightのMCPサーバー)を呼び出す方法を具体的に解説します。
- 構成イメージ
セットアップ手順
まず、Node MCP Bridgeを利用するための準備を行います。
- リポジトリのクローンと依存関係のインストール
GitHubからMCPBridgeリポジトリをクローンし、必要なパッケージをインストールします。
https://github.com/virtuarian/node-mcp-bridge.git
# リポジトリをクローン
git clone https://github.com/virtuarian/node-mcp-bridge.git
# ディレクトリに移動
cd node-mcp-bridge/
# 依存関係をインストール
npm install
# プロジェクトをビルド
npm run build
- サーバーの起動
以下のコマンドでNode MCP Bridgeサーバーを起動します。
npm start
問題なく起動すれば、以下のようなログが表示されます。デフォルトでは3001番ポートで待機します。
INFO [2025-04-04 23:00:0.000 +0900]: Start Node MCP Bridge: http://localhost:3001
app: "node-mcp-bridge"
env: "development"
port: 3001
- 管理画面でのMCPサーバー設定
Webブラウザで管理画面 http://localhost:3001/admin を開きます。
初回起動時はMCPサーバーが登録されていないため、右上の「新規サーバ追加」ボタンをクリックします。
今回はMicrosoftのplaywrightを設定してみましょう
以下の情報を入力したら、右下の保存ボタンをクリックしましょう
項目 | 設定値 | 説明 |
---|---|---|
名前 | playwright | ブリッジ内で管理するための任意の名前 |
コマンド | npx | MCPサーバーを起動するコマンド (npx経由でPlaywright MCPを起動) |
引数 | @playwright/mcp@latest | コマンドに渡す引数 (最新版のPlaywright MCPパッケージを指定) |
設定が正しく、Playwright MCPサーバーの起動に成功すると、一覧画面でステータスが「接続済み」と表示されます。
これで、Node MCP Bridge経由でPlaywright MCPサーバーを利用する準備が整いました。
ExcelマクロからのMCPサーバー呼び出し
それでは、実際にExcelマクロからMCP Bridgeを介してPlaywrightの機能を呼び出してみましょう。
- サンプルファイルを開く
node-mcp-bridge リポジトリ内の以下のサンプルExcelファイルを開きます。
sample\call_excelmacro.xlsm
ファイルを開くと、以下のようなシートが表示されます。
- 設定値の確認
このサンプルでは、シート上で指定したMCP Bridgeのエンドポイントに対し、指定したMCPサーバーのツールを呼び出す設定が既に入力されています。
項目 | 設定値 |
---|---|
MCP Bridge Endpoint | http://localhost:3001/tools/call/abcd/approve |
MCP Server | playwright |
Tool | browser_navigate |
arguments | url:https://www.yahoo.com |
- Endpoint: http://localhost:3001/tools/call/{セッションID}/approve
Node MCP Bridgeにはツール呼び出し用のエンドポイントが用意されています。{セッションID} は任意の文字列で、クライアント側でセッションを識別するために使用します(ここでは abcd を使用)。
末尾の /approve は、ツール呼び出し承認するオプションです(管理画面での自動承認も可能)。
MCPブリッジは色々とEndpointが用意されていますので、詳細はREADMEを参照してください。
-
マクロの実行
シート上の「Run」ボタンをクリックすると、マクロが実行されます。 -
マクロコード (VBA)
Alt + F11 キーでVBAエディタを開くと、マクロのコードを確認できます。
マクロコード
'CallPlaywrightNavigate サブルーチンがメインの処理で、CallMcpTool 関数を呼び出しています。
'CallMcpTool 関数は以下の処理を行っています。
' - シートからエンドポイントURL、MCPサーバー名、ツール名、引数を取得します。
' - 引数をJSON形式の文字列に整形します。
' - MSXML2.XMLHTTP オブジェクトを使用して、指定されたエンドポイントにHTTP POSTリクエストを送信します。
' - Content-Type ヘッダーを application/json に設定します。
' - リクエストボディにサーバー名、ツール名、引数を含むJSONデータを設定します。
' - HTTPレスポンスを受け取り、その内容(実行結果のJSON)を関数の戻り値として返します。
' - CallPlaywrightNavigate は、返された結果をシートの result セルに表示します。
Sub CallPlaywrightNavigate()
' Controls whether to display the result in the designated cell
Dim displayResult As Boolean
displayResult = True
' Call MCP tool with parameters from spreadsheet cells
Dim toolResponse As String
toolResponse = CallMcpTool( _
Range("mcpserver"), _
Range("tool"), _
"{""" & Range("param1") & """: """ & Range("value1") & """}")
' Output the result to the designated cell if display is enabled
If displayResult Then
Range("result").Value = toolResponse
End If
End Sub
Function CallMcpTool(serverName As String, toolName As String, toolArguments As String) As String
' Calls an MCP tool and returns the response
' Parameters:
' serverName: The name of the MCP server to use
' toolName: The name of the tool to call
' toolArguments: JSON-formatted arguments for the tool
' Create HTTP Request object
Dim httpRequest As Object
Set httpRequest = CreateObject("MSXML2.XMLHTTP")
' Get endpoint URL from spreadsheet
Dim apiEndpoint As String
apiEndpoint = Range("endpoint")
' Construct JSON request body
Dim requestBody As String
requestBody = "{" & _
"""serverName"": """ & serverName & """," & _
"""toolName"": """ & toolName & """," & _
"""arguments"": " & toolArguments & _
"}"
' Send HTTP request with error handling
On Error Resume Next
httpRequest.Open "POST", apiEndpoint, False
httpRequest.setRequestHeader "Content-Type", "application/json"
httpRequest.send requestBody
' Handle network errors
If Err.Number <> 0 Then
CallMcpTool = "Error: " & Err.Description
Exit Function
End If
On Error GoTo 0
' Process response
If httpRequest.Status = 200 Then
CallMcpTool = httpRequest.responseText
Else
CallMcpTool = "Error: HTTP Status " & httpRequest.Status & " - " & httpRequest.responseText
End If
' Clean up
Set httpRequest = Nothing
End Function
実行結果
マクロを実行すると、Node MCP Bridge経由でPlaywrightが呼び出され、指定されたURL(ここでは Yahoo!)が新しいブラウザウィンドウで開かれます。
成功した場合、Excelシートの「result」セルには、Playwrightからの成功を示すJSON応答が表示されます(内容はHTMLです)。
エラーの場合:
もし、お使いの環境にPlaywrightが必要とするブラウザ(この場合はChromium)がインストールされていない場合、以下のようなエラーメッセージが「result」セルに表示されることがあります。
エラーの例
{"result":{"content":[{"type":"text","text":"Error: browserType.launchPersistentContext: Chromium distribution 'chrome' is not found at /opt/google/chrome/chrome\nRun \"npx playwright install chrome\""}],"isError":true}}
この場合は、メッセージの指示に従って、ターミナル(コマンドプロンプトやPowerShellなど)で以下のコマンドを実行し、必要なブラウザをインストールしてください(環境に合わせて chrome の部分を調整する場合があります)。
> npx playwright install chrome
Need to install the following packages:
playwright@1.51.1
Ok to proceed? (y) y
インストール後、再度Excelマクロの「Run」ボタンをクリックすれば、正常に動作するはずです。
問題なければ無事yahooのページが開くと思います。
おわりに
Node MCP Bridgeを使うことで、MCPサーバーのセットアップやクライアント実装の複雑さを抽象化し、使い慣れたツールや言語からHTTPリクエストを送るだけで、MCPサーバーの強力な機能を利用できるようになります。
今回はExcelマクロという、少し変わったクライアントからの利用例をご紹介しましたが、これによりWebアプリケーション、スクリプト、その他の様々なプログラムからMCPを活用する道が開かれると思います。
ぜひ、Node MCP Bridge を試して、MCPの可能性を体験してみてください!!
Discussion