mcpField
O
office-addin-mcp

office-addin-mcp

ローカル
github.com/dsbissett生産性420 週間前に更新

office-addin-mcp について

office-addin-mcpは、WebView2/CDP経由でExcel、Word、Outlook、PowerPoint、OneNoteのOffice.jsアドインを操作するGo製MCPサーバーです。複数手順の操作を1回の呼び出しにまとめるワークフロー単位のツールを提供します。

主な機能

  1. 015つのOfficeアプリ向けワークフローツール
  2. 02ドキュメント構造の検索と検出
  3. 03変更通知に対応するMCPリソース
  4. 04ツールマクロの記録と再生
  5. 05ヘッドレスChromeによるページ操作

活用シーン

  1. 01Excelブックの要約とクエリ
  2. 02Wordの編集やOutlook返信の下書き
  3. 03Excelの範囲をPowerPointスライドへ挿入

MCP 対応

このサーバーはstdioでMCPクライアントと通信し、Officeのワークフローツール、リソース、購読機能を提供します。WebView2/CDP経由でOfficeアドインに接続し、ヘッドレスChromeでのページ操作にも対応します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"dsbissett-office-addin": {
"command": "npx",
"args": [
"-y",
"@dsbissett/office-addin-mcp"
]
}
}
}
起動コマンドnpx -y @dsbissett/office-addin-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@dsbissett/office-addin-mcp0.8.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

office-addin-mcp

あらゆる MCP クライアントから Excel、Word、Outlook、PowerPoint、OneNote のアドインを操作できます。Model Context Protocol を stdio 経由で話す Go バイナリが 1 つあれば実現できます。

office-addin-mcp は、Office.js アドインをホストするために Office が使用する WebView2 ランタイムに接続し、LLM クライアントに高レベルのツール群を提供します。モデルに 15 個の生の Office.js プリミティブを連携させる方法を学習させる代わりに、サーバーはワークフローごとに 1 つのツール呼び出しを提供します。

最新リリース · CHANGELOG.md · PLAN-workflow-surface.md をご覧ください。

主な特長

  • プリミティブではなく、ワークフローツール。 excel.tabulateRegion、word.applyEdits、outlook.draftReply、powerpoint.rebuildSlideFromOutline、onenote.appendToPage、excel.summarizeWorkbook は、それぞれ以前は 5~20 回必要だった呼び出しを、1 つの Office.js バッチ(CDP の往復 1 回)にまとめます。
  • サーバー側のクエリ DSL。 excel.query/outlook.query/powerpoint.query/onenote.query は、ホスト内で filter/project/groupBy/agg/limit を実行するため、10 万行のワークブックでも 5 行の結果を返せます。
  • ドキュメントコンテキストの永続キャッシュ。 *.discover ツールは、ワークブック/ドキュメント/メールボックス/デッキ/ノートブックの構造を %LOCALAPPDATA%\office-addin-mcp\doccache.json に保存するため、繰り返し行う検出呼び出しでは CDP の往復が発生しません。
  • ライブサブスクリプション対応の MCP リソース。 URI で Office の状態を参照できます — office://excel/Book1/Sheet1!A1:D20、office://word/<doc>/bookmark/<name>、office://outlook/inbox、office://pp/<deck>/slide<N>、office://onenote/<notebook>/<section>/<page> — 内容が変わった際には notifications/resources/updated をサブスクライブできます。
  • マクロの記録と再生。 macro.record_start → 任意のツールのシーケンスを実行 → macro.record_stop で JSON マクロをディスクに書き込みます。次回起動時に、サーバーは各マクロを呼び出し可能な macro.<name> ツールとして登録します。
  • Office.js エラーの自動診断。 ItemNotFound、アドレスの解析失敗、スライドインデックスのエラー、作成と読み取りの不一致が発生すると、エラー情報に available_sheets、nearest_name_suggestions、parsed_address、slide_count、item_mode、recoveryHint が追加されるため、2 回目の往復なしでモデルが自力で修正できます。
  • 自己修復型の CDP 接続。 Excel が予期せず終了した場合、サーバーは次のツール呼び出し時に接続切断を検知し、古いサイドロード登録を停止して Excel を再起動し(必要に応じて開発サーバーも起動)、セッションプールをリセットして元の操作を再試行します。エージェントの介入は不要です。サーバー自身が起動した場合(--launch-addin または以前の addin.launch 呼び出し経由)のみ有効です。外部の --browser-url エンドポイントへの接続には影響しません。
  • 長時間処理の進捗通知。 addin.launch、addin.ensureRunning、マクロの再生では、各フェーズの境界(開発サーバーの起動、サイドロード、CDP 準備完了待ち、ステップの実行)で MCP $/progress 通知がストリーミングされるため、クライアントは回転表示だけでなく、ライブのステータスバーを表示できます。
  • ホスト間のオーケストレーション。 office.embed は Excel から範囲を読み取り、1 回の呼び出しで PowerPoint のスライドに挿入します。
  • ページ自動化へのフォールバック。 page.*/pages.*/inspect.*/interact.* で、スクリーンショット、スナップショット、クリック、入力、文字入力、ホバー、移動、評価、待機、コンソールログ、ネットワークログを扱えます。macOS/Linux では、ヘッドレス Chrome に対して同じプリミティブを使用します。
  • ホストごとの runScript エスケープハッチ。 ワークフローのツール群では不十分な場合、excel.runScript、word.runScript、outlook.runScript、powerpoint.runScript、onenote.runScript で任意の <Host>.run コールバックを実行できます。

要件

要件備考
Windows 10/11 上の Officeすべての *.runScript / *.query / *.discover / *.applyDiff / addin.* ツールで必須です。Office は Windows でのみ WebView2 を使用します
Node.js 14+npx でインストールする場合に必要です
Go 1.22+ソースからビルドする場合にのみ必要です
macOS / Linuxヘッドレス Chrome に対する page.* / pages.* でサポートされています(Office は不要です)

インストール

npm(推奨)
npm install -g @dsbissett/office-addin-mcp

インストールせずにオンデマンドで実行することもできます。

npx @dsbissett/office-addin-mcp@latest --help

Windows x64、macOS(Intel + Apple Silicon)、Linux(x64 + ARM64)向けのビルド済みバイナリは、オプションの npm 依存関係を通じて提供されます。適切なバイナリが自動的に取得されます。

ソースからビルド
go install github.com/dsbissett/office-addin-mcp/cmd/office-addin-mcp@latest

Claude Code で使う

1 つのコマンドでサーバーをグローバルに登録できます。

claude mcp add office-addin-mcp -- npx -y @dsbissett/office-addin-mcp@latest

手動で追加することもできます。プロジェクトスコープ(リポジトリ内の .claude/mcp.json)とユーザースコープ(~/.claude.json → mcpServers)のどちらも使用できます。

{
  "mcpServers": {
    "office-addin-mcp": {
      "command": "npx",
      "args": ["-y", "@dsbissett/office-addin-mcp@latest"]
    }
  }
}

その後、任意の Claude Code セッションで次の操作を行います。

  1. Office ホストを開き(下記の Office ホストのセットアップ を参照)、WebView2 のデバッグポートがリッスンしている状態にします。
  2. Claude に作業を依頼します。たとえば、「ブックを要約してから、Sales シートを地域別にピボットしてください。」 と依頼します。Claude は excel.summarizeWorkbook と excel.query を自動的に選択します。
  3. Claude Code で /mcp を実行してツールの一覧を確認するか、シェルから claude mcp list を実行します。

ヒント: --launch-addin を渡すと、Claude がカレント作業ディレクトリ内のアドインプロジェクトを自動的にサイドロードできます。環境変数を手動で設定する必要はありません。

その他の MCP クライアントで使う

VS Code(GitHub Copilot)

.vscode/mcp.json にワークスペース設定を記述します。

{
  "servers": {
    "office-addin-mcp": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@dsbissett/office-addin-mcp@latest"]
    }
  }
}

または、コマンドパレット → MCP: Add Server → コマンドを貼り付けます。

Cursor

