This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.1.1 instead.
Reason given by maintainers: Calls the retired browserid.me/verify-access endpoint (removed 2026-08-26); upgrade to the latest version, which calls /verify.
browserid-mcp-auth (Python)
Warrant-gated MCP tools over MCP's own OAuth 2.1 — the Python port of
@browserid-ng/mcp-auth. No API keys: an agent redeems its human's
short-lived, scoped, revocable BrowserID warrant for a bearer, and every
tool call is attributable to "agent X on behalf of human Y". Revoke at
browserid.me/account and the agent dies on its next call.
An embedded authorization server (the RFC 7521 jwt-bearer assertion grant) +
a resource-server guard that re-checks the warrant's revocation status
fail-closed on every call. Verification is delegated to the broker's
DNSSEC-rooted hosted verifier (POST /verify-access) and POST /status/check
— no crypto in Python. Stdlib-only (no runtime deps).
Use
from browserid_mcp_auth import McpAuth, McpAuthError
auth = McpAuth(
resource="https://mcp.example.com", # this server (OAuth resource + audience)
scopes_for_tool={"create_issue": ["issues:create"]},
)
# 1. Discovery (serve as JSON):
# GET /.well-known/oauth-protected-resource -> auth.protected_resource_metadata()
# GET /.well-known/oauth-authorization-server -> auth.authorization_server_metadata()
# 2. Token endpoint (the embedded AS):
# POST /token -> auth.handle_token(request_body) # {grant_type, assertion, scope?}
# 3. Gate a tool call:
ctx = auth.require_warrant(authorization_header, "create_issue")
# ctx.grantor (human), ctx.grantee (agent), ctx.holder, ctx.issuer, ctx.scopes
On failure handle_token / require_warrant raise McpAuthError with
.oauth_error and .http_status; render err.to_token_error_response() at the
token endpoint and auth.challenge() in the WWW-Authenticate header on a 401.
FastMCP
FastMCP servers speak MCP OAuth; mount the three surfaces above on the server's
HTTP app (the token endpoint + the two discovery routes), and call
auth.require_warrant(request.headers.get("authorization"), tool_name) at the
top of each tool. The core is synchronous and dependency-free; call it directly
or wrap in a thread from async handlers. http_post is injectable if you
prefer httpx/requests over the stdlib urllib default.
API
McpAuth(resource, broker="https://browserid.me", scopes_for_tool=None, token_ttl_s=3600, status_cache_s=60, accepted_fallbacks=None, store=None, http_post=None); handle_token(params), authenticate(header),
require_warrant(header, tool_or_scopes), protected_resource_metadata(),
authorization_server_metadata(), challenge(). MPL-2.0.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file browserid_mcp_auth-0.1.0.tar.gz.
File metadata
- Download URL: browserid_mcp_auth-0.1.0.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
36b099044231c4f4b6197bba2405983b3d4575708303be987805a656313e69fd
|
|
| MD5 |
2a00531a6e0e3ea8c37bf04dcb4aefb3
|
|
| BLAKE2b-256 |
692ef112656c2ca6455abe9541b7427ee90e34a7fd92945ec00ec3c300bcbd53
|
File details
Details for the file browserid_mcp_auth-0.1.0-py3-none-any.whl.
File metadata
- Download URL: browserid_mcp_auth-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac89fd96700348d75f827ff944929d10fbf0641e648a8bc0d7566d2a2af90316
|
|
| MD5 |
9a4b05cc6a0c6f50055968c334186605
|
|
| BLAKE2b-256 |
3cf9be4680b47ab5eb517edf04e7286df336d1b07a21f93db8fd14036e01720d
|