はじめに:AIが「私のPC」を操作する時代
「Claude、Eagleにある『黒色の猫』の画像を探して」
「この画像の雰囲気を分析して、適切なタグを付けておいて」
もし、チャットボットに自然言語で話しかけるだけで、ローカルPCにある31万枚の画像コレクションを自由自在に操れるとしたら?
そんな「LLMとローカル環境の連携」を標準化し、実用的な操作を可能にする共通規格が、Anthropicの提唱する MCP (Model Context Protocol) です。
この記事では、画像管理アプリ 「Eagle」 をClaude Desktopから直接操作できる 「Eagle MCP Server」 を自作し、31万枚の画像整理をAIエージェントに任せてみた記録を共有します。
MCP (Model Context Protocol) とは?
MCP は、ClaudeのようなLLM(大規模言語モデル)と、外部のデータやツールを接続するための標準規格です。
これまで、AIにローカルのツールを使わせるには、複雑な「Function Calling」の実装や、独自のプラグイン開発が必要でした。しかしMCPを使えば、「ツール(関数)」を定義してサーバーとして公開するだけで、Claude Desktopなどのクライアントアプリが自動的にそれを認識し、使用してくれるようになります。
まさに、「LLMのためのUSB規格」 と呼ぶべき画期的なプロトコルです。
なぜ作ったのか:31万枚の「未分類」地獄
私はEagleという素晴らしいアプリに、31万枚以上の画像や素材を保存しています。しかし、その整理はとうの昔に破綻していました。
「いつか整理しよう」と思って放り込んだ画像が、数万枚単位で「未分類」フォルダに眠っている...。
探したい画像があっても、キーワードが曖昧で見つからない...。
そこで考えました。
「AIに画像を見せて、勝手に整理させればいいじゃないか」
システム構成:WSL2 × Eagle API × MCP
私の開発環境は Windows 11 + WSL2 (Ubuntu) です。
ここで少し技術的な壁があります。
- Eagleアプリ: Windows側で動作(APIサーバーもWindows)
- MCPサーバー: Python環境の管理しやすさからWSL2で動かしたい
- Claude Desktop: Windowsアプリとして動作
これらを繋ぐため、以下のような構成にしました。
実装:Pythonで「FastMCP」を使う
MCPサーバーの実装には、Python製のSDK fastmcp を使用しました。これを使うと、驚くほど簡単にサーバーが書けます。
1. サーバーの初期化
from fastmcp import FastMCP
# サーバー名を指定して初期化
mcp = FastMCP("Eagle-AI-Server")
たったこれだけです。
2. ツール(機能)の定義
Claudeに使わせたい機能を、デコレータ @mcp.tool() を付けて関数として定義します。
ドキュメンテーション文字列(docstring)がそのまま「AIへの説明書」になるため、詳細に書くのがコツです。
画像検索ツール
@mcp.tool()
def search_eagle(keyword: str) -> str:
"""
Eagle ライブラリの中から、キーワードや条件に一致する画像を探します。
ユーザーが「猫の画像」と言ったら "猫" で検索してください。
Args:
keyword: 検索したいキーワード(例: "猫", "風景", "Screenshot")
"""
# Eagle APIを叩いて検索
results = eagle_client.search(keyword)
# AIが読みやすい形式に整形して返す
return format_search_results(results)
画像分析ツール
ローカルのVLM(Qwen2-VL)を使って、画像を詳しく分析するツールも作りました。
@mcp.tool()
def analyze_image(file_path: str) -> str:
"""
指定された画像の視覚的な内容、雰囲気、文字情報(OCR)を詳しく分析します。
"""
# WindowsパスをWSLパスに変換する処理が必要(後述)
wsl_path = convert_win_to_wsl(file_path)
# VLMで分析(重い処理)
analysis_result = vlm_analyzer.analyze(wsl_path)
return analysis_result
3. サーバーの実行
if __name__ == "__main__":
mcp.run(transport="stdio")
これで、標準入出力(stdio)を通じてClaudeと会話できるサーバーの完成です。
技術的なハマりどころと解決策
実装自体は簡単でしたが、環境特有の問題にいくつか直面しました。
課題1: Windows (Claude) と WSL2 (MCP) の接続
Claude Desktop(Windowsアプリ)の設定ファイルに、WSL2上のPythonスクリプトを登録する必要があります。しかし、単にパスを書くだけでは動きません。
解決策: バッチファイルでブリッジする
Windows側に、WSL2内のコマンドを叩くためのバッチファイル(run_eagle_mcp.bat)を用意しました。
@echo off
chcp 65001 >nul
wsl.exe -d Ubuntu-20.04 -u user --cd /home/user/dev/Eagle_API bash -c "source .venv/bin/activate && python mcp_server.py"
そして、Claude Desktopの config.json にはこのバッチファイルを指定します。
{
"mcpServers": {
"eagle-ai": {
"command": "C:\\Users\\user\\Scripts\\run_eagle_mcp.bat",
"args": []
}
}
}
これで、Claude Desktop → バッチファイル → WSL2 → Python という経路が開通しました。
課題2: パスの壁(Z:ドライブ vs /mnt/z)
Eagle APIから返ってくるファイルパスはWindows形式(例: Z:\Images\cat.jpg)ですが、WSL2上のPythonから画像を開くにはWSL形式(/mnt/z/Images/cat.jpg)が必要です。
これには地道なパス変換関数を実装して対応しました。
def wsl_path_converter(windows_path: str) -> str:
# ドライブレター置換
if len(windows_path) > 1 and windows_path[1] == ':':
drive = windows_path[0].lower()
rest = windows_path[2:].replace("\\", "/")
return f"/mnt/{drive}{rest}"
return windows_path
実際の動作デモ:AIエージェントに任せる「画像管理」
実際に Claude Code (Sonnet 4.5) で動かしてみた様子を紹介します。
1. 検索 + 詳細分析の連携
私: 「Eagleで『女の子』の画像を検索して、その中から一番最近追加された画像を1枚選んで、内容を詳しく分析して。」
AI: (内部で search_eagle を実行。「女の子」ではファイルが見つからなかったため、自動で「girl」に切り替えて再検索を実行)
Claudeの回答(分析結果):
画像分析結果
20代後半の日本のギャル系女性のイラストです。金髪/白髪系の明るい髪色にフープピアス、黒いチョーカーを身に着け、タブレットPCとスマートフォンを持っています。夜の都市のネオンサインを背景に、都会的な雰囲気を感じさせます。
このように、一度の指示で「検索 → 最適な1枚を選択 → 詳細情報の取得 → AIによる画像分析」までが、一気通貫で自動実行されます。
2. 複数アイテムの検索 + 一覧表作成
私: 「『no human』タグが付いている画像を3枚探して、それぞれの解像度と付いているタグを一覧表にしてまとめて。」
複数のアイテムに対しても、AIが個別に情報を取得し、人間が読みやすい表形式にサマライズしてくれます。
3. エラーハンドリング(パス変換の検証)
あえて存在しないWindows形式のパスを渡して、WSL2側での変換とエラー処理が機能するかテストしました。
私: 「C:\dummy.jpg を分析してみて。」
内部で analyze_image(file_path: "C:\\dummy.jpg") が呼ばれ、WSL2側のパス /mnt/c/dummy.jpg として正しく解釈された上で、「ファイルが見つからない」という適切なエラーが返ってきています。
まとめ:MCPは「個人開発者」にこそおすすめしたい
MCPの登場によって、LLMは単なる「話し相手」から、「PC操作の代行者」 へと進化しました。
特に、EagleのようなローカルアプリのAPIをMCPでラップするだけで、「自分専用の最強AIアシスタント」 が爆誕します。
今回は画像管理でしたが、他にも:
- Obsidian MCP: メモの検索・要約・リンク作成
- Git MCP: ローカルリポジトリのコミット履歴分析
- Home Automation MCP: 自宅のIoT機器操作
など、アイデア次第で可能性は無限大です。
皆さんもぜひ、fastmcp で「俺専用MCPサーバー」を作ってみてください。世界が変わります。
参考リンク
システムの全体像について
本記事では「AIによる操作(MCP)」にフォーカスしましたが、そもそもなぜ31万枚もの画像を整理する必要があったのか?という背景や、RTX 5090 を活用したローカルVLMマシンの構成など、システム全体のアーキテクチャについてはZennで詳しく解説しています。




