Kroger MCP
このプロジェクトはKroger APIのMCPサーバーを実装し、商品検索、店舗照会、ショッピングカート管理などの機能をサポートしています。Kroger APIのクレデンシャルとOAuth2認証を設定する必要があります。
2ポイント
4.0K

インストール

以下のコマンドをクライアントにコピーして設定
注意:あなたのキーは機密情報です。誰とも共有しないでください。

🚀 Kroger MCP Server

このプロジェクトは、Kroger APIをラップするModel Context Protocol (MCP)サーバーを実装しています。これにより、AnthropicのClaudeなどの大規模言語モデル (LLM) がKrogerの食料品サービスとやり取りできるようになり、商品検索、店舗検索、カート管理などの機能が可能になります。

✨ 主な機能

  • OAuth2認証:一般データ用のクライアント資格情報と、カート操作のためのユーザーベースの承認を処理します。
  • 商品検索:特定の店舗でキーワードを使って商品を検索します。
  • 商品詳細:価格、在庫状況、配送オプションなどの詳細な商品情報を取得します。
  • 店舗検索:郵便番号でKrogerの店舗を検索します。
  • カート管理:ユーザーのKrogerショッピングカートに商品を追加します(ユーザー承認が必要)。

📦 インストール

1. 設定

サーバーを実行する前に、Kroger APIの資格情報とOAuth2設定を構成する必要があります。

1.1. API資格情報 (クライアントIDとシークレット)

  1. 資格情報の取得Kroger Developer Portalでアプリケーションを登録し、Client IDClient Secretを取得します。
  2. 資格情報の設定:以下の2つの方法でこれらの資格情報を設定できます。
    • config.py(ローカル使用の簡単な方法として推奨)config.pyファイルを開き、KROGER_CLIENT_IDKROGER_CLIENT_SECRETのプレースホルダー値を実際の資格情報に置き換えます。
      # config.py
      KROGER_CLIENT_ID = "YOUR_ACTUAL_CLIENT_ID"
      KROGER_CLIENT_SECRET = "YOUR_ACTUAL_CLIENT_SECRET"
      
    • 環境変数auth.pyスクリプトを変更して、環境変数を介してシークレットを管理する場合は、os.environ.get("KROGER_CLIENT_ID")os.environ.get("KROGER_CLIENT_SECRET")を読み取るようにすることもできます。(注:tools.pyserver.pyの現在の実装では、直接config.pyの値を使用しています。)

1.2. ユーザー承認 (カート操作の場合)

