Integration Documentation for AI Clients (Claude, ChatGPT, Claude Code)
GastroKalk is a Swiss SaaS platform for the restaurant and hospitality industry (DACH region: Switzerland, Germany, Austria). Our MCP server exposes 159 tools that let AI assistants read, write, and automate across 28 restaurant management modules — from recipe costing and inventory to staff scheduling, POS, and supplier management.
The server implements JSON-RPC 2.0 over Streamable HTTP with full OAuth 2.1 authorization code flow (PKCE) and API key authentication. All 159 tools include safety annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint).
| Endpoint | https://mcp.gastrokalk.com/mcp |
| Protocol | MCP JSON-RPC 2.0 over Streamable HTTP |
| Tools | 159 (98 read-only, 61 write/workflow) |
| Auth | OAuth 2.1 (PKCE) + API Key (Bearer) |
| Plans | Starter (CHF 79/mo), Professional, Enterprise |
https://mcp.gastrokalk.com/mcp{
"mcpServers": {
"gastrokalk": {
"type": "http",
"url": "https://mcp.gastrokalk.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}/.well-known/oauth-authorization-server/api/oauth/authorize/api/oauth/token/api/oauth/register (Dynamic Client Registration)read, write, deleteAuthorization: Bearer mcp_live_...| Plan | Calls/Hour | Max Concurrent |
|---|---|---|
| Starter | 100 | 3 |
| Professional | 500 | 3 |
| Enterprise | 2,000 | 3 |
Every tool includes MCP safety annotations, auto-derived from the tool's category and behavior:
| Annotation | Count | Description |
|---|---|---|
readOnlyHint: true | 98 | Read/analysis tools that don't modify state |
destructiveHint: true | 61 | All write operations (create, update, delete, send) |
idempotentHint: true | 118 | All reads + update/toggle/mark operations |
openWorldHint: true | 5 | Email, service alerts, external sync |
"Show me all recipes where the food cost is above 35%. What can I do to bring them down?"
analyze_food_cost → search_recipes → suggest_price_optimization
Claude identifies 3 recipes above 35% food cost (e.g., Rindsfilet Cafe de Paris at 38.2%), analyzes ingredient costs, and suggests: (a) switch to a different beef cut (-12% cost), (b) adjust portion size from 200g to 180g, or (c) increase menu price by CHF 4. The response includes concrete numbers for each option.
"Compare prices for salmon across all my suppliers and create an order for 5 kg from the cheapest one."
compare_supplier_prices → search_ingredients → create_bestellung
Claude compares salmon prices: Merat AG at CHF 38.50/kg, Aligro at CHF 41.20/kg. Recommends Merat (saves CHF 13.50 on 5 kg). Creates a purchase order for 5 kg fresh salmon from Merat AG with next available delivery day (Monday or Wednesday).
"How many covers do we have booked for tomorrow evening? And what's the expected revenue based on our average spend per guest?"
get_reservations → predict_weekly_revenue → get_weather_forecast
Claude reports 5 confirmed reservations for 22 covers total (Familie Mueller: 4, Herr Schneider: 2, Firma Swiss Re: 8, Dr. Brunner: 2, plus 1 pending: Frau Keller: 6). With an average spend of CHF 65/guest, estimated revenue is CHF 1,430. Weather forecast is clear/18°C — suggests opening the terrace for additional walk-ins.
| marcel@gastrokalk.ch | |
| Phone | +41 76 801 53 30 |
| Support Page | gastrokalk.com/support |
| Response Time | 1–2 business days |
initialize — Handshake with protocol version negotiationtools/list — Discover available tools (filtered by auth). Default: curated food-cost catalog; full catalog via OAuth scope tools:fulltools/call — Execute a single tool (curated tools also return structuredContent)resources/list, resources/read, resources/templates/list — Recipes and supplier price listsprompts/list, prompts/get — Food-cost workflow promptsgastrokalk/batch — Execute up to 20 tools (GastroKalk extension; old name tools/batch is deprecated)gastrokalk/subscribe — Register webhooks for events (old name tools/subscribe is deprecated)ping — Health check14 event types available for real-time notifications:
reservation.created, .updated, .cancelledorder.created, .completedingredient.price_changed, .low_stockpos.order_completed, .day_closedlieferschein.received, inventur.completed, checklist.completedlead.created, .status_changedAll errors follow JSON-RPC 2.0 error format with German-language messages:
-32601 — Unknown tool or insufficient access-32602 — Invalid parameters-32000 — Rate limit / concurrency limit-32603 — Internal error (with reference ID for support)Transient errors (timeouts, DB connection issues) include a retryable: true flag in the tool result. Clients should retry after 2–3 seconds.