Anomalo MCP Server
Bring your Anomalo data quality deployment into Claude Desktop, Cursor, Gemini CLI, and other MCP clients. Ask natural-language questions about the tables Anomalo monitors, trigger check runs, and — if your deployment has AIDA enabled — let Anomalo's AI Data Analyst explore your data on your behalf.
Quick start
1. Get an Anomalo API key
- Log into your Anomalo instance in the browser.
- Go to Settings → API Keys.
- Click Create API Key, copy the token.
You'll also need your Anomalo instance hostname, such as app.anomalo.com or acme.anomalo.com. Use the bare hostname — no https://, no trailing slash.
2. Install uv
uv is a small Python tool runner. Your MCP client will use it to launch this server on demand — you do not install anomalo-mcp yourself.
# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows PowerShell
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
If your environment doesn't allow piping a remote script into a shell, see uv's installation docs for Homebrew, pip, and standalone-binary alternatives.
Verify:
uvx --version
3. Configure your MCP client
Pick your client and drop the anomalo server block into its MCP config. Replace YOUR-INSTANCE.anomalo.com and your-api-key with the values from step 1.
Claude Desktop
Edit your Claude Desktop config:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
Add the anomalo entry (merging with any existing mcpServers block):
{
"mcpServers": {
"anomalo": {
"command": "uvx",
"args": ["anomalo-mcp"],
"env": {
"ANOMALO_INSTANCE_HOST": "YOUR-INSTANCE.anomalo.com",
"ANOMALO_API_SECRET_TOKEN": "your-api-key"
}
}
}
}
Save, then fully quit and restart Claude Desktop (not just close the window).
Cursor
Open Cursor Settings → Features → Model Context Protocol → Add new MCP server.
- Name:
anomalo - Command:
uvx - Arguments:
anomalo-mcp - Environment variables:
ANOMALO_INSTANCE_HOST→YOUR-INSTANCE.anomalo.comANOMALO_API_SECRET_TOKEN→your-api-key
Gemini CLI
Install the anomalo-gemini-extension — it wraps this MCP server for Gemini CLI and handles the config for you.
# Set env vars (one-time, or add to ~/.gemini/.env)
export ANOMALO_INSTANCE_HOST=YOUR-INSTANCE.anomalo.com
export ANOMALO_API_SECRET_TOKEN=your-api-key
# Install the extension
gemini extensions install \
https://github.com/datagravity-ai/anomalo-gemini-extension --auto-update
Other MCP clients
Any client that supports standard mcpServers config works. Use the same shape as Claude Desktop above:
"anomalo": {
"command": "uvx",
"args": ["anomalo-mcp"],
"env": {
"ANOMALO_INSTANCE_HOST": "...",
"ANOMALO_API_SECRET_TOKEN": "..."
}
}
4. Verify it works
In your MCP client, ask:
Use Anomalo to list the organizations I have access to.
You should see your Anomalo orgs come back. If it fails, head to Troubleshooting below.
What you get
Always available:
| Tool | What it does |
|---|---|
get_organizations |
List Anomalo organizations you can access. |
set_active_organization |
Switch the active org for subsequent calls. |
get_labels |
List labels configured in the active org. |
get_configured_tables |
Tables monitored in the active org (filter by label, name, or id). |
get_checks_for_table |
List the data quality checks configured on a table. |
run_data_quality_checks_on_table |
Trigger a check run on a table. |
If your deployment has AIDA enabled:
| Tool | What it does |
|---|---|
ask_aida |
Ask a natural-language question about a specific table. AIDA explores the data, runs SQL (with approval), and returns analysis. |
ask_aida_chunked |
Same question across parallel conversations — useful for "last N weeks" or "per-dimension" sweeps. |
list_aida_conversations |
See recent AIDA conversations for a table. |
approve_aida_query |
Manually approve a pending SQL query (fallback when your client can't render approval dialogs). |
Not seeing AIDA tools? Contact your Anomalo account team — AIDA is enabled per deployment.
Troubleshooting
"command not found: uvx" or "failed to spawn: anomalo-mcp"
uv isn't installed, or isn't on your shell's PATH. Re-run the install from step 2, then restart your MCP client.
"missing required environment variable(s): ANOMALO_INSTANCE_HOST, ANOMALO_API_SECRET_TOKEN"
Your MCP client launched the server but didn't pass the env vars. Double-check the env block in your client's config (the JSON for Claude Desktop, the UI for Cursor). Save and restart the client — most clients only re-read MCP config on startup.
"401 Unauthorized" or "403 Forbidden"
Your API token is wrong, revoked, or lacks permissions.
- Confirm you pasted the full token (no stray whitespace).
- Make sure your account has at least "Viewer" role on the org whose tables you're asking about.
- If the token is recent, give it a minute — some deployments cache tokens briefly.
DNS / connection errors
Check ANOMALO_INSTANCE_HOST. Use the bare hostname with no protocol or path:
- ✅
app.anomalo.com - ✅
acme.anomalo.com - ❌
https://app.anomalo.com/ - ❌
app.anomalo.com/dashboard
Claude (or another client) says "I don't see any Anomalo tools"
You added the config but didn't fully restart the client. Close the app completely (Cmd-Q on macOS, quit from tray on Windows), then reopen.
The server keeps timing out
Long-running AIDA analyses can hit the 5-minute MCP client timeout. For broad questions (many weeks of data, many dimensions), use ask_aida_chunked and have your assistant compose the partial answers.
Still stuck?
Contact your Anomalo account team with the error text and your client logs. For Claude Desktop, MCP error logs live at ~/Library/Logs/Claude/mcp*.log (macOS) or %APPDATA%\Claude\logs\mcp*.log (Windows).
Environment variables
| Variable | Required | Description |
|---|---|---|
ANOMALO_INSTANCE_HOST |
yes | Your Anomalo hostname, e.g. app.anomalo.com. No https://, no trailing slash. |
ANOMALO_API_SECRET_TOKEN |
yes | API token from Settings → API Keys. |
SENTRY_DSN |
no | Enables Sentry error reporting (PII scrubbed). Requires the [sentry] extra: uvx --with sentry-sdk anomalo-mcp. |
AIDA_FETCH_FILES |
no | true to download AIDA CSV query results inline. Off by default so row-level data doesn't flow through your MCP client's context window. |
ANOMALO_EXPERIMENTAL_UNSTRUCTURED_TOOLS |
no | 1 to expose experimental unstructured-collection tools. |
Metadata
Release files for anomalo-mcp 0.7.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| anomalo_mcp-0.7.2.tar.gz | 30.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| anomalo_mcp-0.7.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.6 kB
Release files / anomalo_mcp-0.7.2.tar.gz
| Download URL | anomalo_mcp-0.7.2.tar.gz |
|---|---|
| Size | 30.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
686efe9f368590ea8a3765fcacc55bf97ad0a9f8ac8ffa395427d921de907cf4
|
|
BLAKE2b-256 checksum How to use checksums |
e2bf45aaac8aade0bdf50a5810b05d0e9f2b53d32f06c9b3e7fefd1528dd3463
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Jul 9, 2026.
Transparency logRelease files / anomalo_mcp-0.7.2-py3-none-any.whl
| Download URL | anomalo_mcp-0.7.2-py3-none-any.whl |
|---|---|
| Size | 32.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6368d8bebf7d621452e64fa1859428352c34646922f4a54b3aea98e1143fad6a
|
|
BLAKE2b-256 checksum How to use checksums |
7dc928eb9187404227fbedebb417bddf78b4b07d472fbe8722604706a434b615
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Jul 9, 2026.
Transparency log