AIが現実世界を理解する時代?!:ノーコードと自作MCPサーバーで作るAIエージェント
はじめに
今回は前回自作した監視カメラMCPサーバーを、Difyのエージェントフローに組み込んで、簡単なAIエージェントのアプリケーションのMVPを作りたいと思います。コンセプトは、外界を理解するAIエージェントで、監視カメラ的な役割を果たします。
また、Difyはノーコード開発ができ、そのアプリケーション自体もバックエンドとして公開できるので非常に有用なアプリケーションです。そこにMCPサーバーを組み合わせることで無限の可能性を個人的に感じたい(笑)というのが狙いです。今回の検証の全体像
ラズパイ3のMCPサーバー(FastMCP)はUbuntu OS上で実装しており、ノートパソコン上のDifyはDockerでローカルホストで立ててあります。Difyのバージョンは1.6.0です、このバージョンからでないとMCP連携が公式ではないのでご注意を。必要に応じてGitからクローンしてアップデートしてください。
DifyのMCP連携手法
Difyのバージョン1.6.0以上ではツール>MCP>MCPサーバーを追加で、自作のMCPサーバーや野良MCPサーバーなどを追加できるようになっています。
下記は、クライアントとサーバーが同じ環境かつローカルホストの場合ですが、下記のように設定すると、
http://host.docker.internal:ご自身のMCPサーバーの公開しているポート番号/mcp/
MCPサーバーとしてDifyから認識されます。
認識されるとコード側で定義しているツールがすべて表示されます。下記はMCPサーバーで定義しているツール情報です。
# 画像撮影ツール
@mcp.tool()
def capture_image() -> str:
"""外付けカメラで写真を撮影し、保存ファイルの絶対パスを返す"""
return _capture_image()
# 画像解釈ツール
@mcp.tool()
def describe_latest_markdown(prompt: Optional[str] = None) -> str:
"""最新画像をMLLMに送り、Markdownで説明文を返す"""
return _image_explain(prompt)
# 撮影し解釈結果を返すツール
@mcp.tool()
def image_capture_and_explain(prompt: Optional[str] = None) -> str:
"""
新しく写真を撮影し、その写真をMLLMで説明して返す
"""
_capture_image()
result = _image_explain(prompt)
return result
Difyアプリへの組み込み
2025/8/10時点ではエージェントフローでMCPサーバーを組み込むのが公式の使い方のようです。今回のMCPサーバーではテキストベースでのやり取りになるので簡単なつくりとしています。クエリー生成をいれているのは、ユーザーのプロンプトがプアーすぎるのを補完して、監視カメラMCPサーバーをうまく機能させるためです。
また、回答生成はシンプルにMCPサーバーの応答結果をコンテキストとして渡しているだけです。いわゆる検索しないRAG的な使い方です。
実際の応答結果
結果はコマンドライン上で確認していたのでおおむね結果は理解していましたが、ちゃんと外界の様子を理解した上での回答をしています。目を持ったAIエージェントのMVPを作成することができました!
当たり前ですが、MCPサーバー側もPOSTリクエストを正しく受け取れているようです。
まとめ
今回は、自作の監視カメラMCPサーバーをDifyのエージェントフローに組み込んで、お手軽にAIエージェントを作ってみたよ!というお話でした。
ポイントをざっくり振り返ると――
- Difyのノーコード環境×自作MCPサーバーの組み合わせで、外の様子を理解してくれる「目を持つAIエージェント」が意外とサクッと作れました。
- Difyのv1.6.0以上ならMCPサーバーとの連携も公式サポートされているので、設定もかなり簡単。
- 構成は、ラズパイ3で動かすMCPサーバーと、PC上のDifyエージェントフロー。どっちも同じネットワーク上ならすぐに連携できます。
- ユーザーからのプロンプトをちょっといい感じに補完してくれるような仕組みも入れて、MCPサーバーの応答をうまく活用する形になっています。
実際にやってみたら、「ちゃんと外界を理解して返事してくれるAI」ができました。
自分で作ったサーバーとDifyをつなぐだけで、ここまでできるんだな~というのが今回一番の発見です。いままでの生成AIってやはり外界と繋がれるのはWebサービスが基本でしたから、かなりの拡張性を感じられました!🔥
Discussion