service-business-tools MCP
Erster MCP unter dem neuen Modell (Service mit Brain + MCPs, siehe ADR keine-eigene-plattform). Generisch — funktioniert fuer Restaurant, Friseur, Werkstatt, Praxis, Hotel, weil alle dasselbe Datenmodell haben (Reservierungen + Bestellungen + Service-Katalog).
Tools
| Tool | Zweck | Args | Storage |
|---|---|---|---|
book_reservation | Reservierung anlegen | date, time, guests, name, phone, notes? | SQLite reservations |
take_order | Telefonbestellung aufnehmen | items, customer_name, phone, address?, pickup_time? | SQLite orders |
get_services | Service-Katalog abfragen | — | statisch (Mock) |
Reservierungen und Bestellungen landen in einer lokalen SQLite-Datei
(data/orders.db, gitignored). Pro Insert wird eine kurze ID generiert
(RES-3F2A8C / ORD-52760E), die Bestaetigungs-Antwort an den Anrufer
enthaelt die ID bewusst NICHT (vermeidet ID-Vorlesen durch den Voice-Bot).
get_services ist noch Mock — kommt spaeter aus Markdown-KB pro Tenant.
Setup
cd intern/projekte/telefon-assistent-aws/tools-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp .env.example .env.local # dann TELEGRAM_BOT_TOKEN ausfuellen.env.local wird beim Server-Start automatisch via python-dotenv geladen.
Telegram-Push (Unit 1)
book_reservation und take_order triggern bei jedem erfolgreichen DB-Insert
eine Telegram-Nachricht im Standardformat (siehe agents-platform):
[Aylem Voice · 19:45]
✓ Reservierung RES-3F2A8C — 4P am 2026-05-17 um 19:00 — Mueller — 0170...
Bot-Token von @BotFather oder aus av-production Secrets Manager:
aws secretsmanager get-secret-value \
--secret-id agent-platform/telegram-bot-token \
--profile av-production \
--query SecretString --output textBei fehlendem Token loggt der Wrapper eine Warnung, Tool-Calls failen NICHT.
Run
Lokal als stdio-MCP (fuer Aylem-Worker)
source .venv/bin/activate
python server.pyWird vom LiveKit-Worker als Subprocess gestartet — siehe
../livekit-agent/agent.py.
DB inspizieren
sqlite3 -header -column data/orders.db "SELECT id, date, time, guests, name, phone, notes FROM reservations ORDER BY created_at DESC LIMIT 20;"
sqlite3 -header -column data/orders.db "SELECT id, customer_name, phone, items_json, address, pickup_time, status FROM orders ORDER BY created_at DESC LIMIT 20;"Pfad + Tenant ueberschreiben:
TOOLS_DB_PATH=/tmp/test.db TOOLS_TENANT=demo python server.pyTest mit MCP Inspector
npx @modelcontextprotocol/inspector python server.pyBrowser-UI auf http://localhost:5173, dort kannst du die Tools manuell aufrufen.
Test mit Claude Code
In .mcp.json (Project-scope):
{
"mcpServers": {
"service-business-tools": {
"command": "python",
"args": ["/Users/marvinkuehlmann/source/agentic-ventures/intern/projekte/telefon-assistent-aws/tools-mcp/.venv/bin/python", "server.py"],
"cwd": "/Users/marvinkuehlmann/source/agentic-ventures/intern/projekte/telefon-assistent-aws/tools-mcp"
}
}
}Dann in Claude Code: „buch mir einen Tisch fuer 4 am Samstag um 19 Uhr” — der MCP nimmt’s an, gibt Bestaetigung zurueck.
Phase B Roadmap (nach Aylem-POC)
- Lokale Persistenz fuer
book_reservation+take_order(SQLite, Phase A) - Telegram-Push bei jedem DB-Insert (Unit 1, 2026-05-13)
- Eskalations-Tool + escalations-Tabelle (Unit 5)
- Markdown-Knowledge-Base +
search_knowledge/get_menu/get_hours/get_allergens(Unit 2) - Verfuegbarkeits-Check (Unit 3)
- Multi-Tenant: Stammdaten + Chat-ID + Tonalitaet aus
knowledge/<tenant>/_meta.md(Unit 11) - DSGVO-Pre-Flight: AVV, Drittland, Retention, Loesch-CLI (Unit 12)
- HTTP/SSE-Transport fuer hosted Production (Fargate in av-production)
- DB-Backend swap-bar (Postgres in av-production, SQLite nur lokal)
Cross-Refs
- ADR Geschäftsmodell: keine-eigene-plattform
- Aylem-Plan: _index.md
- LiveKit-Worker (heute, Phase 0.6): livekit-agent