Scan at scaleSites with a broken Personal Agent Protocol document
Sites with a broken Personal Agent Protocol document
A site-wide report: one row per host, over the pap rows the crawl emitted.
What this report returns
The Personal Agent Protocol puts a file at /.well-known/poppy.json that tells a customer's own AI agent how to start a session with a business, sign in on the customer's behalf, and reach the business's agent, APIs or website.
A row appears here when any of these is wrong, worst first:
- Not HTTPSPoppy.json was served over plain http, or a redirect took it to http, so agents (which must only follow HTTPS) refuse it, and the document could be altered in transit.Fix Serve
https://yourdomain/.well-known/poppy.json, with every redirect to an https:// address. - Invalid VersionProtocol_version is missing or isn't major.minor, so an agent can't tell whether it supports the document and must not use it.Fix Set
"protocol_version": "0.1". - Missing OrganizationThe document has no organization domain, which is required, so an agent can't confirm the document speaks for this site.Fix Add
"organization": {"name": "Example Company", "domain": "example.com"}. - Domain MismatchOrganization.domain names a different host from the one the document was requested at (a leading www. is ignored), so a compliant agent rejects it.Fix Set organization.domain to this site's domain, e.g.
"domain": "example.com"for example.com/.well-known/poppy.json. - Missing AuthThe document lists a company agent, APIs or a browser-session endpoint but has no auth block, and every session needs one, so nothing it offers can be used.Fix Add
"auth": {"issuer": "https://auth.example.com"}with the sign-in types you support. - Issuer Not HTTPSAuth.issuer is missing or isn't an https:// URL, so an agent can't find or trust the OAuth server behind your sessions.Fix Set
"issuer": "https://auth.example.com", the exact issuer your OAuth metadata names. - Insecure EndpointAn agent conversation endpoint or the browser-session endpoint is on plain http, so session tokens and browser assertions sent there travel unencrypted; the protocol requires HTTPS for both.Fix Serve them over https and list the https:// addresses.
- Issuer Metadata MissingThe OAuth issuer named in auth.issuer publishes no authorization-server metadata (it answered 404 at the RFC 8414 address), so an agent can't find where to get a session token.Fix Publish
https://auth.example.com/.well-known/oauth-authorization-server. - Issuer MismatchThe issuer's OAuth metadata names a different issuer from auth.issuer, so every compliant agent refuses the document.Fix Make auth.issuer and the metadata's
"issuer"the same string, character for character. - Domain Not ListedThe issuer's OAuth metadata has no
poppy_domainslist, or it doesn't include this domain, so compliant agents refuse the document; the list is what stops another site claiming your issuer.Fix Add"poppy_domains": ["example.com"]to the metadata. - No ChannelThe document offers none of agent, apis or web, so a personal agent has no way to reach the business through it.Fix Add at least one, e.g.
"web": {}to let agents browse the site, or an"apis"list. - Browser Session Off DomainWeb.
browser_session_endpointis on a host outside organization.domain and its subdomains, which the protocol forbids, so agents won't join a browser session there.Fix Host it on your own domain, e.g.https://example.com/poppy/browser-session. - Unknown API TypeAn entry in apis has a type other than openapi or mcp, the only two the protocol defines, so agents skip it.Fix Set
"type": "openapi"or"type": "mcp"and point url at that description or server. - Issuer Metadata IncompleteThe issuer's OAuth metadata lacks an endpoint the protocol requires:
token_endpointandrevocation_endpointalways,authorization_endpointwhen direct sign-in is offered,device_authorization_endpointwhen device sign-in is.Fix Add the missing endpoint to the metadata.
Spec: Personal Agent Protocol draft 0.1, sections 3, 3.1, 3.2, 5 and 6, with RFC 8414 for the issuer metadata. Sites that publish no poppy.json don't appear here, because absence is not a failure.
Security checks are provisional; precision has not yet been measured. A clean row is not a security assessment.
The columns it shows
Every defect this technology can carry is a column in the grid, worst first, so nothing is hidden behind a filter you have to know to apply.
- Host
host - Personal Agent Protocol Valid
papValid - Personal Agent Protocol Security Risk Detected
papSecurityRiskDetected - Personal Agent Protocol Findings
papFindings - Personal Agent Protocol Version
papProtocolVersion - Personal Agent Protocol Channels
papChannels - Personal Agent Protocol Issuer
papIssuer - Personal Agent Protocol Not HTTPS
papNotHttps - Personal Agent Protocol Invalid Version
papInvalidVersion - Personal Agent Protocol Missing Organization
papMissingOrganization - Personal Agent Protocol Domain Mismatch
papDomainMismatch - Personal Agent Protocol Missing Auth
papMissingAuth - Personal Agent Protocol Issuer Not HTTPS
papIssuerNotHttps - Personal Agent Protocol Insecure Endpoint
papInsecureEndpoint - Personal Agent Protocol Issuer Metadata Missing
papIssuerMetadataMissing - Personal Agent Protocol Issuer Mismatch
papIssuerMismatch - Personal Agent Protocol Domain Not Listed
papDomainNotListed - Personal Agent Protocol No Channel
papNoChannel - Personal Agent Protocol Browser Session Off Domain
papBrowserSessionOffDomain - Personal Agent Protocol Unknown API Type
papUnknownApiType - Personal Agent Protocol Issuer Metadata Incomplete
papIssuerMetadataIncomplete - Personal Agent Protocol Partially Assessed
papPartiallyAssessed - Ruleset Version
rulesetVersion - Security Check Status
securityCheckStatus - Related Security Frameworks
securityFrameworkReferences
About Personal Agent Protocol
A file at /.well-known/poppy.json that tells a person's own AI agent how to sign in to a business and reach it.
Read how Personal Agent Protocol is checked, including the specification it is validated against and a worked correct and broken example.
Running it
This report comes with Agentic Readiness in Lumar and appears on every crawl of any project that has it turned on. See the whole set, or check a single URL with the scanner on this site, which runs the same code with no account.