Claude Agent SDK からライブ GitHub のデータに接続する方法(CData Connect AI 経由)

Jerod Johnson
Jerod Johnson
Senior Technology Evangelist
CData Connect AI を活用して、Claude Agent SDK アプリケーションからGitHub のデータの読み取りやアクションをセキュアに実行できるようにします。

Claude Agent SDK は、Anthropic が提供する、ステートフルな会話、自動コンテキスト管理、ネイティブ MCP(Model Context Protocol)ツール統合を備えた本番環境対応 AI エージェントを構築するための強力なフレームワークです。CData Connect AI と組み合わせることで、Claude Agent SDK を活用してGitHub のデータと自然言語クエリでリアルタイムにやりとりするインテリジェントエージェントを構築できます。この記事では、Connect AI を使用して GitHub に接続し、GitHub のデータ とやりとりするための Claude Agent SDK アプリケーションを設定するプロセスを説明します。

CData Connect AI はGitHub のデータに接続するための専用クラウド間インターフェースを提供します。CData Connect AI Remote MCP Server により、Claude Agent SDK アプリケーションと GitHub 間のセキュアな通信が可能になります。これにより、ネイティブ対応データベースへのデータレプリケーションを必要とせずに、エージェントからGitHub のデータの読み取りや操作を実行できます。CData Connect AI は最適化されたデータ処理機能を備えており、フィルタや JOIN を含むサポート対象のすべての SQL 操作を効率的に GitHub へ直接送信します。サーバーサイド処理を活用することで、要求されたGitHub のデータを迅速に取得できます。

この記事では、自然言語を使用してデータを会話的に探索(または Vibe Query)するための Claude Agent SDK アプリケーションの設定方法を説明します。Connect AI を使用すると、ライブGitHub のデータを含む数百のソースにアクセスできるエージェントを構築できます。

ステップ 1:Claude Agent SDK 用に GitHub への接続を設定

Claude Agent SDK アプリケーションから GitHub への接続は CData Connect AI Remote MCP を介して行います。エージェントからGitHub のデータを操作するには、まず CData Connect AI で GitHub への接続を作成・設定します。

  1. Connect AI にログインして「Sources」をクリック、次に「 Add Connection」をクリック
  2. 接続を追加パネルから「GitHub」を選択
  3. GitHub に接続するために必要な認証プロパティを入力します。

    GitHub への接続には、OAuth 2 認証標準を使います。OAuth で認証するには、アプリを作成してOAuthClientId、OAuthClientSecret、およびCallbackURL 接続プロパティを取得する必要があります。詳細はヘルプドキュメントの「はじめに」を参照してください。

  4. 「Save & Test」をクリック
  5. GitHub 接続の追加ページで「Permissions」タブに移動し、ユーザーベースのアクセス許可を設定します。

Personal Access Token の作成

Personal Access Token(PAT)は、Claude Agent SDK アプリケーションから Connect AI への接続を認証するために使用されます。アクセスの粒度を維持するために、サービスごとに個別の PAT を作成することをお勧めします。

  1. Connect AI アプリの右上にある歯車アイコン()をクリックして設定ページを開きます。
  2. 設定ページで「Access Tokens」セクションに移動し、「 Create PAT」をクリックします。
  3. PAT に名前を付けて「Create」をクリックします。
  4. Personal Access Token は作成時にのみ表示されるため、必ずコピーして安全な場所に保存してください。

接続と PAT が設定できたので、Claude Agent SDK アプリケーションからGitHub のデータに接続する準備が整いました。

ステップ 2:CData Connect AI 用に Claude Agent SDK アプリケーションを設定

以下のステップに従って、CData Connect AI に接続するための Claude Agent SDK アプリケーションを設定します。https://github.com/CDataSoftware/connect-ai-claude-agent で提供されている事前構築済みのエージェントチャットボットを出発点として使用するか、以下の手順に従って独自のものを作成できます。

