Trust and verification
Every entry in the Emboss discovery catalogue carries a signed trust manifest. The framework it declares is urn:air:getemboss.ai:trust:did-web-jws, version 1: the publisher identity is did:web:getemboss.ai, the signing key is the same Ed25519 key that signs the A2A agent card (key id emboss-a2a-1), the algorithm is EdDSA, and the signature is a detached JWS over the RFC 8785 canonical form of the trust manifest. The key resolves through the DID document at /.well-known/did.json or the JWKS at https://api.getemboss.ai/.well-known/a2a-jwks.json (on the API host only). This page is the governance document the trust manifest's governanceUri points at.
The catalogue and how to verify an entry
/.well-known/ard.jsonNo authThe ARD catalogue (ai-catalog.json is an alias), served on getemboss.ai and api.getemboss.ai. Each entry's trustManifest carries identity, identityType, trustSchema, provenance and signature. To verify one: 1. Remove trustManifest.signature and keep the rest of the trust manifest. 2. Check the identity's domain equals the URN publisher in the entry identifier. 3. Compute the RFC 8785 canonical bytes of the entry without trustManifest, hash them with SHA-256, and check provenance[0].sourceDigest equals sha256: plus that hex and sourceId equals the entry identifier. 4. Split the signature on dots into the protected header, an empty payload and the signature; the header's alg is EdDSA and its kid is did:web:getemboss.ai#emboss-a2a-1, resolvable through /.well-known/did.json or the jku header. 5. Verify the JWS over the protected header, a dot, and the base64url canonical bytes of the trust manifest without signature. A passing signature also proves the entry is unchanged since Emboss published it, because the digest binds its content.
Status codes
- 200The catalogue. Cached publicly for one hour.
curl -s https://getemboss.ai/.well-known/ard.json | jq '.entries[0].trustManifest'
{
"identity": "did:web:getemboss.ai",
"identityType": "did",
"trustSchema": {
"identifier": "urn:air:getemboss.ai:trust:did-web-jws",
"version": "1",
"governanceUri": "https://getemboss.ai/docs/reference/trust",
"verificationMethods": ["did"]
},
"provenance": [
{ "relation": "publishedFrom", "sourceId": "urn:air:getemboss.ai:mpp:pay-door", "sourceDigest": "sha256:..." }
],
"signature": "<protected>..<signature>"
}The DID document
/.well-known/did.jsonNo authThe W3C DID document for did:web:getemboss.ai. Its one verification method, did:web:getemboss.ai#emboss-a2a-1, is the public half of the signing key as a JSON Web Key, identical to the key in https://api.getemboss.ai/.well-known/a2a-jwks.json. A service entry points back at the catalogue.
Status codes
- 200The DID document. Cached publicly for one hour.
curl -s https://getemboss.ai/.well-known/did.json | jq .
{
"@context": ["https://www.w3.org/ns/did/v1", "https://w3id.org/security/suites/jws-2020/v1"],
"id": "did:web:getemboss.ai",
"verificationMethod": [{ "id": "did:web:getemboss.ai#emboss-a2a-1", "type": "JsonWebKey2020",
"controller": "did:web:getemboss.ai", "publicKeyJwk": { "kty": "OKP", "crv": "Ed25519", "x": "...", "kid": "emboss-a2a-1" } }],
"assertionMethod": ["did:web:getemboss.ai#emboss-a2a-1"],
"service": [{ "id": "did:web:getemboss.ai#ard", "type": "AICatalog", "serviceEndpoint": "https://getemboss.ai/.well-known/ard.json" }]
}The MCP server record
/.well-known/mcp.jsonNo authThe server record Emboss publishes to the MCP registry, served on both hosts so a directory can tie the domain to the listing. The A2A agent card is mirrored the same way at /.well-known/agent-card.json and /.well-known/agent.json, bytes unchanged, so its own signature verifies on either host.
Status codes
- 200The record. Cached publicly for one hour.
curl -s https://getemboss.ai/.well-known/mcp.json | jq .remotes
{
"name": "io.github.edwinorange/emboss",
"title": "Emboss",
"version": "1.8.1",
"remotes": [{ "type": "streamable-http", "url": "https://api.getemboss.ai/mcp" }]
}