Skip to main content
Glama
KrivchenkoEgor

mcp-recipe-shopping-list

Recipe Shopping List — MCP 서버

다음을 수행할 수 있는 MCP 서버(Model Context Protocol)입니다:

  1. food.ru에서 레시피 읽기 — 링크로 재료, 조리 단계, 영양성분(KBJU)을 가져옵니다

  2. magnit.ru에서 상품 검색 — 특정 매장을 고려합니다

  3. 쇼핑 목록 작성 — 레시피에 맞는 상품을 가격과 함께 찾아 합계를 계산합니다

  4. 매장 정보 표시 — 매장 코드로 조회합니다

요약: 레시피 링크를 제공하면 Magnit의 가격과 상품으로 이동하는 직접 링크가 포함된 완성된 쇼핑 목록을 받게 됩니다.

🎓 학습용 프로젝트: 이 프로젝트는 소매 체인의 카테고리 매니저들에게 MCP 서버 구축을 교육하는 데 사용되었습니다. 아이디어와 기술 사양부터 AI 어시스턴트가 사용하는 작동하는 MCP 서버까지 전체 주기를 다루는 실용적인 사례입니다. 참가자들은 AI 에이전트의 도움을 받아 food.ru 레시피 파서, magnit.ru 상품 검색, 가격이 포함된 쇼핑 목록 등 작동하는 애플리케이션을 단 한 번의 수업 시간 안에 완성하며 긍정적인 결과를 얻습니다.

🌐 웹 버전: MCP 인터페이스 외에도 브라우저에서 실행되는 MCP 클라이언트가 필요 없는 로컬 웹 인터페이스가 있습니다. 다음 한 줄로 실행합니다:

./start.sh   # запустить и открыть страницу в браузере (http://127.0.0.1:8000)
./stop.sh    # остановить сервер

웹 버전에서는 레시피 링크를 붙여넣고 쇼핑 목록이 포함된 표를 받은 다음 Excel로 저장할 수 있습니다. 자세한 내용은 «웹 인터페이스» 섹션을 참조하세요.


설치

빠른 방법: install.py 설치 프로그램

install.py 스크립트(추가 설치가 필요 없는 Python 표준 라이브러리만 사용)가 가상 환경 생성, 종속성 및 Playwright용 브라우저 설치, .env 생성, 선택한 MCP 클라이언트에 서버 등록, 모든 것이 제대로 작동하는지 확인하는 작업을 모두 자동으로 수행합니다.

Python 3.11+가 필요합니다(uv 권장 — 설치 프로그램이 uv와 일반 Python을 모두 찾습니다).

python install.py      # или: python3 install.py

모든 플래그는 선택 사항입니다:

플래그

설명

--yes

모든 질문에 기본값으로 응답

--shop-code КОД

Magnit 매장 코드 (기본값: 543440)

--shop-type dostavka|supermarket|hypermarket

매장 유형 (기본값: dostavka)

--clients opencode,claude

서버를 등록할 MCP 클라이언트 (쉼표로 구분)

--no-browser

Chromium 브라우저를 다운로드하지 않음

--force

.venv를 다시 만들고 .env를 덮어씀

--check

환경만 확인하고 아무것도 변경하지 않음

--project ПУТЬ

프로젝트 폴더 (기본값: 설치 프로그램 폴더)

예:

python install.py --check              # проверка окружения без изменений
python install.py --yes                # установка «на все по умолчанию»
python install.py --shop-code 992301 --clients opencode,claude

수동 설치

Python 3.11+가 필요합니다(uv 권장).

# 1. Виртуальное окружение и зависимости
uv venv --python 3.11 .venv
uv pip install --python .venv/bin/python -r requirements.txt

# 2. Браузер для Playwright (оба сайта — SPA, без браузера никак)
.venv/bin/python -m playwright install chromium

# 3. Секреты
cp .env.example .env   # при необходимости поправь код магазина по умолчанию

Related MCP server: Recipe Commerce Intelligence MCP

실행

.venv/bin/python src/server.py

서버는 stdio를 통한 MCP 프로토콜로 작동합니다. 즉, AI 어시스턴트(Claude Desktop, LM Studio 등)가 호출하며, 그 자체로는 터미널에서 "조용히" 대기합니다.

웹 인터페이스

MCP 클라이언트를 연결하고 싶지 않은 사용자를 위한 로컬 웹 페이지입니다. 레시피 링크를 붙여넣으면 쇼핑 목록이 포함된 표와 Excel 저장 버튼을 얻을 수 있습니다.

실행 (서버가 브라우저에서 페이지를 자동으로 엽니다):

./start.sh     # запустить и открыть браузер
./stop.sh      # остановить сервер

서버가 실행 중일 때 ./start.sh를 다시 실행하면 페이지가 열립니다. 수동으로 (스크립트가 적합하지 않은 경우):

.venv/bin/python src/web/server.py

브라우저에서 엽니다: http://127.0.0.1:8000

