Serveri MCP menugo.al — Udhëzues për integrimin e AI / GPT
Ky dokument është i destinuar për asistentët AI, bot-et GPT dhe integrimet automatike.
Përmban detaje të sakta të protokollit, skemat e mjeteve dhe fluksin e autentifikimit.
Informacioni i serverit
| Vetia |
Vlera |
| Emri i serverit |
meni-user-data-mcp |
| Protokolli |
MCP 2024-11-05 (Streamable HTTP) |
| Transporti |
HTTP POST (stateless) |
| URL bazë |
https://api.menugo.al/mcp |
| Content-Type |
application/json |
| Formati |
JSON-RPC 2.0 |
Autentifikimi
Të gjitha thirrjet e instrumenteve kërkojnë header-in Authorization.
Opsioni 1: Çelësi API MCP i përdoruesit (rekomandohet)
Authorization: Bearer mk_XXXXXXXXXXXX... (64 hex-символа)
Është i lidhur me një përdorues specifik. Boti sheh vetëm të dhënat e këtij përdoruesi.
Opsioni 2: Token JWT Cognito
Authorization: Bearer eyJraWQi... (JWT id_token)
Përftohet përmes POST /auth/login. Skadon pas 1 ore.
Opsioni 3: Admin API Key
Authorization: Bearer <admin_api_key>
Akses i plotë në të gjitha të dhënat. Vetëm për administratorët.
Marrja e tokenit JWT
POST https://api.menugo.al/mcp/auth/login
Content-Type: application/json
{
"email": "user@example.com",
"password": "password123"
}
Përgjigjja:
{
"idToken": "eyJraWQi...",
"accessToken": "eyJraWQi...",
"refreshToken": "eyJjdHki...",
"expiresIn": 3600,
"tokenType": "Bearer"
}
Protokolli MCP
Inicializimi
POST https://api.menugo.al/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" }
}
}
Lista e instrumenteve
{ "jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {} }
Thirrja e instrumentit
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "имя_инструмента",
"arguments": { ... }
}
}
Përgjigjja (sukses): result.content[0].text — string JSON me të dhëna.
Përgjigjja (gabim): result.isError: true, result.content[0].text — teksti i gabimit.
Endpoint-et
| Metoda |
Shtegu |
Autorizimi |
Përshkrimi |
GET |
/ |
Jo |
Informacion mbi serverin + lista e mjeteve |
POST |
/ |
Po |
MCP JSON-RPC |
GET |
/health |
Jo |
Kontrolli → {"status":"ok"} |
POST |
/auth/login |
Jo |
Hyrja → Token-at JWT |
GET |
/api/keys |
Vetëm JWT |
Lista e çelësave API |
POST |
/api/keys |
Vetëm JWT |
Krijo çelës API |
DELETE |
/api/keys/{keyId} |
Vetëm JWT |
Revoko çelësin API |
Të gjitha shtigjet janë relative ndaj https://api.menugo.al/mcp.
Udhëzuesi i plotë i mjeteve
Nivelet e aksesit
- USER — E disponueshme për të gjithë përdoruesit e autorizuar (të dhënat për llogarinë e tyre)
- ADMIN — Vetëm administratorët (akses i plotë)
Vetëshërbimi
| Mjeti |
Aksesi |
Argumentet |
whoami |
USER |
asnjë |
my_profile |
USER |
asnjë |
update_my_profile |
USER |
fields (object, i detyrueshëm) |
my_locations |
USER |
asnjë |
my_orders |
USER |
limit (int, opsional) |
my_images |
USER |
type (enum: all, menu-photos, category-photos, locations, opsional) |
Profilet e përdoruesve
| Mjeti |
Aksesi |
Argumentet |
list_users |
ADMIN |
limit (int, opsional) |
get_user_profile |
USER/ADMIN |
userId (string, i detyrueshëm) |
update_user_profile |
ADMIN |
userId (string, i detyrueshëm), fields (object, i detyrueshëm) |
search_user_by_email |
ADMIN |
email (string, i detyrueshëm) |
Lokacionet
| Mjeti |
Aksesi |
Argumentet |
list_locations |
USER/ADMIN |
userId (string, i detyrueshëm) |
get_location_profile |
USER/ADMIN |
locationId (string, i detyrueshëm), userId (string, opsional — përcaktim automatik për përdoruesit e thjeshtë) |
update_location_profile |
USER/ADMIN |
locationId (string, i detyrueshëm), fields (object, i detyrueshëm), userId (string, opsional) |
get_location_menu |
USER/ADMIN |
locationId (string, i detyrueshëm), language (string, opsional), userId (string, opsional) |
update_location_profile — fushat që mund të përditësohen: displayName, phone, address, facebookUrl, instagramUrl, status, settings, workingHours. Sinkronizohet automatikisht me CDN. Për të ndryshuar domenin, përdorni set_location_domain.
Menu
| Mjeti |
Aksesi |
Argumentet |
list_menu_items |
USER/ADMIN |
categoryId (string, opsional — për të dhëna të plota), userId (string, opsional) |
get_menu_item |
USER/ADMIN |
itemId (string, i detyrueshëm), categoryId (string, opsional — kërkim automatik), userId (string, opsional) |
update_menu_item |
USER/ADMIN |
itemId (string, i detyrueshëm), fields (object, i detyrueshëm), categoryId (string, opsional), userId (string, opsional) |
create_menu_item |
USER/ADMIN |
locationId, categoryId, itemId, name (string, i detyrueshëm), price (number, i detyrueshëm), nameTranslations (object, opsional), description (string, opsional), status (enum, opsional), sortOrder (number, opsional), userId (string, opsional) |
create_menu_category |
USER/ADMIN |
locationId, categoryId, name (string, i detyrueshëm), nameTranslations (object, opsional), status (enum, opsional), sortOrder (number, opsional), userId (string, opsional) |
update_menu_category |
USER/ADMIN |
locationId, categoryId (string, i detyrueshëm), name (string, opsional), nameTranslations (object, opsional), status (enum, opsional), sortOrder (number, opsional), userId (string, opsional) |
move_menu_item |
USER/ADMIN |
locationId, itemId, fromCategoryId, toCategoryId (string, i detyrueshëm), userId (string, opsional) |
merge_categories |
USER/ADMIN |
locationId, sourceCategoryId, targetCategoryId (string, i detyrueshëm), keepSourceName (bool, opsional), userId (string, opsional) |
delete_menu_category |
USER/ADMIN |
locationId, categoryId (string, i detyrueshëm), force (bool, opsional — fshi bashkë me artikujt), userId (string, opsional) |
check_translations |
USER/ADMIN |
locationId (string, i detyrueshëm), languages (array, opsional — lista e gjuhëve për kontroll), userId (string, opsional) |
check_translations — skanon të gjitha kategoritë dhe artikujt e menusë të lokacionit, gjen përkthimet që mungojnë në gjuhët e aktivizuara dhe kthen një raport të detajuar sipas gjuhëve me listën e kategorive dhe artikujve pa përkthime.
update_menu_item — fushat që mund të përditësohen: name, description, price, status, tags, variantGroups, addons, nameTranslations, descriptionTranslations, locationPrices, sortOrder. Sinkronizohet automatikisht me CDN.
Porositë
| Mjeti |
Aksesi |
Argumentet |
list_orders |
USER/ADMIN |
userId (opsional), domain (opsional), limit (int, opsional) |
get_order |
USER/ADMIN |
orderId (string, i detyrueshëm), domain (string, opsional), locationId (string, opsional) |
Domenet
| Mjeti |
Aksesi |
Argumentet |
check_domain_availability |
USER |
domainName (string, i detyrueshëm), currentDomainName (string, opsional) |
set_location_domain |
USER/ADMIN |
locationId (string, i detyrueshëm), domainName (string, i detyrueshëm) |
resolve_domain |
USER |
domain (string, i detyrueshëm) |
list_domains |
ADMIN |
prefix (string, opsional) |
CDN
| Mjeti |
Aksesi |
Argumentet |
get_cdn_profile |
USER |
domain (string, i detyrueshëm) |
get_cdn_menu |
USER |
domain (string, i detyrueshëm), language (string, i detyrueshëm) |
list_cdn_files |
USER |
domain (string, i detyrueshëm) |
invalidate_cdn_cache |
ADMIN |
paths (string[], i detyrueshëm) |
Imazhet
| Mjeti |
Aksesi |
Argumentet |
list_user_images |
USER/ADMIN |
userId (string, i detyrueshëm), type (enum, opsional) |
get_image_upload_url |
USER |
type (enum: menu-photos, category-photos, locations, i detyrueshëm), itemId (string, opsional), locationId (string, opsional), filename (string, opsional), contentType (enum, opsional) |
delete_image |
USER/ADMIN |
key (string, i detyrueshëm — çelësi i plotë S3 në i.menugo.al) |
get_image_upload_url — kthen presigned URL (15 min). Pas ngarkimit, pipeline gjeneron automatikisht miniaturat (thumbnails) dhe sinkronizohet me CDN.
S3 (ruajtja)
| Mjeti |
Aksesi |
Argumentet |
s3_read |
USER/ADMIN |
bucket (enum), key (string) — i detyrueshëm |
s3_write |
ADMIN |
bucket (enum: data.meni, cdn.menugo.al, o.menugo.al), key (string), data (object) — i detyrueshëm |
s3_list |
USER/ADMIN |
bucket (enum), prefix (string) — i detyrueshëm, limit (int, opsional) |
s3_delete |
ADMIN |
bucket (enum: data.meni, cdn.menugo.al, o.menugo.al), key (string) — i detyrueshëm |
Enum për bucket: data.meni, cdn.menugo.al, i.menugo.al, o.menugo.al
Cognito
| Mjeti |
Aksesi |
Argumentet |
cognito_list_users |
ADMIN |
filter (string, opsional), limit (int, opsional) |
cognito_get_user |
ADMIN |
username (string, i detyrueshëm) |
Sistemi
| Mjeti |
Aksesi |
Argumentet |
get_system_stats |
ADMIN |
asnjë |
Kontrolli i aksesit
- Përdoruesit e zakonshëm — vetëm të dhënat e tyre (sipas
userId)
- Aksesi S3 është i kufizuar nga prefiksi
users/{userId}/
- Për veglat e lokacioneve/menysë,
userId përcaktohet automatikisht për përdoruesit e zakonshëm (vetëm administratorët e specifikojnë atë)
- Admin-only:
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
- Menaxhimi i çelësave (
/api/keys) kërkon Cognito JWT
Kodet e gabimeve
| HTTP |
Kuptimi |
200 |
Sukses (kontrolloni result.isError për gabimet e instrumenteve) |
400 |
JSON i pavlefshëm ose mungon metoda |
401 |
Mungon ose autentifikim i pavlefshëm |
405 |
Metodë e gabuar HTTP |
| Gabimi i instrumentit |
Kuptimi |
🔒 admin access required |
Kërkohet roli i adminit |
🔒 access denied |
Përpjekje për qasje në të dhënat e të tjerëve |
missing required argument: <name> |
Parametri i detyrueshëm nuk është dërguar |
unknown tool: <name> |
Instrument i panjohur |
Shembull sesioni
→ 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\"}"}]}}
Konfigurimi i klientit
Claude Desktop
{
"mcpServers": {
"meni": {
"url": "https://api.menugo.al/mcp",
"headers": { "Authorization": "Bearer <API_KEY>" }
}
}
}
cURL
curl -X POST https://api.menugo.al/mcp \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <API_KEY>" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"whoami","arguments":{}}}'