GitHub OIDC for protected MCP servers
Remove long-lived PATs from MCP agent workflows.
PATless is a vendor-neutral GitHub Action and CLI. The Action exchanges a job's OIDC identity with your provider for a short-lived, resource-bound MCP credential. The CLI finds existing PAT references, migrates them, and proves the new path fails closed.
- No stored PAT and no browser OAuth step
- Bring Auth0, a cloud service, or your own broker
- One credential, one MCP resource, one short lifetime
Inside the agent job
- uses: bharath31/patless@<commit-sha>
id: mcp_auth
with:
token_endpoint: ${{ vars.MCP_TOKEN_ENDPOINT }}
audience: ${{ vars.MCP_AUDIENCE }}
resource: https://mcp.example.com/mcp
scope: tools:read
Output: steps.mcp_auth.outputs.access_token
The runtime path
Identity in. Scoped MCP credential out.
GitHub job
mints signed OIDC identity
PATless Action
requests resource + scope
Your provider
validates identity + access
MCP token
one resource · short-lived
- Standing PAT
- not required
- Browser flow
- not required
- Provider
- your choice
- Target
- one MCP resource
Already using a PAT?
Replace it without guessing.
secrets.MCP_PAT
long-lived · reusable
patless migrate
small, reviewable workflow diff
steps.mcp_auth
ephemeral Action output
- Find
- 1 reference
- Replace
- reviewable diff
- Use
- HTTP 200
- Revoke
- HTTP 401
One toolchain, two jobs
Exchange at runtime. Prove the migration.
-
01
Exchange in the job
The GitHub Action obtains the job's OIDC assertion and sends a vendor-neutral JWT bearer exchange to your configured token endpoint.
-
02
Remove the standing path
The CLI finds PAT references and generates a conservative workflow migration. It never asks GitHub for the secret value.
-
03
Prove it fails closed
The CLI grants a credential, calls the MCP server, revokes it, retries, and requires an actionable HTTP 401 denial.
Provider-neutral by design
Your provider issues the token. PATless proves the migration.
Use Auth0, a cloud authorization service, a native runtime exchange, or the bundled reference broker. PATless owns discovery, repository remediation, and lifecycle evidence—not identity policy.
A secrets manager protects where a PAT sleeps. PATless removes the PAT from the workload path. The original PAT must still be revoked at its issuer.
Start with the workload you have
Exchange—or migrate.
npx patless scan