페이지에서 할 수 있는 작업:

  • food.ru 레시피 링크를 붙여넣고 버튼을 누르면 서버가 쇼핑 목록을 수집합니다 (웹사이트 요청에 30~90초 소요, 로딩 표시기 표시)

  • 표 표시: 재료, 수량, Magnit 상품, 가격, 구매 수량, 합계, 상품 링크

  • «Excel로 저장» 버튼으로 목록을 Excel 파일로 저장

Excel 파일은 프로젝트 루트의 exports/ 폴더에 저장됩니다 (shopping_list_<레시피>_<날짜>.xlsx 형식).

OpenCode에 연결

~/.config/opencode/opencode.jsonc (전역) 또는 프로젝트 루트의 opencode.json에 mcp 섹션을 추가하세요. 형식이 Claude Desktop과 다릅니다 (mcp 키, command는 배열, 변수는 environment 사용):

{
  "mcp": {
    "recipe-shopping-list": {
      "type": "local",
      "command": [
        "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/.venv/bin/python",
        "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/src/server.py"
      ],
      "environment": {
        "MAGNIT_SHOP_CODE": "543440",
        "MAGNIT_SHOP_TYPE": "dostavka",
        "LOG_LEVEL": "INFO"
      },
      "enabled": true
    }
  }
}

OpenCode를 다시 시작하면 서버가 MCP 목록(앱의 /mcp 명령)에 나타납니다. OpenCode.app을 통한 설치에서 터미널(opencode mcp list)에서 확인하는 것은 Electron 래퍼이므로 작동하지 않습니다.

Claude Desktop에 연결

claude_desktop_config.json에 추가하세요 (경로는 절대 경여야 합니다):

{
  "mcpServers": {
    "recipe-shopping-list": {
      "command": "/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/.venv/bin/python",
      "args": ["/ПОЛНЫЙ/ПУТЬ/К/MCP_rec/src/server.py"],
      "env": {
        "MAGNIT_SHOP_CODE": "543440",
        "MAGNIT_SHOP_TYPE": "dostavka",
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

도구

도구

기능

parse_foodru_recipe(recipe_url)

food.ru 레시피: 재료, 단계, 영양성분

search_magnit_product(query, shop_code, shop_type, filters)

magnit.ru 상품 검색

get_shopping_list(recipe_url, shop_code, shop_type)

가격과 합계가 포함된 쇼핑 목록

get_shop_info(shop_code)

매장 정보

예시

«레시피입니다: https://food.ru/recipes/269806-sous-iz-iogurta-s-ukropom-i-chesnokom-1766588076»

에이전트가 get_shopping_list를 호출하고 다음을 반환합니다:

Греческий йогурт — 100г → Йогурт греческий Teos 2% 140г — 89,90 ₽ [ссылка]
Чеснок — 2 зубчик =10г → Чеснок свежий 100г — 45,00 ₽ [ссылка]
...
Итого: 356,70 ₽ · 6 товаров

테스트

빠른 로직 테스트 (웹사이트에 접속하지 않음 — 파서는 목(mock)으로 대체됨):

.venv/bin/python -m pytest tests/ -v

라이브 통합 테스트 — 실제로 Playwright를 통해 food.ru 및 magnit.ru를 열어 프로덕션 서버처럼 작동합니다 (약 1분, 요청 사이에 일시 중지 포함):

.venv/bin/python -m pytest -m integration -v

라이브 테스트 규칙: 사이트에 접속할 수 없으면(네트워크) 테스트를 건너뜁니다. 사이트가 응답했지만 구조가 다르면 테스트가 실패합니다(레이아웃이 변경된 것이므로 선택기를 업데이트하고 LESSONS.md에 교훈을 기록해야 합니다).

구조

src/
├── server.py                  # Точка входа MCP-сервера
├── tools/                     # MCP-инструменты (бизнес-логика)
├── integrations/              # Парсеры сайтов (Playwright)
├── models/                    # Pydantic-модели
├── utils/                     # Кэш, ограничитель запросов, валидаторы
└── config/                    # Настройки (.env) и селекторы

알아두어야 할 사항

  • 두 사이트(food.ru, magnit.ru) 모두 SPA입니다. 데이터는 JavaScript로 로드됩니다. 따라서 파서는 단순 HTTP 대신 Playwright(헤드리스 브라우저)를 통해 작동합니다.

  • 사이트 요청 사이에 2~5초의 일시 중지가 있으며 결과는 캐시됩니다(레시피는 24시간, 상품은 15분).

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Pepesto API — give your agent the ability to turn any recipe (a URL, plain text, or a photo) into a matched basket of real supermarket products with live prices, across 26 European supermarkets. The MCP covers the recipe → matched cart half of the grocery shopping workflow (parse / search / map ingredients to SKUs / check catalogs).
    7
    51 npm
    7
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Extracts branded ingredients and kitchen tools from recipes, matches them to affiliate products, and generates shoppable ingredient lists to turn recipes into affiliate revenue.
    3
    47 npm
    1
    MIT
  • F
    license
    B
    quality
    D
    maintenance
    Enables cross-store price comparison and recipe-driven cart automation for Israeli grocery stores Shufersal and Tiv Taam, with an extensible architecture for additional stores.
    14
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables automated weekly meal planning and grocery price comparison across Swedish supermarkets through a Claude/GPT interface.
    3
    MIT