前提条件

  1. Python 3.8 以上がシステムにインストールされていること
  2. Anthropic API キー(https://console.anthropic.com/ から取得)
  3. 必要な依存関係をインストール:
    pip install claude-agent-sdk python-dotenv requests

設定手順

  1. 新しい Python プロジェクトディレクトリを作成して移動:
    mkdir my-cdata-agent
    cd my-cdata-agent
  2. 環境変数を設定します。プロジェクトルートに以下の変数を含む .env ファイルを作成:
    ANTHROPIC_API_KEY=your_anthropic_api_key
    [email protected]
    CDATA_ACCESS_TOKEN=your_personal_access_token
    your_anthropic_api_key を Anthropic API キーに、[email protected] を Connect AI のメールアドレスに、your_personal_access_token をステップ 1 で作成した Personal Access Token に置き換えます。

Claude Agent SDK アプリケーションの構築

CData Connect AI のセットアップが完了したので、エージェントアプリケーションを構築する準備が整いました。ステートフルな会話とネイティブ MCP ツール統合を備えた本番環境対応 AI エージェントを作成するために必要な主要コンポーネントを説明します。この例では、MCP クライアント、エージェントチャットボット、インタラクティブインターフェースを含む単一の Python ファイル(agent.py)を作成します。

インポートと環境設定

まず、必要なライブラリをインポートし、環境変数をロードします。エージェント機能用の Claude Agent SDK、MCP サーバーとの HTTP 通信用の requests ライブラリ、非同期操作と認証用の標準 Python ライブラリが必要です。


#!/usr/bin/env python3
import os
import json
import base64
import asyncio
from typing import Optional, Dict, Any
from functools import partial
import requests
from claude_agent_sdk import query, ClaudeSDKClient, ClaudeAgentOptions, tool, create_sdk_mcp_server
from dotenv import load_dotenv

# .env ファイルから環境変数をロード
load_dotenv()

MCP クライアントの作成

MCPClient クラスは HTTP 経由で CData Connect AI MCP サーバーとの通信を処理します。Basic Auth(メールアドレスと Personal Access Token)を使用した認証を管理し、MCP サーバーに JSON-RPC リクエストを送信し、Server-Sent Events(SSE)レスポンスを解析します。クライアントは 2 つの主要なメソッドを提供します: 利用可能なツールを検出する list_tools() と MCP ツールを実行する call_tool() です。


class MCPClient:
    """HTTP 経由で CData Connect AI MCP サーバーとやりとりするためのクライアント"""

    def __init__(self, server_url: str, email: Optional[str] = None, access_token: Optional[str] = None):
        self.server_url = server_url.rstrip('/')
        self.session = requests.Session()

        # MCP JSON-RPC 用のデフォルトヘッダーを設定
        self.session.headers.update({
            'Content-Type': 'application/json',
            'Accept': 'application/json, text/event-stream'
        })

        if email and access_token:
            # Basic 認証: email:personal_access_token
            credentials = f"{email}:{access_token}"
            encoded_credentials = base64.b64encode(credentials.encode()).decode()
            self.session.headers.update({
                'Authorization': f'Basic {encoded_credentials}'
            })

    def _parse_sse_response(self, response_text: str) -> dict:
        """Server-Sent Events (SSE) レスポンスを解析"""
        for line in response_text.split('\n'):
            if line.startswith('data: '):
                data_json = line[6:]  # 'data: ' プレフィックスを除去
                return json.loads(data_json)
        raise ValueError("No data found in SSE response")

    def list_tools(self) -> list:
        """MCP サーバーから利用可能なツールを取得"""
        response = self.session.post(
            self.server_url,
            json={
                "jsonrpc": "2.0",
                "method": "tools/list",
                "params": {},
                "id": 1
            }
        )
        response.raise_for_status()
        result = self._parse_sse_response(response.text)
        return result.get("result", {}).get("tools", [])

    def call_tool(self, tool_name: str, arguments: dict) -> dict:
        """MCP サーバー上のツールを呼び出す"""
        response = self.session.post(
            self.server_url,
            json={
                "jsonrpc": "2.0",
                "method": "tools/call",
                "params": {
                    "name": tool_name,
                    "arguments": arguments
                },
                "id": 2
            }
        )
        response.raise_for_status()
        result = self._parse_sse_response(response.text)
        return result.get("result", {})

エージェントチャットボットクラスの構築

MCPAgentChatbot クラスはアプリケーションの中核です。MCP クライアントを Claude Agent SDK に接続し、ステートフルな会話と自動コンテキスト管理を備えた本番環境対応 AI エージェントを作成します。このクラスは初期化中にいくつかの重要な機能を実行します: MCP クライアントインスタンスを作成し、CData Connect AI MCP サーバーから利用可能なツールを検出し、各 MCP ツールを Agent SDK で使用できるようにラップし、SDK 互換の MCP サーバーを作成します。

エージェントの初期化とツールの読み込み

MCPAgentChatbot が初期化されると、CData Connect AI MCP サーバーに接続し、利用可能なすべてのツールを取得します。これらのツールは Claude Agent SDK のツールフレームワークと互換性を持つようにラップされます。


class MCPAgentChatbot:
    """
    CData Connect AI 用の本番環境対応 AI エージェントチャットボット
    ステートフルな会話と自動コンテキスト管理に Claude Agent SDK を使用
    """

    def __init__(self, mcp_server_url: str, email: Optional[str] = None, access_token: Optional[str] = None):
        self.mcp_client = MCPClient(mcp_server_url, email, access_token)

        # MCP サーバーから利用可能なツールをロード
        print("CData Connect AI MCP サーバーに接続中...")
        self.mcp_tools_list = self.mcp_client.list_tools()
        print(f"✓ MCP サーバーから {len(self.mcp_tools_list)} 個のツールをロードしました")

        # Agent SDK 用のカスタム MCP ツールラッパーを作成
        self.agent_tools = self._create_agent_tools()

        # Agent SDK 用の MCP サーバーを作成
        self.mcp_server = create_sdk_mcp_server(
            name="cdata_connect",
            tools=self.agent_tools
        )

Agent SDK 用のツールラッパー作成

_create_agent_tools() メソッドは MCP ツール定義を Agent SDK 互換のツールに変換します。MCP サーバーから検出された各ツールについて、ツールの名前、説明、入力スキーマを持つ @tool デコレータを使用してラッパーを作成します。_tool_handler() メソッドはツールが実行されるたびに呼び出され、リクエストを MCP サーバーに転送して Agent SDK 用にレスポンスをフォーマットします。


    async def _tool_handler(self, tool_name: str, args: Dict[str, Any]) -> Dict[str, Any]:
        """MCP ツールを呼び出して結果を返す"""
        result = self.mcp_client.call_tool(tool_name, args)
        return {
            "content": [{
                "type": "text",
                "text": json.dumps(result, indent=2)
            }]
        }

    def _create_agent_tools(self) -> list:
        """MCP ツール用の Agent SDK ツールラッパーを作成"""
        agent_tools = []
        for tool_info in self.mcp_tools_list:
            tool_name = tool_info.get("name")
            tool_description = tool_info.get("description", "")
            tool_schema = tool_info.get("inputSchema", {})

            agent_tool = tool(
                name=tool_name,
                description=tool_description,
                input_schema=tool_schema
            )(partial(self._tool_handler, tool_name))

            agent_tools.append(agent_tool)
        return agent_tools

ステートフルな会話セッションの管理

Claude Agent SDK の主要な機能の一つは、自動コンテキスト管理を備えたステートフルな会話を維持する機能です。create_session() メソッドはシステムプロンプト、MCP ツールへのアクセス、権限設定を備えた ClaudeSDKClient インスタンスを作成します。chat_session() メソッドはユーザーメッセージを送信してエージェントのレスポンスを取得し、会話コンテキストを自動的に維持します。


    def create_session(self) -> ClaudeSDKClient:
        """ステートフルな会話セッションを作成"""
        options = ClaudeAgentOptions(
            system_prompt="You are a helpful assistant with access to GitHub data through CData Connect AI.",
            mcp_servers={"cdata_connect": self.mcp_server},
            permission_mode="bypassPermissions"
        )
        return ClaudeSDKClient(options=options)

    async def chat_session(self, client: ClaudeSDKClient, user_message: str) -> str:
        """ステートフルセッションでメッセージを送信"""
        await client.query(user_message)
        async for message in client.receive_response():
            if hasattr(message, 'result'):
                return str(message.result)
        return ""

インタラクティブインターフェースの作成

main() 関数はすべてをまとめてインタラクティブチャットボットを作成します。環境変数から資格情報をロードし、MCPAgentChatbot を初期化し、ステートフルセッションを作成して、ユーザーがエージェントとチャットできるインタラクティブループを開始します。セッションは Python の async コンテキストマネージャ(async with)を使用して管理され、リソースと API 接続の適切なクリーンアップが保証されます。


async def main():
    """インタラクティブモードでエージェントを実行"""
    MCP_SERVER_URL = "https://mcp.cloud.cdata.com/mcp/"
    CDATA_EMAIL = os.environ.get("CDATA_EMAIL")
    CDATA_ACCESS_TOKEN = os.environ.get("CDATA_ACCESS_TOKEN")

    print("=== CData Connect AI Agent ===\n")

    chatbot = MCPAgentChatbot(MCP_SERVER_URL, CDATA_EMAIL, CDATA_ACCESS_TOKEN)
    client = chatbot.create_session()

    async with client:
        while True:
            user_input = input("You: ").strip()
            if user_input.lower() in ['quit', 'exit', 'q']:
                break
            response = await chatbot.chat_session(client, user_input)
            print(f"\nAssistant: {response}\n")


if __name__ == "__main__":
    asyncio.run(main())

エージェントの実行

  1. 上記のすべてのコードセクションをプロジェクトディレクトリ内の agent.py という単一ファイルに保存します。または、https://github.com/CDataSoftware/connect-ai-claude-agent から完全な例をダウンロードできます。
  2. エージェントアプリケーションを実行:
    python agent.py
  3. 自然言語クエリでGitHub のデータとのやりとりを開始します。エージェントは CData Connect AI MCP Server を介してGitHub のデータにアクセスできるようになりました。

ステップ 3:ライブ GitHub のデータアクセスでインテリジェントエージェントを構築

Claude Agent SDK アプリケーションが設定され CData Connect AI に接続されたので、自然言語を使ってGitHub のデータとやりとりする高度なエージェントを構築できます。MCP 統合により、エージェントに強力なデータアクセス機能が提供されます。

エージェントで利用可能な MCP ツール

Claude Agent SDK アプリケーションは以下の CData Connect AI MCP ツールにアクセスできます:

  • queryData: 接続されたデータソースに対して SQL クエリを実行し、結果を取得
  • getCatalogs: CData Connect AI から利用可能な接続の一覧を取得
  • getSchemas: 特定のカタログのデータベーススキーマを取得
  • getTables: 特定のカタログとスキーマのデータベーステーブルを取得
  • getColumns: 特定のテーブルのカラムメタデータを取得
  • getProcedures: 特定のカタログとスキーマのストアドプロシージャを取得
  • getProcedureParameters: ストアドプロシージャのパラメータメタデータを取得
  • executeProcedure: パラメータ付きでストアドプロシージャを実行

Claude Agent SDK の主な機能

Claude Agent SDK は AI エージェント構築に最適な、本番環境対応の機能を提供します:

  • 自動コンテキスト管理: 手動での会話履歴追跡が不要 - SDK がコンテキストを自動的に処理
  • ステートフルな会話: 複数のターンにわたってコンテキストを維持し、自然で流れるようなインタラクションを実現
  • ネイティブツール統合: ツールは自動呼び出しライフサイクルとエラー処理を備えたファーストクラスシチズン
  • コンテキスト圧縮: トークン制限に近づいた時の自動コンテキスト圧縮
  • Async/Await アーキテクチャ: より良いパフォーマンスのための最新 Python 非同期パターン
  • 権限制御: ツール権限と実行のきめ細かい制御

使用例

ライブGitHub のデータアクセスで Claude Agent SDK アプリケーションができることの例:

  • データ分析エージェント:GitHub のデータのトレンド、パターン、異常を分析するエージェントを構築
  • レポート生成エージェント: 自然言語リクエストに基づいてカスタムレポートを生成するエージェントを作成
  • データ品質エージェント: リアルタイムでデータ品質を監視・検証するエージェントを開発
  • ビジネスインテリジェンスエージェント: 複数のデータソースをクエリして複雑なビジネス質問に答えるエージェントを構築
  • インタラクティブチャットボット:GitHub のデータに関する質問に自然言語で答えるチャットボットを作成
  • 自動化ワークフローエージェント: GitHub のデータ条件に基づいてアクションをトリガーするエージェントを作成

エージェントのテスト

エージェントが動作したら、自然言語クエリでやりとりできます。例えば:

  • 「過去 30 日間のすべての顧客を表示して」
  • 「今四半期で最もパフォーマンスの高い製品は?」
  • 「売上トレンドを分析して異常を特定して」
  • 「アクティブなプロジェクトのサマリーレポートを生成して」
  • 「特定の条件に一致するすべてのレコードを検索して」

Claude Agent SDK アプリケーションはこれらの自然言語クエリを自動的に適切な SQL クエリに変換し、CData Connect AI MCP Server を介して GitHub データに対して実行します。ユーザーが複雑な SQL を記述したり、基盤となるデータ構造を理解したりする必要なく、リアルタイムのインサイトを提供します。

高度な設定

プログラマティックな使用

Claude Agent SDK は、ワンオフクエリや大規模アプリケーションへの統合にもプログラマティックに使用できます:

ワンオフクエリ

from claude_agent_sdk import query, ClaudeAgentOptions

async def single_query():
    options = ClaudeAgentOptions(
        system_prompt="You are a data analyst assistant.",
        mcp_servers={"cdata_connect": mcp_server},
        permission_mode="bypassPermissions"
    )

    response = await query(
        prompt="What data sources are available?",
        options=options
    )

    async for message in response:
        if hasattr(message, 'result'):
            print(message.result)

ステートフルなマルチターン会話

async def conversation():
    client = chatbot.create_session()

    async with client:
        # 最初のクエリ
        response1 = await chatbot.chat_session(client, "List my data sources")
        print(response1)

        # コンテキストを持つフォローアップクエリ
        response2 = await chatbot.chat_session(client, "Tell me more about the first one")
        print(response2)

権限モード

Claude Agent SDK はツール実行のための異なる権限モードを提供:

  • default: ツール実行前にユーザーの承認を求める
  • acceptEdits: 編集操作を自動的に承認
  • bypassPermissions: すべてのツールを自動承認(CLI アプリケーションに推奨)
  • plan: エージェントが実行前にアクションを計画

CData Connect AI を入手

Claude Agent SDK アプリケーションから直接 300 以上の SaaS、ビッグデータ、NoSQL ソースへのリアルタイムデータアクセスを取得するには、CData Connect AI をお試しください。

はじめる準備はできましたか?

CData Connect AI の詳細、または無料トライアルにお申し込みください:

無料トライアル お問い合わせ