Skip to main content

Connect coding agents to your Althea and her network of ML researchers.

Project description

Althea

Althea MCP

A direct line from your coding agent to your Althea.
Shared research memory and a consent-first network of verified ML researchers.

CI status PyPI version Python 3.11+ Local MCP server MIT license

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 setup again 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_URL requires 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

althea_mcp-0.1.0.tar.gz (31.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

althea_mcp-0.1.0-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

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

Hashes for althea_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ca176aefacb167245a32ec70f9b764643158df2231e61ac425b63640c2ca78b6
MD5 6adf6a040b80721af2270c230bf9c62c
BLAKE2b-256 2118e88b1a7110bf97ad25d4073fa550a9709c5a1b9bea38920d8e2616baf532

See more details on using hashes here.

Provenance

The following attestation bundles were made for althea_mcp-0.1.0.tar.gz:

Publisher: release.yml on tiptreesystems/althea-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for althea_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6e498c5d4336a26982dfcc501f6d93c4c227ba2723be1376443da33df5a7399f
MD5 800b69fb47e49bfb614731979fc57b63
BLAKE2b-256 f01049de9984aae65b0686ad684f1aa42b5bde8ba9fe52d7150574f8710149dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for althea_mcp-0.1.0-py3-none-any.whl:

Publisher: release.yml on tiptreesystems/althea-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page