Pełna specyfikacja scoringu
Po wpisaniu adresu sklepu pobieramy publiczne sygnały (bez logowania, wyłącznie do odczytu), walidujemy je względem standardów UCP, ACP i schema.org, a następnie liczymy wynik 0–100 z oceną literową S–F. Poniżej dokładnie: co pobieramy, na czym opieramy reguły i jak punktujemy.
01
Pobranie sygnałów
Równoległe, krótkie żądania do manifestu, robots.txt, strony produktu, sitemap i dokumentu ACP.
02
Walidacja i probe
Sprawdzenie zgodności manifestu ze specyfikacją oraz handshake MCP / REST / A2A na żywo (read-only).
03
Punktacja
Suma 100 punktów w 6 kategoriach, 3 sub-wyniki, ocena literowa i lista „co naprawić”.
| Sygnał | Żądanie (read-only) | Timeout |
|---|---|---|
| Manifest UCP | GET /.well-known/ucp | 2,5 s |
| robots.txt (boty AI) | GET /robots.txt | 6 s |
| Wymuszenie HTTPS | GET http:// → sprawdzenie przekierowania na https | 6 s |
| Strona główna + 1 produkt | GET / (oraz wykryty link produktu) → JSON-LD, Open Graph, platforma, płatności | 6 s |
| Mapa strony | GET /sitemap.xml | 6 s |
| ACP discovery | GET /.well-known/acp.json | 3 s |
| Runtime probe transportów | MCP: POST initialize + tools/list · REST: HEAD · A2A: GET karty agenta | 4 s / żądanie, budżet 9 s |
| Źródło | Co z niego bierzemy |
|---|---|
| ucp-schema (walidator UCP) | struktura manifestu, format wersji RRRR-MM-DD, transporty rest/mcp/a2a/embedded |
| ucpchecker.com / well-known-ucp | pola wymagane vs opcjonalne, Content-Type, keys[] w korzeniu (JWK Set), wagi wymiarów |
| Google — Product structured data | wymagane pola Product / Offer / AggregateRating (product-snippet vs merchant-listing) |
| Agentic Commerce Protocol (OpenAI + Stripe) | /.well-known/acp.json, MCP binding, 5 narzędzi checkout |
| Model Context Protocol (2025-11-25) | handshake initialize + tools/list (read-only) |
Zgodność UCP
40 pktCzy sklep publikuje poprawny manifest UCP pod /.well-known/ucp.
Manifest UCP
40 pkt| Manifest dostępny (/.well-known/ucp) | KRYTYCZNE | HTTP 200 | 10 pkt |
| Content-Type: application/json | KRYTYCZNE | nagłówek zawiera „json” | 4 pkt |
| Poprawny JSON | WAŻNE | treść manifestu się parsuje | 4 pkt |
| Wersja w formacie RRRR-MM-DD | WAŻNE | poprawna data (miesiąc 01–12, dzień 01–31) | 5 pkt |
| Wymagane sekcje (services, payment_handlers) | KRYTYCZNE | obie sekcje obecne | 6 pkt |
| Klucze podpisu w korzeniu (keys[] obok ucp) | WAŻNE | klucze nie są błędnie zagnieżdżone w ucp | 3 pkt |
| Klucze podpisu obecne (keys[]) | WAŻNE | tablica JWK keys[] większa niż 0 | 6 pkt |
| HTTPS i niska latencja (< 2 s) | WAŻNE | https + 200 + czas < 2000 ms | 2 pkt |
Możliwości
30 pktJakie operacje handlowe, transporty i płatności deklaruje sklep — oraz czy endpointy faktycznie odpowiadają.
Możliwości handlowe
12 pkt| Checkout | KRYTYCZNE | capability „checkout” | 6 pkt |
| Koszyk (cart) | WAŻNE | capability „cart” | 2 pkt |
| Zamówienia (order) | WAŻNE | capability „order” | 2 pkt |
| Katalog (lookup / search) | WAŻNE | capability „catalog” | 2 pkt |
Transporty
10 pkt| Zadeklarowany transport | KRYTYCZNE | co najmniej 1 transport (REST / MCP / A2A / EMBEDDED) | 3 pkt |
| Endpointy usług (URL) | WAŻNE | co najmniej 1 usługa z adresem endpointu | 2 pkt |
| Endpoint odpowiada w czasie rzeczywistym na żywo | OPCJONALNE | test na żywo; neutralny gdy niedostępny | 3 pkt |
| Potwierdzony handshake MCP / A2A na żywo | OPCJONALNE | MCP initialize OK lub poprawna karta A2A | 2 pkt |
Płatności (ACP)
8 pkt| Zadeklarowane payment_handlers | KRYTYCZNE | sekcja obecna | 3 pkt |
| Handler kartowy / portfel | WAŻNE | „card” lub Stripe / Shop Pay / Google Pay | 2 pkt |
| Gotowość ACP (/.well-known/acp.json + checkout) na żywo | OPCJONALNE | dokument ACP z usługą checkout | 3 pkt |
Wykrywalność
30 pktCzy agenci AI mogą czytać sklep (robots.txt, HTTPS) i czy produkty mają dane strukturalne.
Dostęp agentów AI i bezpieczeństwo
18 pkt| Wymuszone HTTPS | KRYTYCZNE | przekierowanie http → https | 3 pkt |
| Plik robots.txt obecny | WAŻNE | plik istnieje | 2 pkt |
| GPTBot dozwolony | WAŻNE | nie zablokowany w robots.txt | 3 pkt |
| Google-Extended dozwolony | WAŻNE | nie zablokowany w robots.txt | 3 pkt |
| ClaudeBot dozwolony | WAŻNE | nie zablokowany w robots.txt | 3 pkt |
| Applebot-Extended dozwolony | OPCJONALNE | nie zablokowany w robots.txt | 1 pkt |
| PerplexityBot i CCBot dozwolone | OPCJONALNE | oba nie zablokowane | 1 pkt |
| Gotowość Web Bot Auth (keys[] jako JWK Set) | OPCJONALNE | manifest publikuje poprawny JWK (kid + kty) | 2 pkt |
Dane strukturalne
12 pkt| JSON-LD schema.org Product | WAŻNE | Product (nazwa + oferta / ocena) | 4 pkt |
| Oferta z ceną i dostępnością (Offer) | WAŻNE | Offer z price (+ priceCurrency) | 3 pkt |
| Gotowość merchant-listing (image + Offer + waluta) | OPCJONALNE | nazwa + obraz + oferta sprzedażowa | 2 pkt |
| Oceny (AggregateRating) | OPCJONALNE | ratingValue + liczba opinii | 1 pkt |
| Open Graph produktowy | OPCJONALNE | og:type=product lub product:price | 1 pkt |
| Mapa strony (sitemap.xml) | OPCJONALNE | plik XML obecny | 1 pkt |
Oceny literowe
Mechanika punktacji
- Wynik łączny = suma zdobytych punktów (0–100).
- 3 sub-wyniki (0–100): Zgodność = Manifest / 40, Możliwości = (Możliwości + Transporty + Płatności) / 30, Wykrywalność = (Dostęp + Dane strukturalne) / 30.
- Kolory wg % wypełnienia: <25 czerwony · <50 pomarańczowy · <70 bursztynowy · <90 limonkowy · ≥90 zielony.
- „Co naprawić”: niespełnione KRYTYCZNE / WAŻNE trafiają na listę (do 6, najpierw krytyczne) z gotową instrukcją.
- Probe = tylko bonus: endpoint niedostępny / zablokowany / timeout jest neutralny (punkt przyznany) — nigdy nie obniża oceny. Punkt traci wyłącznie endpoint, który odpowiedział i jawnie nie mówi w MCP. Dzięki temu nie jesteśmy surowsi niż ocena oparta na samej deklaracji.
- Cache: wynik jest zapisywany na 24 h; ponowne skanowanie wymusza świeży pomiar.
Analiza jest wyłącznie do odczytu: nigdy nie wywołujemy narzędzi checkout
(tylko handshake MCP initialize + tools/list),
nie tworzymy sesji zakupowych ani płatności. Połączenia są zabezpieczone przed atakami SSRF (zweryfikowany adres IP jest
przypinany do połączenia), a sprawdzane są wyłącznie publiczne zasoby sklepu.