AIエージェント入門

【2026年最新】DifyとClaude Codeを連携させる完全ガイド

【2026年最新】DifyとClaude Codeを連携させる完全ガイド

この記事の結論

DifyのWorkflowとClaude Codeを連携させる設定手順を解説。MCP経由でClaude CodeからDifyを直接呼び出す方法、Python APIでの自動実行、業務自動化ユースケースまでコード付きで全公開。

「DifyでワークフローをGUI設計しているけど、Claude Codeからそのまま呼べないかな……」

先日、あるプロジェクトでこんな状況になりました。Difyで複雑なRAGパイプラインを構築したけれど、Claude Codeの開発セッション中に毎回ブラウザに切り替えてDifyを実行するのが地味に面倒。もっとシームレスに繋ぎたかったんです。

実際に試してみると、この連携は思っていたよりずっとシンプルで強力でした。Dify v1.6.0から搭載された双方向MCP対応によって、Claude CodeからDifyワークフローを直接ツールとして呼び出せるようになっています。この記事では、設定手順からPython APIでの自動実行、実際の業務自動化ユースケースまでをコピペ可能なコード付きで全公開します。

注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

まず5分で試す「最速連携セットアップ」

理論より先に動かしてみましょう。DifyとClaude Codeを繋ぐ最も手っ取り早い方法は、コミュニティ製のMCPサーバーを使うアプローチです。

AIエージェント構築の基本概念については、PythonでAIエージェントを自作する完全ガイドで体系的にまとめていますので、まだ読んでいない方はそちらもご覧ください。

準備するもの

  • Difyアカウント(Cloud版 or セルフホスト)
  • DifyアプリのAPIキー(アプリ詳細 → API Access から取得)
  • Node.js v18以上がインストール済みの環境
  • Claude Code(claude コマンドが使える状態)

Claude CodeにDify MCPサーバーを追加する(コマンド1本)

以下のコマンドをターミナルで実行するだけです。

# Claude CodeにDify MCPサーバーを追加する
# DIFY_BASE_URLはCloud版なら https://api.dify.ai/v1、セルフホストなら自サーバーURLを指定
claude mcp add-json "dify-workflow" '{
  "command": "npx",
  "args": ["@tonlab/dify-mcp-server"],
  "env": {
    "DIFY_BASE_URL": "https://api.dify.ai/v1",
    "DIFY_API_KEY": "app-your-dify-api-key-here"
  }
}'

# 追加後、Claude Codeを再起動して有効化
# 動作環境: Node.js v18+, @tonlab/dify-mcp-server (MIT License)
# 注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。

ポイント:

  • DIFY_BASE_URLはCloud版なら https://api.dify.ai/v1 固定でOK
  • DIFY_API_KEYはDifyのアプリ詳細画面「API Access」タブから取得したキーを入れる
  • コマンド実行後、claude を再起動するとDifyワークフローがツールとして使えるようになる

これだけでClaude Codeのセッション中に「Difyの〇〇ワークフローを実行して」と指示できるようになります。正直、この手軽さには驚きました。

複数のDifyアプリを登録する場合

複数のDifyアプリ(例: コード生成用・データ分析用・レポート作成用)を使い分けたい場合は、設定ファイルで複数キーを列挙できます。

// ~/.claude.json に直接編集する場合の設定例
// (claude mcp add-json コマンドで自動生成されるが、手動編集も可)
{
  "mcpServers": {
    "dify": {
      "command": "npx",
      "args": ["@tonlab/dify-mcp-server"],
      "env": {
        "DIFY_BASE_URL": "https://api.dify.ai/v1",
        "DIFY_API_KEYS": "app-code-review-key,app-data-analysis-key,app-report-gen-key"
      }
    }
  }
}
// カンマ区切りで複数キーを指定。各キーが別ツールとしてClaude Codeに表示される
// 最終確認日: 2026-03-18(@tonlab/dify-mcp-server, MIT License)

DifyにClaudeモデルを設定する(モデルプロバイダー登録)

Claude CodeからDifyを呼ぶ前に、DifyのワークフローがClaudeモデルを使える状態になっているか確認しましょう。

設定手順(所要時間2分)

  1. Difyの管理画面右上のアイコン → Settings を開く
  2. 左メニューから Model Providers を選択
  3. プロバイダー一覧から Anthropic をクリック
  4. Anthropic ConsoleのAPIキーを入力して保存

設定後、ワークスペース内のすべてのメンバーがClaude 3.5 Sonnet・Claude 3 Opus・Claude 3 Haikuを選択できるようになります。

モデル 推奨用途 コンテキスト長 速度
Claude 3.5 Sonnet コード生成・複雑な推論 200K tokens 中速
Claude 3 Opus 高精度分析・長文処理 200K tokens 低速
Claude 3 Haiku シンプルな分類・高速処理 200K tokens 高速・低コスト

料金情報の最終確認: 2026-03-18(Anthropic公式サイトで最新料金をご確認ください)

Python APIでDifyワークフローを外部から実行する

Claude Code以外のスクリプトや自動化パイプラインからDifyを呼びたい場合は、Dify APIを直接叩く方法が便利です。

基本パターン:ブロッキング実行

"""
Dify Workflow Python APIクライアント - ブロッキング実行
動作環境: Python 3.10+, requests>=2.28.0
必要パッケージ: pip install requests python-dotenv
注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
"""
import requests
import os
from dotenv import load_dotenv

load_dotenv()

DIFY_API_KEY = os.environ["DIFY_API_KEY"]  # ハードコード禁止、.envから読み込む
DIFY_BASE_URL = os.environ.get("DIFY_BASE_URL", "https://api.dify.ai/v1")

def run_dify_workflow(inputs: dict, user: str = "default-user") -> dict:
    """
    Difyワークフローを同期実行して結果を返す

    Args:
        inputs: ワークフローへの入力データ(キーはDify側の変数名に合わせる)
        user: ユーザー識別子(ログ追跡用)
    Returns:
        ワークフローの実行結果 (dict)
    """
    url = f"{DIFY_BASE_URL}/workflows/run"
    headers = {
        "Authorization": f"Bearer {DIFY_API_KEY}",
        "Content-Type": "application/json"
    }
    payload = {
        "inputs": inputs,
        "response_mode": "blocking",  # 同期待機
        "user": user
    }

    response = requests.post(url, headers=headers, json=payload, timeout=120)
    response.raise_for_status()
    return response.json()

# 使用例: コードレビューワークフローを実行
if __name__ == "__main__":
    result = run_dify_workflow(
        inputs={
            "code": "def add(a, b): return a + b",
            "language": "python",
            "review_type": "security"
        },
        user="developer-001"
    )
    print("ステータス:", result.get("data", {}).get("status"))
    print("出力:", result.get("data", {}).get("outputs"))

応用パターン:ストリーミング実行(長時間ワークフロー向け)

処理時間が長いワークフロー(30秒超)の場合、ストリーミングモードで逐次出力を受け取る方が実用的です。

"""
Dify Workflow ストリーミング実行クライアント
動作環境: Python 3.10+, requests>=2.28.0
注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
"""
import requests
import json
import os

DIFY_API_KEY = os.environ["DIFY_API_KEY"]
DIFY_BASE_URL = os.environ.get("DIFY_BASE_URL", "https://api.dify.ai/v1")

def run_dify_workflow_streaming(inputs: dict, user: str = "default-user"):
    """
    ストリーミングモードでDifyワークフローを実行
    Server-Sent Events (SSE) で逐次出力を受け取る
    """
    url = f"{DIFY_BASE_URL}/workflows/run"
    headers = {
        "Authorization": f"Bearer {DIFY_API_KEY}",
        "Content-Type": "application/json",
        "Accept": "text/event-stream"
    }
    payload = {
        "inputs": inputs,
        "response_mode": "streaming",  # SSEストリーミング
        "user": user
    }

    with requests.post(url, headers=headers, json=payload,
                       stream=True, timeout=300) as response:
        response.raise_for_status()
        for line in response.iter_lines():
            if line and line.startswith(b"data:"):
                event_data = json.loads(line[5:].decode("utf-8"))
                event_type = event_data.get("event", "")

                if event_type == "text_chunk":
                    # テキストが生成されるたびにリアルタイム出力
                    print(event_data.get("data", {}).get("text", ""), end="", flush=True)
                elif event_type == "workflow_finished":
                    print("n--- ワークフロー完了 ---")
                    outputs = event_data.get("data", {}).get("outputs", {})
                    return outputs

# 使用例: 長文レポート生成ワークフロー
if __name__ == "__main__":
    outputs = run_dify_workflow_streaming(
        inputs={
            "topic": "AIエージェント市場の2026年動向",
            "target_length": "3000",
            "language": "ja"
        }
    )

MCP経由でDifyをClaudeに「ツール」として渡す本格設定

DifyアプリをMCPサーバーとして公開することで、Claude DesktopやCursorからも直接Difyを呼び出せます。Dify v1.6.0以降で利用可能な「双方向MCP対応」機能です。

DifyアプリをMCPサーバーとして公開する手順

  1. Difyのアプリ詳細画面 → Publish タブを開く
  2. MCP Server モジュールを見つけてトグルをオンにする
  3. Difyが自動生成したMCPサーバーURLをコピーする
  4. そのURLをClaude Codeの設定に追加する
// ~/.claude.json への追加設定
// DifyアプリをMCPサーバーとして直接呼び出す方法
// 注意: MCPサーバーURLには認証情報が含まれるため、APIキーと同様に扱うこと
{
  "mcpServers": {
    "my-dify-app": {
      "url": "https://api.dify.ai/mcp/your-unique-server-url"
    }
  }
}
// セキュリティ: URLが漏洩した場合はDify画面から再生成すること
// 動作確認: Dify v1.6.0+(2026-03-18 最終確認)

Cursorで使う場合はプロジェクトルートの .cursor/mcp.json に同様の設定を追加します。MCPの詳しい仕組みについては、MCPサーバーをPythonで自作する完全ガイドも参照してください。

実際の業務自動化ユースケース3選

事例区分: 想定シナリオ
以下は複数の導入支援経験をもとに構成した典型的なシナリオです。

ユースケース1:コードレビュー自動化パイプライン

Claude CodeでGitの差分を取得 → Difyのコードレビューワークフロー(セキュリティ・可読性・パフォーマンスを並列チェック)を呼び出す → 結果をPRコメントに自動投稿。

"""
コードレビュー自動化スクリプト
GitHub PRのdiffをDifyに送ってレビュー結果を取得する
動作環境: Python 3.10+, requests>=2.28.0, subprocess
注意: 本番環境で使用する前に、必ずテスト環境で動作確認してください。
"""
import subprocess
import requests
import os

def get_git_diff(base_branch: str = "main") -> str:
    """現在のブランチとbase_branchのdiffを取得"""
    result = subprocess.run(
        ["git", "diff", f"{base_branch}...HEAD", "--unified=3"],
        capture_output=True, text=True
    )
    return result.stdout[:8000]  # APIトークン制限のため先頭8000文字

def review_code_with_dify(diff: str) -> dict:
    """DifyのコードレビューワークフローにdiffをPOST"""
    return run_dify_workflow(  # 前述の関数を再利用
        inputs={
            "code_diff": diff,
            "review_aspects": "security,readability,performance",
            "output_format": "markdown"
        },
        user="ci-bot"
    )

if __name__ == "__main__":
    diff = get_git_diff()
    if not diff:
        print("差分なし。スキップします。")
    else:
        result = review_code_with_dify(diff)
        review_output = result.get("data", {}).get("outputs", {}).get("review", "")
        print(review_output)

ユースケース2:定期レポート生成の自動化

毎朝9時にCronがPythonスクリプトを起動 → DifyのRAGワークフロー(社内DB+Web情報を組み合わせ)でレポートを生成 → Slackに自動投稿。Claude Codeのセッション外でも動く完全自動化パイプラインです。

ユースケース3:Claude Codeのデバッグ作業を加速する

実際にこのシーンが最も便利でした。Claude Codeでコーディング中に「このエラーログをDifyの解析ワークフローに投げて原因を調べて」と一言指示するだけで、DifyのMCPツールが自動実行され、分析結果がClaude Codeのセッション内に返ってきます。ブラウザに切り替える必要がありません。

【要注意】よくある設定ミスと回避策

失敗1:APIキーのスコープ間違い

❌ DifyのワークスペースAPIキーをワークフロー実行に使う
⭕ アプリごとのAPIキー(アプリ詳細 → API Accessから取得)を使う

なぜ重要か: ワークスペースキーはワークフロー実行に使えません。アプリキーと混同するケースが多いので要注意です。

失敗2:セルフホスト環境でBASE_URLを間違える

DIFY_BASE_URL=http://localhost:3000(フロントエンドのポート)
DIFY_BASE_URL=http://localhost/v1(APIのエンドポイント、nginxプロキシ経由)

なぜ重要か: DifyセルフホストはデフォルトでAPIを /v1 パスにルーティングします。ポート番号ではなくパスで指定します。

失敗3:MCPサーバーURLを環境変数に入れずベタ書きする

❌ 設定ファイルにURLをそのまま書き、Gitにコミット
⭕ 環境変数 or .gitignore 済みの別ファイルで管理

なぜ重要か: MCPサーバーURLには認証情報が含まれています。漏洩するとDifyアプリが不正利用されます。

失敗4:ワークフローのタイムアウト設定を忘れる

❌ デフォルトの30秒タイムアウトで長時間ワークフローを実行
timeout=300 など明示的に設定し、ストリーミングモードを使う

なぜ重要か: 長文生成や複数LLM並列実行のワークフローは60〜120秒かかることがあります。タイムアウトエラーを防ぐためにストリーミングモードへの切り替えも検討してください。

セキュリティと運用のベストプラクティス

APIキー管理

  • APIキーは必ず環境変数から読み込む(python-dotenv 推奨)
  • .env ファイルは .gitignore に追加してGitから除外
  • 本番環境ではAWS Secrets Manager・GCP Secret Managerなどを使う

コスト管理

  • Dify CloudはLLM呼び出しを独自のクレジットで課金。APIキー持ち込み(BYOK)の場合はAnthropicに直接課金される
  • DifyのUsageダッシュボードで月次トークン消費を確認する習慣をつける

モニタリング

  • Difyの Logs & Ann. でワークフロー実行ログを定期確認
  • エラー率が急増したらAPIキーの再生成を検討
  • Pythonスクリプトからの呼び出しには try-except + ロギングを必ず入れる

参考・出典

まとめ:今日から始める3つのアクション

  1. 今日やること: claude mcp add-json コマンドでDify MCPサーバーを追加し、既存のDifyワークフローをClaude Codeから呼び出してみる
  2. 今週中: PythonスクリプトからDify APIを呼び出すブロッキング実行を実装し、コードレビューやレポート生成の1つを自動化する
  3. 今月中: Difyの双方向MCP機能を使ってワークフローをMCPサーバーとして公開し、チームのClaude DesktopやCursorからも共有して使えるようにする

あわせて読みたい:


AIエージェント・Dify導入を業務に活かしたい方は、Uravation(株式会社Uravation)のお問い合わせフォームからご相談ください。100社以上のAI研修・導入支援実績があります。

この記事はAIgent Lab編集部がお届けしました。

関連記事: MCPサーバー実践10選|Claude Desktopで即使える

Need help moving from reading to rollout?

この記事を読んで導入イメージが固まってきた方へ

Uravationでは、AIエージェントの要件整理、PoC設計、社内導入、研修まで一気通貫で支援しています。

この記事をシェア

X Facebook LINE

※ 本記事の情報は2026年3月時点のものです。サービスの料金・仕様は変更される可能性があります。最新情報は各サービスの公式サイトをご確認ください。

関連記事