Install
$ agentstack add mcp-jan-janssen-pyauthenticator ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README — it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming — see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps — measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
pyauthenticator
[](https://github.com/jan-janssen/pyauthenticator/actions/workflows/pipeline.yml) [](https://codecov.io/github/jan-janssen/pyauthenticator) [](https://github.com/psf/black)
Similar to the Google authenticator just written in Python. With more and more services requiring two factor authentication without supporting application specific passwords or other forms of token based authenication suitable for automation this python packages allows to generate two factor authentication codes on the commandline or in python.
For Users
Installation
Install pyauthenticator via conda:
>>> conda install -c conda-forge pyauthenticator
Alternatively, pyauthenticator can also be installed via pip:
>>> pip install pyauthenticator
Command Line
Get help how to use pyauthenticator using the --help/-h option:
>>> pyauthenticator --help
usage: pyauthenticator [-h] [-qr] [-a ADD] service
positional arguments:
service Service to generate optauth code for. Currently no
service is defined in the ~/.pyauthenticator config file.
options:
-h, --help show this help message and exit
-qr, --qrcode Generate qrcode as file.
-a ADD, --add ADD Add service by providing the file as
additional argument.
Add google as new service after saving the qrcode to Screenshot 2023-07-02 at 12.45.09.png to your desktop:
>>> pyauthenticator google --add ~/Desktop/Screenshot\ 2023-07-02\ at\ 12.45.09.png
The service 'google' was added, from file
Afterwards, new authentication codes can be generated for the service google using:
>>> pyauthenticator google
087078
Beyond google, pyauthenticator works for any service which implements the two factor authentication.
If you mistype the name of the service, then pyauthenticator suggests alternative options:
>>> pyauthenticator googel
The service "googel" does not exist.
The config file ~/.pyauthenticator contains the following services:
* google
Choose one of these or add a new service using:
pyauthenticator --add
Support
For any support requests feel free to open an issue on Github.
For Developers
Python Interface
The same functionality which is available on the command line is also available via the python interface:
from pyauthenticator import get_two_factor_code
get_two_factor_code(service)
So pyauthenticator can be integrated in existing python packages which need access to resources protected by two factor authentication.
Configuration
The configuration is stored in ~/.pyauthenticator it is written in the JSON format. For a given service like github the config file contains:
{"google": "otpauth://totp/Google:?secret=&issuer=Google"}
With the Google username ` and the corresponding secret ` being contained in the QR code.
MCP Server
pyauthenticator also provides an MCP server for MCP-compatible hosts on Python 3.10+. Install the optional dependency with:
pip install "pyauthenticator[mcp]"
The server is exposed as the pyauthenticator-mcp command. For example, a Claude Desktop or Claude Code configuration can reference it as:
{
"mcpServers": {
"pyauthenticator": {
"command": "pyauthenticator-mcp"
}
}
}
The server runs over the stdio transport and reads/writes the same ~/.pyauthenticator configuration file as the command line interface, so services added via one interface are immediately available in the other.
Locating claude_desktop_config.json
Claude Desktop reads its MCP server configuration from a claude_desktop_config.json file. Its default location depends on the operating system:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Rather than remembering the path, you can let Claude Desktop open the file for you: open Settings, switch to the Developer tab, and click Edit Config. This opens the folder containing claude_desktop_config.json (creating an empty one if it does not exist yet) in your system file manager, ready to be opened in a text editor.
The file usually already contains other, unrelated settings managed by Claude Desktop itself (window/pane layout, feature flags, per-account preferences, and so on) in addition to the mcpServers section. Only add or edit the mcpServers entry for pyauthenticator and leave the rest of the file untouched, for example:
{
"mcpServers": {
"pyauthenticator": {
"command": "/absolute/path/to/pyauthenticator-mcp"
}
},
"preferences": {
"...": "..."
}
}
Use an absolute path for command
Claude Desktop does not launch MCP servers through your interactive login shell, so it will not source ~/.zshrc, ~/.bashrc, or a conda/mamba environment activation script. If pyauthenticator-mcp was installed into a conda/mamba environment or any location that is not on the reduced PATH Claude Desktop uses to spawn subprocesses, referencing the bare command name ("command": "pyauthenticator-mcp") will fail with a "command not found"-style error even though it works fine in your terminal.
To avoid this, set command to the absolute path of the executable, for example /Users//mambaforge/bin/pyauthenticator-mcp or /Users//.venv/bin/pyauthenticator-mcp. You can find this path by activating the relevant environment in your terminal and running:
which pyauthenticator-mcp
Available tools
| Tool | Arguments | Description | | --- | --- | --- | | get_code | service: str | Generate a two factor authentication code for a configured service. | | list_services | – | List the configured service names. | | add_service | service: str, qrcode_path: Optional[str], qrcode_base64: Optional[str] | Add a service from a QR code file path or base64-encoded PNG bytes. Provide exactly one of qrcode_path or qrcode_base64. | | remove_service | service: str | Remove a configured service. | | get_qrcode | service: str | Return the QR code for a configured service as an MCP image (PNG). |
get_code, remove_service and get_qrcode raise an error listing the currently configured services whenever service does not match an existing entry, mirroring the command line behaviour for unknown services.
License
The pyauthenticator package is licensed under the BSD-3-Clause license.
Source & license
This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: jan-janssen
- Source: jan-janssen/pyauthenticator
- License: BSD-3-Clause
- Homepage: https://pyauthenticator.readthedocs.io
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.