JOURNAL.md strattlabs.com · also published as markdown

live 6 September 2026 Stratt Labs Journal

Prošli jste oficiálními testy. To neznamená, že vás katalog přijme

Stratt Labs

Oficiální konformní sada pro MCP je zdarma, běží jedním příkazem a měl by ji spustit každý, kdo provozuje MCP server. Odpovídá ale jen na jednu otázku: mluví váš server protokolem správně?

Katalog konektorů se ptá na něco jiného. A odmítá z jiného důvodu.

Co konformní testy měří

Repozitář konformní sady drží pro aktuální revizi, vydanou 28. července 2026, zmrazený seznam scénářů. Soubor o sobě sám píše, že je „the canonical answer to 'which scenarios must my implementation pass to conform to 2026-07-28'" a že je FROZEN.

Serverová část má 37 položek. server-stateless, tools-list, tools-call-simple-text, tools-call-error, resources-read-binary, prompts-get-with-args, caching, dns-rebinding-protection a čtrnáct scénářů kolem multi round-trip requestů.

Projděte si ten seznam řádek po řádku. Každý jeden je o drátu: má zpráva správný tvar, vrací server správný kód, chová se stream, jak má. Ani jeden se neptá, jestli je to, co váš server o svých nástrojích tvrdí, pravda.

Není to opomenutí. Protokol si tuhle otázku vědomě neklade.

Testy navíc mlčí o jedné věci, kterou specifikace řeší sama a otevřeně: co se stane, když se moderní klient (2026-07-28 a novější) potká se serverem na starší, „legacy" revizi (2025-11-25 a starší, s handshake initialize). Specifikace tenhle pojem sama zavádí a používá ho jako neutrální označení éry, ne jako nálepku. Normativní tabulka kompatibility má na to jednu odpověď: Fails. Server podle ní smí požadavek odmítnout definovanou chybou, mlčet, nebo - nejhorší varianta - „even process an era-ambiguous method under legacy semantics", tedy tiše zpracovat metodu podle starých pravidel, aniž by o tom klient věděl. A dodává: „Legacy clients have no fall-forward mechanism." Tohle není predikce, kdy kdo migruje. Je to publikovaný, dnes platný výsledek. Projít konformní sadou znamená, že mluvíte svou vlastní revizí správně. Neznamená to, že vás pochopí každý, kdo se s vámi spojí.

Co odmítá katalog

Anthropic má veřejnou stránku, která popisuje, co jeho recenzenti testují a proč se konektory nejčastěji zamítají. Doslova:

„Every tool must include a title and the applicable hint—readOnlyHint: true for read-only tools, destructiveHint: true for tools that modify or delete data. These determine auto-permissions in Claude: read-only tools can run without per-call confirmation; destructive tools always prompt."

„A single tool that accepts both safe HTTP methods (GET, HEAD, OPTIONS) and unsafe methods (POST, PUT, PATCH, DELETE) is rejected."

„Tool names must be 64 characters or fewer."

OpenAI píše ve svých pravidlech pro pluginy totéž, jen adresněji:

„Incorrect or missing action labels are a common cause of rejection."

Ani jedna z těch vět není o protokolu. Všechny jsou o tom, co o sobě nástroj tvrdí.

Tři místa, kde se specifikace a katalog rozcházejí

Tohle je jádro věci. Server může být podle specifikace v naprostém pořádku a v review přesto spadnout, protože katalog vyžaduje víc, než specifikace nařizuje.

Titulek. Specifikace u definice nástroje píše: „title: Optional human-readable name of the tool for display purposes." Volitelné. Anthropic: „Every tool must include a title." Povinné. Server bez titulků je konformní a zamítnutý.

Délka jména. Specifikace: „Tool names SHOULD be between 1 and 128 characters in length (inclusive)." Anthropic: 64 a méně. Stodvacetiznakové jméno projde konformní sadou a neprojde review.

Anotace. Tady je to nejostřejší. Schéma aktuální revize má nad definicí ToolAnnotations poznámku:

„NOTE: all properties in ToolAnnotations are hints. They are not guaranteed to provide a faithful description of tool behavior (including descriptive properties like title)."

A text specifikace to potvrzuje jako povinnost na straně klienta: „For trust & safety and security, clients MUST consider tool annotations to be untrusted unless they come from trusted servers."

Čtěte to pomalu. Specifikace sama prohlašuje anotace za nedůvěryhodné. Žádný protokolový test proto nemůže ověřit, že readOnlyHint: true je pravda; protokol si na to nedělá nárok. Katalog na těch samých anotacích staví běhové oprávnění: read-only nástroj se v Claude spustí bez potvrzení, destruktivní se vždycky zeptá.

