Anomalo MCP Server — data quality tools for Claude Desktop, Cursor, Gemini CLI, and other MCP clients
Project description
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. |
Developing from source
git clone https://github.com/datagravity-ai/dquality
cd dquality/anomalo_labs/anomalo-mcp
uv sync
uv run pytest tests
Running the local checkout against a real Anomalo instance:
ANOMALO_INSTANCE_HOST=... ANOMALO_API_SECRET_TOKEN=... uv run anomalo-mcp
Source checkouts also load dev_plugins/ — internal-only tools not shipped on PyPI.
See CHANGELOG.md for release notes.
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 anomalo_mcp-0.7.1.tar.gz.
File metadata
- Download URL: anomalo_mcp-0.7.1.tar.gz
- Upload date:
- Size: 31.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56bf5ab9a7df5878ed97f839df4fc38b3d322249367544df549cd92873e3b6ac
|
|
| MD5 |
28ecb5c7432ff9484d02d8fb73ccf1b9
|
|
| BLAKE2b-256 |
c385d52192749a6509f458d83b1c7d4a0147668d441017f49696219a874d75de
|
Provenance
The following attestation bundles were made for anomalo_mcp-0.7.1.tar.gz:
Publisher:
anomalo-mcp-releaser.yaml on datagravity-ai/dquality
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anomalo_mcp-0.7.1.tar.gz -
Subject digest:
56bf5ab9a7df5878ed97f839df4fc38b3d322249367544df549cd92873e3b6ac - Sigstore transparency entry: 1367114353
- Sigstore integration time:
-
Permalink:
datagravity-ai/dquality@946cdd8321395b354d987ae982a2bbf5d73f5a4f -
Branch / Tag:
refs/tags/anomalo-mcp-0.7.1 - Owner: https://github.com/datagravity-ai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
anomalo-mcp-releaser.yaml@946cdd8321395b354d987ae982a2bbf5d73f5a4f -
Trigger Event:
push
-
Statement type:
File details
Details for the file anomalo_mcp-0.7.1-py3-none-any.whl.
File metadata
- Download URL: anomalo_mcp-0.7.1-py3-none-any.whl
- Upload date:
- Size: 33.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
da8ca19c87ae33c3765c945bed6e30d22371c7122a212819ce43b430b4d2749e
|
|
| MD5 |
a49d76544b1f185f6876aa305b5fca7f
|
|
| BLAKE2b-256 |
ef02a0ac2fdec60beadf4ccaefba015b16563a61147eced5feeacdc8c3e75c18
|
Provenance
The following attestation bundles were made for anomalo_mcp-0.7.1-py3-none-any.whl:
Publisher:
anomalo-mcp-releaser.yaml on datagravity-ai/dquality
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
anomalo_mcp-0.7.1-py3-none-any.whl -
Subject digest:
da8ca19c87ae33c3765c945bed6e30d22371c7122a212819ce43b430b4d2749e - Sigstore transparency entry: 1367114371
- Sigstore integration time:
-
Permalink:
datagravity-ai/dquality@946cdd8321395b354d987ae982a2bbf5d73f5a4f -
Branch / Tag:
refs/tags/anomalo-mcp-0.7.1 - Owner: https://github.com/datagravity-ai
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
anomalo-mcp-releaser.yaml@946cdd8321395b354d987ae982a2bbf5d73f5a4f -
Trigger Event:
push
-
Statement type: