M cenaly.ru
🔗 Integrations

🤖 MCP Server — User Guide

How to connect AI assistants (Claude, ChatGPT, Cursor) to your restaurant data

Documentation

MCP Server — User Guide

What is it?#

The MCP server (Model Context Protocol) for cenaly.ru allows you to connect AI assistants (Claude, ChatGPT, Cursor, VS Code Copilot, etc.) to your restaurant data. The AI gets access to your menu, locations, orders, images and can manage them on your behalf.

⚠️ There is no MCP server in the Russian contour. It runs in the platform's main contour; on cenaly.ru it was never deployed, so the "MCP API Keys" section is no longer shown in Settings there (it used to be shown and offered an address that replied "not found"). In every other contour the server works; if your account lives outside the main contour, you may not see your own data there yet — splitting the storage per contour is in progress.

Quick Start#

1. Get an API Key#

The API key is generated in your restaurant's admin panel.

Step by step:#

  1. Log in to the Admin Panel at admin.cenaly.ru
  2. In the sidebar menu, go to ⚙️ Settings🔑 Access
  3. Find the 🤖 MCP API Keys section on the page
  4. Click the "Generate New Key" button
  5. Enter a key name (e.g., "Claude Desktop", "Cursor", "My GPT") — this helps distinguish keys from each other
  6. Copy the key immediately — it is shown only once!

