Kroger MCP
K

Kroger MCP

該項目實現了一個Kroger API的MCP服務端,支持產品搜索、店鋪查詢和購物車管理等功能,需配置Kroger API憑證和OAuth2授權。
2分
4.6K

安裝

複製以下命令到你的Client進行配置
注意:您的密鑰屬於敏感信息,請勿與任何人分享。

🚀 Kroger MCP 服務器

本項目實現了一個封裝了克羅格(Kroger)API 的模型上下文協議(MCP)服務器。它允許像 Anthropic 的 Claude 這樣的大語言模型(LLM)與克羅格的雜貨服務進行交互,實現產品搜索、店鋪查找和購物車管理等功能。

✨ 主要特性

  • OAuth2 認證:處理通用數據的客戶端憑證以及購物車操作的基於用戶的授權。
  • 產品搜索:按關鍵詞在特定店鋪位置搜索產品。
  • 產品詳情:檢索產品的詳細信息,包括價格、可用性和配送選項。
  • 店鋪位置:按郵政編碼查找克羅格店鋪位置。
  • 購物車管理:將商品添加到用戶的克羅格購物車(需要用戶授權)。

📦 安裝指南

1. 配置

在運行服務器之前,你需要配置克羅格 API 憑證和 OAuth2 設置。

1.1 API 憑證(客戶端 ID 和密鑰)

  1. 獲取憑證:在 克羅格開發者門戶 上註冊一個應用程序,以獲取 客戶端 ID客戶端密鑰
  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.py` 和 `server.py` 當前的實現直接使用 `config.py` 中的值)。

1.2 用戶授權(用於購物車操作)

要使用修改用戶購物車的工具(例如 add_to_cart),用戶必須授權該應用程序。此服務器使用 OAuth2 授權碼授予流程。

  1. 重定向 URI:確保 config.py 中的 KROGER_REDIRECT_URI 與你在克羅格應用程序中註冊的重定向 URI 相匹配。對於本地測試,http://localhost:8080/callback 是常見的默認值,但你需要一種方法來捕獲此重定向中的代碼。
# config.py
KROGER_REDIRECT_URI = "http://localhost:8080/callback" # 或你配置的 URI
  1. 獲取授權碼和刷新令牌
    • 直接運行 auth.py 腳本(python auth.py)。
    • 它將打印出一個“授權 URL”。將此 URL 複製並粘貼到你的網頁瀏覽器中。
    • 使用你的克羅格賬戶登錄並授予訪問權限。
    • 你將被重定向到你的 KROGER_REDIRECT_URI。瀏覽器地址欄中的 URL 現在將包含一個授權 代碼(例如,http://localhost:8080/callback?code=YOUR_AUTH_CODE&...)。
    • 複製此 代碼
    • 在提示時將 代碼 粘貼回 auth.py 腳本中。
    • 腳本將用該代碼交換一個訪問令牌和一個 刷新令牌
    • 至關重要的是,安全地存儲顯示的 刷新令牌
  2. 配置刷新令牌
    • 為了在服務器重啟時無需每次都重新認證即可啟用購物車操作,你應該將獲取的 刷新令牌 設置在 config.py 中,或者作為 AuthManager 可以加載的環境變量。
    • 修改 auth.py 中的 AuthManager.__init__ 以從 config.py 或環境中加載此 KROGER_USER_REFRESH_TOKEN
# 在 auth.py -> AuthManager.__init__ 中
# self.user_refresh_token = os.environ.get("KROGER_USER_REFRESH_TOKEN") 
# 或者
# from config import KROGER_USER_REFRESH_TOKEN # 添加到 config.py
# self.user_refresh_token = KROGER_USER_REFRESH_TOKEN 

然後在 config.py 中添加 KROGER_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
  1. 服務器操作
    • 服務器使用 標準輸入輸出(STDIO) 與 MCP 客戶端進行通信。它不會打開任何網絡端口。
    • 啟動後,它將打印初始化消息,包括已註冊工具的列表。
    • 然後它將監聽來自 MCP 客戶端的 JSON-RPC 請求。
  2. 停止服務器: 在運行服務器的終端中按 Ctrl+C

💻 使用示例

3. MCP 客戶端集成

3.1 Claude 桌面版

  • 打開 Claude 桌面版的 設置
  • 導航到 集成(或類似的 MCP 服務器部分)。
  • 點擊 添加 MCP 服務器(或等效操作)。
  • 提供運行服務器的命令。通常需要指定 Python 解釋器和 server.py 的路徑。例如:
    • 如果 Python 在你的系統路徑中:python /path/to/your/project/server.py
    • 否則:/path/to/your/python /path/to/your/project/server.py
  • 添加後,Claude 將能夠查看和調用克羅格工具(例如 find_storessearch_products)。

3.2 編程式使用(示例)

開發者還可以使用 MCP 客戶端庫以編程方式與服務器進行交互。

# 這是一個基於 MCP 規範的概念示例。
# 實際的庫可能會有所不同。
from modelcontext import Client, StdioClientTransport # 假設庫結構

async def main():
    client = Client(name="example-kroger-client", version="1.0", capabilities={})
    
    # 如果 python/server.py 不在系統路徑中或需要完整路徑,請調整命令
    python_executable = "python" # 或 Python 解釋器的完整路徑
    server_script_path = "server.py" # 或 server.py 的完整路徑
    
    transport = StdioClientTransport(command=[python_executable, server_script_path])
    
    await client.connect(transport)
    
    # 示例:查找店鋪
    try:
        store_results = await client.call_tool(
            "find_stores", 
            {"zip_code": "45202", "limit": 1}
        )
        print("店鋪搜索結果:", 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:
                # 示例:搜索產品
                product_results = await client.call_tool(
                    "search_products",
                    {"query": "milk", "location_id": "01400123", "limit": 2}
                )
                print("產品搜索結果:", product_results)
                
                # 示例:添加到購物車(需要在服務器中設置用戶認證令牌)
                # 確保 product_results[0] 存在且有 '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("添加到購物車結果:", cart_result)

    except Exception as e:
        print(f"發生錯誤: {e}")
    finally:
        await client.disconnect()

if __name__ == "__main__":
    # 如果你的客戶端庫使用 asyncio
    # import asyncio
    # asyncio.run(main())
    print("如果你的 MCP 客戶端庫需要,請使用 asyncio 事件循環運行異步 main() 函數。")

4. 與大語言模型的示例對話

用戶:“我需要兩加侖有機全脂牛奶和一打雞蛋,從 90210 附近的克羅格店購買。”

大語言模型(助手)內部步驟

  1. (可選:如果未提供或不明確,大語言模型詢問用戶的郵政編碼)
  2. 大語言模型調用 find_stores{"zip_code": "90210", "limit": 1}
    • 服務器返回店鋪詳情,例如 [{ "locationId": "01400123", "name": "比佛利山莊克羅格店", ... }]
  3. 大語言模型調用 search_products(搜索牛奶){"query": "organic whole milk", "location_id": "01400123", "limit": 5}
    • 服務器返回牛奶產品列表。大語言模型選擇一個,例如 {"productId": "0001111060404", "description": "Simple Truth 有機牛奶...", ...}
  4. 大語言模型調用 search_products(搜索雞蛋){"query": "dozen eggs", "location_id": "01400123", "limit": 3}
    • 服務器返回雞蛋產品列表。大語言模型選擇一個。
  5. (如果尚未完成,用戶必須完成購物車的授權)
  6. 大語言模型調用 add_to_cart(添加牛奶){"product_id": "0001111060404", "quantity": 2, "location_id": "01400123"}
    • 服務器確認添加。
  7. 大語言模型調用 add_to_cart(添加雞蛋){"product_id": "...", "quantity": 1, "location_id": "01400123"}
    • 服務器確認添加。

大語言模型(助手)回覆用戶:“好的,我找到了比佛利山莊克羅格店。我已經將兩加侖 Simple Truth 有機全脂牛奶和一打雞蛋添加到你的購物車中。還有其他需求嗎?”

📚 詳細文檔

5. 錯誤場景

  • 缺少用戶授權:如果你在用戶未授權應用程序的情況下嘗試使用 add_to_cart,該工具將返回錯誤:
{
  "error": "需要用戶認證。",
  "message": "未找到用戶訪問令牌。用戶需要授權該應用程序...",
  "action_needed": "用戶必須完成 OAuth2 授權流程。" 
}

大語言模型應引導用戶執行授權步驟(見第 1.2 節)。錯誤消息中可能會包含授權 URL。

  • 無效/過期的令牌:如果訪問令牌過期,AuthManager 將嘗試刷新它。如果刷新令牌也無效(例如,在 add_to_cart 出現 401 錯誤後針對用戶令牌),則需要重新授權。
  • API 速率限制:克羅格的 API 有速率限制(例如,見 developer.kroger.com/support/rate-limits/)。如果服務器達到這些限制,API 調用將失敗。服務器將返回來自克羅格的錯誤,通常狀態碼為 HTTP 429。大語言模型應告知用戶稍後再試。
  • 其他 API 錯誤:如果克羅格的 API 返回其他錯誤(例如,無效的產品 ID、根據 locationId 未找到店鋪),工具將返回一個包含 errordetailsstatus_code(來自克羅格的 HTTP 狀態)以及可能的 raw_responsekroger_error 字段的 JSON 字典。

6. 可用工具

服務器向大語言模型公開以下工具:

  • find_stores(zip_code: str, radius_miles: int = 10, limit: int = 5) -> list | dict
    • 描述:按郵政編碼查找克羅格店鋪位置(返回帶有 ID 的最近店鋪)。
  • search_products(query: str, location_id: str, limit: int = 10) -> list | dict
    • 描述:在給定店鋪按關鍵詞搜索克羅格產品。
  • get_product(product_id: str, location_id: str) -> dict
    • 描述:按 ID 獲取產品的詳細信息(價格、尺寸、庫存、配送選項)。
  • add_to_cart(product_id: str, quantity: int, location_id: str) -> dict
    • 描述:將產品添加到用戶的克羅格購物車(需要用戶認證)。

(以上描述基於 tools.py 中的 @tool 裝飾器)。

替代品

M
MCP
微軟官方MCP服務器,為AI助手提供最新微軟技術文檔的搜索和獲取功能
10.6K
5分
A
Aderyn
Aderyn是一個開源的Solidity智能合約靜態分析工具,由Rust編寫,幫助開發者和安全研究人員發現Solidity代碼中的漏洞。它支持Foundry和Hardhat項目,可生成多種格式報告,並提供VSCode擴展。
Rust
5.6K
5分
D
Devtools Debugger MCP
Node.js調試器MCP服務器,提供基於Chrome DevTools協議的完整調試功能,包括斷點設置、單步執行、變量檢查和表達式評估等
TypeScript
5.7K
4分
S
Scrapling
Scrapling是一個自適應網頁抓取庫,能自動學習網站變化並重新定位元素,支持多種抓取方式和AI集成,提供高性能解析和開發者友好體驗。
Python
9.0K
5分
M
Mcpjungle
MCPJungle是一個自託管的MCP網關,用於集中管理和代理多個MCP服務器,為AI代理提供統一的工具訪問接口。
Go
0
4.5分
C
Cipher
Cipher是一個專為編程AI代理設計的開源記憶層框架,通過MCP協議與各種IDE和AI編碼助手集成,提供自動記憶生成、團隊記憶共享和雙系統記憶管理等核心功能。
TypeScript
0
5分
N
Nexus
Nexus是一個AI工具聚合網關,支持連接多個MCP服務器和LLM提供商,通過統一端點提供工具搜索、執行和模型路由功能,支持安全認證和速率限制。
Rust
0
4分
S
Shadcn Ui MCP Server
一個為AI工作流提供shadcn/ui組件集成的MCP服務器,支持React、Svelte和Vue框架,包含組件源碼、示例和元數據訪問功能。
TypeScript
12.5K
5分
M
Markdownify MCP
Markdownify是一個多功能文件轉換服務,支持將PDF、圖片、音頻等多種格式及網頁內容轉換為Markdown格式。
TypeScript
20.7K
5分
B
Baidu Map
已認證
百度地圖MCP Server是國內首個兼容MCP協議的地圖服務,提供地理編碼、路線規劃等10個標準化API接口,支持Python和Typescript快速接入,賦能智能體實現地圖相關功能。
Python
27.0K
4.5分
F
Firecrawl MCP Server
Firecrawl MCP Server是一個集成Firecrawl網頁抓取能力的模型上下文協議服務器,提供豐富的網頁抓取、搜索和內容提取功能。
TypeScript
73.2K
5分
S
Sequential Thinking MCP Server
一個基於MCP協議的結構化思維服務器,通過定義思考階段幫助分解複雜問題並生成總結
Python
22.9K
4.5分
N
Notion Api MCP
已認證
一個基於Python的MCP服務器,通過Notion API提供高級待辦事項管理和內容組織功能,實現AI模型與Notion的無縫集成。
Python
11.8K
4.5分
C
Context7
Context7 MCP是一個為AI編程助手提供即時、版本特定文檔和代碼示例的服務,通過Model Context Protocol直接集成到提示中,解決LLM使用過時信息的問題。
TypeScript
49.9K
4.7分
M
Magic MCP
Magic Component Platform (MCP) 是一個AI驅動的UI組件生成工具,通過自然語言描述幫助開發者快速創建現代化UI組件,支持多種IDE集成。
JavaScript
16.9K
5分
E
Edgeone Pages MCP Server
EdgeOne Pages MCP是一個通過MCP協議快速部署HTML內容到EdgeOne Pages並獲取公開URL的服務
TypeScript
17.4K
4.8分
AIBase
智啟未來,您的人工智慧解決方案智庫
© 2025AIBase