{"allTools":[{"description":"Show your authentication info: userId, email, role.","name":"whoami"},{"description":"Get your own user profile. No userId needed.","name":"my_profile"},{"description":"Update fields in your own profile.","name":"update_my_profile"},{"description":"List your own locations.","name":"my_locations"},{"description":"List your own orders.","name":"my_orders"},{"description":"List your own images with full URLs. Returns menu-photos, category-photos, and location images.","name":"my_images"},{"description":"[ADMIN] List all user folders in S3.","name":"list_users"},{"description":"Get user profile by userId.","name":"get_user_profile"},{"description":"Update user profile fields.","name":"update_user_profile"},{"description":"[ADMIN] Find a user by email via Cognito.","name":"search_user_by_email"},{"description":"List all locations for a user.","name":"list_locations"},{"description":"Get location profile with all settings. Returns: status (active/archived), displayName, phone, address, facebookUrl, instagramUrl, domainName, settings (currency, country, defaultLanguage, publicMenuEnabled, serviceChargeEnabled), workingHours (per day: closed, periods [{open, close}]).","name":"get_location_profile"},{"description":"Update location profile fields. Changes are synced to CDN automatically. Updatable fields: displayName, phone, address, facebookUrl, instagramUrl, status (active/archived), settings (currency, country, defaultLanguage, publicMenuEnabled, serviceChargeEnabled), workingHours ({monday..sunday}: {closed: bool, periods: [{open: 'HH:MM', close: 'HH:MM'}]}). Do NOT use this to change domainName — use set_location_domain instead.","name":"update_location_profile"},{"description":"Get full menu for a location with categories and enriched items (names, prices, translations). Use 'language' to get localized names.","name":"get_location_menu"},{"description":"List menu items. With categoryId: returns full item data (name, price, translations). Without: returns item/category ID pairs.","name":"list_menu_items"},{"description":"Get a single menu item with full details including name, description, price, translations, tags (flags), variantGroups (options/sizes), addons (extras), image info. If categoryId is unknown, the item is found automatically by searching all categories.","name":"get_menu_item"},{"description":"Update a menu item. Changes sync automatically to CDN and userprofile.json.\nUpdatable fields: name (string), description (string), price (number), status ('active'|'paused'|'archived'), tags (string[] — flags like 'vegan','spicy','gluten_free','popular','new','halal','kosher','sugar_free','lactose_free'), variantGroups ([{id,name,nameTranslations?,variants:[{id,name,nameTranslations?,price,isDefault?}]}] — options like sizes/types), addons ([{id,name,nameTranslations?,price}] — extras like 'Extra cheese'), nameTranslations ({lang:text}), descriptionTranslations ({lang:text}), locationPrices ({locationId:price}), sortOrder (number).\nIf categoryId is omitted, the item is found automatically across all categories.","name":"update_menu_item"},{"description":"Create a new menu item in a category. The category must already exist (use create_menu_category first). Also adds the item stub to menu.location.json.","name":"create_menu_item"},{"description":"Create a new menu category for a location. Also adds it to menu.location.json.","name":"create_menu_category"},{"description":"Update an existing menu category. Can change name, nameTranslations, status, or sortOrder. Updates group-item.json (global + user), menu.location.json, and userprofile.json.","name":"update_menu_category"},{"description":"Move a menu item from one category to another. Updates menu.location.json and userprofile.json.","name":"move_menu_item"},{"description":"Merge source category into target category. Moves ALL items from source to target (both .menu-item.json files and stubs in menu.location.json / userprofile.json), merges nameTranslations, then deletes the source category. This is an atomic operation that updates all data stores consistently.","name":"merge_categories"},{"description":"Delete a menu category. Removes it from menu.location.json, userprofile.json, and deletes group-item.json files. Fails if category still has items — use merge_categories or move items first.","name":"delete_menu_category"},{"description":"List orders by userId or domain.","name":"list_orders"},{"description":"Get order details. Provide domain (e.g. UKRAINOCHKA) or locationId to locate the order.","name":"get_order"},{"description":"Check if a domain name is available for use. Validates format (3-63 chars, lowercase alphanumeric and hyphens) and checks if it's already taken. Returns available: true/false with reason.","name":"check_domain_availability"},{"description":"Change the domain name of a location. Validates availability, updates profile, renames CDN files, and updates domain mappings. Domain must be 3-63 chars, lowercase alphanumeric and hyphens only.","name":"set_location_domain"},{"description":"[ADMIN] List all registered domains.","name":"list_domains"},{"description":"Resolve a domain to userId + locationId.","name":"resolve_domain"},{"description":"Get published (CDN) location profile.","name":"get_cdn_profile"},{"description":"Get published menu for a location.","name":"get_cdn_menu"},{"description":"List all published CDN files for a domain.","name":"list_cdn_files"},{"description":"[ADMIN] Invalidate CloudFront CDN cache.","name":"invalidate_cdn_cache"},{"description":"List all images for a user.","name":"list_user_images"},{"description":"Get a presigned URL to upload an image directly to S3. The URL is valid for 15 minutes. After uploading, the image processing pipeline will automatically generate thumbnails and sync to CDN. Supported content types: image/jpeg, image/png, image/webp.","name":"get_image_upload_url"},{"description":"Delete an image from the images bucket (i.meni.ge). Users can only delete their own images.","name":"delete_image"},{"description":"Read S3 object. Users restricted to own prefix.","name":"s3_read"},{"description":"[ADMIN] Write JSON data to S3.","name":"s3_write"},{"description":"List S3 objects. Users restricted to own prefix.","name":"s3_list"},{"description":"[ADMIN] Delete an S3 object.","name":"s3_delete"},{"description":"[ADMIN] List users from Cognito User Pool.","name":"cognito_list_users"},{"description":"[ADMIN] Get detailed Cognito user info.","name":"cognito_get_user"},{"description":"Get the list of languages currently enabled in the user's application (enabledLanguages) and their display order (languagesOrder). Also returns all available languages that can be added. Use this before adding or reordering languages.","name":"get_my_languages"},{"description":"Enable or disable languages in the user's application. Pass the full list of language codes that should be enabled. Codes must be from the known list (ka, en, ru, tr, hy, zh, hi, es, fr, ar, bn, pt, id, ur, de, ja, ko, vi, it, pl, uk, fa, he, az, kk, uz, ab, sq, sr, mk, bg, ro, el, nl, mt, sv, no, da, fi, cs, hu, hr, lt, th, ms). Use get_my_languages first to see what's currently enabled.","name":"set_my_languages"},{"description":"Change the display order of languages. Pass the languages in the desired order. Languages not included will be appended at the end. Use get_my_languages first to see the current order.","name":"reorder_my_languages"},{"description":"Check which translations are missing for menu items and categories in a location. Returns a detailed report grouped by language showing which categories and items lack translations. Use update_menu_item (fields: nameTranslations, descriptionTranslations) and update_menu_category (nameTranslations) to fill in the missing translations.","name":"check_translations"},{"description":"[ADMIN] System-wide statistics.","name":"get_system_stats"},{"description":"Set the regular weekly working schedule for a location. Can set hours for individual days or apply the same schedule to multiple days at once. Each day: {closed: bool, periods: [{open: 'HH:MM', close: 'HH:MM'}]}. To set same hours Mon-Fri: use days=[\"monday\",...,\"friday\"] with a single schedule object. Unspecified days are unchanged. Use closed:true for days off.","name":"set_working_hours"},{"description":"List all schedule exceptions (special dates, holidays, closures) for a location. Each exception: {id, date (YYYY-MM-DD), timeFrom (HH:MM), timeTo (HH:MM), isClosed (bool)}.","name":"list_schedule_exceptions"},{"description":"Add a schedule exception for a specific date (holiday, closure, special hours). Examples: 'closed tomorrow' → isClosed:true; 'open until 4am on New Year' → timeFrom:'00:00',timeTo:'04:00'. date must be YYYY-MM-DD. If an exception for this date already exists it will be replaced.","name":"add_schedule_exception"},{"description":"Remove a schedule exception by date or exception ID.","name":"remove_schedule_exception"}],"auth":{"loginFlow":"1) POST /auth/login  2) Use idToken → Authorization: Bearer \u003ctoken\u003e  3) POST /mcp","methods":["Bearer \u003ccognito-id-token\u003e  (user scope)","Bearer \u003cadmin-api-key\u003e     (admin scope)","ApiKey \u003cadmin-api-key\u003e     (admin scope)"]},"authRequired":true,"endpoints":{"health":"GET /health","info":"GET /","login":"POST /auth/login  { email, password } → tokens","mcp":"POST /mcp  (JSON-RPC, requires Authorization)"},"name":"Meni User Data MCP Server","runtime":"go-lambda","selfServiceTools":[{"description":"Show your authentication info: userId, email, role.","name":"whoami"},{"description":"Get your own user profile. No userId needed.","name":"my_profile"},{"description":"Update fields in your own profile.","name":"update_my_profile"},{"description":"List your own locations.","name":"my_locations"},{"description":"List your own orders.","name":"my_orders"},{"description":"List your own images with full URLs. Returns menu-photos, category-photos, and location images.","name":"my_images"}],"transport":"Streamable HTTP (POST /mcp)","version":"1.0.0"}