MCP שרת meni.ge — מדריך לאינטגרציה עם AI / GPT
מסמך זה מיועד לעוזרי AI, בוטי GPT ואינטגרציות אוטומטיות.
מכיל פרטים מדויקים על הפרוטוקול, סכמות כלים וזרימת אימות.
מידע על השרת
| מאפיין |
ערך |
| שם השרת |
meni-user-data-mcp |
| פרוטוקול |
MCP 2024-11-05 (Streamable HTTP) |
| תחבורה |
HTTP POST (stateless) |
| URL בסיסי |
https://api.meni.ge/mcp |
| Content-Type |
application/json |
| פורמט |
JSON-RPC 2.0 |
אימות
כל הקריאות לכלים דורשות כותרת Authorization.
אפשרות 1: מפתח MCP API למשתמש (מומלץ)
Authorization: Bearer mk_XXXXXXXXXXXX... (64 hex-סימנים)
קשור למשתמש ספציפי. הבוט רואה רק את הנתונים של המשתמש הזה.
אפשרות 2: Cognito JWT-טוקן
Authorization: Bearer eyJraWQi... (JWT id_token)
מתקבל דרך POST /auth/login. פג תוקף לאחר שעה אחת.
אפשרות 3: Admin API Key
Authorization: Bearer <admin_api_key>
גישה מלאה לכל הנתונים. מיועד למנהלים בלבד.
קבלת JWT-טוקן
POST https://api.meni.ge/mcp/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
תשובה:
{
"idToken": "eyJraWQi...",
"accessToken": "eyJraWQi...",
"refreshToken": "eyJjdHki...",
"expiresIn": 3600,
"tokenType": "Bearer"
}
פרוטוקול MCP
אתחול
POST https://api.meni.ge/mcp
Authorization: Bearer <token>
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": { "name": "my-bot", "version": "1.0" }
}
}
רשימת כלים
{ "jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {} }
קריאת כלי
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "שם_הכלי",
"arguments": { ... }
}
}
תשובה (הצלחה): result.content[0].text — מחרוזת JSON עם נתונים.
תשובה (שגיאה): result.isError: true, result.content[0].text — טקסט השגיאה.
נקודות קצה
| שיטה |
נתיב |
אימות |
תיאור |
GET |
/ |
אין |
מידע על השרת + רשימת כלים |
POST |
/ |
כן |
MCP JSON-RPC |
GET |
/health |
אין |
בדיקה → {"status":"ok"} |
POST |
/auth/login |
אין |
התחברות → JWT-טוקנים |
GET |
/api/keys |
JWT בלבד |
רשימת מפתחות API |
POST |
/api/keys |
JWT בלבד |
יצירת מפתח API |
DELETE |
/api/keys/{keyId} |
JWT בלבד |
ביטול מפתח API |
כל הנתיבים יחסיים ל-https://api.meni.ge/mcp.
מדריך כלים מלא
רמות גישה
- USER — זמין לכל המשתמשים המאומתים (נתונים על חשבונם)
- ADMIN — מנהלים בלבד (גישה מלאה)
שירות עצמי
| כלי |
גישה |
ארגומנטים |
whoami |
USER |
אין |
my_profile |
USER |
אין |
update_my_profile |
USER |
fields (object, חובה) |
my_locations |
USER |
אין |
my_orders |
USER |
limit (int, אופציונלי) |
my_images |
USER |
type (enum: all, menu-photos, category-photos, locations, אופציונלי) |
פרופילי משתמשים
| כלי |
גישה |
ארגומנטים |
list_users |
ADMIN |
limit (int, אופציונלי) |
get_user_profile |
USER/ADMIN |
userId (string, חובה) |
update_user_profile |
ADMIN |
userId (string, חובה), fields (object, חובה) |
search_user_by_email |
ADMIN |
email (string, חובה) |
מיקומים
| כלי |
גישה |
ארגומנטים |
list_locations |
USER/ADMIN |
userId (string, חובה) |
get_location_profile |
USER/ADMIN |
locationId (string, חובה), userId (string, אופציונלי — זיהוי אוטומטי למשתמשים רגילים) |
update_location_profile |
USER/ADMIN |
locationId (string, חובה), fields (object, חובה), userId (string, אופציונלי) |
get_location_menu |
USER/ADMIN |
locationId (string, חובה), language (string, אופציונלי), userId (string, אופציונלי) |
update_location_profile — שדות ניתנים לעדכון: displayName, phone, address, facebookUrl, instagramUrl, status, settings, workingHours. מסונכרן אוטומטית עם CDN. לשינוי דומיין השתמשו ב-set_location_domain.
תפריט
| כלי |
גישה |
ארגומנטים |
list_menu_items |
USER/ADMIN |
categoryId (string, אופציונלי — לנתונים מלאים), userId (string, אופציונלי) |
get_menu_item |
USER/ADMIN |
itemId (string, חובה), categoryId (string, אופציונלי — חיפוש אוטומטי), userId (string, אופציונלי) |
update_menu_item |
USER/ADMIN |
itemId (string, חובה), fields (object, חובה), categoryId (string, אופציונלי), userId (string, אופציונלי) |
create_menu_item |
USER/ADMIN |
locationId, categoryId, itemId, name (string, חובה), price (number, חובה), nameTranslations (object, אופציונלי), description (string, אופציונלי), status (enum, אופציונלי), sortOrder (number, אופציונלי), userId (string, אופציונלי) |
create_menu_category |
USER/ADMIN |
locationId, categoryId, name (string, חובה), nameTranslations (object, אופציונלי), status (enum, אופציונלי), sortOrder (number, אופציונלי), userId (string, אופציונלי) |
update_menu_category |
USER/ADMIN |
locationId, categoryId (string, חובה), name (string, אופציונלי), nameTranslations (object, אופציונלי), status (enum, אופציונלי), sortOrder (number, אופציונלי), userId (string, אופציונלי) |
move_menu_item |
USER/ADMIN |
locationId, itemId, fromCategoryId, toCategoryId (string, חובה), userId (string, אופציונלי) |
merge_categories |
USER/ADMIN |
locationId, sourceCategoryId, targetCategoryId (string, חובה), keepSourceName (bool, אופציונלי), userId (string, אופציונלי) |
delete_menu_category |
USER/ADMIN |
locationId, categoryId (string, חובה), force (bool, אופציונלי — מחיקה עם פריטים), userId (string, אופציונלי) |
update_menu_item — שדות ניתנים לעדכון: name, description, price, status, tags, variantGroups, addons, nameTranslations, descriptionTranslations, locationPrices, sortOrder. מסונכרן אוטומטית עם CDN.
הזמנות
| כלי |
גישה |
ארגומנטים |
list_orders |
USER/ADMIN |
userId (אופציונלי), domain (אופציונלי), limit (int, אופציונלי) |
get_order |
USER/ADMIN |
orderId (string, חובה), domain (string, אופציונלי), locationId (string, אופציונלי) |
דומיינים
| כלי |
גישה |
ארגומנטים |
check_domain_availability |
USER |
domainName (string, חובה), currentDomainName (string, אופציונלי) |
set_location_domain |
USER/ADMIN |
locationId (string, חובה), domainName (string, חובה) |
resolve_domain |
USER |
domain (string, חובה) |
list_domains |
ADMIN |
prefix (string, אופציונלי) |
CDN
| כלי |
גישה |
ארגומנטים |
get_cdn_profile |
USER |
domain (string, חובה) |
get_cdn_menu |
USER |
domain (string, חובה), language (string, חובה) |
list_cdn_files |
USER |
domain (string, חובה) |
invalidate_cdn_cache |
ADMIN |
paths (string[], חובה) |
תמונות
| כלי |
גישה |
ארגומנטים |
list_user_images |
USER/ADMIN |
userId (string, חובה), type (enum, אופציונלי) |
get_image_upload_url |
USER |
type (enum: menu-photos, category-photos, locations, חובה), itemId (string, אופציונלי), locationId (string, אופציונלי), filename (string, אופציונלי), contentType (enum, אופציונלי) |
delete_image |
USER/ADMIN |
key (string, חובה — מפתח S3 מלא ב-i.meni.ge) |
get_image_upload_url — מחזיר URL חתום מראש (15 דקות). לאחר ההעלאה, הפייפליין מייצר אוטומטית תמונות ממוזערות ומסנכרן עם CDN.
S3 (אחסון)
| כלי |
גישה |
ארגומנטים |
s3_read |
USER/ADMIN |
bucket (enum), key (string) — חובה. |
s3_write |
ADMIN |
bucket (enum: data.meni, cdn.meni.ge, o.meni.ge), key (string), data (object) — חובה. |
s3_list |
USER/ADMIN |
bucket (enum), prefix (string) — חובה., limit (int, אופציונלי) |
s3_delete |
ADMIN |
bucket (enum: data.meni, cdn.meni.ge, o.meni.ge), key (string) — חובה. |
Enum עבור bucket: data.meni, cdn.meni.ge, i.meni.ge, o.meni.ge
Cognito
| כלי |
גישה |
ארגומנטים |
cognito_list_users |
ADMIN |
filter (string, אופציונלי), limit (int, אופציונלי) |
cognito_get_user |
ADMIN |
username (string, חובה) |
מערכת
| כלי |
גישה |
ארגומנטים |
get_system_stats |
ADMIN |
אין |
בקרת גישה
- משתמשים רגילים — רק הנתונים שלהם (לפי userId)
- גישה ל-S3 מוגבלת לפי קידומת
users/{userId}/
- עבור כלים של מיקומים/תפריטים
userId מזוהה אוטומטית למשתמשים רגילים (רק מנהלים מציינים אותו)
- מנהלים בלבד:
list_users, search_user_by_email, update_user_profile, list_domains, invalidate_cdn_cache, s3_write, s3_delete, cognito_list_users, cognito_get_user, get_system_stats
- ניהול מפתחות (
/api/keys) דורש Cognito JWT
קודי שגיאות
| HTTP |
ערך |
200 |
הצלחה (בדוק result.isError עבור שגיאות כלים) |
400 |
JSON לא תקין או חסר שיטה |
401 |
אימות חסר או לא תקין |
405 |
שיטת HTTP לא נכונה |
| שגיאת כלי |
ערך |
🔒 admin access required |
נדרשת הרשאת מנהל |
🔒 access denied |
ניסיון גישה לנתונים של אחרים |
missing required argument: <name> |
פרמטר חובה לא נמסר |
unknown tool: <name> |
כלי לא ידוע |
דוגמת סשן
→ POST / {"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"bot","version":"1.0"}}}
← {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},"serverInfo":{"name":"meni-user-data-mcp","version":"1.0.0"}}}
→ POST / {"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"whoami","arguments":{}}}
← {"jsonrpc":"2.0","id":2,"result":{"content":[{"type":"text","text":"{\"userId\":\"abc-123\",\"email\":\"user@example.com\"}"}]}}
תצורת לקוח
Claude Desktop
{
"mcpServers": {
"meni": {
"url": "https://api.meni.ge/mcp",
"headers": { "Authorization": "Bearer <API_KEY>" }
}
}
}
cURL
curl -X POST https://api.meni.ge/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}}'