ユーザーのカートを変更するツール(例:add_to_cart)を使用するには、ユーザーがアプリケーションを承認する必要があります。このサーバーはOAuth2 Authorization Code Grantフローを使用します。

  1. リダイレクトURIconfig.pyKROGER_REDIRECT_URIが、Krogerアプリケーションに登録されたリダイレクトURIと一致することを確認してください。ローカルテストの場合は、http://localhost:8080/callbackが一般的なデフォルトですが、このリダイレクトからコードを取得する方法が必要です。
    # config.py
    KROGER_REDIRECT_URI = "http://localhost:8080/callback" # またはあなたが設定したURI
    
  2. 承認コードとリフレッシュトークンの取得
    • auth.pyスクリプトを直接実行します (python auth.py)。
    • 「承認URL」が表示されます。このURLをコピーしてウェブブラウザに貼り付けます。
    • Krogerアカウントでログインし、アクセスを許可します。
    • あなたはKROGER_REDIRECT_URIにリダイレクトされます。ブラウザのアドレスバーのURLには、承認コードが含まれています(例:http://localhost:8080/callback?code=YOUR_AUTH_CODE&...)。
    • このコードをコピーします。
    • プロンプトが表示されたら、コードauth.pyスクリプトに貼り付けます。
    • スクリプトは、コードをアクセストークンとリフレッシュトークンに交換します。
    • 重要:表示されたリフレッシュトークンを安全に保存してください
  3. リフレッシュトークンの設定
    • サーバーを再起動しても毎回再認証する必要がなく、カート操作を可能にするには、取得したリフレッシュトークンconfig.pyまたはAuthManagerが読み込める環境変数に設定する必要があります。
    • auth.pyAuthManager.__init__を変更して、このKROGER_USER_REFRESH_TOKENconfig.pyまたは環境から読み込むようにします。
      # In auth.py -> AuthManager.__init__
      # self.user_refresh_token = os.environ.get("KROGER_USER_REFRESH_TOKEN") 
      # OR
      # from config import KROGER_USER_REFRESH_TOKEN # Add this to config.py
      # self.user_refresh_token = KROGER_USER_REFRESH_TOKEN 
      
      そして、config.pyKROGER_USER_REFRESH_TOKEN = "YOUR_SAVED_REFRESH_TOKEN"を追加します。
    • get_user_token()が呼び出されたときに、アクセストークンが期限切れまたは存在しない場合、このリフレッシュトークンを使用しようとします。

2. サーバーの実行

  1. 依存関係のインストール:まだインストールしていない場合は、必要なPythonライブラリをインストールします。
    pip install requests mcp
    
    (注:mcpライブラリ名は仮定です。異なる場合は調整してください。例:modelcontextprotocol
  2. サーバーの起動: ターミナルからserver.pyスクリプトを実行します。
    python server.py
    
  3. サーバーの動作
    • サーバーは、MCPクライアントとの通信にSTDIO (標準入出力) を使用します。ネットワークポートを開きません。
    • 起動すると、初期化メッセージが表示され、登録されたツールのリストが表示されます。
    • その後、MCPクライアントからのJSON - RPC要求を待機します。
  4. サーバーの停止: サーバーが実行されているターミナルでCtrl + Cを押します。

💻 使用例

3. MCPクライアントの統合

3.1. Claude Desktop

  • Claude Desktopの設定に移動します。
  • 統合(またはMCPサーバー用の同様のセクション)に移動します。
  • MCPサーバーの追加(または同等の項目)をクリックします。
  • サーバーを実行するコマンドを提供します。これには通常、Pythonインタープリターとserver.pyへのパスを指定する必要があります。例えば:
    • PythonがPATHにある場合:python /path/to/your/project/server.py
    • そうでない場合:/path/to/your/python /path/to/your/project/server.py
  • 追加すると、ClaudeはKrogerのツール(例:find_storessearch_products)を表示し、呼び出すことができます。

3.2. プログラムによる使用 (例)

開発者は、MCPクライアントライブラリを使用してサーバーとプログラムでやり取りすることもできます。

# This is a conceptual example based on the MCP specification.
# The actual library might differ.
from modelcontext import Client, StdioClientTransport # Assuming library structure

async def main():
    client = Client(name="example-kroger-client", version="1.0", capabilities={})
    
    # Adjust command if python/server.py are not in PATH or need full paths
    python_executable = "python" # Or full path to python interpreter
    server_script_path = "server.py" # Or full path to server.py
    
    transport = StdioClientTransport(command=[python_executable, server_script_path])
    
    await client.connect(transport)
    
    # Example: Find stores
    try:
        store_results = await client.call_tool(
            "find_stores", 
            {"zip_code": "45202", "limit": 1}
        )
        print("Store Search Results:", store_results)

        if store_results and not store_results.get("error") and len(store_results) > 0:
            location_id = store_results[0].get("locationId")
            if location_id:
                # Example: Search products
                product_results = await client.call_tool(
                    "search_products",
                    {"query": "milk", "location_id": location_id, "limit": 2}
                )
                print("Product Search Results:", product_results)
                
                # Example: Add to cart (requires user auth token to be set up in server)
                # Ensure product_results[0] exists and has 'productId'
                if product_results and not product_results.get("error") and len(product_results) > 0:
                    product_id = product_results[0].get("productId")
                    cart_result = await client.call_tool(
                        "add_to_cart",
                        {"product_id": product_id, "quantity": 1, "location_id": location_id}
                    )
                    print("Add to Cart Result:", cart_result)

    except Exception as e:
        print(f"An error occurred: {e}")
    finally:
        await client.disconnect()

if __name__ == "__main__":
    # For asyncio if your client library uses it
    # import asyncio
    # asyncio.run(main())
    print("Run the async main() function with an asyncio event loop if needed by your MCP client library.")

4. LLMとの対話例

ユーザー:"90210近くのKrogerで、有機全乳を2ガロンと卵を1ダース欲しいです。"

LLM (アシスタント) の内部手順

  1. (オプション:ユーザーの郵便番号が提供されていないか曖昧な場合、LLMがユーザーに郵便番号を尋ねます)
  2. LLMがfind_storesを呼び出します{"zip_code": "90210", "limit": 1}
    • サーバーは店舗詳細を返します。例:[{ "locationId": "01400123", "name": "Beverly Hills Kroger", ... }]
  3. LLMが(牛乳の)search_productsを呼び出します{"query": "organic whole milk", "location_id": "01400123", "limit": 5}
    • サーバーは牛乳製品のリストを返します。LLMは1つを選択します。例:{"productId": "0001111060404", "description": "Simple Truth Organic Milk...", ...}
  4. LLMが(卵の)search_productsを呼び出します{"query": "dozen eggs", "location_id": "01400123", "limit": 3}
    • サーバーは卵製品のリストを返します。LLMは1つを選択します。
  5. (まだ行っていない場合は、カートのユーザー承認を完了する必要があります)
  6. LLMが(牛乳の)add_to_cartを呼び出します{"product_id": "0001111060404", "quantity": 2, "location_id": "01400123"}
    • サーバーは追加を確認します。
  7. LLMが(卵の)add_to_cartを呼び出します{"product_id": "...", "quantity": 1, "location_id": "01400123"}
    • サーバーは追加を確認します。

LLM (アシスタント) からユーザーへ:"了解しました。ビバリーヒルズのKrogerを見つけました。シンプルトゥース有機全乳を2ガロンと卵を1ダースあなたのカートに追加しました。他に何か必要ですか?"

🔧 技術詳細

5. エラーシナリオ

  • ユーザー承認が不足している場合:ユーザーがアプリケーションを承認していない状態でadd_to_cartを使用しようとすると、ツールはエラーを返します。
    {
      "error": "User authentication required.",
      "message": "No user access token found. The user needs to authorize the application...",
      "action_needed": "User must complete OAuth2 authorization flow." 
    }
    
    LLMはユーザーに承認手順を実行するように案内する必要があります(セクション1.2を参照)。エラーメッセージに承認URLが含まれる場合があります。
  • 無効または期限切れのトークン:アクセストークンが期限切れの場合、AuthManagerはそれを更新しようとします。リフレッシュトークンも無効な場合(例:add_to_cartで401エラーが発生した後のユーザートークン)、再承認が必要になります。
  • APIレート制限:KrogerのAPIにはレート制限があります(例:developer.kroger.com/support/rate-limits/を参照)。サーバーがこれらの制限に達すると、API呼び出しは失敗します。サーバーは通常HTTP 429ステータスコードでKrogerからのエラーを返します。LLMはユーザーに後で再試行するように通知する必要があります。
  • その他のAPIエラー:KrogerのAPIが他のエラーを返す場合(例:無効な商品ID、locationIdに対応する店舗が見つからない)、ツールはerrordetailsstatus_code(KrogerからのHTTPステータス)、および場合によってはraw_responseまたはkroger_errorフィールドを含むJSON辞書を返します。

6. 利用可能なツール

サーバーは、LLMに以下のツールを公開しています。

  • find_stores(zip_code: str, radius_miles: int = 10, limit: int = 5) -> list | dict
    • 説明:郵便番号でKrogerの店舗を検索します(ID付きの最寄りの店舗を返します)。
  • search_products(query: str, location_id: str, limit: int = 10) -> list | dict
    • 説明:指定された店舗でキーワードを使ってKrogerの商品を検索します。
  • get_product(product_id: str, location_id: str) -> dict
    • 説明:IDで商品の詳細情報(価格、サイズ、在庫、配送オプション)を取得します。
  • add_to_cart(product_id: str, quantity: int, location_id: str) -> dict
    • 説明:ユーザーのKrogerカートに商品を追加します(ユーザー認証が必要)。

(上記の説明は、tools.py@toolデコレータに基づいています。)

代替品

R
Rsdoctor
Rsdoctorは、Rspackエコシステム向けに開発されたビルド分析ツールで、webpackと完全に互換性があり、可視化ビルド分析、多次元パフォーマンス診断、インテリジェントな最適化提案を提供し、開発者がビルド効率とエンジニアリング品質を向上させるのに役立ちます。
TypeScript
8.7K
5ポイント
N
Next Devtools MCP
Next.js開発ツールのMCPサーバーです。ClaudeやCursorなどのAIプログラミングアシスタントにNext.js開発ツールとユーティリティを提供します。実行時診断、開発自動化、およびドキュメントアクセス機能が含まれています。
TypeScript
8.2K
5ポイント
T
Testkube
Testkubeは、クラウドネイティブアプリケーション向けのテストオーケストレーションと実行フレームワークで、テストの定義、実行、分析を行うための統一プラットフォームを提供します。既存のテストツールとKubernetesインフラストラクチャをサポートします。
Go
5.1K
5ポイント
M
MCP Windbg
AIモデルをWinDbg/CDBに統合するMCPサーバーで、Windowsのクラッシュダンプファイルの分析とリモートデバッグに使用し、自然言語での対話を通じてデバッグコマンドを実行できます。
Python
9.5K
5ポイント
R
Runno
Runnoは、JavaScriptツールキットのセットで、ブラウザやNode.jsなどの環境で複数のプログラミング言語のコードを安全に実行するためのものです。WebAssemblyとWASIを通じてサンドボックス化された実行を実現し、Python、Ruby、JavaScript、SQLite、C/C++などの言語をサポートし、Webコンポーネント、MCPサーバーなどの統合方法を提供します。
TypeScript
7.4K
5ポイント
N
Netdata
Netdataはオープンソースのリアルタイムインフラストラクチャ監視プラットフォームで、毎秒の指標収集、可視化、機械学習による異常検出、自動化アラートを提供し、複雑な構成なしで全スタックの監視を実現します。
Go
8.6K
5ポイント
M
MCP Server
Mapbox MCPサーバーは、Node.jsで実装されたモデルコンテキストプロトコルサーバーで、AIアプリケーションにMapboxの地理空間APIへのアクセス機能を提供します。地理コーディング、興味のある場所の検索、ルート計画、等時線分析、静的地図生成などの機能が含まれます。
TypeScript
6.7K
4ポイント
U
Uniprof
uniprofは、CPUパフォーマンス分析を簡素化するツールで、複数のプログラミング言語とランタイムをサポートし、コードの変更や依存関係の追加なしに、Dockerコンテナまたはホストモードでワンクリックでパフォーマンスプロファイリングとホットスポット分析を行うことができます。
TypeScript
7.2K
4.5ポイント
G
Gmail MCP Server
Claude Desktop用に設計されたGmail自動認証MCPサーバーで、自然言語でのやり取りによるGmailの管理をサポートし、メール送信、ラベル管理、一括操作などの完全な機能を備えています。
TypeScript
16.3K
4.5ポイント
C
Context7
Context7 MCPは、AIプログラミングアシスタントにリアルタイムのバージョン固有のドキュメントとコード例を提供するサービスで、Model Context Protocolを通じてプロンプトに直接統合され、LLMが古い情報を使用する問題を解決します。
TypeScript
66.0K
4.7ポイント
E
Edgeone Pages MCP Server
EdgeOne Pages MCPは、MCPプロトコルを通じてHTMLコンテンツをEdgeOne Pagesに迅速にデプロイし、公開URLを取得するサービスです。
TypeScript
22.0K
4.8ポイント
B
Baidu Map
認証済み
百度マップMCPサーバーは国内初のMCPプロトコルに対応した地図サービスで、地理コーディング、ルート計画など10個の標準化されたAPIインターフェースを提供し、PythonとTypescriptでの迅速な接続をサポートし、エージェントに地図関連の機能を実現させます。
Python
32.7K
4.5ポイント
G
Gitlab MCP Server
認証済み
GitLab MCPサーバーは、Model Context Protocolに基づくプロジェクトで、GitLabアカウントとのやり取りに必要な包括的なツールセットを提供します。コードレビュー、マージリクエスト管理、CI/CD設定などの機能が含まれます。
TypeScript
19.0K
4.3ポイント
U
Unity
認証済み
UnityMCPはUnityエディターのプラグインで、モデルコンテキストプロトコル (MCP) を実装し、UnityとAIアシスタントのシームレスな統合を提供します。リアルタイムの状態監視、リモートコマンドの実行、ログ機能が含まれます。
C#
22.5K
5ポイント
M
Magic MCP
Magic Component Platform (MCP) はAI駆動のUIコンポーネント生成ツールで、自然言語での記述を通じて、開発者が迅速に現代的なUIコンポーネントを作成するのを支援し、複数のIDEとの統合をサポートします。
JavaScript
17.2K
5ポイント
S
Sequential Thinking MCP Server
MCPプロトコルに基づく構造化思考サーバーで、思考段階を定義することで複雑な問題を分解し要約を生成するのに役立ちます。
Python
27.1K
4.5ポイント
AIBase
智啓未来、あなたの人工知能ソリューションシンクタンク
© 2026AIBase