Excel自動化MCPを自作してみた!Claude伴走型で挑戦
こんにちは!YaroTechです。
「既存のMCPツールは便利だけど、もっと業務に特化した機能が欲しい...」
「VBAマクロの管理までClaude Desktopからできたらいいのに...」
「そうだ、自分で作ればいいんだ!」
今日は、そんな思いから始まったExcel自動化MCP開発の道のりを振り返ります。既に運用して重宝している自作MCPの開発秘話をお届けします。
そして、いつもどおり、私はプログラムは一切触っておりませんが、ClaudeDesktopが伴走してくれたから出来ました!
🖥️ 動作確認環境
まず最初に、開発・運用環境をお伝えします:
PC: Microsoft Surface Laptop 7th(Snapdragon X Elite / ARM64)
OS: Windows 11 Pro 24H2(ARM64版)※Copilot+ PC
Python: 3.12.3(※ARMユーザー注意※Microsoft Store版ではない通常版)
必須ライブラリ: pywin32、mcp
Claude Desktop: Pro契約(2025/4/21~)
※ARM版Windowsでも動作可能ですが、x64版Windowsとは一部異なった調整が必要です。
🎯 この記事で得られること
MCP自作への第一歩の踏み出し方
PythonとTypeScriptの選択基準
Excel COM オブジェクトの活用方法
開発で直面した壁とその乗り越え方
完成後の運用で感じた価値
📊 開発前後の変化
Before: 既存MCPでは限界があった
filesystemでExcelファイルは読めるが...
VBAマクロの設定、管理はできない
セルの直接操作は面倒
After: 業務特化の自作MCPで解決!
Excelの完全制御が可能に
VBAモジュールの追加・編集・実行
複数シートの一括処理
開発時間: 約4時間(試行錯誤含む)
🚀 なぜMCPを自作したのか
きっかけは日常の不満から
毎日のExcel作業で、こんなことを感じていました:
VBAマクロの管理が面倒
複数のExcelファイルに同じマクロをコピー
バージョン管理ができない
Claude Desktopから直接実行したい
既存MCPの限界
filesystemはファイル単位の操作のみ
セルレベルの細かい制御は不可
Excel特有の機能(グラフ、ピボット等)非対応
自動化の夢
「このシートのA1からD100をまとめて処理して」
「全てのExcelファイルにこのマクロを適用して」
こんな指示を Claude Desktop に出したい!
MCPのセキュリティ確保
MCPのfilesystemは「Anthropic公式」ということで入れました!
Anthropic公式や公式プロバイダであれば比較的安心だけど、使いたいMCPがない。。。
使いたいMCPをセキュリティ・運用性を加味して自作して、自分のPC内で使う方がセキュリティ面で安心できると思いました。
ClaudeDesktopにまずは聞いてみました。

PythonかTypeScriptか?重要な選択
最初に悩んだのが実装言語の選択でした。
PythonとTypeScriptの比較表です。
┌──────────┬─────────────────┬──────────────┐
│ 比較項目 │ Python │ TypeScript │
├──────────┼─────────────────┼──────────────┤
│ MCP SDK │ 対応 ✓ │ 対応 ✓(公式推奨) │
├──────────┼─────────────────┼──────────────┤
│ Excel COM操作 │ pywin32で簡単 ⭐ │ 複雑(追加必要) │
├──────────┼─────────────────┼──────────────┤
│ 学習コスト │ 低い ✓ │ 中程度 │
├──────────┼─────────────────┼──────────────┤
│ 実行速度 │ 十分高速 │ より高速 │
├ ─────────┼─────────────────┼──────────────┤
│ 開発効率 │ 高い ⭐ │ 中程度 │
├──────── ─┼─────────────────┼──────────────┤
│ コミュニティ │ Excel自動化の事例豊富 ⭐│ MCP関連は多い │
└─ ────────┴─────────────────┴──────────────┘
TypeScript版の検討:
// MCP公式サンプルはTypeScript
import { Server } from '@modelcontextprotocol/sdk';
// でも、ExcelのCOM操作は...?
// node-win32ole? それとも別の方法?Python版を選んだ理由:
# pywin32でExcel COMが簡単に扱える!
import win32com.client as win32
excel = win32.Dispatch("Excel.Application")
# これだけでExcelを操作できる決め手はExcel COM オブジェクトの扱いやすさでした。
※Excel COM オブジェクト:プログラムからExcelを操作する特別なリモコン(COM オブジェクト)のようなものです。
PythonとTypeScriptの違いは?
🏠 家電のリモコンに例えると:
Python の場合(簡単)
日本のテレビに日本のリモコンを使うようなもの
ボタンを押せばすぐ動く
説明書も日本語でわかりやすい
TypeScript の場合(複雑)
日本のテレビに海外のリモコンを使うようなもの
変換アダプターが必要
設定が複雑で、うまく動かないことも
🔧 開発の道のり
Step 1: 最小限のMCPサーバー作成(1時間目)

