An MCP (Model Context Protocol) server written in Go providing agents secure access to resources in a PrivX instance.
Secure access starts with identity. The server runs in oauth or m2m (machine-to-machine) mode: an IdP token or a service secret is mapped to a PrivX user, and that user's roles decide which resources they can see, add, or update.
An mcp proxy is also available for clients that have issues with streaming, OAuth, etc.
The MCP server uses the official MCP Go SDK. While other good libraries exist, we use the official SDK to more easily adapt to protocol changes. The server supports both stateless and session-based operation: it creates a session when a session ID is received, otherwise it runs stateless.
In both modes, tools run as the mapped PrivX user, and PrivX's audit log records that identity.
The client signs in at an IdP; the server maps the token's identity claim to a PrivX user.
Machine-to-machine mode is for automated clients with no interactive sign-in. The client sends a service secret; the server maps that secret to one PrivX user.
- Go 1.26.5+
- A PrivX instance with API Client and External Token Authentication configured
- Tested with PrivX v45, v44 & v43
- An RSA key pair (the public key registered in PrivX External Token configuration)
- For
oauth: an IdP issuing OIDC tokens
The server fronts PrivX, a privileged access management platform. Anyone who can reach it and authenticate can act on PrivX resources with their mapped user's roles, so treat it with the same care as PrivX itself.
- Limit access. Only grant access to users who really need it, and keep their PrivX roles as narrow as possible.
- Use HTTPS. Serve TLS directly or put the server behind a TLS-terminating reverse proxy. Never expose plain HTTP outside a trusted host.
- Choose client LLMs carefully. Use good quality models that resist prompt injection and follow instructions reliably. If possible, use your own trained or self-hosted model.
- Keep the server on the local network where possible, rather than exposing it to the internet.
- Use
m2mmode only for automated access. Interactive users should sign in throughoauthmode so that actions are tied to their own identity.
- Documents Hub
- Manual
- Developer guide
- Deployment
- Examples of how to deploy (Docker, Systemd)
- Doing a local deployment (Docker + Keycloak) for evaluation purposes
This is a public open-source project licensed under Apache 2.0 and not covered by standard support SLA. Community feedback and contributions are welcome. Support is provided on a best-effort basis only. For dedicated support, customisations, or enterprise assistance, please raise a ticket via our support portal (https://care.ssh.com) or via your local support partner. Any requests would be assigned to your account manager.