グローバル設定は ~/.cursor/mcp.json、プロジェクト設定は .cursor/mcp.json です。

{
  "mcpServers": {
    "office-addin-mcp": {
      "command": "npx",
      "args": ["-y", "@dsbissett/office-addin-mcp@latest"]
    }
  }
}
Codex(OpenAI)

~/.codex/config.toml に設定します。

[mcp_servers.office-addin-mcp]
command = "npx"
args = ["-y", "@dsbissett/office-addin-mcp@latest"]
Windsurf

~/.codeium/windsurf/mcp_config.json に設定します。

{
  "mcpServers": {
    "office-addin-mcp": {
      "command": "npx",
      "args": ["-y", "@dsbissett/office-addin-mcp@latest"]
    }
  }
}
任意の MCP 互換クライアント
  • コマンド: npx
  • 引数: ["-y", "@dsbissett/office-addin-mcp@latest"]
  • トランスポート: stdio

Office ホストのセットアップ

Office ホストが CDP に WebView2 ランタイムを公開するのは、デバッグポートの環境変数を設定して起動した場合のみです。この変数はすべての Office アプリで共有されるため、次の同じ設定を 5 つすべてで使用できます。

PowerShell

$env:WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS = "--remote-debugging-port=9222"
Start-Process excel.exe my-workbook.xlsx
# or:  Start-Process winword.exe my-document.docx
# or:  Start-Process outlook.exe
# or:  Start-Process powerpnt.exe my-deck.pptx
# or:  Start-Process onenote.exe

コマンドプロンプト

set WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS=--remote-debugging-port=9222
excel.exe my-workbook.xlsx

サーバーはデフォルトで http://127.0.0.1:9222 を確認します。--browser-url または --ws-endpoint で上書きできます。または、--launch-addin を使えばセットアップ全体を省略できます。サーバーが cwd 内の Office アドインプロジェクトを検出し、office-addin-debugging を通じてサイドロードします。

ツール一覧

PLAN-workflow-surface.md のフェーズ 0 で、生の cdp.* インターフェースを削除しました。以下のすべてが、ワークフローに合わせた代替機能です。各ワークフローツールは、1 回の MCP 呼び出し → 1 回の Office.js バッチ → 1 回の CDP ラウンドトリップで構成されます。

Excel
ツール用途
excel.summarizeWorkbookシート、テーブル、名前付き範囲、使用範囲の境界を 1 回の呼び出しで取得
excel.tabulateRegion範囲を読み込み、行をオブジェクトとして返し、列ごとの型タグを付与
excel.queryサーバーサイドでの filter / project / groupBy / agg / limit DSL
excel.discover永続的なブックのフィンガープリントスナップショット(doccache)
excel.applyDiff1 回の Excel.run でセル/範囲のパッチを一括適用
excel.runScript任意の Excel.run コールバックを実行
Word
ツール用途
word.discoverドキュメント構造のスナップショット
word.applyEdits1 回の Word.run で検索/置換編集を一括適用
word.runScript任意の Word.run コールバックを実行
Outlook
ツール目的
outlook.queryメールボックス/現在のアイテムを照会します
outlook.discoverメールボックスとアクティブなアイテムのスナップショットを取得します
outlook.draftReply作成モードのアイテムの件名や本文を設定します
outlook.runScriptOffice.context.mailbox に対して任意のコールバックを実行します
PowerPoint
ツール目的
powerpoint.queryスライドレベルのクエリ DSL
powerpoint.discoverプレゼンテーションの構造スナップショットを取得します
powerpoint.rebuildSlideFromOutlineスライドのタイトルや本文の箇条書きを書き換えます
powerpoint.runScript任意の PowerPoint.run コールバックを実行します
OneNote
ツール目的
onenote.queryノートブック/セクション/ページのクエリ DSL
onenote.discoverノートブックの構造スナップショットを取得します
onenote.appendToPageページに HTML や箇条書きを追加します
onenote.runScript任意の OneNote.run コールバックを実行します
ホスト間連携とマクロ
ツール目的
office.embedExcel の範囲を読み取り、PowerPoint のスライドに挿入します
macro.record_start以降のツール呼び出しの名前付きマクロへの記録を開始します
macro.record_stopマクロを確定してディスクに保存します
macro.<name>保存済みのマクロを再生します(次回起動時に自動登録)
アドインのライフサイクルと汎用ページ自動化
ツールグループ目的
addin.*ensureRunning(ここから開始 — 必要に応じて状態を確認してから起動)、launch、stop、detect、status、contextInfo、cfRuntimeInfo、openDialog、dialogSubscribe、dialogClose、listTargets
page.*screenshot、snapshot、click、fill、typeText、hover、navigate、evaluate、pressKey、waitFor、consoleLog、networkLog、networkBody
pages.*list、select、close、handleDialog
inspect.* / interact.*DOM/アクセシビリティの検査と、より高レベルな操作プリミティブ

