Repository navigation
byward v0.1.0
A sign-in gate for MCP servers. byward puts any MCP server, HTTP or stdio, behind OAuth 2.1 and your identity provider, with first-class Microsoft Entra ID support. One Go binary, configured by environment variables.
First release. byward is pre-1.0 and has not had an independent security audit. Read the security posture before deploying it.
What it does
- Sign-in for any MCP server. MCP clients connect to byward with standard OAuth 2.1; byward signs the user in with Microsoft Entra ID, shows its own consent page, and issues short-lived tokens of its own. The MCP server never sees a client's or the IdP's token.
- Clients connect without manual setup. Client ID Metadata Documents (CIMD) and Dynamic Client Registration (DCR), plus static clients for anything else.
- HTTP and stdio upstreams. Put a remote MCP server or a local command behind sign-in; stdio sessions are bound to the user who started them, with per-user and per-upstream process limits.
- Entra done properly. Single-tenant apps, v2 tokens, app roles and groups as an access gate, and
byward doctor/byward init entrato set up and check the app registration. - Revocation that works. Rotating refresh tokens with reuse detection,
/revoke, andbyward revoke-user/byward revoke-allfor operators. - Operable. SQLite state with restore detection, per-address rate limits on the OAuth endpoints, a structured audit stream, Prometheus metrics, and hardening checks at startup.
Verified clients
Signed in through byward against a real Entra tenant and called a tool:
| Client | How it registers |
|---|---|
| Claude Code | CIMD (or a static client) |
| claude.ai | CIMD |
| ChatGPT | CIMD |
| VS Code | CIMD |
| Cursor (3.29.9; 2.6.22 does not work) | DCR |
The TypeScript, Python and Go MCP SDK clients and MCP Inspector run against byward in CI on every change.
Install
docker pull ghcr.io/byward-dev/byward:v0.1.0Linux binaries (amd64, arm64) are attached below; macOS binaries are for development only. Verify a release with the commands in packaging (cosign keyless signature, SBOM and build provenance).
Start with the Entra quickstart, then the hardening checklist.
Since v0.1.0-rc.2
- Log redaction matches a JWT by its shape, so a random client ID that happens to contain
eyjis no longer logged as[REDACTED](#230). - The release itself: pre-releases no longer move
:latest, and the changelog leaves out author emails.
Not in this release
On-Behalf-Of tokens for downstream APIs, Entra app-only tokens, identity assertion to the upstream, and identity providers other than Entra are planned for v0.2.
MCP is a trademark of LF Projects, LLC. byward is an independent project.