自宅LinuxサーバーにMCPサーバーを構築してClaude Desktopから書類検索できるようにした
自宅のLinuxサーバーにMCPサーバーを構築して、Claude Desktopから4,400件超のスキャン書類を検索・表示できるようにした。名刺、レシート、契約書——全部AIに「探して」と言うだけで出てくる。
この記事では、実際にハマったポイントも含めて手順を共有します。
やりたかったこと
ScanSnapでスキャンした書類が4,400件以上ある。Gemini OCRで全件テキスト化済み。これをClaude Desktopから自然言語で検索して、実際の書類画像まで表示させたい。
書類データはLinuxサーバー(Ubuntu 24.04)に保存してあるので、そこにMCPサーバーを立てて、MacBookのClaude Desktopから接続する構成にした。
構成図
Claude Desktop (MacBook)
↓ SSE over Tailscale
MCP Server (Linux :3100)
├── search_documents → OCR全文検索
├── search_meishi → 名刺の構造化データ検索
├── view_document → 書類画像を表示
└── get_stats → データベース統計
ポイントは、自宅ネットワーク内のTailscale(VPN)経由で接続すること。インターネットに公開する必要はない。
MCPサーバーの構築(Python + FastMCP)
MCP SDKのインストール
Ubuntu 24.04ではシステムPythonに直接pipできないので、venvを作る。
python3 -m venv ~/mcp_venv
~/mcp_venv/bin/pip install 'mcp[cli]'
サーバースクリプトの書き方
from mcp.server.fastmcp import FastMCP
mcp = FastMCP(
"サーバー名",
host="0.0.0.0",
port=3100,
)
@mcp.tool()
def search_documents(query: str) -> str:
"""キーワードで書類を検索"""
# 検索ロジック
return results
if __name__ == "__main__":
mcp.run(transport="sse")
ハマりポイント1:host/portの指定場所
mcp.run(transport="sse", host="0.0.0.0", port=3100) と書くとエラーになる。hostとportはFastMCP()のコンストラクタに渡すのが正解。ドキュメントを読んでもわかりにくい部分だった。systemdで自動起動
[Service]
ExecStart=/path/to/mcp_venv/bin/python /path/to/server.py
Restart=always
サーバー再起動後も自動で立ち上がるようにしておく。
Claude Desktopとの接続
ハマりポイント2:URLを直接書いても動かない
最初、こう設定した。
{
"mcpServers": {
"scansnap": {
"url": "http://192.168.x.x:3100/sse"
}
}
}
「有効なMCPサーバー設定ではないため、スキップされました」と表示されて接続できない。
Claude Desktopはurlフィールドに対応していない。代わりにnpx mcp-remoteというブリッジツールを使う。
ハマりポイント3:HTTPはデフォルトで拒否される
{
"mcpServers": {
"scansnap": {
"command": "/full/path/to/npx",
"args": ["-y", "mcp-remote", "http://192.168.x.x:3100/sse"]
}
}
}
これでもまだ動かない。ログを見ると「Non-HTTPS URLs are only allowed for localhost」。Tailscaleのプライベートネットワーク内なので、--allow-httpフラグを追加する。
"args": ["-y", "mcp-remote", "http://192.168.x.x:3100/sse", "--allow-http"]
ハマりポイント4:npxのパスはフルパスで
nvm経由でNode.jsをインストールしている場合、Claude Desktopのプロセスはnvmのパスを認識しない。"command": "npx"ではなく、"command": "/Users/xxx/.nvm/versions/node/vXX/bin/npx"とフルパス指定が必要。
書類画像の表示(1MB制限への対応)
MCPで画像を返せるが、base64エンコード後のサイズが1MBを超えるとエラーになる。
対策として、サーバー側で画像を圧縮して返す処理を入れた。
- 長辺1200px以下にリサイズ
- JPEG品質を70→50→30と段階的に下げる
- PDFはpdf2imageでPNG変換後、同様に圧縮
これで名刺もレシートも契約書も、チャット画面にそのまま表示される。
完成した使い心地
Claude Desktopで「トヨタの名刺を探して」と入力すると、OCR全文検索が走って該当する名刺が一覧表示される。「表示して」と言えば、名刺の実画像がチャット内に表示される。
4,400件の書類を自然言語で検索できる個人用ドキュメントサーチが、自宅サーバーとClaude Desktopだけで実現できた。
まとめ
自宅Linux + MCP + Claude Desktopの組み合わせは、個人のドキュメント管理に強力だ。ハマりポイントは多いが、一度設定してしまえばあとは快適に使える。
同じようにScanSnapの書類を活用したい人、自宅サーバーでMCPを試したい人の参考になれば。
この記事が参考になったら、応援いただけると励みになります。
著者: ふじのすけ
作成: Claude Opus 4.6
投稿日: 2026-04-13 07:32 JST
コメント
コメントを投稿