まずは「Hello World」的なMCPサーバーから:
#!/usr/bin/env python3
"""最小限のExcel MCP Server"""
from mcp.server.lowlevel import Server
import mcp.server.stdio
# サーバー作成
server = Server("excel-mcp-server")
# 最初のツール:Excelを開く
@server.list_tools()
async def list_tools():
return [
{
"name": "open_excel",
"description": "Excelを開きます",
"inputSchema": {
"type": "object",
"properties": {
"visible": {"type": "boolean"}
}
}
}
]
# メイン処理
async def main():
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
await server.run(
read_stream,
write_stream,
InitializationOptions()
)
if __name__ == "__main__":
import asyncio
asyncio.run(main())ClaudeDesktopは「設定手順書」なるものを作ってくれましたが、ファイルの移動など面倒な部分はワンクリックでできるようにClaudeDesktopにバッチファイルを作成してもらいました。

最初の起動で「MCPサーバーとして認識された!」という感動がありました。
Step 2: Python環境の罠とExcel COM オブジェクトとの格闘(2時間目)
ここが最大の山場でした。
最初の落とし穴:Microsoft Store版Python
開発を始めてすぐ、謎のエラーに遭遇:
# Microsoft Store版Pythonでの実行結果
>>> import os
>>> os.listdir('C:/Users/ユーザー名/Documents')
PermissionError: [WinError 5] アクセスが拒否されました謎のエラーに遭遇する度にClaudeDesktopにトスして修正してもらいました。

なんと、Microsoft Store版のPythonはサンドボックス化されていて、ファイルアクセスに制限があったんです!

通常版Pythonをインストールする前に、元々のMicrosoftStore版Pythonと競合するなど問題が起こらないか確認してから進めました。

解決策:通常版Pythonのインストール
# 1. まず現在のPythonを確認
C:\> where python
C:\Users\ユーザー名\AppData\Local\Microsoft\WindowsApps\python.exe # ← これがStore版!
# 2. 通常版をインストール後
C:\> where python
C:\Users\ユーザー名\AppData\Local\Programs\Python\Python312\python.exe # ← 通常版!この切り替えだけで30分を費やしました...
Step 3: ClaudeDesktopと試行錯誤の実装(3時間目)
ファイルの配置などはバッチファイルで出来ましたが、ClaudeDesktopがExcelMCPServerを認識してくれないエラーが3度ほどありました。

エラーが出る都度、エラーのスクリーンショットとClaudeDesktopの左上メニュの開発者>MCPログファイルを開く…からログファイルをコピペしてClaudeDesktopに渡してどうにかしてもらいました(;^_^A

エラーは減りましたが、通常版PythonをインストールしてPCを再起動してもエラーが出たため、MCPのファイル名にハイフンが良くないのでは?(直感の思いつき)と公式ドキュメントを確認してもらいました。

そしたら、なんとMCPサーバー名の命名規則で「ハイフン問題」がありそうと特定でき、ClaudeDesktopに褒めてもらいました!
喜んだのもつかの間、ClaudeDesktopにExcelMCPを認識してもらえず。

そして、結果的に行き着いた原因は、、、ClaudeDesktopのMCPファイルの修正ミス!ということが分かりました。

そこから、2度ほどエラーが出て、コード修正をしてもらい、なんとかClaudeDesktopに自作のExcelMCPを認識してもらいました!

ファイルをいろいろと作ってもらったので、ファイル整理をしてもらいつつ、別のx64版WindowsPCでExcelMCPの設定が簡単にできるバッチファイルも作成してもらいました。ClaudeDesktopに感謝です!

Step 4: 運用ツールの整備(4時間目)
MCPサーバー本体だけでは不十分。運用には周辺ツールが必要でした。
ちなみに自作のExcelMCPを使用する際は「excel_mcp_server.py」ファイルを実行してExcelMCPサーバーを起動しないとClaudeDesktopからはExcel操作を行うことができません。
最初は毎回コマンドプロンプトで起動していた...
C:\> cd C:\Users\ユーザー名\mcp-servers\excel
C:\Users\ユーザー名\mcp-servers\excel> python excel_mcp_server.py
Starting Excel MCP Server...私としては、慣れないコマンドプロンプトを毎回開いてコード実行するのがとても面倒に感じてしまいました。そこで、、、
毎回このコマンドを打つのは面倒!そこで Claude Desktop に相談:
私:「毎回コマンド打つの面倒なんだけど、ワンクリックで起動できない?」
Claude:「バッチファイルを作りましょう!filesystemで直接作成しますね」
ClaudeDesktopにワンクリックでExcelMCPサーバーを起動できるバッチファイルを作成してもらいました!これなら普段使いもいけそうです。
これも面倒な方はWindowsのタスクスケジューラーにWindows起動のたびにバッチファイルを実行してもらうように設定すると更にラクチンですね!
ワンクリック起動バッチファイル(start_excel_mcp_server.bat):
@echo off
echo Excel MCP Server を起動します...
echo ==========================================
REM サーバーディレクトリに移動
cd /d "%USERPROFILE%\mcp-servers\excel"
REM Pythonバージョン確認
echo Python環境を確認中...
python --version
REM サーバー起動
echo.
echo サーバーを起動中...
echo 終了するには Ctrl+C を押してください
echo.
python excel_mcp_server_x64.py
pauseこのバッチファイルも、Claude Desktop の filesystem MCP でサクッと作成してもらいました!ありがとう!ClaudeDesktop!
🔧 開発で学んだ重要なポイント
1. Excel VBA設定の重要性
ExcelをClaudeDesktopが操作できるように見逃しがちな設定:
Excel → ファイル → オプション → トラストセンター
→ トラストセンターの設定 → マクロの設定
→ 「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」これをチェックしないとClaudeDesktopからVBA操作ができません!エラーメッセージも分かりづらく、15分ほど悩みました。
2. プロセス管理の大切さ
Excel COMオブジェクトは適切に終了しないとゾンビプロセスが残ります:
def cleanup(self):
"""リソースのクリーンアップ"""
try:
if self.workbook:
self.workbook.Close(SaveChanges=False)
self.workbook = None
if self.excel_app:
self.excel_app.Quit()
self.excel_app = None
# ガベージコレクション強制実行
import gc
gc.collect()
except Exception as e:
logger.error(f"Cleanup error: {e}")3. エラーハンドリングの重要性
COM操作は予期せぬエラーが多発:
ファイルがロックされている
Excelが応答しない
メモリ不足
Microsoft Store版Pythonでのアクセス権限エラー(最重要!)
全ての操作に適切なエラーハンドリングが必須でした。
4. filesystemの威力を実感
今回の開発で最も助かったのは、既存の filesystem MCP でした:
私:「このPythonコードをexcel_mcp_server.pyとして保存して」
Claude:「filesystemを使って保存しました」
私:「起動用のバッチファイルも作って」
Claude:「start_excel_mcp_server.batを作成しました」
私:「README.mdも整備して」
Claude:「プロジェクトの説明を含むREADME.mdを作成しました」ファイル操作を自然言語で指示できるのは、開発効率を劇的に向上させました!
📈 完成後の効果
実際に1ヶ月運用してみた結果:
定型作業の自動化: 月40時間 → 4時間(90%削減)
VBAマクロの一元管理: バージョン管理が可能に
エラー率: 手作業の5% → 0.1%未満
精神的負担: 大幅軽減(単純作業からの解放)
特に嬉しかったのは、Claude Desktopに「全部のExcelファイルにこのマクロ適用して」と言うだけで処理が完了することです。
私:「フォルダ内の全Excelファイルに集計マクロを追加して実行して」
Claude:「了解しました。12個のExcelファイルを処理します...」
(30秒後)
Claude:「完了しました!全ファイルの集計が終わりました」
私:「素晴らしい!」💡 今後の展望
自作MCPの可能性は無限大です:
機能拡張: グラフ自動生成、ピボットテーブル操作
他ツール連携: PowerPointやWordとの連携
AI分析: Claude による Excel データの高度な分析
💬 まとめ
MCP自作は思ったより簡単でした。必要なのは:
解決したい具体的な課題
基本的なPython知識(初級レベルでOK)
試行錯誤を楽しむ心
特に今回の開発では、filesystem MCP の存在が大きかったです。設定ファイル、バッチファイル、Pythonスクリプト...すべてClaude Desktopとの対話の中で直接作成してもらえました。まさに「MCPがMCPを作る」という面白い体験でした!
既存ツールで満足できない方、ぜひ自作MCPにチャレンジしてみてください!
来週は「ブラウザ操作MCPを作る!Puppeteerで実現する自動化」についてお伝えします。
また、MCPの設定を簡単にするDXTファイルへの変換にもチャレンジ予定です!
🎁 読者特典
💝 いいね50を超えたら: Excel MCP の基本コードを公開!
🎉 いいね100を超えたら: ワンクリックExcelMCP設定用ファイルを公開!
シェアの際は #MCP自作 #Excel自動化 #Python #YaroTech をつけていただけると嬉しいです。
💬 質問・リクエスト
「○○業務用のMCPは作れる?」
「TypeScript版の作り方も知りたい」
「エラーが解決できない...」
コメント欄でお気軽にどうぞ!MCP自作仲間が増えると嬉しいです。
🔗 関連記事
📚 参考リソース
🏷️ タグ
#MCP自作 #Excel #Python #VBA #自動化 #ClaudeDesktop #pywin32 #COM #開発 #効率化 #YaroTech #生成AI #プログラミング #noteチャレンジ #ARM64 #SurfaceLaptop
いいなと思ったら応援しよう!
記事がお役に立てたなら嬉しいです!
いただいたチップは、新しいMCPツールの検証や、より深い実践実験の資金として大切に使わせていただきます。
あなたの応援が次の「AI活用の感動」を生み出す原動力になります✨
一緒に羽ばたき続けましょう!