Recipe Tools
БесплатноНе проверенEnables extraction of recipes from PDFs or JPG files and conversion into structured HTML, with interactive region selection and OCR via a web GUI.
Описание
Enables extraction of recipes from PDFs or JPG files and conversion into structured HTML, with interactive region selection and OCR via a web GUI.
README
MCP-Server zur Rezept-Extraktion aus PDFs oder JPG-Dateien. Stellt Prompts und Tools bereit, mit denen ein LLM-Client (Claude Desktop, Cursor, etc.) gescannte Rezepte interaktiv in strukturierte HTML-Dateien umwandeln kann.
Funktionsweise
Der FastMCP-Server in server.py registriert alle Endpunkte zentral:
- Prompt
generate_recipe-- Rezept-Workflow fuer MCP-Clients mit Prompt-Unterstuetzung - Tool
get_recipe_prompt-- Rezept-Workflow fuer Clients die nur Tools unterstuetzen - Tool
select_image_regions_tool-- Web-GUI zur Bildausschnitt-Selektion mit OCR (oeffnet Browser automatisch) - Tool
get_working_directory_tool-- Zeigt das Arbeitsverzeichnis an - Tool
build_recipe_html_tool-- Erzeugt HTML aus strukturierten Rezeptdaten und aktualisiert den Index (erzeugtindex.htmlautomatisch aus Template, falls nicht vorhanden) - Tool
get_server_version-- Gibt die aktuelle Versionsnummer des Servers zurueck
Projektstruktur
recipe-tools/
├── pyproject.toml
├── README.md
├── CLAUDE.md
├── .flake8
├── src/
│ └── recipe_processor/
│ ├── __init__.py
│ ├── server.py # Zentraler MCP-Server (FastMCP)
│ ├── assets/
│ │ ├── Template.html # HTML-Template fuer einzelne Rezepte
│ │ └── index_template.html # HTML-Template fuer die Rezeptuebersicht
│ ├── core/
│ │ ├── __init__.py
│ │ ├── utils.py # Gemeinsame Utils (Pfade, Verzeichnisse)
│ │ └── recipes_index.py # Rezept-Index-Verwaltung (HTML-Manipulation)
│ └── tools/
│ ├── __init__.py
│ ├── prompt.py # RECIPE_PROMPT Konstante
│ ├── html_builder.py # HTML-Erzeugung aus Rezeptdaten
│ └── image_selector/
│ ├── __init__.py
│ ├── tools.py # Tool-Funktionen (select, list, get_dir)
│ ├── web_gui.py # Browser-GUI (FastAPI + HTML Canvas)
│ ├── gui.py # Tkinter-GUI (inaktiv, Backup)
│ ├── export.py # Region-Export + OCR
│ ├── pdf_utils.py # PDF-Bildextraktion (PyMuPDF)
│ └── utils.py # transform_coords (image_selector-spezifisch)
└── tests/
├── __init__.py
├── test_prompt.py
├── test_server.py
├── test_html_builder.py
├── test_image_selector_tools.py
├── test_web_gui.py
└── test_recipes_index.py
Installation
uv installieren (einmalig)
# Option 1: winget
winget install astral-sh.uv
# Option 2: pip
pip install uv
Danach Terminal neu starten, damit uv im PATH ist.
Umgebungsvariable setzen (einmalig, damit uv venv/ statt .venv/ verwendet)
[System.Environment]::SetEnvironmentVariable("UV_PROJECT_ENVIRONMENT", "venv", "User")
Danach Terminal neu starten.
Projekt einrichten
uv sync --extra dev
git config core.hooksPath .githooks
uv legt venv/ an, installiert alle Abhaengigkeiten und sperrt die genauen
Versionen in uv.lock. Der zweite Befehl aktiviert den pre-push Hook (laeuft
einmalig nach dem Klonen).
Voraussetzung
Tesseract OCR muss installiert und im PATH sein.
MCP-Server konfigurieren
Beispielkonfiguration fuer Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"recipe-server": {
"command": "path/to/venv/Scripts/recipe-server",
"env": {
"IMAGE_SELECTOR_WORKING_DIR": "C:/Rezepte",
"IMAGE_SUBDIRECTORY": "Eingang"
}
}
}
}
Server manuell starten
uv run recipe-server
Oder als Modul:
uv run python -m recipe_processor.server
Tests und Linting
uv run pytest
uv run flake8 src/ tests/
uv run black src/ tests/
Der pre-push Hook (.githooks/pre-push) fuehrt diese drei Schritte automatisch
vor jedem git push aus: black formatiert den Code, flake8 prueft auf Fehler,
pytest fuehrt die Tests aus. Hat black Aenderungen vorgenommen, wird der Push
abgebrochen -- die Formatierungen muessen dann noch committet werden.
CI/CD
Die GitHub Actions Workflows (.github/workflows/) verwenden ebenfalls uv:
- CI (
ci.yml): laeuft bei jedem Push und PR -- Linting, Formatierung, Tests - Release (
release.yml): erstellt bei Pushes aufmainautomatisch ein neues Release perpython-semantic-release, wenn konventionelle Commits vorhanden sind (feat:,fix:, etc.). Nach einem Release wirduv.lockautomatisch aktualisiert und mit[skip ci]committed.
uv.lock ist Teil des Repositories und sichert reproduzierbare Installs. Nach
einem git pull genuegt uv sync --extra dev, um die Umgebung zu aktualisieren.
Standalone-Modi (ohne MCP-Server)
Image Selector (Web-GUI)
uv run python -m recipe_processor.tools.image_selector.tools --standalone
Oeffnet die Browser-GUI automatisch. Laedt die .env-Datei automatisch (via python-dotenv).
Ohne Argumente werden Bilder aus IMAGE_SUBDIRECTORY geladen.
Optional kann ein Bildpfad direkt uebergeben werden:
uv run python -m recipe_processor.tools.image_selector.tools --standalone pfad/zum/bild.jpg
HTML Builder
uv run python -m recipe_processor.tools.html_builder rezept.json
Erzeugt eine HTML-Datei aus einer JSON-Datei mit Rezeptdaten. Die JSON-Datei
enthaelt die gleichen Felder wie die build_recipe_html-Funktion (recipe_name,
ingredients, instructions, etc.). Laedt die .env-Datei automatisch.
Umgebungsvariablen (.env)
| Variable | Beschreibung | Default |
|---|---|---|
IMAGE_SELECTOR_WORKING_DIR |
Arbeitsverzeichnis | os.getcwd() |
IMAGE_SUBDIRECTORY |
Unterverzeichnis fuer Bilder (relativ zum Working Dir) | "" (Working Dir selbst) |
Templates
Im Verzeichnis src/recipe_processor/assets/ liegen zwei HTML-Templates:
Template.html -- Vorlage fuer einzelne Rezept-HTML-Dateien. Platzhalter werden beim Erzeugen ersetzt:
Platzhalter Inhalt <RECIPE_NAME>,<TITLE>Rezeptname <SUBTITLE>Kurzbeschreibung <IMAGE_PATH>Relativer Bildpfad <PREP_TIME>,<COOK_TIME>,<WAIT_TIME>,<TOTAL_TIME>Zeitangaben (Text) <PREP_TIME_ISO>,<COOK_TIME_ISO>,<WAIT_TIME_ISO>,<TOTAL_TIME_ISO>Zeitangaben (ISO 8601) <PORTIONS>Portionsangabe <COOKWARE>Benoetigte Kuechengeraete (kommagetrennt) <INGREDIENTS>Zutatenliste als <ul><INSTRUCTIONS>Zubereitungsschritte als <ol><TIPS>Tipps und Hinweise <NUTRITION>Naehrwertangaben <SOURCE>Quellangabe index_template.html -- Vorlage fuer die Rezeptuebersicht (
index.html). Enthaelt den Platzhalter<CATEGORIES>, der durch die Kategorie-Sections ersetzt wird. Wird automatisch verwendet, wenn im Ausgangsverzeichnis noch keineindex.htmlexistiert.
Zutaten-Ueberschriften
Innerhalb der Zutatenliste koennen Ueberschriften mit dem Muster --- Text --- markiert werden. Diese werden automatisch in <b>Text</b> umgewandelt.
Zutaten mit gleicher Menge ("je"-Syntax)
Zutaten der Form je 1 TL Kreuzkuemmel und Chilipulver werden automatisch in
einzelne Eintraege mit gleicher Menge aufgesplittet:
je 1 TL Kreuzkümmel und Chilipulver → 1 TL Kreuzkümmel
1 TL Chilipulver
je 1 TL Salz, Pfeffer und Paprika → 1 TL Salz
1 TL Pfeffer
1 TL Paprika
Bekannte Einheiten: g, kg, mg, l, ml, cl, dl, EL, TL, Stk, Pck, Pkg, Pr, Prise, Msp, Bd, Bund.
Kuechengeraete (cookware)
Das optionale Feld cookware nimmt eine Liste von Geraeten entgegen und gibt sie
kommagetrennt im HTML-Abschnitt "Kuechengeraete" aus. Fehlt das Feld oder ist es leer,
wird der Abschnitt komplett ausgeblendet.
Optionale Felder und bedingte HTML-Bloecke
Die Felder prep_time, cook_time, wait_time, cookware, tips, nutrition
und source sind optional. Ist ein Feld leer, wird der zugehoerige HTML-Block
vollstaendig weggelassen (keine leere Ueberschrift im Output).
Abhaengigkeiten
| Paket | Zweck |
|---|---|
| fastmcp | MCP-Server-Framework |
| Pillow | Bildverarbeitung |
| PyMuPDF | PDF-Bildextraktion |
| pytesseract | OCR-Texterkennung |
| beautifulsoup4 | HTML-Parsing (Rezept-Index) |
| lxml | HTML-Parser-Backend fuer BeautifulSoup |
| python-dotenv | .env-Datei laden (Standalone-Modus) |
| fastapi | Web-Framework fuer Browser-GUI |
| uvicorn | ASGI-Server fuer Browser-GUI |
Установка Recipe Tools
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/lka/recipe-toolsFAQ
Recipe Tools MCP бесплатный?
Да, Recipe Tools MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Recipe Tools?
Нет, Recipe Tools работает без API-ключей и переменных окружения.
Recipe Tools — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Recipe Tools в Claude Desktop, Claude Code или Cursor?
Открой Recipe Tools на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Recipe Tools with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
