MCP Server — User Guide

What is it?

The MCP server (Model Context Protocol) for meni.ge 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.

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.meni.ge
  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.meni.ge/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.meni.ge/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_API_KEY"
      }
    }
  }
}

Cursor

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

{
  "mcpServers": {
    "meni": {
      "url": "https://api.meni.ge/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.meni.ge/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:

1. API Key (recommended for AI assistants)

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.meni.ge/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.meni.ge/mcp Server info + tool list
POST https://api.meni.ge/mcp MCP JSON-RPC (main protocol)
GET https://api.meni.ge/mcp/health Health check
POST https://api.meni.ge/mcp/auth/login Login → JWT tokens
GET https://api.meni.ge/mcp/api/keys List your API keys
POST https://api.meni.ge/mcp/api/keys Create a new API key
DELETE https://api.meni.ge/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.meni.ge/mcp/api/keys \
  -H "Authorization: Bearer COGNITO_JWT_TOKEN"

Creating a Key

curl -X POST https://api.meni.ge/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.meni.ge/mcp/api/keys/mk_abc123 \
  -H "Authorization: Bearer COGNITO_JWT_TOKEN"

⚠️ Creating and revoking keys requires a Cognito JWT token (not an API key). Use the admin panel — it's simpler.


Troubleshooting

Problem Solution
401 Unauthorized Check your API key. If revoked — create a new one
403 user identity required Use Cognito JWT for key management
🔒 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>