この記事ではMCPに特化して解説します。MCP(Model Context Protocol)全般は MCPサーバーの作り方2026年完全ガイド:TypeScript・Python両対応チュートリアル をご覧ください。
SylvianAI/sv-excel-agent は、2025年12月に公開された「LLMがExcelを直接編集するための開発キット」だ。GitHubスター197、MITライセンス、Pythonで実装されている。中身は4つに分かれている。MCPサーバ(excel_mcp)、エージェントランナー(excel_agent)、Webアプリ形式のExcel Assistant、Slack連携のSlackExcelWorkflowである。
特徴的なのは、READMEに動作デモのmp4動画が直接埋め込まれている点と、SpreadsheetBenchの検証済み50題でモデル別Pass@1ベンチマークが公開されている点だ。Excel系のAIエージェントOSSはこれまでにも多数公開されてきたが、「動画でひと目で分かるデモ」と「同じ評価ハーネスを誰でも再現できる」を両立しているプロジェクトは少ない。
- ・sv-excel-agentはMCPサーバ+エージェントランナー+Webデモ+Slackボットの4点セット。LLMにExcel編集を任せる構成がそのまま手に入る。
- ・約30のMCPツールで読み書き・書式・条件付き書式・データ検証・シート管理までカバー。fastmcp実装で改造も容易。
- ・SpreadsheetBench検証50題でGPT-5.1がトップ。同じ評価を`evals/run_eval.py`から誰でも再実行できる。
- ・OpenRouter経由でモデル差し替え自由。`ExperimentConfig(model='openrouter:...')`を書き換えるだけ。
- ・本番運用時はExcel本体での再計算が必要。ヘッドレス環境はLibreOffice代替だが精度低下に注意。
1. sv-excel-agentの全体像 — 4つのコンポーネントが何を担うか
sv-excel-agentはリポジトリ直下にexcel_mcp/・excel_agent/・demo/・evals/の4ディレクトリを持つ。それぞれが独立したコンポーネントだ。役割分担を理解しないと「どこを触ればよいか」が分からなくなる。
excel_mcpはFastMCP上に実装された約30のExcel操作ツール群を提供するMCPサーバである。excel_agentはそのMCPサーバへ接続し、LLMの推論ループを駆動するエージェントランナーだ。demo/ExcelAssistantはエージェントランナーを使ったWebアプリ、demo/SlackExcelWorkflowは同じくSlackボット実装で、evals/はSpreadsheetBench準拠の評価ハーネスを格納している。
Excel系のAIエージェントOSSというと、たいていは「LLMにopenpyxlを叩かせるラッパー」か「公式Excelアドインに生成AIを足したもの」のどちらかだ。sv-excel-agentはそのどちらでもなく、「MCPプロトコルでLLMに直接Excelを操作させる」というレイヤー切りを徹底している。これは2025年後半から強まったMCP標準志向のトレンドに沿っており、Claude Desktop・Kiro CLI・Cursorといった既存MCPクライアントから即接続できるという副次的な利点も生まれている。
実際の動きを動画で見ると分かりやすい。READMEに埋め込まれているExcel Assistantのデモを以下にそのまま貼り付ける。
ユーザーが自然言語で「合計列を追加して」「条件付き書式で赤字をハイライトして」と指示すると、エージェントが該当MCPツールを連続呼び出してExcelファイルを書き換えていく様子が確認できる。生のopenpyxlコードや関数を書く必要は一切ない。
2. excel_mcpのツール群 — 30個のExcel操作API
excel_mcp/excel_server.pyを読むと、@mcp.tool()デコレータでエクスポートされた関数が約30個並んでいる。中核となる操作は7カテゴリに分類できる。
- ・ワークブック管理:
get_workbook_info/get_sheets。シート名一覧やアクティブシートの取得。 - ・レンジ操作:
get_range_data/set_range_data/batch_set_range_data/auto_fill。 - ・シート管理:
create_sheet/delete_sheet/rename_sheet/display_sheet/batch_rename_sheets。 - ・行列操作:
insert_rows/delete_rows/insert_columns/delete_columnsとそのバッチ版。 - ・書式設定:
set_range_style/batch_set_styles/set_merge/unmerge。 - ・検索:
search_cells。指定パターンに一致するセルを返す。 - ・条件付き書式・データ検証:
add_conditional_formatting_rule/set_conditional_formatting_rule系とデータ検証関連ツール。
それぞれのツールはPydanticでスキーマ化されているため、LLMからは「JSON Schemaに沿った構造化引数」として扱える。これはMCPの強みそのものだ。
特に細かい配慮として、get_range_dataはreturn_style_infoフラグで「セル値だけ返す軽量モード」と「背景色・太字・斜体まで含めた詳細モード」を切り替えられる。LLMのトークン消費を抑えるための実用的な工夫である。さらに大きな範囲をうっかり読ませてコンテキストを溶かさないよう、ツールのDocstringに「200セル以下推奨」と明記されている。
import asyncio
from excel_mcp.excel_server import mcp
async def run_mcp_server():
await mcp.run_sse_async(host="127.0.0.1", port=8765)
asyncio.run(run_mcp_server())
これが最小構成のMCPサーバ起動コードだ。FastMCPのおかげで本当に4行で立ち上がる。クライアント側はSSEトランスポートでhttp://127.0.0.1:8765/sseに接続するだけでよい。
3. excel_agentの動作 — エージェントランナーが推論ループを駆動
excel_mcp単体はあくまでMCPサーバだ。実際にLLMが「タスクを受け取り、考え、ツールを呼び、結果を見て次の手を決める」エージェントループを駆動するのがexcel_agent/agent_runner.pyである。
from excel_agent.agent_runner import ExcelAgentRunner, TaskInput
from excel_agent.config import ExperimentConfig
runner = ExcelAgentRunner(
config=ExperimentConfig(model='openrouter:openai/gpt-5.1'),
mcp_server_url="http://127.0.0.1:8765/sse",
)
task_input = TaskInput(
instruction="A列の数値合計をB1セルに入れて、太字で赤色にしてください",
input_file="/path/to/input.xlsx",
output_file="/path/to/output.xlsx",
)
agent_response = await runner.run_excel_agent(task_input)
ExperimentConfigのmodel引数を書き換えるだけで、OpenRouterに接続される任意のモデルへ切り替えできる。openrouter:anthropic/claude-sonnet-4-6、openrouter:google/gemini-2.5-pro、openrouter:deepseek/deepseek-v3、いずれも一行差で試せる。
エージェントランナーの内部では、reasoning_models.pyで定義された推論バックエンドがMCPセッションを開き、ツール一覧を取得し、LLMに渡し、応答を受け取り、ツール呼び出しがあれば実行する。MCPサーバとは別プロセスで動かすため、複数エージェント並列実行時にもsession_idさえ分離していれば干渉しない。
(推論ループ) participant LLM as LLM
(GPT-5.1等) participant MCP as excel_mcp
(FastMCP/SSE) participant Wb as openpyxlで
読み書き User->>Agent: 自然言語指示(TaskInput) Agent->>MCP: init_session(session_id, filepath) MCP->>Wb: load_workbook loop ツール呼び出しループ Agent->>LLM: タスク+ツールスキーマ LLM-->>Agent: tool_call(get_range_data等) Agent->>MCP: ツール実行リクエスト MCP->>Wb: openpyxl操作 MCP-->>Agent: 結果JSON end Agent->>MCP: 最終workbookを書き出し MCP->>Wb: save(output_file) Agent-->>User: agent_response
このループはありふれた形だが、Excel特有の事情として「数式が結果に影響するため、編集途中で再計算が必要」という落とし穴がある。sv-excel-agentではensure_calculatedヘルパーがget_range_dataの冒頭で呼ばれ、data_only=Trueで開いたキャッシュ用ブックを使って計算済み値を返す仕組みになっている。地味だが重要な実装だ。
4. SpreadsheetBenchベンチマーク — モデル別Pass@1の実測
sv-excel-agentのリポジトリにはevals/ディレクトリがあり、SpreadsheetBenchから50題を検証用に切り出した評価ハーネスが入っている。evals/run_eval.pyを実行すれば誰でも同じベンチマークを再現できる。
READMEには既にモデル別の結果がmedia/model_performance.pngとして埋め込まれており、GPT-5.1がトップという結論が示されている。GPT-5.1がExcel系タスクに強いのは、関数式の合成・条件分岐の組み立て・複数セル参照の追跡といった「狭い意味でのコーディング能力」と相性がよいからだろう。
| モデル系統 | sv-excel-agent上の挙動 | 想定コスト感 |
|---|---|---|
| GPT-5.1 | SpreadsheetBench 50題でトップ。複雑数式と条件付き書式の双方に強い。 | OpenRouter経由・標準価格帯 |
| Claude Sonnet 4.6 | 数式精度はGPT-5.1に肉薄、自然言語指示の解釈が安定。 | 中〜上位価格帯 |
| Gemini 2.5 Pro | 長尺な指示の理解が得意、ツール呼び出し回数がやや多め。 | 中位価格帯 |
| DeepSeek系 | 安価でラフな自動化向け。複雑な条件付き書式は不安定。 | 低価格帯 |
| ローカル小型OSS | 動くがツール呼び出し精度に難。検証用に留めるのが現実的。 | 自前GPU |
数値そのものは公式リポジトリの画像で確認するのが正確だ。本記事は数値の転載は控え、傾向を解説するにとどめる。
評価ハーネスは「Microsoft Excel本体」を起動して数式と条件付き書式を再計算する設計だ。これはきわめて重要な選択で、openpyxlのみで完結させると一部の関数(IFS・LET・配列数式など)で正解と差分が出てしまうため、最終正解はExcelエンジンに任せる方針になっている。
ヘッドレス環境向けにLibreOfficeへの差し替えも用意されているが、READMEに「複雑な数式や条件付き書式では精度が落ちる」と明記されている。CI/CDで自動評価したい場合は、専用のExcel付きWindowsランナーを用意するのが本筋となる。
5. Excel Assistant — WebアプリでチャットしながらExcel操作
demo/ExcelAssistantはsv-excel-agentをそのまま組み込んだWebアプリのリファレンス実装だ。ユーザーがブラウザ上でExcelファイルをアップロードし、チャット欄から自然言語で指示を投げる。
実演動画は冒頭で貼った通りである。指示の度にエージェントランナーが起動し、その内部でLLMがMCPツール群を呼び出し、編集済みのxlsxを返す。生のコードや関数を書く必要がない、というのが「業務担当者がそのまま使える」体験につながっている。
<悪い例> 「VLOOKUPで参照先を変更して、ピボットも作り直して、最後に売上の上位10件を赤字にしてください」と指示しても、生成AIが結果のExcelを書き戻せずコピペ運用になる。
<改善例> 同じ指示をsv-excel-agent経由で投げると、MCPツールが順に呼び出され、最終的に編集済みのxlsxファイルが直接出力される。コピペは不要。
業務用Excelを生成AIで触る試みは何度も繰り返されてきたが、「ファイルそのものを返してくれる」という体験は意外と少ない。MCPサーバ経由でopenpyxlを動かす設計だからこそ実現できている。
6. SlackExcelWorkflow — Slackボット連携で集合知化
もう一方のdemo/SlackExcelWorkflowはSlackボット化したエージェントだ。チーム全員がSlackからExcel操作を依頼できる。READMEにこちらも動画が埋め込まれている。
メリットは「Slackでファイルを共有しながら、その場で生成AIに集計・整形を任せられる」という業務体験そのものだ。営業や経理のような非エンジニアが、自然言語のままExcelジョブを発注できるようになる。
Slackボットの設計は標準的で、Slack Botsツールキットでイベントを受け取り、添付ファイル(xlsx)をローカルへダウンロードし、ExcelAgentRunnerへ渡し、編集済みファイルをSlackに返信、という流れになる。ボットフレームワーク自体は何でもよいので、TeamsやDiscord、社内Notion等への置き換えも実装難度は高くない。
7. Excel MCP系OSSとの比較 — どれを選ぶか
Excel MCP系のOSSは2025年後半に複数登場した。代表的なものを並べて比較する。
| OSS | スコープ | 特徴 | 評価ハーネス |
|---|---|---|---|
SylvianAI/sv-excel-agent |
MCPサーバ+エージェント+Webデモ+Slack | 約30ツール、SpreadsheetBench検証50題 | あり(evals/run_eval.py) |
| 他のExcel MCP(読み書き型) | セル読み書きのみ | 軽量だが書式・条件付き書式は弱い | なし |
| PowerBI Modeling MCP | DAX/モデル定義に特化 | Excelではなく Power BIモデルが対象 | なし |
| Microsoft 365 Connector | Excel Onlineを含むM365全体 | サブスク前提、書式制御は限定 | なし |
| 自作openpyxlラッパー | フル制御可能 | 設計から構築する手間 | 自前で構築 |
「動くデモを5分で立ち上げたい」「ベンチマークでモデル比較したい」「Slack/Web双方で配ろう」というニーズに対しては、現時点でsv-excel-agentが最短ルートになる。
なお、Microsoft 365側の最新動向については Microsoft 365 Copilot APIとCopilot Studioでつくる業務エージェント を参照すると、商用環境での選択肢が把握しやすい。
8. インストールと最小起動 — 5分で動かす
公式READMEに沿った最小手順を整理する。Python 3.10以上が必要だ。
git clone https://github.com/SylvianAI/sv-excel-agent
cd sv-excel-agent
conda create -n excel python=3.11 -y
conda activate excel
pip install -r requirements.txt
pip install -e .
その後、ターミナルを2枚開く。1枚目でMCPサーバを起動する。
# server.py
import asyncio
from excel_mcp.excel_server import mcp
async def main():
await mcp.run_sse_async(host="127.0.0.1", port=8765)
asyncio.run(main())
python server.py
2枚目でエージェントランナーを呼ぶ。OPENROUTER_API_KEY環境変数を事前に設定しておくこと。
export OPENROUTER_API_KEY="sk-or-v1-..."
python -c "
import asyncio
from excel_agent.agent_runner import ExcelAgentRunner, TaskInput
from excel_agent.config import ExperimentConfig
async def main():
runner = ExcelAgentRunner(
config=ExperimentConfig(model='openrouter:openai/gpt-5.1'),
mcp_server_url='http://127.0.0.1:8765/sse',
)
res = await runner.run_excel_agent(TaskInput(
instruction='A列の合計をB1に入れて',
input_file='input.xlsx',
output_file='output.xlsx',
))
print(res)
asyncio.run(main())
"
これだけでLLMがExcelを編集しoutput.xlsxに書き出す。MCPサーバ側ログを見ると、ツール呼び出しが連続して飛んでいる様子が分かる。
9. 評価ハーネスを自分のデータで走らせる
evals/ディレクトリにはSpreadsheetBenchから検証済み50題がevals/data/に格納され、comparison.pyが「期待出力xlsxと生成出力xlsxを比較する」ロジックを提供する。比較はセル値だけでなく書式・条件付き書式まで対象にする。
評価ハーネスはExcel本体を起動してフォーミュラを再計算する。macOSやLinuxでHeadless実行する場合はLibreOfficeへフォールバックする実装になっているが、複雑な数式・条件付き書式では精度低下があるとREADMEで明示されている。CIで使うならWindows + Excelランナーを別途用意するのが安全だ。
自社データで評価したい場合は、data/配下に同形式のxlsxを並べ、run_eval.pyの入力パスを差し替えればよい。モデル切替はExperimentConfigを書き換えるだけで、同じデータセットを複数モデルで横断比較できる。
10. セキュリティと運用上の落とし穴
LLMにExcelを直接編集させる以上、シートを破壊するリスクは常に存在する。sv-excel-agentでは明示的にinput_fileとoutput_fileを分け、入力を上書きしない設計を推奨している。
それでも以下の落とし穴は残る。
- ・巨大シートのフルロード: openpyxlは数十万セルを越えるシートで遅くなる。
get_range_dataは200セル以下に絞る。 - ・条件付き書式の取り扱い: 既存ルールを誤って削除しないよう、編集前に
get_conditional_formattingでバックアップ取得。 - ・マクロ付きxlsm: openpyxlはVBAコードを保持はするが実行はしない。実行が必要なフローには別経路が要る。
- ・SSE接続の認証: 開発用はlocalhostだが、外部からアクセスさせるなら必ずリバースプロキシで認証を挟む。
- ・session_idの衝突: 複数エージェントを同居させるときは必ずユニーク化する。
設計が素直なため、これらは個別に対策できる。逆に「最初から全部入り」のサービスを使うと、こうした細かいリスクが見えないまま運用が始まるリスクが高い。OSSで読み書きできることの長所はこの点にある。
11. 関連OSSとの組み合わせ — エージェント横断ワークフロー
sv-excel-agent単体でも十分強力だが、他のMCPサーバと組み合わせると業務全体を自動化できる。たとえばダッシュボード生成は Microsoft Power BI Modeling MCPでセマンティックモデルを生成AIに任せる と、ピボット集計は本記事のExcel MCPと、配信通知は社内Slackと、というふうに役割分担する。
集計データの可視化フローを設計したい場合は、Google AnalyticsのMCPサーバである Google公式Google Analytics MCPサーバ徹底解説 と並べると、KPI集計→Excel整形→Slackレポートの3段構成が一筆書きで組める。MCPの強みは「同じプロトコルで横断できる」点にあるため、Excelだけで閉じずに広く繋ぐ発想が効く。
エージェント側の比較軸は AIエージェントフレームワーク徹底比較2026 を併読すると、ExcelAgentRunnerをLangGraphやAutoGenで包む際の設計判断がやりやすい。
12. まとめ — Excel業務AIの再現可能なリファレンス実装
SylvianAI/sv-excel-agentは、Excel業務を生成AIに任せたい開発者にとっての「再現可能なリファレンス実装」である。MCPサーバ・エージェントランナー・WebアプリのExcel Assistant・Slack連携と、業務導入で必要な構成要素をすべて含み、SpreadsheetBenchベースの評価ハーネスまで揃っている。
GPT-5.1がトップという公式ベンチマーク結果は便利な指標だが、自社の実データに合わせてrun_eval.pyを回してから判断する方がよい。OpenRouter経由でモデルを差し替えるコストはほぼゼロだ。
MCPプロトコル準拠なので、すでに導入済みのClaude DesktopやKiro CLI、社内のClaude Code環境から即接続できる利点も大きい。Excelに触れるすべてのチームが、生成AI時代の最短経路として一度は触っておくに値する実装だ。
- ・sv-excel-agentはMCPサーバ+AIエージェント+Webデモ+Slackボットの4点セットで、Excel業務AI化のリファレンス実装になっている。
- ・約30個のMCPツールで読み書き・書式・条件付き書式・データ検証まで網羅し、fastmcp実装で改造容易。
- ・SpreadsheetBench検証50題のベンチマークを誰でも再実行できる点が他のExcel MCP系OSSにない強み。
- ・OpenRouter経由でGPT-5.1・Claude・Gemini・DeepSeekを自由に差し替え。自社データで横断比較が現実的。
- ・本番運用ではExcel本体での再計算、SSE接続の認証、session_id衝突など細部の運用注意点を抑えること。