MCP server pro AI strávníků
Připravili jsme MCP server – rozhraní (v podstatě API), přes které si ke svému účtu strávníka připojíte vlastního AI asistenta – třeba Claude nebo ChatGPT – a objednáváte obědy obyčejnou řečí: „Co je zítra k obědu?“, „Objednej mi na příští týden každý den první hlavní jídlo“, „Kolik mám kreditu?“. Asistent pracuje s vaším účtem podle stejných pravidel jako mobilní aplikace – stejné uzávěrky, ceny, limity i oprávnění. Nic, co byste v aplikaci udělat nemohli, neudělá ani asistent.
Adresa MCP serveru: https://www.objednavkaobedu.cz/mcp
Propojení funguje přes otevřený standard MCP (Model Context Protocol), který podporují běžné AI aplikace. Na straně Objednávky obědů nemusíte nic zapínat ani nastavovat – stačí se při připojení přihlásit svým účtem.
Pro AI asistenty a vývojáře: strojově čitelný popis v Markdownu – /mcp.md (všechny nástroje s parametry, oprávnění, chybové kódy; generuje se přímo ze serveru) a /llms.txt.
Co asistent umí
- Jídelníček – ukáže jídla na zvolené dny s cenami a informací, do kdy je lze objednat; stálou nabídku (saláty, nápoje…) i tisknutelný jídelníček v PDF.
- Objednávky – objedná jídlo, změní počet porcí, vybere přílohu, doplněk nebo balení, uloží poznámku pro kuchyň, změní výdejní (odběrné) místo na daný den. Umí i položky ze stálé nabídky a košík u jídelních lístků s platbou předem.
- Storno – zruší objednané jídlo celé nebo jen vybrané porce; u již zaplacených e-shopových objednávek (kde to firma povoluje) vrátí částku na kredit.
- Kredit a platby – řekne zůstatek, pohyby na kreditu, seznam dokladů a stáhne fakturu nebo doklad v PDF. Připraví dobití kreditu nebo úhradu košíku – samotnou platbu ale vždy dokončujete vy přes odkaz na platební bránu (nebo podle údajů pro převod).
- Profil – zobrazí a upraví vaše údaje (jméno, kontakty, adresu, fakturační údaje, nastavení upozornění) a umí změnit heslo.
- Zprávy – přečte zprávy od jídelny nebo firmy, upozorní na důležitou zprávu a označí ji jako přečtenou.
- Hodnocení jídel – zapíše vaše hodnocení snědeného jídla (hvězdičky a komentář), změní ho nebo smaže.
- Automatické objednávky – vypíše, přidá nebo zruší pravidla automatického objednávání.
- Zástup a propojené účty – pokud můžete objednávat za jiného strávníka (zástup) nebo máte propojené účty (např. děti), asistent s nimi umí pracovat stejně jako mobilní aplikace.
- Informace o jídelně – kontakt, uzávěrky, povolené platební metody, obchodní podmínky a zásady ochrany osobních údajů.
Které funkce jsou u vás k dispozici, záleží na nastavení vaší jídelny – stejně jako v mobilní aplikaci.
Jak asistenta připojit
Ve všech aplikacích se zadává stejná adresa serveru:
https://www.objednavkaobedu.cz/mcp
Přihlašovací jméno ani heslo do AI aplikace nezadáváte – aplikace vás při připojení přesměruje na přihlašovací stránku Objednávky obědů.
Claude (claude.ai, aplikace Claude pro počítač)
- Otevřete nastavení konektorů (v současné verzi Customize → Connectors, dříve Nastavení → Connectors).
- Klikněte na + / Add custom connector (přidat vlastní konektor).
- Jako název zadejte např. Objednávka obědů, jako adresu (URL)
https://www.objednavkaobedu.cz/mcp. Pokročilá nastavení (OAuth Client ID a Secret) nechte prázdná. - Klikněte na Add a potom Connect – otevře se přihlášení do Objednávky obědů (viz níže).
- V konverzaci ověřte, že je konektor zapnutý (nabídka nástrojů / konektorů u pole pro zprávu), a zeptejte se třeba „Co je tento týden k obědu?“.
Vlastní konektory jsou dostupné i v bezplatném tarifu (s omezeným počtem). U firemních tarifů (Team, Enterprise) je musí nejdřív povolit správce organizace. Konektor přidaný na webu pak obvykle funguje i v mobilní aplikaci Claude. Aktuální postup najdete v nápovědě Claude.
ChatGPT
- V nastavení ChatGPT zapněte režim pro vývojáře (Developer mode). Je dostupný na webu pro placené tarify; ve firemních tarifech ho musí povolit správce.
- V části s aplikacemi / konektory přidejte novou aplikaci (+) pro vzdálený MCP server.
- Zadejte adresu
https://www.objednavkaobedu.cz/mcpa jako způsob ověření zvolte OAuth (bez vlastního Client ID). - Dokončete přihlášení do Objednávky obědů a aplikaci v konverzaci zapněte.
ChatGPT se u akcí, které něco mění, sám ptá na potvrzení – to je navíc k potvrzení, které vyžaduje náš server. Aktuální postup najdete v dokumentaci OpenAI.
Jiná AI aplikace
Funguje každá aplikace, která umí připojit vzdálený MCP server (transport „Streamable HTTP“) s přihlášením přes OAuth. Zadejte adresu serveru, zbytek (registrace aplikace, přihlášení) proběhne automaticky. Technické podrobnosti jsou v části Pro vývojáře.
Přihlášení a povolení přístupu
- Přihlásíte se stejně jako do objednávkového systému – jménem a heslem, případně přes účet Microsoft, pokud se jím do systému přihlašujete. Máte-li více účtů, vyberete ten, ke kterému chcete asistenta připojit.
- Zobrazí se obrazovka Povolení přístupu k účtu. Zkontrolujte adresu aplikace, která o přístup žádá (název si aplikace uvádí sama, rozhodující je adresa – u Claude a ChatGPT jde o jejich vlastní domény).
- Projděte si oprávnění, o která aplikace žádá, a klikněte na Povolit přístup. Pokud jste připojení sami nespouštěli, klikněte na Odmítnout.
Oprávnění jsou čtyři:
| Oprávnění | Co asistent smí |
|---|---|
| Prohlížení | zobrazit jídelníčky, vaše objednávky, platby a zůstatek kreditu, zprávy a údaje vašeho profilu |
| Objednávky | objednávat a rušit jídla, upravovat objednávky (poznámka, příloha, doplněk, balení, výdejní místo), nastavovat automatické objednávky, hodnotit jídla a označovat zprávy jako přečtené |
| Platby | zakládat platby – dobití kreditu a úhradu košíku (i z vašeho kreditu); platbu kartou nebo převodem vždy dokončujete sami |
| Profil a heslo | měnit údaje vašeho profilu (jméno, kontakty, adresu, fakturační údaje, upozornění) a heslo k účtu |
Kterou část oprávnění aplikace požaduje, určuje AI aplikace. Bez oprávnění k dané oblasti asistent příslušné akce vůbec nevidí.
Přihlášení si prohlížeč pamatuje 14 dní, takže při dalším připojení (např. z jiné AI aplikace) už stačí jen potvrdit přístup. Pokud na obrazovce vidíte cizí účet, použijte tlačítko Nejsem to já – odhlásit.
Bezpečnost
- Nic se nezmění bez vašeho souhlasu. Před každou změnou (objednávka, storno, platba, úprava profilu…) vám asistent ukáže náhled – co se stane, kolik to bude stát a jaký bude zůstatek – a provede ji až po vašem výslovném potvrzení. Náhled nic neukládá.
- Obchodní podmínky za vás neodsouhlasí. Pokud je musíte nejdřív odsouhlasit, asistent vám dá odkaz na stránku, kde je potvrdíte sami.
- Platby dokončujete vy. Asistent připraví platbu a dá vám odkaz na platební bránu (nebo údaje pro převod). Údaje o platební kartě asistentovi nikdy nesdělujte a on si je ani nevyžádá.
- Jen váš účet. Asistent vidí a mění jen to, co vy v mobilní aplikaci – svůj účet, propojené účty a případný zástup. Heslo nikdy nevidí; při změně hesla použije přesně to, co mu napíšete.
- Odpojení. Připojené asistenty najdete ve webové objednávce v Úpravě profilu, v části Připojení AI asistenti – u každého je adresa aplikace, kdy byl připojen a naposledy aktivní a jaká oprávnění má. Tlačítkem Odpojit (nebo Odpojit vše) mu přístup okamžitě seberete. Odpojit ho můžete i v nastavení své AI aplikace (odebráním konektoru); nepoužívané připojení samo vyprší nejpozději po 30 dnech.
- Změna hesla odpojí všechny asistenty. Ať heslo změníte kdekoli (na webu, v mobilní aplikaci, přes asistenta, obnovou zapomenutého hesla nebo vám ho změní správce), všichni připojení asistenti okamžitě ztratí přístup a zruší se i zapamatované přihlášení v prohlížeči. Kdo asistenta dál chce používat, připojí ho znovu. Hodí se to i při ztrátě zařízení s přihlášenou AI aplikací.
Hlášení problémů
Když asistent narazí na chybu, která vypadá jako chyba systému, nebo mu řeknete, že něco nefunguje, může nám problém nahlásit sám – popíše, co dělal, co čekal a co se stalo. Hlášení nemá vliv na objednávky ani účet a asistent vám sdělí jeho číslo (např. MCP-123); to se hodí, pokud nás budete kontaktovat. O nahlášení ho můžete také výslovně požádat.
Obvyklá pravidla – prošlá uzávěrka, nízký kredit, jídlo, které už nelze objednat – chybou nejsou; asistent vám je vysvětlí stejně, jako by je zobrazila mobilní aplikace.
Případně se obraťte přímo na podporu: podpora@objednavkaobedu.cz.
Omezení
- Server běží jen na adrese
www.objednavkaobedu.cz. Pokud vaše jídelna používá vlastní doménu (white-label), připojte se přesto přes tuto adresu a přihlaste se svým běžným účtem. - Účet čekající na schválení (např. po registraci) nebo zablokovaný účet asistenta připojit nemůže – stejně jako se nemůže přihlásit do mobilní aplikace.
- Bez odsouhlasených obchodních podmínek (pokud je jídelna vyžaduje) nelze objednávat – asistent vám dá odkaz, kde je odsouhlasíte.
- Asistent je jen tak spolehlivý jako AI aplikace, kterou používáte. Před potvrzením si náhled vždy přečtěte.
Pro vývojáře
Technický popis pro ty, kdo MCP server připojují z vlastního klienta. Server vystupuje vždy jako jeden přihlášený strávník a volá stejnou logiku jako mobilní aplikace (API strávníka). Pro napojení firemních systémů slouží firemní API.
Endpoint a transport
- Endpoint:
https://www.objednavkaobedu.cz/mcp - Transport Streamable HTTP, JSON-RPC 2.0, protokol MCP
2025-06-18. JenPOSTs odpovědíapplication/json(bez SSE streamu,GETvrací 405). Server je bezstavový –Mcp-Session-Idnevydává. - Metody:
initialize,ping,tools/list,tools/call.initializevracíinstructionsaserverInfo.title„Objednávka obědů (BETA)“. - Každý požadavek nese
Authorization: Bearer <access token>. Bez platného tokenu HTTP 401 s hlavičkouWWW-Authenticateodkazující na metadata chráněného zdroje. Požadavky z prohlížeče s hlavičkouOriginmusí přicházet z povoleného původu.
Autorizace (OAuth 2.1)
- Metadata chráněného zdroje (RFC 9728):
/.well-known/oauth-protected-resource(i/.well-known/oauth-protected-resource/mcp). - Metadata autorizačního serveru (RFC 8414):
/.well-known/oauth-authorization-server– odtudauthorization_endpoint,token_endpoint,registration_endpoint,revocation_endpointajwks_uri. - Dynamická registrace klienta (RFC 7591):
POST /mcp-oauth/register, veřejný klient bez secretu. Limit 60 registrací za hodinu z jedné IP;client_namemax. 80 znaků. Registrace, přes které se nikdo nepřihlásil, se po 7 dnech mažou. - Grant authorization_code s povinným PKCE S256 (
plainani chybějícícode_challenge_methodse nepřijímá) a refresh_token. Parametrresource= adresa endpointu. - Životnost: autorizační kód 10 minut, access token 1 hodina (JWT RS256), refresh token 30 dní s rotací – opakované použití už vyměněného refresh tokenu zneplatní celé připojení.
- Odvolání tokenu (RFC 7009):
POST /mcp-oauth/revoke. - Změna hesla účtu zneplatní všechny jeho tokeny: access token vydaný před změnou dostane
401(WWW-Authenticate: … error="invalid_token") a refresh tokeny vydané před změnou už neprojdou. Strávník může připojení odebrat i sám v profilu na webu. V obou případech je potřeba nové přihlášení (authorization_code).
Oprávnění (scopes)
| Scope | Na obrazovce souhlasu | Nástroje |
|---|---|---|
mcp:ordering:read | Prohlížení | všechny čtecí nástroje a report_problem |
mcp:ordering:write | Objednávky | objednávky, storno, úpravy porcí, výdejní místo, automatické objednávky, hodnocení, přečtení zprávy |
mcp:payments:write | Platby | add_credit, basket_payment |
mcp:account:write | Profil a heslo | update_profile, change_password |
tools/list vrací jen nástroje, na které má token scope. Volání nástroje bez scope skončí HTTP 403, JSON-RPC chybou -32002 s data.required_scope a hlavičkou WWW-Authenticate: Bearer error="insufficient_scope", scope="…" (step-up: klient projde autorizací znovu s rozšířeným scope – refresh token nové scopes nepřidá).
Nástroje
| Nástroj | Co dělá | Scope |
|---|---|---|
| Jídelny a jídelníček (čtení) | ||
list_canteens | jídelní lístky, ze kterých lze objednávat (i propojených účtů), s nastavením objednávání | read |
list_accessible_canteens | zjednodušený seznam jídelních lístků vlastního účtu (id + název) | read |
get_canteen_info | detail jídelního lístku – adresa, uzávěrky, kontakty, platební volby | read |
get_organization_info | provozovatel stravování – kontakt, fakturační údaje, zapnuté funkce | read |
list_menu | jídelníček za období (max. 31 dní) s cenami, možností objednat a vlastními objednávkami | read |
permanent_offer_catalog | stálá nabídka na daný den | read |
menu_pdf | týdenní jídelníček v PDF | read |
| Objednávky | ||
order_history | objednávky za období (max. 31 dní) | read |
cancel_options | porce objednaného jídla (varianty podle přílohy, doplňku, balení) s indexy | read |
order_fee_rules | pravidla poplatků k objednávce | read |
basket_food | nezaplacený košík (jídelní lístek s platbou předem) | read |
basket_credit_preview | kolik z košíku pokryje kredit a kolik zbývá zaplatit | read |
place_order | objednání jídla – nastaví výsledný počet porcí (0 = odebrat); u platby předem vloží do košíku | ordering:write |
cancel_order | storno objednávky celé nebo vybraných porcí | ordering:write |
cancel_purchased | storno zaplacené e-shopové objednávky s vrácením na kredit | ordering:write |
save_order_note | poznámka pro kuchyň k objednávce | ordering:write |
set_supplement | výběr přílohy pro porci | ordering:write |
set_accessory | přidání / odebrání doplňku k porci | ordering:write |
set_packaging | výběr balení pro porci | ordering:write |
change_order_pickup_point | změna výdejního (odběrného) místa pro objednávky dne | ordering:write |
| Automatické objednávky | ||
list_auto_orders | pravidla automatického objednávání | read |
add_auto_order | přidání pravidla (nebo změna počtu porcí u existujícího) | ordering:write |
cancel_auto_order | smazání pravidla (už vytvořené objednávky zůstávají) | ordering:write |
| Kredit a platby | ||
get_balance | zůstatek kreditu a režim úhrad | read |
credit_movements | pohyby na kreditu za rok | read |
list_payments | doklady za rok (faktury, účtenky, dobití, dobropisy) | read |
payment_document | PDF dokladu | read |
add_credit | dobití kreditu – vrátí odkaz na platební bránu nebo údaje pro převod | payments:write |
basket_payment | úhrada košíku (nejdřív z kreditu, zbytek přes bránu) | payments:write |
| Účet a profil | ||
get_profile | profil strávníka | read |
list_linked_accounts | propojené účty a účty, za které lze jednat (zástup) | read |
get_conditions_document | obchodní podmínky nebo zásady GDPR (PDF nebo text) | read |
get_terms_acceptance_link | zda je třeba odsouhlasit podmínky + odkaz, kde to strávník udělá sám | read |
update_profile | úprava profilu (mění jen předaná pole) | account:write |
change_password | změna hesla | account:write |
| Zprávy | ||
list_messages | schránka zpráv s náhledem | read |
get_message | celý text zprávy (neoznačí ji jako přečtenou) | read |
get_important_message | nejnovější nepřečtená důležitá zpráva | read |
unread_message_count | počet nepřečtených zpráv | read |
mark_message_read | označení zprávy jako přečtené | ordering:write |
| Hodnocení jídel | ||
list_food_ratings | jídla, která lze hodnotit, s dosavadním hodnocením | read |
rate_food | hodnocení jídla (1–5 hvězdiček, komentář) | ordering:write |
remove_food_rating | smazání hodnocení | ordering:write |
snooze_food_rating_prompt | odložení výzvy k hodnocení („Teď ne“) | ordering:write |
| Ostatní | ||
report_problem | nahlášení problému vývojářům (BETA) – vrací report_id | read |
Zápisové nástroje: náhled → potvrzení
- Všechny nástroje se zápisovým scope mají argumenty
dry_run,confirma povinnýidempotency_key(16–128 znakůA–Z a–z 0–9 . _ : -). dry_run=trueoperaci provede a vrátí zpět – výsledek mástatus: "preview"a ukazuje cenu, výslednou objednávku a zůstatek; nic se neuloží a žádná platební brána se nekontaktuje. Volání bezconfirmvrátí totéž sestatus: "needs_confirmation".- Teprve
confirm=true(po výslovném souhlasu uživatele) změnu uloží. Opakování se stejnýmidempotency_keya stejnými argumenty vrátí původní výsledek a nic neprovede podruhé (žádná druhá objednávka ani platba); stejný klíč s jinými argumenty skončí chybouidempotency_conflict. - Platby:
add_creditabasket_paymentvrací odkaz na bránu nebo údaje pro převod – platbu dokončuje uživatel. Obchodní podmínky server přes MCP odsouhlasit neumožňuje.
Společné argumenty
lang– jazyk textů vrácených systémem (hlášky, chyby, přeložené názvy jídel), např.en,de,sk,uk,cs_CZ. Bez něj se použije jazyk z profilu strávníka; nepodporovaný jazyk vrátíinvalid_arguments.account_id– jednání za jiného strávníka v režimu zástupu (id zlist_linked_accounts→delegate_accounts). Nejde o přepnutí relace, argument se posílá u každého volání; oprávnění kontroluje stejná logika jako v mobilní aplikaci. Zprávy, hodnocení a úprava profilu či hesla jsou jen pro vlastní účet.child_account_id/company_id– propojené (dětské) účty; nástroje pro objednávání je vybírají podle jídelního lístku.
Chyby
Obchodní chyba nástroje přijde jako výsledek s isError: true (HTTP 200) a ve structuredContent má error (stabilní kód), message, případně detail (původní hláška systému v jazyce lang) a klíče beta + report s výzvou k report_problem. Nejčastější kódy:
| Kód | Význam |
|---|---|
deadline | uzávěrka pro objednání / změnu minula |
credit | nedostatečný kredit nebo neuhrazené doklady |
access | bez přístupu k jídelnímu lístku, účtu nebo zástupu |
terms_not_accepted | strávník musí odsouhlasit obchodní podmínky (viz get_terms_acceptance_link) |
soup_limit | limit polévek vůči hlavním chodům |
permanent_offer_date_required | stálá nabídka: chybí date_on |
not_found, rule_not_found, message_not_found, document_not_found | záznam nenalezen (nebo nepatří strávníkovi) |
not_rateable | jídlo už nelze hodnotit |
invalid_arguments, invalid_date, range_too_large, invalid_indexes | chybné argumenty; období max. 31 dní |
current_password_required, invalid_current_password | změna hesla: chybí / nesedí současné heslo |
idempotency_conflict, idempotency_busy | klíč použit s jinými argumenty / stejná operace právě probíhá |
too_large | dokument je příliš velký |
rate_limited | překročen limit (např. hlášení problémů) |
rejected, error | jiné odmítnutí systémem – důvod je v message / detail |
Chyby protokolu jsou standardní JSON-RPC: -32700 neplatný JSON, -32600 neplatný požadavek, -32601 neznámá metoda, -32602 neznámý nástroj nebo neplatné argumenty (podle JSON Schema nástroje), -32603 vnitřní chyba, -32002 chybějící scope (HTTP 403). Neplatný nebo prošlý token a zablokovaný či neschválený účet vrací HTTP 401.
Hlášení problémů a limity
report_problempřijímásummary,steps,expected,actuala volitelněerror_code,error_message,related_tool,request_ids,severity(low–critical) auser_reported. Text se ukládá očištěný (hesla, tokeny a čísla karet se maskují); nic neposílejte záměrně.- Limit hlášení: 10 za hodinu na strávníka.
- Dynamická registrace klientů: 60 za hodinu z jedné IP adresy.
Naposledy aktualizováno: