LinkAuth credential broker connector for the Model Context Standard.
Project description
mcs-auth-linkauth
Authentication for agents that can't open a browser. LinkAuth credential broker connector for the Model Context Standard (MCS).
CLI tools, Telegram bots, background workers, Docker containers -- your agent shows a URL and a code, the user authenticates on any device, and the agent picks up the credentials automatically. No localhost callback. No web server. No browser on the agent's machine.
Think of it as the Device Flow experience, but for any credential type -- OAuth tokens, API keys, passwords, or custom secrets.
Installation
pip install mcs-auth-linkauth
Quick start
from mcs.auth.linkauth import LinkAuthProvider
provider = LinkAuthProvider(
broker_url="https://auth.example.com",
template="google_mail",
display_name="Gmail Access",
)
try:
token = provider.get_token("gmail")
except AuthChallenge as e:
# Show this to the user via LLM, Telegram, CLI, ...
print(f"Open {e.url} and enter code {e.code}")
How it works
Agent LinkAuth Broker User
| | |
|-- create session --------->| |
| (public_key, template) | |
|<-- url + code ------------| |
| | |
|-- raise AuthChallenge ---->| |
| "Open URL, enter ABCD" | |
| |<-- user opens URL -----|
| | enters code |
| | provides credentials|
| | (encrypted w/ pubkey)|
| | |
|-- poll ------------------->| |
|<-- encrypted credentials --| |
|-- decrypt (private key) -->| |
| | |
| token ready! | |
Zero-knowledge: For form-based credentials (API keys, passwords), the broker encrypts with the agent's public key in the browser. The broker never sees the plaintext. For OAuth flows, the broker briefly handles tokens server-side before encrypting -- a documented trade-off.
Use with Auth0 Token Vault
The killer combo -- LinkAuth's device-flow UX with Auth0's multi-provider Token Vault:
from mcs.auth.auth0 import Auth0Provider
from mcs.auth.linkauth import LinkAuthConnector
provider = Auth0Provider(
domain="my-tenant.auth0.com",
client_id="...",
client_secret="...",
_auth=LinkAuthConnector(
broker_url="https://auth.example.com",
oauth_provider="auth0",
oauth_scopes=["openid", "email", "offline_access"],
oauth_extra_params={"audience": "...", "connection": "google-oauth2"},
display_name="Gmail Access",
),
)
# Agent shows URL + code, user authenticates, Token Vault does the rest
token = provider.get_token("gmail")
Supported credential types
| Template | What the user sees |
|---|---|
api_key |
Single password field |
basic_auth |
Username + password form |
openai, anthropic |
Branded API key form |
google_mail, github, ... |
OAuth consent flow |
| Custom | Define your own fields or OAuth provider |
Links
- Homepage: https://www.modelcontextstandard.io
- Source: https://github.com/modelcontextstandard/python-sdk
- LinkAuth: https://github.com/user/linkauth
License
Apache-2.0
Project details
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 mcs_auth_linkauth-0.4.0.tar.gz.
File metadata
- Download URL: mcs_auth_linkauth-0.4.0.tar.gz
- Upload date:
- Size: 19.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
57abe77d3affb5d0da06ee01866539a2714a9a510a09e6e239e41e43c7ace4a4
|
|
| MD5 |
8cd455aa309f31d97d0fa3cd90909e79
|
|
| BLAKE2b-256 |
10a73c8ba17f5025a5ae0d4e81e0d9136a085f87b5d099c8bb6ad802031e4933
|
File details
Details for the file mcs_auth_linkauth-0.4.0-py3-none-any.whl.
File metadata
- Download URL: mcs_auth_linkauth-0.4.0-py3-none-any.whl
- Upload date:
- Size: 12.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a513f260777e906c6a66529cda57e729b2d08fcd34935a9aae65e45a536fa66d
|
|
| MD5 |
6284852e4586de6e5a8e8b7fbaa318b1
|
|
| BLAKE2b-256 |
bf917998f29cde02cadc66ec30eddf54ad8cf3cdaab6a4e6400de936d24ffdcd
|