MCP Serwer meni.ge — Przewodnik dla integracji AI / GPT

Ten dokument jest przeznaczony dla asystentów AI, botów GPT i automatycznych integracji. Zawiera dokładne szczegóły protokołu, schematy narzędzi i przepływ uwierzytelniania.

Informacje o serwerze

Właściwość Wartość
Nazwa serwera meni-user-data-mcp
Protokół MCP 2024-11-05 (Streamable HTTP)
Transport HTTP POST (stateless)
Podstawowy URL https://api.meni.ge/mcp
Content-Type application/json
Format JSON-RPC 2.0

Uwierzytelnianie

Wszystkie wywołania narzędzi wymagają nagłówka Authorization.

Wariant 1: Użytkownikowy klucz MCP API (zalecane)

Authorization: Bearer mk_XXXXXXXXXXXX...  (64 znaki hex)

Powiązany z konkretnym użytkownikiem. Bot widzi tylko dane tego użytkownika.

Wariant 2: Cognito JWT-token

Authorization: Bearer eyJraWQi...  (JWT id_token)

Uzyskiwany przez POST /auth/login. Wygasa po 1 godzinie.

Wariant 3: Admin API Key

Authorization: Bearer <admin_api_key>

Pełny dostęp do wszystkich danych. Tylko dla administratorów.

Uzyskiwanie JWT-tokena

POST https://api.meni.ge/mcp/auth/login
Content-Type: application/json

{
  "email": "user@example.com",
  "password": "password123"
}

Odpowiedź:

{
  "idToken": "eyJraWQi...",
  "accessToken": "eyJraWQi...",
  "refreshToken": "eyJjdHki...",
  "expiresIn": 3600,
  "tokenType": "Bearer"
}

Protokół MCP

Inicjalizacja

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" }
  }
}

Lista narzędzi

{ "jsonrpc": "2.0", "id": 2, "method": "tools/list", "params": {} }

Wywołanie narzędzia

{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "nazwa_narzędzia",
    "arguments": { ... }
  }
}

Odpowiedź (sukces): result.content[0].text — JSON-string z danymi.
Odpowiedź (błąd): result.isError: true, result.content[0].text — tekst błędu.


Endpointy

Metoda Ścieżka Autoryzacja Opis
GET / Nie Informacje o serwerze + lista narzędzi
POST / Tak MCP JSON-RPC
GET /health Nie Sprawdzenie → {"status":"ok"}
POST /auth/login Nie Logowanie → JWT-tokeny
GET /api/keys Tylko JWT Lista kluczy API
POST /api/keys Tylko JWT Utwórz klucz API
DELETE /api/keys/{keyId} Tylko JWT Cofnij klucz API

Wszystkie ścieżki są względne do https://api.meni.ge/mcp.


Pełny przewodnik po narzędziach

Poziomy dostępu

  • USER — Dostępne dla wszystkich autoryzowanych użytkowników (dane o swoim koncie)
  • ADMIN — Tylko administratorzy (pełny dostęp)

Samoobsługa

Narzędzie Dostęp Argumenty
whoami USER brak
my_profile USER brak
update_my_profile USER fields (object, wymagany)
my_locations USER brak
my_orders USER limit (int, opc.)
my_images USER type (enum: all, menu-photos, category-photos, locations, opc.)

Profile użytkowników

Narzędzie Dostęp Argumenty
list_users ADMIN limit (int, opc.)
get_user_profile USER/ADMIN userId (string, wymagany)
update_user_profile ADMIN userId (string, wymagany), fields (object, wymagany)
search_user_by_email ADMIN email (string, wymagany)

Lokacje

Narzędzie Dostęp Argumenty
list_locations USER/ADMIN userId (string, wymagany)
get_location_profile USER/ADMIN locationId (string, wymagany), userId (string, opc. — auto-określenie dla zwykłych)
update_location_profile USER/ADMIN locationId (string, wymagany), fields (object, wymagany), userId (string, opc.)
get_location_menu USER/ADMIN locationId (string, wymagany), language (string, opc.), userId (string, opc.)

update_location_profile — aktualizowane pola: displayName, phone, address, facebookUrl, instagramUrl, status, settings, workingHours. Synchronizuje się z CDN automatycznie. Do zmiany domeny użyj set_location_domain.

Menu

