Connect coding agents to your Althea and her network of ML researchers.
Project description
Althea MCP
A direct line from your coding agent to your Althea.
Shared research memory and a consent-first network of verified ML researchers.
Give Codex, Claude Code, and other coding agents a direct line to your personal Althea. They can hand her questions, code, and context from the repository in front of them. Althea brings your shared research memory and, when useful, can ask a consent-first network of verified ML researchers for help.
- Agents that can talk to each other. Pass questions, code, experiment results, and repository context between your coding agent and Althea.
- Your Althea, with your context. MCP uses your existing account, profile, and long-term research memory.
- A route into the researcher network. Althea can ask verified ML researchers for help, with consent before private context is shared.
- Client-specific conversations. Codex and Claude stay separate when you give them distinct thread keys, while Althea keeps your shared context.
- Work asynchronously. Wait for a reply, leave a message for longer work, or read the thread later.
Setup · Connect a client · First conversation · Tools · Security and privacy · Development
Setup
You need access to Althea and uv. Install Althea MCP from PyPI, then sign in with an emailed verification code:
uv tool install althea-mcp
althea-mcp setup
If the install succeeds but the command is not found, run uv tool update-shell
and open a new terminal.
Run setup yourself in an interactive terminal. Enter your email and verification code there, not in an AI chat.
Connect your personal Althea
-----------------------------
Email: you@example.com
A verification code was sent to you@example.com.
Verification code:
Althea MCP is ready.
Credentials saved to ~/.config/althea-mcp/credentials.json
Setup follows the same account journey as the Althea web app:
- Existing accounts receive a verification code by email.
- Eligible new accounts are asked for a name, then receive a verification code.
- Accounts that still need access are sent to the Althea application. Complete it, then run setup again.
The installed server starts without fetching code on every launch. Its tools still need a network connection to Althea. Upgrade the package later with:
uv tool upgrade althea-mcp
Connect an MCP client
Complete setup once, then add the local stdio server. Give each client a different thread key.
[!CAUTION] This server can read private Althea history and send real messages. Register it only in clients and projects you trust.
Codex
codex mcp add althea \
--env ALTHEA_THREAD_KEY=codex \
-- althea-mcp
codex mcp list
codex mcp add writes to your user configuration. Equivalent
~/.codex/config.toml:
[mcp_servers.althea]
command = "althea-mcp"
[mcp_servers.althea.env]
ALTHEA_THREAD_KEY = "codex"
Claude Code
claude mcp add althea \
-e ALTHEA_THREAD_KEY=claude-code \
-- althea-mcp
claude mcp list
That command uses Claude Code's project-local scope. Add --scope user
immediately before althea only if you want the server available in every
project you open.
A user-wide manual entry under the top-level mcpServers object in
~/.claude.json looks like this:
{
"mcpServers": {
"althea": {
"type": "stdio",
"command": "althea-mcp",
"env": {
"ALTHEA_THREAD_KEY": "claude-code"
}
}
}
}
Claude Desktop and other local clients
Find the installed command:
command -v althea-mcp
On Windows PowerShell:
(Get-Command althea-mcp).Source
GUI applications sometimes receive a smaller PATH than your terminal. If
althea-mcp is not found, use the absolute path returned above:
{
"mcpServers": {
"althea": {
"command": "/absolute/path/to/althea-mcp",
"env": {
"ALTHEA_THREAD_KEY": "claude-desktop"
}
}
}
}
Restart the client after changing its MCP configuration.
Start a conversation
Try one of these prompts in your MCP client:
Ask my Althea whether anyone in the researcher network has worked on this
failure mode. Share only the sanitized summary below:
[summary]
Send this context to my Althea without waiting for a reply:
The latest experiment rules out the data-loader hypothesis. The remaining
failure starts after gradient accumulation.
Check whether my Althea has replied in the MCP thread.
Messages continue the configured thread. They are real messages to your personal Althea and may cause her to begin work.
Tools
| Tool | What it does |
|---|---|
ask_althea(message) |
Sends a message and uses a 120-second polling window by default for the first reply. If the window expires, the work may still continue. |
send_message_to_althea(message) |
Sends a message immediately and returns a receipt without waiting. Use it for context, notes, and longer requests. |
get_althea_messages(sender=None, limit=10) |
Returns 1 to 100 recent messages in chronological order. Optionally filter by user, assistant, or system. |
The two send tools are marked as state-changing. Message retrieval is read-only. The current tool surface is text-only. It does not expose attachments or other Althea artifacts.
How it works
Codex / Claude Code / another coding agent
│ local stdio
▼
Althea MCP
│ HTTPS
▼
your Althea
│
├── your profile and long-term research memory
├── a persisted conversation for this thread key
└── a consent-first network of verified ML researchers
Althea MCP is a small public adapter. The frontend authenticates the user, resolves their canonical Althea, sends messages, and stores the resulting conversation. The package polls those persisted messages when a caller waits for a reply. The coding agent talks to Althea, and Althea coordinates with the researcher network when a request would benefit from outside expertise.
Sign-in and sessions
Setup creates a normal Althea usage session:
- The access session lasts 7 days.
- Its rotating refresh-token family lasts 14 days from sign-in.
- Access tokens refresh automatically before expiry.
- A cross-process lock lets several local MCP clients share the credential file without racing refresh-token rotation.
- When the session expires or is revoked, run
althea-mcp setupagain in a separate terminal. Running MCP processes reload the replacement credentials.
Credentials are stored as plaintext JSON at
~/.config/althea-mcp/credentials.json. On operating systems that support Unix
file modes, the credential file is set to 0600. A parent directory created by
Althea MCP is requested as 0700; check the permissions yourself when using a
pre-existing custom directory.
Security and privacy
- Messages sent through these tools are persisted in your Althea account, like messages from Althea's other channels.
- The local stdio process sends messages and credentials to Althea over HTTPS. Even with local transport, conversation data leaves your machine.
- The connected MCP host and model can see tool arguments and replies. They may retain that data under their own privacy and retention policies.
- When Althea asks the researcher network for help, she requests consent before sharing information drawn from a private conversation.
- The package sends access credentials only to the Althea origin they were
issued for. Changing
ALTHEA_APP_URLrequires a new setup. - The refresh token is sent only to the session rotation endpoint.
- Email verification codes and the credential file are secrets. Never paste them into an AI chat, terminal transcript, issue, or pull request.
- To remove the local session, close MCP clients and delete the credential file. This forgets the session on that machine. Contact Tiptree if a copied session must also be revoked.
Please report vulnerabilities using the security policy.
Configuration
Most users only need althea-mcp setup and a client-specific thread key.
| Environment variable | Default | Purpose |
|---|---|---|
ALTHEA_APP_URL |
https://althea.tiptreesystems.com |
Althea API origin. Saved credentials are bound to it. Plain HTTP is accepted only for loopback development. |
ALTHEA_PUBLIC_SITE_URL |
https://tiptreesystems.com |
Base URL for terms, privacy, and access requests. Dev Althea selects https://dev.tiptreesystems.com automatically. |
ALTHEA_THREAD_KEY |
mcp |
Stable conversation identifier. Use 1 to 128 letters, digits, dots, underscores, colons, or hyphens, starting with a letter or digit. |
ALTHEA_MCP_CREDENTIALS_FILE |
~/.config/althea-mcp/credentials.json |
Override the local credential path. |
ALTHEA_MCP_HTTP_TIMEOUT |
60 |
HTTP timeout in seconds. |
ALTHEA_MCP_POLL_INTERVAL |
2 |
Delay between response polls in seconds. |
ALTHEA_MCP_POLL_TIMEOUT |
120 |
Maximum wait for ask_althea in seconds. |
ALTHEA_MCP_LOG_LEVEL |
WARNING |
Python log level. |
Setup also accepts --credentials-file to override the credential path and
--no-browser to print an access-request URL without opening it.
Troubleshooting
Althea MCP is not configured
Run althea-mcp setup in a terminal, then restart the MCP client.
Your Althea MCP sign-in has expired or was revoked
Run setup again. The refresh-token family has a 14-day absolute lifetime.
Saved credentials are bound to another URL
Run setup with the same origin the MCP client will use:
althea-mcp setup --app-url https://althea.example
Then set the matching ALTHEA_APP_URL in the client configuration.
ask_althea timed out
Althea may still be working. Call get_althea_messages after a short wait.
The client cannot find althea-mcp
Run command -v althea-mcp in a terminal and use that absolute path in the
client configuration.
Two clients are sharing a conversation
Assign a distinct ALTHEA_THREAD_KEY to each client and restart them.
Local development
git clone https://github.com/tiptreesystems/althea-mcp.git
cd althea-mcp
uv sync --locked --extra dev
uv run pytest -q
uv run ruff check althea_mcp tests
uv run ruff format --check .
uv build
uvx twine check dist/*
Run setup against a local frontend:
uv run althea-mcp setup --app-url http://localhost:8080
Running althea-mcp with no subcommand starts the stdio server. The explicit
equivalent is althea-mcp serve.
Contributing
Bug reports and focused pull requests are welcome. Read the contribution guide before opening one. Remove all email addresses, messages, OTPs, and credentials from logs and fixtures.
License
MIT © Tiptree Advanced Systems Corporation.
Project details
Release history Release notifications | RSS feed
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 althea_mcp-0.1.0.tar.gz.
File metadata
- Download URL: althea_mcp-0.1.0.tar.gz
- Upload date:
- Size: 31.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca176aefacb167245a32ec70f9b764643158df2231e61ac425b63640c2ca78b6
|
|
| MD5 |
6adf6a040b80721af2270c230bf9c62c
|
|
| BLAKE2b-256 |
2118e88b1a7110bf97ad25d4073fa550a9709c5a1b9bea38920d8e2616baf532
|
Provenance
The following attestation bundles were made for althea_mcp-0.1.0.tar.gz:
Publisher:
release.yml on tiptreesystems/althea-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
althea_mcp-0.1.0.tar.gz -
Subject digest:
ca176aefacb167245a32ec70f9b764643158df2231e61ac425b63640c2ca78b6 - Sigstore transparency entry: 2281082894
- Sigstore integration time:
-
Permalink:
tiptreesystems/althea-mcp@2bf15ebcbc807e64be3425cd670eea9bf5076e35 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tiptreesystems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2bf15ebcbc807e64be3425cd670eea9bf5076e35 -
Trigger Event:
release
-
Statement type:
File details
Details for the file althea_mcp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: althea_mcp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6e498c5d4336a26982dfcc501f6d93c4c227ba2723be1376443da33df5a7399f
|
|
| MD5 |
800b69fb47e49bfb614731979fc57b63
|
|
| BLAKE2b-256 |
f01049de9984aae65b0686ad684f1aa42b5bde8ba9fe52d7150574f8710149dd
|
Provenance
The following attestation bundles were made for althea_mcp-0.1.0-py3-none-any.whl:
Publisher:
release.yml on tiptreesystems/althea-mcp
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
althea_mcp-0.1.0-py3-none-any.whl -
Subject digest:
6e498c5d4336a26982dfcc501f6d93c4c227ba2723be1376443da33df5a7399f - Sigstore transparency entry: 2281082908
- Sigstore integration time:
-
Permalink:
tiptreesystems/althea-mcp@2bf15ebcbc807e64be3425cd670eea9bf5076e35 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/tiptreesystems
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@2bf15ebcbc807e64be3425cd670eea9bf5076e35 -
Trigger Event:
release
-
Statement type: