Validar o token Xokepoint
Como um MCP server do cliente confere o token que o Xokepoint envia e lê a pessoa e o agente.
Depois de permitir uma chamada, o Xokepoint chama o MCP server do cliente com um token só para aquele server (Autenticação upstream). O server confere o token e, se quiser, usa a pessoa e o agente para decidir sobre os próprios dados.
O server precisa de três valores, que aparecem no diálogo e nos detalhes do server (Servers do cliente): Issuer, JWKS e Audience.
O que conferir
- A assinatura, com as chaves da URL do JWKS. Leia a URL e guarde em cache; não copie as chaves, porque elas giram.
issigual ao Issuer.audigual à Audience, que é o endpoint do próprio server na forma canônica: esquema e host em minúsculas, sem porta padrão, sem query nem fragmento. Um token para outro server é recusado.expno futuro. O token vale 60 segundos.
A assinatura é ES256 e o header do token tem typ at+jwt.
Com o token válido, sub é a pessoa ou o serviço e act.sub é o agente. Num tools/call, chokepoint_tool também nomeia a tool (server_id e name).
Um tipo de token não tem agente. Quando o administrador conecta ou redescobre o server, o Xokepoint lista as tools com um token cujo sub é chokepoint:registry e que não tem act. Aceite-o para tools/list e para as mensagens de protocolo, e recuse um tools/call sem act. Configure os três valores antes da primeira descoberta: ela já envia um token, e um server que o rejeita não consegue ser registrado.
Exemplo com FastMCP
Os detalhes do server no Admin trazem este exemplo, com os valores preenchidos:
from fastmcp import FastMCP
from fastmcp.server.auth.providers.jwt import JWTVerifier
from fastmcp.server.dependencies import get_access_token
auth = JWTVerifier(jwks_uri="<JWKS>", issuer="<Issuer>", audience="<Audience>", algorithm="ES256")
mcp = FastMCP("issues", auth=auth)
@mcp.tool
def move_issue(repository: str, issue_number: int, column: str) -> str:
claims = get_access_token().claims
person, agent = claims["sub"], claims["act"]["sub"]
...O JWTVerifier confere assinatura, issuer, audience e validade antes de a tool rodar. Dentro da tool, person e agent servem para filtros próprios, como mostrar só os documentos da pessoa, e para logs.
O server não precisa repetir as regras do Xokepoint. A chamada só chega a ele depois do ALLOW.