recipe-tools
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@recipe-toolsExtract recipe from scanned PDF and convert to structured HTML"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
recipe-tools
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-UnterstuetzungTool
get_recipe_prompt-- Rezept-Workflow fuer Clients die nur Tools unterstuetzenTool
select_image_regions_tool-- Web-GUI zur Bildausschnitt-Selektion mit OCR (oeffnet Browser automatisch)Tool
get_working_directory_tool-- Zeigt das Arbeitsverzeichnis anTool
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
Related MCP server: PDF MCP Flow
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.pyInstallation
uv installieren (einmalig)
# Option 1: winget
winget install astral-sh.uv
# Option 2: pip
pip install uvDanach 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 .githooksuv 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-serverOder als Modul:
uv run python -m recipe_processor.serverTests 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, TestsRelease (
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 --standaloneOeffnet 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.jpgHTML Builder
uv run python -m recipe_processor.tools.html_builder rezept.jsonErzeugt 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 |
| Arbeitsverzeichnis |
|
| Unterverzeichnis fuer Bilder (relativ zum Working Dir) |
|
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 PaprikaBekannte 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 |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lka/recipe-tools'
If you have feedback or need assistance with the MCP directory API, please join our Discord server