Narzędzie Dostęp Argumenty
list_menu_items USER/ADMIN categoryId (string, opc. — dla pełnych danych), userId (string, opc.)
get_menu_item USER/ADMIN itemId (string, wymagany), categoryId (string, opc. — auto-wyszukiwanie), userId (string, opc.)
update_menu_item USER/ADMIN itemId (string, wymagany), fields (object, wymagany), categoryId (string, opc.), userId (string, opc.)
create_menu_item USER/ADMIN locationId, categoryId, itemId, name (string, wymagany), price (number, wymagany), nameTranslations (object, opc.), description (string, opc.), status (enum, opc.), sortOrder (number, opc.), userId (string, opc.)
create_menu_category USER/ADMIN locationId, categoryId, name (string, wymagany), nameTranslations (object, opc.), status (enum, opc.), sortOrder (number, opc.), userId (string, opc.)
update_menu_category USER/ADMIN locationId, categoryId (string, wymagany), name (string, opc.), nameTranslations (object, opc.), status (enum, opc.), sortOrder (number, opc.), userId (string, opc.)
move_menu_item USER/ADMIN locationId, itemId, fromCategoryId, toCategoryId (string, wymagany), userId (string, opc.)
merge_categories USER/ADMIN locationId, sourceCategoryId, targetCategoryId (string, wymagany), keepSourceName (bool, opc.), userId (string, opc.)
delete_menu_category USER/ADMIN locationId, categoryId (string, wymagany), force (bool, opc. — usuń z pozycjami), userId (string, opc.)

update_menu_item — aktualizowane pola: name, description, price, status, tags, variantGroups, addons, nameTranslations, descriptionTranslations, locationPrices, sortOrder. Synchronizuje się z CDN automatycznie.

Zamówienia

Narzędzie Dostęp Argumenty
list_orders USER/ADMIN userId (opc.), domain (opc.), limit (int, opc.)
get_order USER/ADMIN orderId (string, wymagany), domain (string, opc.), locationId (string, opc.)

Domeny

Narzędzie Dostęp Argumenty
check_domain_availability USER domainName (string, wymagany), currentDomainName (string, opc.)
set_location_domain USER/ADMIN locationId (string, wymagany), domainName (string, wymagany)
resolve_domain USER domain (string, wymagany)
list_domains ADMIN prefix (string, opc.)

CDN

Narzędzie Dostęp Argumenty
get_cdn_profile USER domain (string, wymagany)
get_cdn_menu USER domain (string, wymagany), language (string, wymagany)
list_cdn_files USER domain (string, wymagany)
invalidate_cdn_cache ADMIN paths (string[], wymagany)

Obrazy

Narzędzie Dostęp Argumenty
list_user_images USER/ADMIN userId (string, wymagany), type (enum, opc.)
get_image_upload_url USER type (enum: menu-photos, category-photos, locations, wymagany), itemId (string, opc.), locationId (string, opc.), filename (string, opc.), contentType (enum, opc.)
delete_image USER/ADMIN key (string, wymagany — pełny klucz S3 w i.meni.ge)

get_image_upload_url — zwraca presigned URL (15 min). Po przesłaniu pipeline automatycznie generuje miniatury i synchronizuje z CDN.

S3 (przechowywanie)

Narzędzie Dostęp Argumenty
s3_read USER/ADMIN bucket (enum), key (string) — wymagany
s3_write ADMIN bucket (enum: data.meni, cdn.meni.ge, o.meni.ge), key (string), data (object) — wymagany
s3_list USER/ADMIN bucket (enum), prefix (string) — wymagany, limit (int, opc.)
s3_delete ADMIN bucket (enum: data.meni, cdn.meni.ge, o.meni.ge), key (string) — wymagany

Enum dla bucket: data.meni, cdn.meni.ge, i.meni.ge, o.meni.ge

Cognito

Narzędzie Dostęp Argumenty
cognito_list_users ADMIN filter (string, opc.), limit (int, opc.)
cognito_get_user ADMIN username (string, wymagany)

System

Narzędzie Dostęp Argumenty
get_system_stats ADMIN brak

Kontrola dostępu

  1. Zwykli użytkownicy — tylko swoje dane (po userId)
  2. Dostęp S3 ograniczony prefiksem users/{userId}/
  3. Dla narzędzi lokalizacji/menu userId auto-określany dla zwykłych użytkowników (tylko admini go wskazują)
  4. Tylko dla adminów: 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
  5. Zarządzanie kluczami (/api/keys) wymaga Cognito JWT

Kody błędów

HTTP Wartość
200 Sukces (sprawdź result.isError dla błędów narzędzi)
400 Nieprawidłowy JSON lub brak metody
401 Brak lub nieprawidłowe uwierzytelnianie
405 Nieprawidłowa metoda HTTP
Błąd narzędzia Wartość
🔒 admin access required Wymagana rola admina
🔒 access denied Próba dostępu do cudzych danych
missing required argument: <name> Nie przekazano wymaganego parametru
unknown tool: <name> Nieznane narzędzie

Przykład sesji

→ 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\"}"}]}}

Konfiguracja klienta

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":{}}}'