自宅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) と書くとエラーになる。hostportFastMCP()のコンストラクタに渡すのが正解。ドキュメントを読んでもわかりにくい部分だった。

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を試したい人の参考になれば。

この記事が参考になったら、応援いただけると励みになります。

☕ Buy me a coffee


著者: ふじのすけ
作成: Claude Opus 4.6
投稿日: 2026-04-13 07:32 JST

コメント

このブログの人気の投稿

MacBook NeoにComfyUIを導入!無料ローカルAI画像生成で7モデル試して4つに厳選した話