MCP リソース

LLM クライアントは毎回再取得する代わりに、URI を使って Office の状態を参照できます。起動時に5つのリソーステンプレートが登録されます。

URI テンプレート元となるもの
office://excel/<workbook>/<sheet>!<range>excel.tabulateRegion
office://word/<doc>/bookmark/<name>word.runScript(インラインスクリプト)
office://outlook/<folder>outlook.query
office://pp/<deck>/slide<N>powerpoint.query
office://onenote/<notebook>/<section>/<page>onenote.query

リソースは resources/subscribe をサポートしています。サーバーは30秒ごとにフィンガープリントをポーリングし、内容が変更されると notifications/resources/updated を送信します。resources/unsubscribe(またはクライアントの切断)により、ポーリング用ゴルーチンが終了します。

パフォーマンスに関する注意事項

  • urlPattern は、対象 URL との部分一致によって WebView2 ページを選択します。セッションに対する最初の呼び出し後は、セレクターキャッシュにより、以降の呼び出しで diagnostics.cdpRoundTrips が約3から1に減少します。
  • セッションプールでは、60秒間に3回まで再接続できます。上限に達すると connection/session_acquire_failed が発生します。サーバーが起動を管理している場合、このエラーを通知する前に停止と再起動を1回自動で試みるため、一時的な Excel の再起動はエージェントからは透過的です。
  • DocCache のスナップショットはアトミックな名前変更によって書き込まれ、モードは0600です。--no-doccache で無効にできます。

フラグと環境変数

フラグ環境変数デフォルト説明
--browser-url—http://127.0.0.1:9222WebView2 / Chrome のデバッグエンドポイント
--ws-endpoint——ブラウザーの WebSocket URL を直接指定します(--browser-url より優先されます)
--log-file—stderr診断情報を stderr ではなくファイルに追記します
--log-level—infoslog のログレベル:debug、info、warn、error
--launch-addin—off起動時に、CDP エンドポイントに到達できない場合に限り、cwd 配下の Office アドインプロジェクトを自動検出してサイドロードします
--launch-excel—off非推奨の --launch-addin の別名です
--no-doccache—off永続的なドキュメント検出キャッシュを無効にします(*.discover は引き続き実行されますが、doccache.json の読み書きはスキップされます)
--allow-dangerous-cdpOAMCP_ALLOW_DANGEROUS_CDPoffクラッシュ/終了の CDP メソッドを有効にします
--version——バイナリのバージョンを出力して終了します

このバイナリは位置引数のサブコマンドを受け付けず、stdio 経由で MCP を使用します。従来の call / daemon / serve --stdio サブコマンドは削除されています。

レイアウト

cmd/office-addin-mcp/   main entry
internal/tools/         registry, dispatcher, envelope, diagnostics
internal/cdp/           hand-rolled CDP WebSocket client
internal/webview2/      endpoint discovery
internal/session/       session pool + reconnect budget
internal/officejs/      Office.js executor + payloads
internal/js/            embedded Office.js scripts
internal/doccache/      persistent document discovery cache
internal/resources/     office:// URI parsing + provider + polling watcher
internal/recorder/      macro recorder store
internal/tools/macrotool/  macro.record_start / record_stop / replay
internal/mcp/           SDK server wiring + resource registration

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。