1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSのインデックスを使ってローカルファイルを高速検索するMCPサーバーを作りました!

Last updated at Posted at 2025-04-26

openwebuiと組み合わせて、ローカルファイルをアップロードせずにLLMに読んでもらえる仕組みができました!

⚠️ 注意:プロンプトにローカルファイル情報が出るため、セキュリティーには十分注意してください。
ローカルや社内AIを使わない場合、ローカルファイル情報がダダ漏れになるリスクがあります。この記事で紹介するコードを使用したことによる損害について、筆者は責任を負いかねますのでご了承ください。


何ができるか

「ローカルファイルからXXXDBの仕様書を探して読んで、XXXテーブルからXXX条件でデータを抽出するsql文を考えて」ができる様になります。

概要

  • MCPサーバーを作成(GitHub公開)
  • openwebuiと連携して、ファイル検索をLLMに頼める
  • ファイルアップロード不要。ローカルインデックス活用

※ openwebuiだけでなくてDifyでも利用できました。

手順(openwebuiを使う場合)

1. openwebuiをDockerで起動

まずはopenwebuiをDockerで立ち上げます。

docker run -d -p 8080:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open-webui:main

初期設定(APIキー設定など)は各自で行ってください。ChatGPT APIやローカルLLMと接続できます。

2. 拙作MCPサーバーをmcpo経由で起動

次にMCPサーバーを立ち上げます。

⚠️ 注意: Windowsの場合env.ymlのpyobjc-*の行を消してください

git clone https://github.com/notfolder/local-file-search-mcp.git
cd local-file-search-mcp
conda create -f env.yml
conda activate mcp-file-search-env
mcpo --port 8000 --host 127.0.0.1 --config ./config.json --api-key "top-secret"

下記コマンドでアプリ化できます。

$ pyinstaller mcpo_cli.py main.py --add-data config.json:. --add-data main.py:. --onefile --console -n local-file-search-mcp

※listenするポートやbindするホスト名はmcpo_cli.pyの内容を変更して下さい。

3. openwebuiにMCPサーバーを設定

  • 「管理者設定」→「ツール」→「+」をクリック
  • 以下を設定します:
    • URL: http://host.docker.internal:8000/search_local_files
    • Auth: Bearerとしてtop-secretを指定
    • Visibility: Public

4. システムプロンプトに指示を追加

openwebuiの個人設定一般システムプロンプトに以下を追記してください:

「ローカルファイルに関する検索や読み込みを依頼されたら、search_local_filesを利用するようにして下さい。」

5. 利用開始!

チャットを開き、「+」ボタンでsearch_local_filesツールを有効にします。

例:

ローカルファイルで内容に「FastMCP」が含まれるファイルを探して

ファイルが見つかったら、さらに:

「検索結果のファイル」を読んで、概要を教えて

textファイルだけでなく、Word・Excel・PowerPointファイルにも対応しています。


手順(mcp serverとして使う場合)

1. 起動

  • stdioの場合
$ python main.py
  • sseでローカルサーバーを立てる場合
$ python main.py --transport sse

2. 設定

  • stdioの場合
    mcp_setting.jsonを参考にmcpクライアントに設定する。

  • sseでローカルサーバーを立てる場合
    mcp_setting_sse.jsonを参考にmcpクライアントに設定する。

3. 後はmcpクライアントで有効にして使うだけ

番外編:開発の裏話

このツールの開発にはGitHub Copilotをフル活用しました!

WindowsのSearch.CollatorDSOや、MacのNSMetadataQueryなんて全然知らなかったので、頼りきりで作りました。
ちなみに、いまだにWindowsのDocumentsフォルダ限定検索の方法が見つかっていません……(誰か教えてください🙏)。


リンク


ここまで読んでいただき、ありがとうございました!
ローカルファイルをもっと安全に、便利に扱いたい方はぜひ試してみてください🚀

この記事の作成過程

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?