Kody błędów do branchowania w agencie
Wszystkie błędy z serwera MCP mają stałą strukturę. Pole code jest stabilne i przeznaczone do switch-a w kodzie agenta — nie zmienia się przy lokalizacji ani przy drobnych zmianach komunikatów.
{
"statusCode": 4xx,
"error": "<short_label>",
"message": "Czytelny dla człowieka komunikat (PL)",
"code": "STABLE_MACHINE_READABLE_CODE",
"details": { ... opcjonalne pole z kontekstem }
}22 kodów. Sortowanie alfabetyczne dla szybkiego wyszukiwania.
AI_DEPLOY_GLOBALLY_DISABLEDHTTP 503retry: Po Retry-AfterGlobalny kill switch adminaexpand_more
Co się stało: Globalny kill switch admina — AI Deploy wyłączone dla wszystkich kont (np. trwa incydent).
Co zrobić w agencie: Poczekaj. Status: /status. Po przywróceniu agent może ponowić ostatnią mutację z tym samym Idempotency-Key.
AI_DEPLOY_NOT_ENABLEDHTTP 403retry: NieTier konta = noneexpand_more
Co się stało: Konto klienta ma tier ai_deploy = none. Wszystkie wywołania write są blokowane.
Co zrobić w agencie: Skieruj użytkownika do /kontakt?temat=ai-deploy-beta — admin musi zmienić tier na sandbox/beta/full.
AI_DEPLOY_TIER_TOO_LOWHTTP 403retry: NieTier=sandbox próbuje write/deleteexpand_more
Co się stało: Konto ma tier sandbox, ale wywołane narzędzie wymaga beta/full (np. install_wordpress, set_dns_records, delete_domain).
Co zrobić w agencie: Wykonaj operację read-only albo poproś o awans tieru przez formularz kontaktowy.
APP_INSTALL_FAILEDHTTP 500retry: TakInstall (np. WordPress) failedexpand_more
Co się stało: Instalacja (np. WordPress) zakończyła się błędem podczas wykonywania kroków.
Co zrobić w agencie: Sprawdź get_job_status → result.error.details. Najczęściej: brak miejsca na dysku, niedostępny mirror.
APP_INSTALL_PREFLIGHT_FAILEDHTTP 422retry: NiePreflight: brak miejsca, nieaktualna wersja PHPexpand_more
Co się stało: Preflight before install — brak miejsca, nieaktualna wersja PHP, bind do website nieprawidłowy.
Co zrobić w agencie: Pokaż użytkownikowi error.details. Najczęściej trzeba zmienić wersję PHP albo zwolnić miejsce.
APP_TYPE_NOT_SUPPORTEDHTTP 400retry: NieNieobsługiwany typ aplikacjiexpand_more
Co się stało: Próba instalacji aplikacji, której nie obsługujemy.
Co zrobić w agencie: Lista wspieranych aplikacji: list_packages.supported_apps. WordPress jest wspierany; inne CMS-y dochodzą stopniowo.
CONFIRMATION_REQUIREDHTTP 400retry: NieBrak confirm=true w destructive callexpand_more
Co się stało: Wywołanie destruktywne nie zawierało pola confirm: true.
Co zrobić w agencie: Po pokazaniu impact użytkownikowi i jego akceptacji, wyślij confirm: true wraz z preview_token.
DATABASE_IN_USE_BY_APPHTTP 409retry: NiePróba usunięcia bazy używanej przez appexpand_more
Co się stało: Próba usunięcia bazy używanej przez aplikację (np. zainstalowany WordPress).
Co zrobić w agencie: Najpierw usuń aplikację (delete_app, gdy będzie dostępny) lub odłącz bazę od aplikacji.
IDEMPOTENCY_KEY_INVALIDHTTP 400retry: NieNiepoprawny format Idempotency-Keyexpand_more
Co się stało: Idempotency-Key musi być UUID v4. Pusty / niepoprawny format.
Co zrobić w agencie: Wygeneruj UUID v4 po stronie klienta i powtórz request.
IDEMPOTENCY_KEY_REUSEDHTTP 409retry: NieTen sam klucz, inne body w 24hexpand_more
Co się stało: Klient użył tego samego Idempotency-Key dla request body innego niż 24h temu.
Co zrobić w agencie: Wygeneruj nowy klucz dla zmienionych danych albo wyślij identyczne body — wtedy dostaniesz cached response.
JOB_ALREADY_FINISHEDHTTP 409retry: NiePróba modyfikacji terminalnego jobaexpand_more
Co się stało: Próba modyfikacji joba z terminalnym statusem (succeeded/failed/cancelled).
Co zrobić w agencie: Job się skończył — odczytaj result.
JOB_NOT_FOUNDHTTP 404retry: NieNiepoprawny job UUIDexpand_more
Co się stało: Niepoprawny job UUID — brak takiego joba w systemie.
Co zrobić w agencie: Sprawdź, czy używasz job_id z odpowiedzi async tool (install_wordpress, request_ssl).
JOB_OWNERSHIP_MISMATCHHTTP 403retry: NieJob innego useraexpand_more
Co się stało: Job należy do innego usera.
Co zrobić w agencie: Tak samo jak PREVIEW_TOKEN_OWNERSHIP_MISMATCH — krytyczny błąd kliencki.
PREVIEW_TOKEN_ALREADY_CONSUMEDHTTP 409retry: NieSingle-use już użytyexpand_more
Co się stało: Token jest single-use — już został użyty w poprzednim wywołaniu.
Co zrobić w agencie: Jeśli operacja faktycznie się udała, sprawdź wynik. Jeśli nie — wywołaj preview_* ponownie.
PREVIEW_TOKEN_EXPIREDHTTP 410retry: NieToken starszy niż 10 minexpand_more
Co się stało: Token przekroczył TTL 600 sekund (10 minut).
Co zrobić w agencie: Wywołaj preview_* ponownie i natychmiast użyj nowego tokena.
PREVIEW_TOKEN_MISSINGHTTP 400retry: NieBrak tokenu w destructive callexpand_more
Co się stało: Brak preview_token w destruktywnym wywołaniu (np. delete_domain bez tokena).
Co zrobić w agencie: Najpierw wywołaj preview_delete_*, pokaż użytkownikowi pole impact, dopiero potem delete_* z tokenem.
PREVIEW_TOKEN_NOT_FOUNDHTTP 404retry: NieToken nie istnieje lub wygasłexpand_more
Co się stało: Token nie istnieje w bazie (nigdy nie był wystawiony).
Co zrobić w agencie: Wywołaj preview_* żeby otrzymać świeży token.
PREVIEW_TOKEN_OWNERSHIP_MISMATCHHTTP 403retry: NieToken innego user_idexpand_more
Co się stało: Token został wystawiony dla innego user_id niż token uwierzytelniający request.
Co zrobić w agencie: Krytyczny błąd kliencki — agent próbuje użyć cudzego tokena. Przerwij sesję i zgłoś security@mdiv.pl.
PREVIEW_TOKEN_RESOURCE_MISMATCHHTTP 403retry: NieToken na inny resource_idexpand_more
Co się stało: Token został wystawiony dla innego resource_id niż w obecnym wywołaniu.
Co zrobić w agencie: Wywołaj preview_* dla właściwego zasobu. Nie próbuj `przesuwać` tokena na inny obiekt.
RATE_LIMITEDHTTP 429retry: Po Retry-AfterPrzekroczony rate limit (60/min, install 5/min)expand_more
Co się stało: Token wyczerpał limit (60/min default lub 5/min dla install ops).
Co zrobić w agencie: Respektuj header Retry-After. Ignorowanie limitów skutkuje pauzą tokena.
SSL_ISSUE_FAILEDHTTP 422retry: TakLet's Encrypt validation failedexpand_more
Co się stało: Let's Encrypt odrzucił validation (np. DNS jeszcze nie propagował, brak rekordu A, plik .well-known niedostępny).
Co zrobić w agencie: Sprawdź error.details (typ challenge, propagation_check). Po naprawie DNS ponów request_ssl.
SSL_RENEW_FAILEDHTTP 422retry: TakRenew SSL failedexpand_more
Co się stało: Auto-renew certyfikatu failed — najczęściej z powodu zmiany rekordów DNS.
Co zrobić w agencie: Sprawdź konfigurację DNS i ponów request_ssl. mDiv automatycznie próbuje co 24h.