office-addin-mcp について
office-addin-mcpは、WebView2/CDP経由でExcel、Word、Outlook、PowerPoint、OneNoteのOffice.jsアドインを操作するGo製MCPサーバーです。複数手順の操作を1回の呼び出しにまとめるワークフロー単位のツールを提供します。
主な機能
- 015つのOfficeアプリ向けワークフローツール
- 02ドキュメント構造の検索と検出
- 03変更通知に対応するMCPリソース
- 04ツールマクロの記録と再生
- 05ヘッドレスChromeによるページ操作
活用シーン
- 01Excelブックの要約とクエリ
- 02Wordの編集やOutlook返信の下書き
- 03Excelの範囲をPowerPointスライドへ挿入
MCP 対応
このサーバーはstdioでMCPクライアントと通信し、Officeのワークフローツール、リソース、購読機能を提供します。WebView2/CDP経由でOfficeアドインに接続し、ヘッドレスChromeでのページ操作にも対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
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 セッションで次の操作を行います。
- Office ホストを開き(下記の Office ホストのセットアップ を参照)、WebView2 のデバッグポートがリッスンしている状態にします。
- Claude に作業を依頼します。たとえば、「ブックを要約してから、Sales シートを地域別にピボットしてください。」 と依頼します。Claude は
excel.summarizeWorkbookとexcel.queryを自動的に選択します。 - 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.applyDiff | 1 回の Excel.run でセル/範囲のパッチを一括適用 |
excel.runScript | 任意の Excel.run コールバックを実行 |
Word
| ツール | 用途 |
|---|---|
word.discover | ドキュメント構造のスナップショット |
word.applyEdits | 1 回の Word.run で検索/置換編集を一括適用 |
word.runScript | 任意の Word.run コールバックを実行 |
Outlook
| ツール | 目的 |
|---|---|
outlook.query | メールボックス/現在のアイテムを照会します |
outlook.discover | メールボックスとアクティブなアイテムのスナップショットを取得します |
outlook.draftReply | 作成モードのアイテムの件名や本文を設定します |
outlook.runScript | Office.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.embed | Excel の範囲を読み取り、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:9222 | WebView2 / Chrome のデバッグエンドポイント |
--ws-endpoint | — | — | ブラウザーの WebSocket URL を直接指定します(--browser-url より優先されます) |
--log-file | — | stderr | 診断情報を stderr ではなくファイルに追記します |
--log-level | — | info | slog のログレベル:debug、info、warn、error |
--launch-addin | — | off | 起動時に、CDP エンドポイントに到達できない場合に限り、cwd 配下の Office アドインプロジェクトを自動検出してサイドロードします |
--launch-excel | — | off | 非推奨の --launch-addin の別名です |
--no-doccache | — | off | 永続的なドキュメント検出キャッシュを無効にします(*.discover は引き続き実行されますが、doccache.json の読み書きはスキップされます) |
--allow-dangerous-cdp | OAMCP_ALLOW_DANGEROUS_CDP | off | クラッシュ/終了の 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
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。