You run a server. Being measured costs nothing.
There is no application to review, so there is nobody to persuade and no reason to charge you. Measurement is free and always will be. What you can pay for is being told the moment something changes, and being told exactly what to change when it does.
Before you put your server in front of this gate, put the gate in front of itself. It is on the same register as everyone else, under the same conditions, and it does not pass all of them today. On 2026-08-08 the first run against our own servers scored 0.0% on compensation disclosure. Under condition 06, 85.7% of our own tools failed before we fixed them to 2.9%. Both numbers are still published, and we did not delete them.
So this is not a claim that we are transparent. It is the other way around: point the gate at us, and keep whatever comes back, good or bad.
# measure this gate itself, right now
curl -s -X POST https://gate.horizonshield.dev/check \
-H 'content-type: application/json' \
-d '{"endpoint":"https://gate.horizonshield.dev/mcp"}'
No account, no fee, no waiting list
Put your endpoint in front of the gate
It reads
initializeandtools/list, and it reads your agent card. It calls none of your tools. Ten seconds, nothing installed, nothing signed.Read the verdict, and the hash under it
Every verdict carries a record_sha256. Recompute it before you believe us. A verifier you have to trust is not a verifier.
Fix what is not met, and be measured again
Nothing here is reviewed by a person, so there is no appeal to write. Change the condition and the next sweep says so.
What to change, condition by condition
initialize and tools/list from the public internet. Common causes: the server only listens locally, the transport is stdio rather than HTTP, or a proxy in front is rejecting an unauthenticated read./.well-known/agent-card.json with at least a name and a description, as JSON, over HTTPS.paid_by, referral_fee and listing_fee on the card. Only silence disqualifies. "referral_fee: none" and "referral_fee: 20 percent" both pass. We are not scoring the answer, only whether it was given.tools/list alone, the gate reads whether each tool's declared outputSchema can separate “the call failed” from “the call found nothing”, a boolean, or an enum with two or more values, where that state can live. It executes nothing and judges nobody: the verdict field is null on purpose, and the field names behind every score are published so you can see the false positives. Across 12,429 public endpoints, 96.7-99.1% of tools cannot make the distinction; 85.7% of ours could not either, before we fixed it to 2.9% (we measured ourselves first). To move your number: declare a real read-state (a boolean, or an enum like lookup: ok | absent) and put failures in the tool-error channel, so an empty result and a failed read never arrive as the same value. That fix is free and complete. If you would rather have it done for you and measured in public, before and after under one ruler, that is the paid remediation, with the conflict of interest named on its own page. The verdict itself is never for sale. Named by Federico Blanco Sanchez-Llanos, “The Mould, Not the Letter”, 2026-08-20.If you want this walked through against your actual server, that is the paid part: 2.0 hours, itemised, and the conflict of interest named on the page. Before you go there, the three free things on that page solve most rows, and if we think yours is one of them we will say so rather than take the work.
Drawn when it is asked for, not issued once
There is no procedure for taking a badge away, because there does not need to be one. The image is drawn from the register at request time, so it stops being green the moment your row does.
A saved file is a different thing: it stays green forever. So the saved version carries the date it was measured and the address where the current row lives. A dated snapshot is not a lie. A green rectangle with no date would be.
Anyone can put a server in front of this gate, including one they do not own. That includes yours, and it includes ours. The check is read only and calls no tool, so there is nothing there to abuse. But it does mean the register can contain a row you did not create. If that row is wrong, ask for a re-measurement and both results stay published.