🐶

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を利用するための準備を行います。

  1. リポジトリのクローンと依存関係のインストール
    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
  1. サーバーの起動
    以下のコマンドで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 
  1. 管理画面での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の機能を呼び出してみましょう。

  1. サンプルファイルを開く
    node-mcp-bridge リポジトリ内の以下のサンプルExcelファイルを開きます。
sample\call_excelmacro.xlsm

ファイルを開くと、以下のようなシートが表示されます。

  1. 設定値の確認
    このサンプルでは、シート上で指定した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を参照してください。
  1. マクロの実行
    シート上の「Run」ボタンをクリックすると、マクロが実行されます。

  2. マクロコード (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