addy-mcp
An MCP server that lets Claude (and other MCP clients) manage your addy.io account: aliases, recipients, usernames, custom domains, labels, rules, the blocklist and failed deliveries. It covers the full addy.io API.
Unofficial. This project is not affiliated with or endorsed by addy.io.
It runs on your own computer with your own API key. Nothing is hosted, and your key is only ever sent to addy.io.
1. Create an API key
In addy.io go to Settings → API Keys (https://app.addy.io/settings/api) and click Create New API Key. Consider giving it a name like "Claude" and an expiry date.
2. Install
Claude Desktop (easiest)
- Download the latest
addy-mcp-<version>.mcpbfrom the Releases page. - Double-click it (or drag it into Settings → Extensions in Claude Desktop) and click Install.
- Paste your API key when asked. Claude Desktop stores it in your system keychain.
Claude Desktop (manual config)
Requires uv. Open Settings → Developer → Edit Config and add:
{
"mcpServers": {
"addy": {
"command": "uvx",
"args": ["addy-mcp@latest"],
"env": {
"ADDY_API_KEY": "paste-your-api-key-here"
}
}
}
}
Then fully quit and reopen Claude Desktop. If it can't find uvx, replace "uvx" with the full path from which uvx (macOS/Linux) or where uvx (Windows). Desktop apps don't always see your shell's PATH.
Claude Code
claude mcp add addy --scope user --env ADDY_API_KEY=paste-your-api-key-here -- uvx addy-mcp@latest
This makes the server available in Claude Code (the CLI and the desktop app's Code tab). Claude Desktop's chat uses a separate config, set up above.
Other MCP clients
Run uvx addy-mcp@latest as a stdio server with ADDY_API_KEY set in its environment.
@latest makes uvx check PyPI for a new release each time the server starts. Leave it off and uvx keeps using whichever version it first downloaded. To stay on a specific version instead, use e.g. addy-mcp==0.1.1.
Configuration
| Environment variable | Required | Description |
|---|---|---|
ADDY_API_KEY |
Yes | Your addy.io API key. |
ADDY_READ_ONLY |
No | Set to true to hide every tool that can change your account. Claude can then only look things up. |
ADDY_BASE_URL |
No | For self-hosted addy.io instances, e.g. https://addy.example.com. Defaults to https://app.addy.io. |
Updating
- Installed with
addy-mcp@latest(the commands above): restart Claude (or your MCP client) and the newest release is picked up automatically. - Installed with plain
uvx addy-mcp: uvx keeps using the version it first downloaded. Changeaddy-mcptoaddy-mcp@latestin your config and restart Claude. - Claude Desktop extension (
.mcpb): download the new.mcpbfrom the Releases page and install it the same way.
To see which version is newest, run uvx addy-mcp@latest --version (available from 0.1.1). To hear about new releases, watch the repo on GitHub (Watch → Custom → Releases). Changes are listed in the changelog.
What you can ask
- "Make me a new alias for my Netflix account."
- "Which of my aliases have blocked the most emails? Deactivate the top 5."
- "Find every alias I created for shopping sites and label them 'Shopping'."
- "Block everything from marketing.example.com."
- "Create a rule that blocks newsletters (List-Unsubscribe header) sent to my shop@ alias."
- "Why did mail to my bank alias fail last week?"
Tools
| Area | Tools |
|---|---|
| Account | get_account_details, get_api_token_details, get_account_notifications, get_domain_options, get_app_version |
| Aliases | list_aliases, get_alias, create_alias, update_alias, delete_alias, restore_alias, forget_alias, set_alias_option (active / pinned / attached-recipients-only), set_alias_recipients, set_alias_labels |
| Bulk aliases | bulk_alias_action (get / activate / deactivate / pin / unpin / delete / restore / forget), bulk_set_alias_recipients, bulk_set_alias_labels |
| Recipients | list_recipients, get_recipient, create_recipient, update_recipient, delete_recipient, resend_recipient_verification, add_recipient_public_key, remove_recipient_public_key, set_recipient_option (active / can reply-send / encryption / inline encryption / protected headers / strip PGP keys / strip PGP signatures) |
| Usernames | list_usernames, get_username, create_username, update_username, delete_username, set_username_default_recipient, set_username_option (active / catch-all / can login) |
| Domains | list_domains, get_domain, create_domain, update_domain, delete_domain, set_domain_default_recipient, check_domain_sending_records, set_domain_option (active / catch-all / shared with family) |
| Labels | list_labels, get_label, create_label, update_label, delete_label |
| Rules | list_rules, get_rule, create_rule, update_rule, delete_rule, reorder_rules, set_rule_active |
| Blocklist | list_blocklist, add_to_blocklist, remove_from_blocklist |
| Failed deliveries | list_failed_deliveries, get_failed_delivery, download_failed_delivery, resend_failed_delivery, delete_failed_deliveries |
Every tool is labelled read-only, write, or destructive (MCP tool annotations), so clients like Claude can ask before running anything risky. Deleting an alias can be undone with restore_alias. Forgetting an alias is permanent.
Privacy and security
- The server runs locally and talks only to addy.io (or your
ADDY_BASE_URL). It has no telemetry. - Your API key gives full access to your addy.io account. Use a dedicated key so you can revoke it on its own, and turn on
ADDY_READ_ONLYif you only want Claude to look things up. - Anything the tools return (alias addresses, descriptions, failed-delivery emails) is passed to your AI client, and is subject to that client's privacy policy.
Development
git clone https://github.com/Former-Stranger/addy-mcp
cd addy-mcp
uv run --no-editable python -m pytest # unit tests (mocked HTTP, never touch a real account)
uv run ruff check && uv run ruff format --check
scripts/live_test.py exercises the server against a real account: it creates, updates, deletes, restores and finally forgets a throwaway alias and label. Run it with ADDY_API_KEY=... uv run --no-editable python scripts/live_test.py --yes.
--no-editable: on some macOS setups files in .venv get the "hidden" flag, and Python 3.13+ ignores hidden .pth files, which breaks editable installs. A regular install sidesteps that.
Releasing
- Bump
versioninpyproject.toml, runuv run python scripts/sync_metadata.py, and updateCHANGELOG.md. - Commit, then tag and push:
git tag v0.2.0 && git push origin v0.2.0. - Approve the
pypideployment when GitHub asks (the release pauses until a maintainer approves it).
The release workflow publishes to PyPI, attaches the .mcpb bundle to a GitHub release, and updates the MCP Registry listing.
A weekly workflow compares the addy.io API docs with scripts/addy_api_snapshot.txt and opens an issue when the API changes. After updating the tools, refresh the snapshot with python3 scripts/check_api_docs.py --update. Dependabot opens weekly pull requests for dependency and GitHub Actions updates.
License
Metadata
Release files for addy-mcp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| addy_mcp-0.1.1.tar.gz | 17.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| addy_mcp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.3 kB
Release files / addy_mcp-0.1.1.tar.gz
| Download URL | addy_mcp-0.1.1.tar.gz |
|---|---|
| Size | 17.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f8979f5550b42a58d8ab782dfbdcbae41897ca1741bc840cbfa21c821eeee415
|
|
BLAKE2b-256 checksum How to use checksums |
4966c14a293f90929980f9db7342d61029177f51be89f9ee96733495f115cf4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency logRelease files / addy_mcp-0.1.1-py3-none-any.whl
| Download URL | addy_mcp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 16.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7129e090a8f8eb96bb3c326b57ed1d90e083f94d900d39ae7a966bb21b140d41
|
|
BLAKE2b-256 checksum How to use checksums |
797a8c28fee9330678b66734e32461db8a24b60eb0170d6feedcb158c7bb6e2c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.
Transparency log