Callingis not acting
It decides, for each caller, which tools they see, which account executes and under which limits.
It deploys nothing. It exits with allowed or denied per capability, with a reason and file:line:column.
I
What itreturns
A denial does not merely say no: it says why, and the exact place to touch.
All three calls are the same person. What changes is the capability and the state of the counter — and the reason says which of the two it was.
II
The placeyou touch
Line 95 above is this one. Four fields: to whom, what, under which account and under which ceiling.
95 - to: # A to whom 96 issuer: corp 97 attributes: { team: ventas } 98 capabilities: [crm.contact.read] # B which capabilities 99 using: crm-solo-lectura # C which account100 limits: # D which ceiling101 calls: 500102 per: 1h - A to whom
- An issuer and the attributes that select it. Only declared ones.
- B which capabilities
- Domain capabilities, not tool names. Which tool realises them is the catalogue’s business.
- C which account
- The execution identity. Only its reference lives here; the credential is not in the artefact.
- D which ceiling
- The limit. If consumption cannot be known, it is treated as exhausted.
III
Two handlesthat donot fit
The C above is a reference, not a credential. There is no type common to the two, deliberately.
- id
- identifier
- attributes
- key-value pairs for selection
Never carries credential material.
- id
- opaque handle
Not a credential, not a credential wrapper, and not something a credential can be derived from.
- 01
Denied by default.
- 02
The core never sees credentials.
- 03
Every decision carries a reason — permissions included.
- 04
The credential resolves after authorization, never before.
- 05
Unknown usage is an exhausted ceiling.
Five invariants · they do not depend on configuration
IV
What is hereand whatis not
Everything on this page is generated by the CLI. Including the numbers that do not flatter.
| Port | Implementations |
|---|---|
| ¿quién invoca? | clave estática OIDC/JWT por JWKS mTLS por nombre distinguido |
| ¿de dónde sale la política? | fichero git a una referencia fija HTTPS |
| ¿qué tools hay? | catálogo declarado descubrimiento MCP (tools/list) |
| ¿cuánto se ha usado? | memoria del proceso Redis |
| ¿de dónde sale la credencial? | variable de entorno Vault gestor de secretos cloud OAuth con refresco |
| ¿cómo se invoca? | MCP por stdio MCP por HTTP streamable |
| ¿dónde va la auditoría? | JSON a stderr OpenTelemetry por OTLP fichero con rotación |
A check without a case that makes it fail checks nothing. These 4 do not have one yet, and they are named here:
- Missing el import profundo no resuelve declared-surface.test.ts:34
- Missing lo que se publica se instala installable.test.ts:74
- Missing y el descuido que ningún manifiesto delata installable.test.ts:210
- Missing el manifiesto publicado dice lo que hay que decir installable.test.ts:250
The packages are not published yet.
blocked on the licence
A licence still has to be chosen.
No adapter has a user yet.
7 ports · 19 adapters · 0 users
V
Fourcommands
No network, no credentials, and no deployment anywhere.