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.
The API key is generated in your restaurant's admin panel.
💡 The same page also displays the Server URL (
https://api.meni.ge/mcp), which you can copy with one click.
Configuration file claude_desktop_config.json:
{
"mcpServers": {
"meni": {
"url": "https://api.meni.ge/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
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"
}
}
}
}
In your project's .vscode/mcp.json:
{
"servers": {
"meni": {
"type": "http",
"url": "https://api.meni.ge/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}
Detailed step-by-step instructions for Claude Desktop, Claude Code, Cursor, VS Code, Windsurf, Cline, Continue, ChatGPT and more — in a separate guide:
| 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) |
| 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 |
| 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 |
| 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) |
| Command | Description |
|---|---|
list_orders |
List orders (by userId or domain) |
get_order |
Details of a specific order |
| 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 |
| 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 |
| 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) |
| 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 |
| Command | Description |
|---|---|
cognito_list_users |
[ADMIN] List users from Cognito User Pool |
cognito_get_user |
[ADMIN] Get detailed Cognito user info |
| Command | Description |
|---|---|
get_system_stats |
[ADMIN] System-wide statistics |
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.
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.
Authorization: Bearer admin_key
The admin key grants full access to all users' data.
[ADMIN] are not available to regular users"Update the price of 'Khachapuri' in my menu — make it 15 GEL instead of 12"
AI will call my_locations → get_location_menu → update_menu_item.
"Add a new dish 'Churchkhela' for 8 GEL to the 'Desserts' category"
AI will call my_locations → get_location_menu → create_menu_item.
"Create a 'Drinks' category with Georgian and Russian translations"
AI will call create_menu_category with nameTranslations.
"Move 'Lemonade' from 'Cold Drinks' to 'Non-Alcoholic'"
AI will call move_menu_item specifying source and target categories.
"Show me my orders for today"
AI will call my_orders and filter by date.
"How does my menu look in Russian for visitors?"
AI will call resolve_domain → get_cdn_menu with language ru.
"Check if domain my-restaurant is available, and if so — set it"
AI will call check_domain_availability → set_location_domain.
"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.
| 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 |
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"
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!
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.
| 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> |