- This version: https://7it.co.il/standard/capability-resolution/0.2/
- Latest version: https://7it.co.il/standard/capability-resolution/
- Source, issues and reference code: https://github.com/XLSV777/capability-resolution
- Editors: 7IT Solutions. We welcome co-editors from other resolver, gateway or client projects.
- License: CC BY 4.0. Reference code: MIT.
- Status: an independent proposal, for use with the Model Context Protocol and other tool protocols. Not part of the Model Context Protocol specification, and not endorsed by Anthropic, the MCP maintainers, the Linux Foundation or any vendor.
- Trademarks: Model Context Protocol and MCP are trademarks of their respective owners.
The key words MUST, MUST NOT, SHOULD, SHOULD NOT and MAY are to be read as in RFC 2119 and RFC 8174 when, and only when, they appear in capitals.
This document has two parts:
- The core (sections 1 to 14) is independent of any tool protocol. It says "server" for any network service an AI client can call for a job.
- A binding (section 15) says what a server and its canonical URL are for one tool protocol. This version defines one binding, for use with the Model Context Protocol.
1. Purpose
An AI agent, its client or its gateway often needs a tool for a job and does not know which server has one. It also cannot tell, before connecting, whether that server answers today. Today it guesses, searches the web, or loads tool lists from several servers.
This spec defines a small HTTP protocol for asking a resolver a single question: "which servers can do this job, and did they answer when last checked?" The answer is a short list of candidates. Each candidate is signed by the resolver and expires.
It works like DNS for capabilities:
- Many resolvers can exist and a client may use several.
- Answers are signed and expire.
- The client keeps the final decision.
A resolver never hosts servers, never connects a client to a server, and never sells placement.
What this spec is not:
- Not a registry. Registries record what publishers declare. A resolver adds what it observed, and MAY use registries as a source.
- Not a server description format. Server description documents describe a server. A resolver MAY point to them. The declaration file (section 13) is only a short pointer list that an owner writes by hand: endpoints, jobs, contact and which resolvers may list them.
- Not a ranking method. How a resolver chooses and orders candidates is its own method. It is outside this spec, and the spec does not require a resolver to disclose it.
2. Terms
- Server: a network service that offers tools to AI clients, reachable at an https URL. A binding (section 15) says which services count as servers for one tool protocol.
- Binding: the rules that apply this core to one tool protocol (section 15).
- Declaration file: the plain-text file a server owner publishes at
/.well-known/capabilities.txt(section 13). - Canonical URL: the server URL in the form given in section 4.
- Resolver: an HTTP service that implements sections 5 and 6.
- Need: a short plain-language description of a job, for example "send a transactional email".
- Constraint: a filter the client asks the resolver to apply (section 6.2).
- Candidate: one server in a resolve answer, carrying a signed token.
- Record: a resolver's signed statement about one server (section 6.3).
- Token: a JWS in compact serialization, signed by the resolver (section 8).
- Client: anything that calls a resolver: an agent host, a tool client, a gateway or a plugin.
3. Overview
client resolver (one of several)
| GET /.well-known/capability-resolver -------------> {v, resolve, record, keys[], policy_url}
| GET <resolve>?need=...&constraints=... ------------> {candidates: [{id, url, status, checked_at, expires, evidence, jws}]}
| verify each jws with keys[]; drop what fails
| GET <record>?id=... (optional) --------------------> {signed record, anchor, proof}
| apply the client's own policy; maybe connect to the server (never the resolver's decision)
4. Server identity
Canonical URL. The binding says which URL of a server is its address. To put that URL in canonical form, a resolver or client:
- Parses the URL.
- Requires the
httpsscheme and refuses URLs that carry credentials. - Lower-cases the host and removes a leading
www.. - Removes port 443 (keeps any other port).
- Removes the query, the fragment and any trailing slashes.
Two candidates with the same canonical URL are the same server, across resolvers.
Server ID. A resolver gives each server a stable ID of the form <namespace>:<local>.
namespaceis declared in the resolver's discovery document: 1 to 32 characters, lower-case letters, digits and hyphens.localis opaque to clients.- An ID MUST stay the same for as long as the resolver tracks that canonical URL, and MUST NOT be reused for another server.
- IDs are scoped to their resolver. Clients match servers across resolvers by canonical URL, not by ID.
- A resolver MAY derive the ID from the canonical URL. The reference implementation uses 16 base32 characters of
SHA-256 over
"capability-server\n" + canonical URL.
5. Discovery
A resolver publishes GET /.well-known/capability-resolver on its own origin, over https, as application/json:
{
"v": "0.2",
"resolver": "Example Resolver",
"iss": "https://resolver.example",
"resolve": "https://resolver.example/resolve",
"record": "https://resolver.example/record",
"keys": [{ "kty": "OKP", "crv": "Ed25519", "x": "<base64url>", "kid": "<RFC 7638 thumbprint>", "use": "sig", "alg": "EdDSA" }],
"policy_url": "https://resolver.example/policy",
"id_namespace": "example",
"max_candidates": 10,
"max_ttl_s": 172800,
"constraints": ["no_sign_in", "read_only", "max_ms", "payment"],
"conformance": "resolver-1"
}
| Field | Required | Meaning |
|---|---|---|
v |
yes | Spec version, "0.2". |
iss |
yes | The resolver's origin. It MUST equal the origin serving this document, and every token's iss. |
resolve, record |
yes | Endpoint URLs. They MUST be on the same origin as iss. |
keys |
yes | Current public keys as JWKs (RFC 8037). Each key has a kid. A key MAY carry nbf and exp (seconds) for rotation. |
policy_url |
yes | A human-readable page covering the obligations in section 9 and the method changelog. |
resolver |
no | Display name. |
id_namespace, max_candidates, max_ttl_s, constraints, conformance |
no | As named. Unknown fields MUST be ignored. |
The document SHOULD be cacheable for up to one hour.
6. Endpoints
6.1 resolve
GET <resolve>?need=<text>&constraints=<list>
need: 3 to 200 characters of plain text.constraints: optional (6.2).
The answer, 200 application/json:
{
"v": "0.2",
"iss": "https://resolver.example",
"constraints": "no_sign_in,read_only",
"ignored": ["unknown_thing"],
"issued_at": "2026-10-28T12:00:00.000Z",
"candidates": [
{
"id": "example:abcdefghijklmnop",
"url": "https://mail.example.com/mcp",
"status": "ok",
"checked_at": "2026-10-28T10:05:00Z",
"expires": "2026-10-30T12:00:00.000Z",
"evidence": { "record": "https://resolver.example/record?id=example:abcdefghijklmnop", "method": "https://resolver.example/method" },
"jws": "<compact JWS>"
}
]
}
Rules for the answer:
- At most 10 candidates, in the resolver's order of preference. An empty list is a valid answer.
statusis one of the following (the binding says what each one means for its protocol):ok: the server answered and offered its tools without sign-in.sign_in: the server answered and requires sign-in.down: the server did not answer at its last check.unknown: there is no check on file.
- A resolve answer SHOULD contain only
okandsign_inservers. checked_atis when the resolver last observed that status.evidencepoints to where the claim can be checked further.- The fields next to
jwsare a convenience. Clients MUST use the values inside the verified token (section 7). - Errors use a non-200 status with
{v, error, note}:400for a bad request.404for an unknown server.429for rate limits.503when the resolver cannot answer or cannot sign.
- A resolver MUST NOT return unsigned candidates.
6.2 Constraints
constraints is a comma-separated list. This version defines:
| Item | Meaning |
|---|---|
no_sign_in |
Only servers that answered without sign-in. |
read_only |
Only servers with a read-only tool for the need, as the resolver judges it. |
max_ms:<n> |
Only servers whose handshake took at most n milliseconds (1 to 60000) at the last check. |
payment:none / payment:any |
none: only servers that declare no payment requirement. any is the default. |
A resolver MUST apply every constraint it lists in its discovery document. It MUST ignore unknown or malformed
items and SHOULD return them in ignored. New constraints are added by a version of this spec or under an
x-<namespace>- prefix.
6.3 record
GET <record>?id=<id> or GET <record>?url=<server url> returns one signed record:
{
"v": "0.2", "iss": "https://resolver.example", "sub": "example:abcdefghijklmnop",
"url": "https://mail.example.com/mcp", "name": "Mail", "status": "ok",
"checked_at": "2026-10-28T10:05:00Z", "first_seen": "2026-10-02",
"iat": 1793188800, "exp": 1793361600,
"evidence": { "record": "...", "method": "..." },
"anchor": { "day": "2026-10-27", "root": "<hex>", "url": "https://resolver.example/roots/2026-10-27" },
"proof": null,
"expires": "2026-10-30T12:00:00.000Z",
"jws": "<compact JWS over the same claims>"
}
anchor(optional): the newest signed history head of the resolver that covers the data behind the record.proof:null, or a Merkle inclusion proof of the record in the anchor ({type: "rfc9162-sha256", leaf_index, tree_size, path[]}). Conformance levelresolver-2requires it.
7. Client behaviour
Resolver list. A client holds an ordered list of resolver origins. This spec ships no default: the list is empty unless the client's maker or its user adds resolvers. Plain-http resolvers MUST NOT be used.
Order. The client asks resolvers in order and MAY ask several in parallel. It MAY merge answers by canonical URL.
Fail open. A resolver that is unreachable, slow, rate-limited or returns anything that does not verify is skipped. If no resolver answers, the client continues exactly as it would without this protocol. A resolver MUST NOT become a single point of failure.
Verify. For each candidate the client:
- verifies the JWS with a key from that resolver's
keys, or with pinned keys; - checks that the token's
issis that resolver; - checks
iatandexp(section 8); - uses only the signed claims.
A client that ships a default resolver SHOULD pin that resolver's keys.
- verifies the JWS with a key from that resolver's
No auto-connect. A candidate is advice. A client MUST NOT connect to, authorize or call a server only because a resolver named it. Connecting follows the client's own policy, for example user approval, an allowlist or an organisation policy.
Cache. Answers MAY be cached until the earliest
expamong their tokens, and MUST NOT be used after it. Discovery documents MAY be cached for up to one hour.Status is history.
statusis what was observed atchecked_at, not a promise about the next call.
8. Signatures and expiry
- Format. JWS compact serialization (RFC 7515) with
algEdDSAover Ed25519 (RFC 8037). The protected header MUST containalg,kid, andtyp=capability-resolver+jws. - Claims.
- Required:
v,iss,sub(server ID),url(canonical URL),status,checked_at,iatandexp(in seconds), andevidence. - Records add
name,first_seen,anchorandproof. - Tokens MUST NOT contain the need text, constraints, or anything about the caller. A token can then be forwarded or logged without revealing what was asked.
- Required:
- Expiry.
exp - iatMUST NOT exceed 48 hours (172800 s). Clients MUST reject a token when any of these hold:- its lifetime is longer than 48 hours;
expis more than 300 seconds in the past;iatis more than 300 seconds in the future.
- Key IDs.
kidSHOULD be the RFC 7638 thumbprint of the public key.
9. Resolver obligations
A conforming resolver:
- Neutrality. It MUST NOT accept payment, or anything of value, for including or ordering a candidate. It
MUST NOT favour servers it operates or is paid by. If it has any such relationship, it MUST disclose it at
policy_url. - Method changes. It MUST keep a dated changelog of material changes to how it selects candidates at
policy_url. It does not have to publish the method itself. - Never hosts. It MUST NOT host, proxy or impersonate the servers it resolves. Candidate URLs point to the servers themselves.
- No user data. It MUST NOT store the need text together with anything that identifies the caller. It MUST NOT put caller data in tokens, and MUST NOT sell or share query logs. Aggregate counts are allowed.
- Rate limits. It SHOULD apply rate limits and answer
429withRetry-Afterwhen it does. - Honest status. It MUST NOT report a status it did not observe, and MUST NOT sign a
checked_atlater than the observation.
10. Privacy
The need text can reveal what a user is working on. Accordingly:
- clients SHOULD send only the job, never user content, file names or credentials;
- resolvers follow section 9.4;
- tokens carry no query data (section 8).
A client that wants less exposure can ask several resolvers, or use a local resolver.
11. Security considerations
- Poisoning. A server owner or a crowd of fake reports may try to push a server into answers. Resolvers SHOULD rely on their own observations for status and treat third-party reports as untrusted input. Clients reduce the effect by using several resolvers and keeping their own connect policy (7.5).
- Impersonating a resolver. Discovery is over https only, and endpoints must stay on the resolver's origin. Clients that ship a default resolver pin its keys.
- Key rotation. A resolver publishes the new key next to the old one before signing with it. It keeps the old
key until every token signed with it has expired (at least 48 hours), and records rotations at
policy_url. If a key is compromised, the resolver removes it at once. Clients refetch discovery hourly, so a removed key stops verifying within an hour plus the cache time. - Replay. A token is a dated statement, not a session credential. Replay inside its lifetime only repeats a
true statement about the past.
expbounds staleness, and clients judge freshness bychecked_at. - Third-party text. Server names and descriptions are untrusted text. Clients MUST NOT treat them as instructions.
- Tokens prove the resolver's claim, not the server's identity. Connecting still needs the tool protocol's own authorization and TLS.
12. Conformance levels
| Level | Requires |
|---|---|
resolver-1 |
Sections 5, 6.1 to 6.3 (with proof allowed to be null), 8 and 9, the resolver rules of 13.3 and 13.4, and at least one binding. |
resolver-2 |
Level 1, plus proof on every record, and an append-only signed history whose heads are published daily. |
client-1 |
Section 7 rules 1 to 7, and section 8 verification. |
server-1 |
The server's host publishes a valid declaration file (section 13) that lists the server, fetchable under the rules of 13.4. A signature is not required. |
13. Server declaration file
Any server owner can publish one small text file that says which servers the site runs, what jobs they do, and
which resolvers may check and list them. It works like robots.txt and security.txt: a file anyone can write by
hand and place on a site, with no account and no registration.
GET https://<host>/.well-known/capabilities.txt
A minimal file:
Conformance: Capability Resolution 0.2
Contact: mailto:tools@example.com
Expires: 2027-04-30T00:00:00Z
Endpoint: https://mail.example.com/mcp
Protocol: mcp
Jobs: send a transactional email
Sign-in: none
Payment: none
13.1 Format
- The file is served as
text/plain, SHOULD carrycharset=utf-8, and MUST be valid UTF-8. A leading byte order mark is ignored. - Each line is blank, a comment starting with
#, or a field:Name: value. Field names are case-insensitive. Lines end with LF or CRLF. Spaces around the value are ignored. - Fields that this version does not define are ignored. Lines that are not fields are ignored.
- The file has two kinds of fields. File fields apply to the whole file and may appear anywhere before
Signature. Server fields belong to a server group: a group starts at anEndpointline and runs until the nextEndpointline or the end of the file. A server field before the firstEndpointis an error.
There is no JSON form in this version. A server that wants a richer description already has one (a Server Card or
an agent card) and points to it with Card.
13.2 Fields
File fields:
| Field | Required | Value |
|---|---|---|
Conformance |
yes, once | Capability Resolution <version>, for example Capability Resolution 0.2. |
Contact |
yes, one or more | A mailto:, https: or tel: URI where the owner can be reached about these servers. |
Expires |
yes, once | An RFC 3339 date-time after which the file is stale. It SHOULD be less than a year ahead. |
Resolvers |
no, one or more | Which resolvers may check and list the servers (13.3). Absent means every resolver. |
Signature |
no, last | A signature over the file (13.5). |
Server fields, one group per server:
| Field | Required | Value |
|---|---|---|
Endpoint |
yes, starts a group | The server's https URL, the one a client connects to. It is compared in the canonical form of section 4, and each endpoint appears once. |
Protocol |
yes, once | A lower-case token naming the tool protocol. A binding defines its token (section 15 defines mcp). |
Jobs |
yes, one or more | A plain-language job the server does, 3 to 200 characters, in the same words a client would use for a need (section 6.1). Repeat the field for more jobs. |
Sign-in |
SHOULD, once | none, optional or required. |
Payment |
SHOULD, once | none (no call is charged) or any (some calls may be charged), matching the payment constraint (6.2). |
Card |
no, one or more | An https URL of a description document for this server, for example a Server Card or an agent card. |
A file is valid when it parses under 13.1, has every required field with a valid value, has not expired, and
every Endpoint is covered by its host (13.3).
13.3 Scope and the Resolvers field
Which servers a file speaks for. A file speaks only for endpoints on its own host or a subdomain of that host.
https://example.com/.well-known/capabilities.txt may list https://mail.example.com/mcp, but never
https://mail.other.org/mcp. Resolvers MUST ignore any endpoint outside that scope. For an endpoint, a resolver
uses the file on the endpoint's own host if there is one, and otherwise MAY use the file of a parent host that
lists it.
Resolvers. The value is a list of items separated by spaces or commas. The field may repeat; the items add up.
*: every resolver may check and list these servers.https://resolver.example: this resolver may (an allow list).-https://resolver.example: this resolver may not (a deny).none: no resolver may.
A resolver is identified by its iss origin (section 5). A resolver is allowed when it is named or * is present,
and it is not denied and none is absent. A deny always wins over an allow.
A resolver:
- MUST read the declaration file of a server's host (13.4) before it first lists that server, and again whenever its copy is older than 24 hours while it lists it.
- MUST respect a deny. A denied resolver MUST NOT return the file's servers as candidates or serve records for them, from this file or from any other source, for as long as the deny stands. It stops as soon as it reads the deny, so within 24 hours of the owner publishing it (rule 1). Tokens it signed earlier may stay valid until they expire (section 8). It MAY keep the canonical URL to remember the deny.
- MUST respect a deny in a file that has expired or is otherwise invalid. An invalid file grants nothing, but its deny still holds.
- MUST treat the file as a claim, not proof. The file never sets a
status. A resolver reports only what it observes (section 9.6): it checks each declared server itself before listing it, and when its observation and the file disagree (for exampleSign-in: nonebut the server asks for sign-in), the observation wins. A resolver MAY use the declaredPaymentfor thepayment:noneconstraint, and SHOULD say atpolicy_urlthat it does. - MAY use the file to learn about servers it did not know. Allowing a resolver does not oblige it to list anything.
- MUST treat
Jobsand every other value as untrusted text (section 11).
A site without a file sets no rule here. Resolvers then work as they did before this section.
13.4 Fetching
A resolver or a checker that reads the file:
- uses https only, and never reads the file over plain http;
- sends a
User-Agentthat names the resolver; - follows at most 3 redirects, and only to the same origin. A redirect to another origin means there is no file;
- reads at most 32 KiB (32768 bytes) and treats a larger file as invalid;
- on
200, parses the file; on404or another4xx, treats the site as having no file; - on a
5xxor a network error, keeps using its last good copy for up to 7 days, and keeps any deny in it after that until a fetch succeeds; - caches the file as its
Cache-Controlallows, but never uses a copy older than 24 hours when a fetch is possible.
Owners SHOULD serve the file with Cache-Control: max-age of at most 86400.
13.5 Signature (optional)
An owner MAY sign the file. The Signature field is then the last field, and its value is a JWS in compact
serialization with a detached payload (RFC 7515, Appendix F): <header>..<signature>.
- The payload is every byte of the file before the start of the
Signatureline. - The protected header MUST contain
algEdDSA(Ed25519, RFC 8037),typ=capabilities-txt+jws,kid, andjku: an https URL on the same origin as the file that returns a JWK set ({"keys": [...]}). - Content after the
Signatureline is an error.
A valid signature shows that whoever controls the key set on that origin wrote these exact bytes. It does not show that the claims are true, and an unsigned file is as valid as a signed one. A resolver MAY prefer signed files when two sources disagree.
13.6 Security considerations for the file
- Suppressing someone else's server. The scope rule in 13.3 stops a site from denying, or claiming, servers on a host it does not control.
- False claims. A file can claim jobs a server cannot do. Resolvers observe before listing (13.3 rule 4), so a false claim at most asks a resolver to look.
- Fetching as an attack. Resolvers fetch from many origins. The https-only, same-origin redirect and size rules in 13.4 bound what a hostile origin can make a resolver do.
14. Well-known URI registrations (to file after review)
Two suffixes, each filed under RFC 8615 ("Specification Required") once the text is stable:
| URI suffix | Used by | Section |
|---|---|---|
capability-resolver |
a resolver's discovery document (JSON) | 5 |
capabilities.txt |
a server owner's declaration file (plain text) | 13 |
For each:
- Change controller: the editors of this specification (to be transferred to a standards body if one adopts it).
- Specification document: this document.
- Status: provisional.
- Related information: none.
Neither suffix collides with a registered or proposed suffix as of 2026-10-29 (https://www.iana.org/assignments/well-known-uris/):
agent-card.json,api-catalogandoauth-protected-resourceare registered.ai-catalog.json,mcp,mcp.json,mcp/server-card.jsonandmcp-serverare proposed.agents.txtandagents.jsonare proposed in draft-car-agents-txt-wellknown-00 (June 2026), a per-path list of what web agents may do on a site.capabilities.txtis a different file: it lists tool servers for resolvers and says which resolvers may list them.capabilities.txtwas chosen overcapability.txt(singular, a near twin),capability-resolution(too close tocapability-resolver) and names with a protocol in them (the core is protocol-neutral). The.txtending, as insecurity.txt, tells owners that it is a text file they edit by hand.
15. Binding for use with the Model Context Protocol
This section applies the core to servers that speak the Model Context Protocol. A resolver that follows it says so
at its policy_url.
Server. A remote server that implements the Model Context Protocol over its Streamable HTTP transport (or the older HTTP with SSE transport) at an https endpoint. Local servers that run over stdio are out of scope.
Canonical URL. The server's endpoint URL, the one a client connects to (for example
https://mail.example.com/mcp), put in canonical form by section 4. A server whose endpoint moves is a new server unless the resolver follows a permanent redirect from the old endpoint.Status.
ok: the server completed initialization and listed its tools without authorization.sign_in: the server answered and required authorization (for example HTTP 401 with the protocol's authorization metadata).downandunknown: as in the core.
Handshake time (
max_ms): the time from the first request to a completed initialization.Read-only (
read_only): a tool the server marks as read-only, or that the resolver judges read-only from its description.Evidence.
evidenceMAY take the shape of anevidenceReffrom the trust-annotations work in that protocol (SEP-1913) when that settles. A candidate'sevidenceMAY link the server's Server Card.Connecting. A candidate does not replace the protocol's own authorization and TLS when the client connects.
Declaration file. The
Protocoltoken ismcp.Endpointis the endpoint URL above.Sign-in: requiredmeans the server answers with the protocol's authorization challenge.CardSHOULD point to the server's Server Card when it has one. A server reachesserver-1when its host publishes a valid file that lists it. Example, for a site with two servers:# https://example.com/.well-known/capabilities.txt Conformance: Capability Resolution 0.2 Contact: mailto:tools@example.com Contact: https://example.com/support Expires: 2027-04-30T00:00:00Z Resolvers: * -https://resolver.unwanted.example Endpoint: https://mail.example.com/mcp Protocol: mcp Jobs: send a transactional email Jobs: check whether an email was delivered Sign-in: none Payment: none Card: https://mail.example.com/mcp/server-card Endpoint: https://example.com/billing/mcp Protocol: mcp Jobs: create an invoice Sign-in: required Payment: anyA resolver that reads it still connects to each endpoint and records what it observes (13.3 rule 4).
16. Relation to other work
- Server Cards and AI Catalog (SEP-2127). These say what is at a known server. Capability Resolution says which
servers fit a job and how they behaved. A declaration file points to a Server Card with
Cardinstead of repeating it. - robots.txt (RFC 9309), security.txt (RFC 9116) and llms.txt. The declaration file borrows their shape: one
text file at a fixed path,
Field: valuelines,ContactandExpiresfrom security.txt, and an allow and deny list read by automated visitors, as in robots.txt. - agents.txt (draft-car-agents-txt-wellknown). Says what web agents may do on a site's paths. The declaration file says which tool servers a site runs and which resolvers may list them. A site can publish both.
- The MCP Registry (registry.modelcontextprotocol.io). Publisher-declared lifecycle, no health and no signed records. Resolvers MAY use it as a source.
- Trust annotations,
evidenceRef(SEP-1913, open).evidenceis meant to align with it (section 15). - A2A Agent Card signing. These are self-signed by the agent. Capability Resolution tokens are signed by a third party, about someone else's server.
- DNS-based discovery drafts for that protocol (draft-morrison-mcp-dns-discovery, draft-serra-mcp-discovery-uri). These bootstrap one domain's own server. They are complementary.
17. Changelog
- 0.2 (2026-10-29): added the server declaration file,
/.well-known/capabilities.txt(section 13): plainField: valuelines withEndpoint,Protocol,Jobs,Sign-in,Payment,Card,Contact,Expires,Conformance, aResolversallow and deny list, and an optional detached signature. Resolvers must respect a deny, treat the file as a claim and observe before listing, and fetch it over https with same-origin redirects only, 32 KiB at most, cached at most 24 hours. New conformance levelserver-1;resolver-1now includes the resolver rules of 13.3 and 13.4. Second IANA stub (capabilities.txt). Sections from 13 on are renumbered: the registrations are now 14, the binding 15. - 0.2 (2026-10-28): renamed to Capability Resolution, a tool-agnostic core plus a binding for use with the Model
Context Protocol (now section 15). The well-known suffix is now
capability-resolver(wasmcp-resolver), the JWStypiscapability-resolver+jws(wasmcp-resolver+jws), and the reference ID hash prefix is"capability-server\n"(was"mcp-server\n"), so reference IDs change.vis"0.2". Trademark notice added. - 0.1 (2026-10-28): first draft, not published. Its exact text was timestamped (RFC 3161 and OpenTimestamps) and is kept with its proofs in the source repository.
Timestamps
The exact text of each version is timestamped by two independent services, an RFC 3161 time-stamping authority (FreeTSA) and OpenTimestamps (anchored in Bitcoin). Only the SHA-256 hash was sent to them. The stamped files, the proofs and how to check them are in the proof folder of the source repository.