Mezi „specifikace to neřeší" a „katalog na tom odmítá" je díra. V ní se odehrávají zamítnutí.

Jeden konkrétní nález, bez jména

Vzali jsme veřejný registr MCP serverů, vyfiltrovali ty, které jdou oslovit bez přihlášení, a přečetli jejich tools/list. Žádné volání nástroje, žádný zásah do provozu, jen seznam.

U jednoho konektoru v oficiálním registru, od velkého dodavatele, obě dvě popisky nástrojů instruují model o tom druhém nástroji:

ALWAYS call [nástroj A] before ANY [nástroj B] call in a user request chain.

PREREQUISITE: ALWAYS call [nástroj A] before using this tool…

A vedle toho kritérium Anthropicu, doslova. Popisky nástrojů se zamítají, pokud:

„Interfere with Claude calling other tools"

O dva odstavce dál na téže stránce:

„Describe what the tool does. Do not tell Claude how to behave."

Jméno dodavatele sem nepatří. Nejde o něj. Jde o to, že sekvenční navádění modelu („nejdřív zavolej tohle") je běžná, dobře míněná praxe, kterou spousta autorů píše bez zlého úmyslu, a spadá přímo pod publikované zamítací kritérium. A dá se najít statickým přečtením jednoho seznamu, za pár minut, bez přístupových údajů.

Ověřili jsme to znovu 4. 9. 2026, přímým dotazem na stejný endpoint: obě popisky beze změny, znak po znaku. Ani jeden z těch dvou nástrojů navíc nemá title ani žádné annotations - další dvě položky ze stejného kritéria, viditelné ze stejného jediného čtení.

Půlka věcí je vidět bez jediného volání

Podívejte se na Anthropicův seznam kritérií jako na checklist. Celá sekce Tool design (oddělení čtecích a zapisovacích nástrojů, odkaz na cizí API u volných dotazů, anotace, délka jmen, přesnost popisků) i celá sekce Avoid prompt-injection patterns se dají přečíst z jednoho tools/list. Nic z toho nevyžaduje, aby někdo váš server zavolal.

Sekce Functional quality se takhle přečíst nedá. „Every tool must return a successful response when called with valid parameters. Generic errors ('Internal Server Error', 'Bad Request' with no detail) fail review." To musí někdo vyzkoušet. Stejně tak jediná otázka, na které skutečně záleží: zavolá vás agent vůbec, a když ano, dojde k výsledku?

Odtud plyne pořadí. Nejdřív statické čtení, protože je levné, okamžité a bezrizikové. Pak chování, protože to potřebuje testovací prostředí a čas.

Poctivá poznámka: co ty volné nástroje opravdu umí

Konformní sada je od Anthropicu, je pod licencí MIT a je zadarmo. Spusťte ji. Ale pozor na jednu past: kanál latest je verze 0.1.16 a vyšla 27. března 2026, tedy čtyři měsíce před tím, než aktuální revize vůbec existovala. Zmrazený seznam požadavků pro 2026-07-28 najdete jen ve větvi main a hlavička toho souboru se sama odkazuje na předrelease 0.2.0-alpha.10. Kdo spustí „ten volný npx příkaz" bez kanálu alpha, netestuje proti aktuální revizi.

A i kdyby testoval: ani jeden z těch 37 scénářů se nedívá na titulky, anotace ani popisky.

Co udělat tento týden, i kdybyste si všechno dělali sami

  1. Stáhněte si vlastní tools/list a přečtěte ho jako recenzent, ne jako autor.
  2. Ke každému nástroji doplňte title a příslušný hint. readOnlyHint: true jen tam, kde nástroj opravdu nic nemění a je bezpečné ho zopakovat.
  3. Najděte nástroj, který umí číst i zapisovat, a rozdělte ho. Popisek to nespraví; kritérium výslovně říká, že dokumentovat rozdíl v jednom nástroji nestačí.
  4. Vygrepujte popisky na slova jako „always", „first", „before" a jména jiných nástrojů. Co navádí model, jak se má chovat, přepište na to, co nástroj dělá.
  5. Zkontrolujte délky jmen. Limit katalogu je 64 znaků, ne 128 ze specifikace.

Tohle zvládne dobrý tým sám a nestojí to ani korunu. Píšeme to sem záměrně.

Co se stane, když se to změří

Přečetli jsme tools/list, prompts/list a resources/list u veřejně dostupných MCP serverů z oficiálního registru - bez přihlašovacích údajů, bez jediného volání nástroje. Vzorek, ne census: z 398 náhodně vybraných záznamů, které se samy deklarovaly jako přístupné bez přihlášení, jich 43,2 % autorizaci ve skutečnosti vyžadovalo - metadata registru nejsou spolehlivá. Zbylých 194 katalogů šlo přečíst anonymně, a anonymní čitelnost táhne vzorek k malým, mladým projektům (medián 4 nástroje) - čísla neplatí pro velké byznysové konektory. Kontroly jsou statické, ověřují přítomnost a tvar, nikdy pravdivost. A jedna věc navíc k poctivosti: zápis do katalogu je podle vlastní dokumentace Anthropicu nepovinný - „the directory is optional… A connector does not need to be in the directory for you to use it." Čísla níž tedy neříkají „váš server je rozbitý"; říkají „kdybyste se o katalog ucházeli, tady byste narazili".

Důležitější korekce: 194 čitelných katalogů nejsou 194 firmy, ale 128 distinct provozovatelů po deduplikaci na registrovatelnou doménu - jeden z nich sám stojí za 58 ze 194 endpointů, téměř identickými nasazeními jednoho template. Ověřili jsme to naživo: 57 z 58 sdílí jeden verdikt, 56 z nich má přesně dva nástroje, a tři namátkou dotázané endpointy vrátily identický tvar (stejné dva nástroje, žádný title, cacheScope: "server"). Od tohoto místa proto počítáme podle provozovatele, ne podle endpointu - horší pro dramatičnost čísel, lepší pro jejich pravdivost.

0 ze 194 endpointů - a 0 ze 128 provozovatelů - projde úplně každou kontrolu. Přísněji: aspoň jednu vadu, na kterou katalogová review odmítá, nese 164 ze 194 endpointů (102 ze 128 provozovatelů); zbylých 30 endpointů nese aspoň jedno varování. Čistý není ani jeden.

Na aktuální revizi 2026-07-28 je zatím jen 17 provozovatelů - malý vzorek, přiznáváme otevřeně. Z celé populace 128 má title 69 (53,9 %) a bezpečnostní hint 65 (50,8 %). Na těch 17 aktuálních konkrétně chybí title u 5 a hint u 7 - stejný směr, menší vzorek.

Stejný den, stejná populace, ještě jeden řez - tentokrát ne podle revize, ale podle toho, kdo tu kterou část vytváří. Počítáno po provozovatelích, s endpointovým číslem vedle pro srovnání:

Co se kontroluje Kdo to vytváří Endpointy Provozovatelé
OAuth: pozná odmítnutý klient, kde se má přihlásit? framework / gateway 166 ze 172 (96,5 %) 147 ze 152 (96,7 %)
Capabilities: server dodá to, co deklaruje? framework 191 ze 192 (99,5 %) 125 ze 126 (99,2 %)
Definice nástrojů: projde všech osm ručně psaných kritérií člověk, ručně 13 ze 194 (6,7 %) 9 ze 128 (7,0 %)

Endpointová a provozovatelská míra se na každém řádku téměř shodují. To samo o sobě mluví proti tomu, že je výsledek artefakt jednoho velkého publikujícího - kdyby byl, deduplikace by čísla rozhodila, a nerozhodila. Vzorec je čitelný: části, které za vás vygeneruje framework, projdou skoro vždy. Část, kterou musí někdo dopsat ručně - title, pravdivý readOnlyHint, popisek, který nenavádí model - projde jen u necelých 7 % provozovatelů. Není to nedbalost celého ekosystému. Je to rozdíl mezi tím, co ověří kompilátor, a tím, co je úsudek napsaný v pátek odpoledne k nástroji, který jste zrovna přidali.

Kde to končí a kde začínáme my

Oficiální sada vám řekne, jestli mluvíte protokolem. Neřekne vám, jestli vás katalog přijme.

Fit Check je zdarma a nezávazný. Pošlete nám endpoint. Do dvou pracovních dnů dostanete zpátky report: každý nález s verdiktem, s citací pravidla, na které dopadá, a s odkazem na stránku, kde si to pravidlo ověříte sami. Nevoláme žádný nástroj, čteme jen tools/list, takže se nemá co rozbít. Pokud je endpoint za autorizací, dostanete stejný checklist s poznámkou, co jsme ověřit nemohli a co k tomu potřebujeme.

Když je report čistý, řekneme vám to. Čistý report je taky výsledek, a je to přesně ten papír, který se ukazuje CTO nebo recenzentovi.

Konformní test a katalogová review nejsou dvě přísnosti téhož. Jsou to dvě různé otázky. Odpověď na první máte zdarma jedním příkazem. Ta druhá se zjistit dá taky. Jen se na ni skoro nikdo neptá.