💡 The same page also displays the Server URL (https://api.cenaly.ru/mcp), which you can copy with one click.

Managing Keys#

  • You can create up to 10 keys per account
  • Each key can be revoked at any time — use the "Revoke" button next to the key
  • Once revoked, the key stops working immediately
  • If a key is lost — revoke it and create a new one

2. Connect Your AI Assistant#

Claude Desktop / Claude Code#

Configuration file claude_desktop_config.json:

{
  "mcpServers": {
    "meni": {
      "url": "https://api.cenaly.ru/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Cursor#

In Cursor settings → MCP Servers → Add, or create .cursor/mcp.json:

{
  "mcpServers": {
    "meni": {
      "url": "https://api.cenaly.ru/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

VS Code (GitHub Copilot)#

In your project's .vscode/mcp.json:

{
  "servers": {
    "meni": {
      "type": "http",
      "url": "https://api.cenaly.ru/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Other AI Tools#

Detailed step-by-step instructions for Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Cline, Continue, ChatGPT and more — in a separate guide:

👉 Connect AI Tools to MCP


What Can the AI Assistant Do?#

For Restaurant Owners (Regular Users)#

Command Description
whoami Show account details (userId, email, role)
my_profile Get your user profile
update_my_profile Update fields in your profile
my_locations List all your locations
my_orders List your orders
my_images List your images (menu, categories, locations)

User Profiles#

Command Description
get_user_profile Get a user profile by userId
update_user_profile Update user profile fields
list_users [ADMIN] List all users
search_user_by_email [ADMIN] Find a user by email via Cognito

Working with Locations#

Command Description
list_locations All locations for a user
get_location_profile Location profile (name, address, hours, settings)
update_location_profile Update location settings (auto-synced to CDN)
get_location_menu Full menu for a location with categories and items

Working with Menus#

Command Description
list_menu_items All menu items (with categoryId — full data, without — item/category ID pairs)
get_menu_item Get an item with full details (translations, variants, addons)
update_menu_item Update a menu item (price, description, status, tags, variants, addons)
create_menu_item Create a new menu item in a category
create_menu_category Create a new menu category
update_menu_category Update a category (name, translations, status, sort order)
move_menu_item Move a menu item from one category to another
merge_categories Merge two categories (all items are moved, source is deleted)
delete_menu_category Delete a category (with force: true — including all items)

Orders#

Command Description
list_orders List orders (by userId or domain)
get_order Details of a specific order

Domains#

Command Description
check_domain_availability Check if a domain name is available
set_location_domain Change a location's domain name (updates CDN and mappings)
resolve_domain Find userId and locationId by domain
list_domains [ADMIN] List all registered domains

CDN (Published Data)#

Command Description
get_cdn_profile Published location profile (on CDN)
get_cdn_menu Published menu in a specific language
list_cdn_files All published files for a domain
invalidate_cdn_cache [ADMIN] Invalidate CloudFront CDN cache

Images#

Command Description
list_user_images All images for a user
get_image_upload_url Get a presigned URL to upload an image to S3 (JPEG/PNG/WebP)
delete_image Delete an image (users can only delete their own)

Low-level S3 Access#

Command Description
s3_read Read a file from S3 (users can access only their own)
s3_write [ADMIN] Write JSON data to S3
s3_list List files in S3 (users can access only their own prefix)
s3_delete [ADMIN] Delete an S3 object

Cognito#

Command Description
cognito_list_users [ADMIN] List users from Cognito User Pool
cognito_get_user [ADMIN] Get detailed Cognito user info

Statistics#

Command Description
get_system_stats [ADMIN] System-wide statistics

Authentication#

The server supports three authentication methods:

Authorization: Bearer your_64_character_key

The key is generated in the admin panel. It is bound to your account — the AI sees only your data.

2. Cognito JWT Token#

For programmatic integration, you can obtain a token via login:

# Get token
curl -X POST https://api.cenaly.ru/mcp/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email": "your@email.com", "password": "your_password"}'

# The response contains idToken — use it:
Authorization: Bearer eyJraWQ...

The token is valid for 1 hour, after which you need to log in again.

3. Admin API Key (administrators only)#

Authorization: Bearer admin_key

The admin key grants full access to all users' data.


Security#

  • Each API key is bound to a specific account
  • Regular users can see only their own data
  • A key can be revoked at any time in the admin panel
  • Maximum of 10 keys per account
  • All requests use HTTPS
  • Commands marked [ADMIN] are not available to regular users

Usage Examples#

Ask AI to update a dish price#

"Update the price of 'Khachapuri' in my menu — make it 15 GEL instead of 12"

AI will call my_locationsget_location_menuupdate_menu_item.

Add a new item to the menu#

"Add a new dish 'Churchkhela' for 8 GEL to the 'Desserts' category"

AI will call my_locationsget_location_menucreate_menu_item.

Create a new category#

"Create a 'Drinks' category with Georgian and Russian translations"

AI will call create_menu_category with nameTranslations.

Move an item between categories#

"Move 'Lemonade' from 'Cold Drinks' to 'Non-Alcoholic'"

AI will call move_menu_item specifying source and target categories.

View today's orders#

"Show me my orders for today"

AI will call my_orders and filter by date.

Check the published menu#

"How does my menu look in Russian for visitors?"

AI will call resolve_domainget_cdn_menu with language ru.

Change the restaurant domain#

"Check if domain my-restaurant is available, and if so — set it"

AI will call check_domain_availabilityset_location_domain.

Upload a dish photo#

"Give me a link to upload a photo for dish X"

AI will call get_image_upload_url and return a presigned URL for uploading.


API Endpoints#

Method URL Description
GET https://api.cenaly.ru/mcp Server info + tool list
POST https://api.cenaly.ru/mcp MCP JSON-RPC (main protocol)
GET https://api.cenaly.ru/mcp/health Health check
POST https://api.cenaly.ru/mcp/auth/login Login → JWT tokens
GET https://api.cenaly.ru/mcp/api/keys List your API keys
POST https://api.cenaly.ru/mcp/api/keys Create a new API key
DELETE https://api.cenaly.ru/mcp/api/keys/{id} Revoke an API key

Key Management#

Viewing Keys#

In Admin Panel → Settings → Access → MCP API Keys. Or via API:

curl https://api.cenaly.ru/mcp/api/keys \
  -H "Authorization: Bearer COGNITO_JWT_TOKEN"

Creating a Key#

curl -X POST https://api.cenaly.ru/mcp/api/keys \
  -H "Authorization: Bearer COGNITO_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Claude Desktop"}'

The response contains a key field — that is your key. Save it!

Revoking a Key#

curl -X DELETE https://api.cenaly.ru/mcp/api/keys/mk_abc123 \
  -H "Authorization: Bearer COGNITO_JWT_TOKEN"

Keys can be managed with either a Cognito JWT or your own MCP key (substitute it for COGNITO_JWT_TOKEN in the examples above). Only the administrator key does not work here: it is not bound to a specific user, so the server answers 403 user identity required. The admin panel is still the simplest route.


Troubleshooting#

Problem Solution
401 Unauthorized Check your API key. If revoked — create a new one
403 user identity required Key management runs on behalf of a user: use your own MCP key or a Cognito JWT — the administrator key does not work here
🔒 admin access required This command is for administrators only
🔒 access denied You are trying to access another user's data
Key doesn't work Check that the key hasn't been revoked, and format: Bearer <key>