Saltar al contenido
mcpizer 0.1.0 · bf25803
Pasarela MCP con autorización

Invocarno es actuar

Decide, para cada invocante, qué tools ve, contra qué cuenta se ejecuta y bajo qué límites.

Hoy, desde el repo · 40 segundos
$ git clone https://github.com/rflvz/mcpizer
$ cd mcpizer && pnpm i && pnpm build
$ pnpm mcpizer validate examples/policy.yaml --catalog examples/catalog.yaml

Cuando se publique — hoy es un 404
$ npx mcpizer validate mi-politica.yaml

No despliega nada. Sale con permitido o denegado por capacidad, con motivo y fichero:línea:columna.

7
puertos
19
implementaciones
8
motivos, ni un noveno
0
usuarios todavía

I

Lo quedevuelve

Una denegación no dice sólo que no: dice el motivo y el sitio exacto que hay que tocar.

Tres invocaciones
principal   corp:ana  [team=ventas role=analyst]

PERMITIDO
  motivo    granted — una concesión lo cubre
  sobre     crm.contact.read
  sitio     examples/policy.yaml:95:5  /grants/0
  cuenta    crm-solo-lectura
  techo     500 llamadas por 1h
  ve        crm-principal/get_contact, crm-principal/search_contacts
Dónde se paró
  1. declarada
  2. realizada
  3. concedida
  4. cuenta
  5. techo
Motivo · vocabulario cerrado granted una concesión lo cubre examples/policy.yaml:95:5 /grants/0
principal   corp:ana  [team=ventas role=analyst]

DENEGADO
  motivo    no_grant_matches — ninguna concesión cubre esta capacidad para este principal
  sobre     crm.contact.write
  sitio     examples/policy.yaml:95:3  /grants
Dónde se paró
  1. declarada
  2. realizada
  3. concedida se paró aquí
  4. cuenta
  5. techo
Motivo · vocabulario cerrado no_grant_matches ninguna concesión cubre esta capacidad para este principal examples/policy.yaml:95:3 /grants
principal   corp:ana  [team=ventas role=analyst]

DENEGADO
  motivo    usage_unknown — el uso acumulado es desconocido, y eso se trata como techo agotado
  sobre     crm-solo-lectura
  sitio     examples/policy.yaml:95:5  /grants/0
Dónde se paró
  1. declarada
  2. realizada
  3. concedida
  4. cuenta
  5. techo se paró aquí
Motivo · vocabulario cerrado usage_unknown el uso acumulado es desconocido, y eso se trata como techo agotado examples/policy.yaml:95:5 /grants/0

Las tres invocaciones son la misma persona. Lo que cambia es la capacidad y el estado del contador — y el motivo dice cuál de las dos cosas fue.


II

El sitioque se toca

La línea 95 de arriba es esta. Cuatro campos: a quién, qué, con qué cuenta y con qué techo.

 95  - to:  # A a quién 96      issuer: corp 97      attributes: { team: ventas } 98    capabilities: [crm.contact.read]  # B qué capacidades 99    using: crm-solo-lectura  # C con qué cuenta100    limits:  # D con qué límite101      calls: 500102      per: 1h
A a quién
Un emisor y los atributos que lo seleccionan. Sólo los declarados.
B qué capacidades
Capacidades del dominio, no nombres de tools. Qué tool las realiza lo dice el catálogo.
C con qué cuenta
La identidad de ejecución. Aquí sólo vive su referencia; la credencial no está en el artefacto.
D con qué límite
El techo. Si no se puede saber cuánto se ha consumido, se trata como agotado.

III

Dos asasque noencajan

La C de arriba es una referencia, no una credencial. No existe un tipo común a las dos, deliberadamente.

Principal
id
identificador
attributes
pares clave-valor para selección

Nunca contiene material de credencial.

AccountRef
id
asa opaca

Ni una credencial, ni una envoltura de credencial, ni algo de lo que se pueda derivar una.

  1. 01

    Se deniega por defecto.

  2. 02

    El núcleo nunca ve credenciales.

  3. 03

    Toda decisión lleva motivo — también los permisos.

  4. 04

    La credencial se resuelve después de autorizar, nunca antes.

  5. 05

    Uso desconocido es techo agotado.

Cinco invariantes · no dependen de la configuración


IV

Lo que hayy lo que no

Todo lo de esta página lo genera el CLI. También los números que no favorecen.

7
puertos
19
implementaciones
22
comprobaciones
4
sin caso que las rompa
Cada puerto, más de una implementación · ninguna obligó a cambiar un contrato
Puerto Implementaciones
¿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

Una comprobación sin un caso que la haga fallar no comprueba nada. Estas 4 todavía no lo tienen, y se dicen aquí:

  • Falta el import profundo no resuelve declared-surface.test.ts:34
  • Falta lo que se publica se instala installable.test.ts:74
  • Falta y el descuido que ningún manifiesto delata installable.test.ts:210
  • Falta el manifiesto publicado dice lo que hay que decir installable.test.ts:250

Los paquetes todavía no están publicados.

bloqueado por la licencia

Falta elegir licencia.

decisión 0042, abierta

Ningún adaptador tiene todavía un usuario.

7 puertos · 19 adaptadores · 0 usuarios


V

Cuatrocomandos

Sin red, sin credenciales y sin que exista ningún despliegue.

$ git clone https://github.com/rflvz/mcpizer
$ cd mcpizer && pnpm i && pnpm build
$ pnpm mcpizer validate examples/policy.yaml --catalog examples/catalog.yaml