📊 mcp-server-sigma
Supercharge your AI Agents with native Sigma Computing superpowers! ⚡
An enterprise-grade Model Context Protocol (MCP) server with 172 tools covering connections, workbooks, data models, members, teams, deployments, webhooks, multi-tenant operations, and composite workflow recipes straight to your favorite AI assistant.
⚠️ Disclaimers & Safety Warnings
💡 Why This Exists
Sigma Computing has a unique architectural asymmetry that shapes how you automate it:
- Data Models are 100% Code-Representable: You can programmatically construct data models, define columns, joins, and SQL logic, update JSON specs, and swap warehouse sources via API.
- Workbook Layouts are primarily UI-driven: While Sigma has introduced Beta endpoints for workbook specifications (
/v2/workbooks/spec), programmatically constructing layout elements from scratch remains highly complex.
The canonical path to automated BI dashboards is:
Build the layout once in the Sigma UI, save it as a template, then instantiate and source-swap it programmatically forever after! 🎨 ➡️ 🤖
Our composite recipe tools (like workbooks_deploy_template_to_folder and elements_swap_workbook_sources) automate this exact pattern in a single MCP tool call (returning structured step progress or partial failure details if an intermediate step fails):
graph TD
UI["Sigma UI"] -->|"1. Build Layout Once & Save"| TPL["Sigma Template"]
Agent["AI Agent / LLM"] -->|"2. Call workbooks_deploy_template_to_folder"| MCP["mcp-server-sigma"]
MCP -->|"POST /v2/templates/{id}/instantiate"| API1["Instantiate Workbook"]
MCP -->|"POST /v2/workbooks/{id}/swap_sources"| API2["Swap Warehouse Sources"]
API2 -->|"Delivered"| Dest["Target Customer Folder"]
📦 Quickstart & Installation
1. Install via pip or uv
pip install mcp-server-sigma
# or with uv
uv pip install mcp-server-sigma
Or run via Docker
docker run --rm -i --env-file .env \
ghcr.io/christianclaudio/mcp-server-sigma:latest
2. Set Environment Variables
export SIGMA_CLIENT_ID="your-client-id"
export SIGMA_CLIENT_SECRET="your-client-secret"
export SIGMA_API_BASE_URL="https://api.us-a.aws.sigmacomputing.com"
| Region | Base URL |
|---|---|
| AWS US East | https://api.us-a.aws.sigmacomputing.com |
| AWS US West | https://aws-api.sigmacomputing.com |
| AWS Canada | https://api.ca.aws.sigmacomputing.com |
| AWS EU | https://api.eu.aws.sigmacomputing.com |
| AWS UK | https://api.uk.aws.sigmacomputing.com |
| AWS Australia | https://api.au.aws.sigmacomputing.com |
| Azure US | https://api.us.azure.sigmacomputing.com |
| Azure EU | https://api.eu.azure.sigmacomputing.com |
| Azure Canada | https://api.ca.azure.sigmacomputing.com |
| Azure UK | https://api.uk.azure.sigmacomputing.com |
| Azure Australia | https://api.au.azure.sigmacomputing.com |
| GCP US | https://api.sigmacomputing.com |
| GCP Saudi Arabia | https://api.sa.gcp.sigmacomputing.com |
🔌 Integration Guides for AI Assistants & IDEs
mcp-server-sigma works seamlessly with all major AI assistants, IDEs, and CLI tools via standard stdio or streamable-http.
🧡 Claude Desktop & Claude Code
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"sigma": {
"command": "sigma-mcp",
"env": {
"SIGMA_CLIENT_ID": "your-client-id",
"SIGMA_CLIENT_SECRET": "your-client-secret",
"SIGMA_API_BASE_URL": "https://api.us-a.aws.sigmacomputing.com"
}
}
}
}
For Claude Code CLI:
claude mcp add sigma -- sigma-mcp
♊ Google Antigravity & Gemini CLI
Add to your project's .agents/mcp_config.json (or global ~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"sigma": {
"command": "sigma-mcp",
"args": [],
"env": {
"SIGMA_CLIENT_ID": "your-client-id",
"SIGMA_CLIENT_SECRET": "your-client-secret",
"SIGMA_API_BASE_URL": "https://api.us-a.aws.sigmacomputing.com"
}
}
}
}
🤖 OpenAI Codex & Local HTTP Clients
Run in network transport mode (Streamable HTTP) for local CLI & agent extensions:
# Source environment variables from a protected file or secret manager
source .env
# Launch server on HTTP localhost port 8000 for local clients
sigma-mcp --transport streamable-http --host 127.0.0.1 --port 8000
Point your local Codex / Streamable HTTP client to http://127.0.0.1:8000/mcp.
Note for hosted ChatGPT Actions or Custom GPTs: Hosted cloud services cannot reach localhost. Place an authenticating HTTPS proxy (e.g., ngrok, Cloudflare Tunnel, or Caddy with TLS and Auth) in front of the server before connecting cloud services.
⚡ VS Code (Cline, Roo Code, GitHub Copilot Agent Mode, Continue)
Cline / Roo Code Settings (cline_mcp_settings.json):
{
"mcpServers": {
"sigma": {
"command": "sigma-mcp",
"env": {
"SIGMA_CLIENT_ID": "your-client-id",
"SIGMA_CLIENT_SECRET": "your-client-secret",
"SIGMA_API_BASE_URL": "https://api.us-a.aws.sigmacomputing.com"
}
}
}
}
Continue.dev Config (~/.continue/config.yaml):
mcpServers:
- name: sigma
command: sigma-mcp
env:
SIGMA_CLIENT_ID: "your-client-id"
SIGMA_CLIENT_SECRET: "your-client-secret"
SIGMA_API_BASE_URL: "https://api.us-a.aws.sigmacomputing.com"
💻 Cursor & Windsurf
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"sigma": {
"command": "sigma-mcp",
"env": {
"SIGMA_CLIENT_ID": "your-client-id",
"SIGMA_CLIENT_SECRET": "your-client-secret",
"SIGMA_API_BASE_URL": "https://api.us-a.aws.sigmacomputing.com"
}
}
}
}
🐙 GitHub Copilot CLI & Workspace Agent
Add .github/mcp.json to your repository:
{
"mcpServers": {
"sigma": {
"type": "local",
"command": "sigma-mcp",
"env": {
"SIGMA_CLIENT_ID": "${COPILOT_MCP_SIGMA_CLIENT_ID}",
"SIGMA_CLIENT_SECRET": "${COPILOT_MCP_SIGMA_CLIENT_SECRET}",
"SIGMA_API_BASE_URL": "https://api.us-a.aws.sigmacomputing.com",
"SIGMA_MCP_READONLY": "1"
},
"tools": ["workbooks_get_workbook", "workbooks_list_workbooks", "datasets_get_data_model"]
}
}
}
Note for Copilot Cloud Agents: Cloud code-review integrations must be configured through Repository Settings > Copilot > MCP servers instead.
❄️ Cortex Code (Snowflake / Enterprise CLI)
Add directly via the Cortex CLI:
cortex mcp add sigma-tools -- sigma-mcp
🛡️ Safety & Security Controls
Configure behavior using environment variables:
| Variable | Default | Description |
|---|---|---|
SIGMA_CLIENT_ID |
Required | Your Sigma API client ID. |
SIGMA_CLIENT_SECRET |
Required | Your Sigma API client secret. |
SIGMA_API_BASE_URL |
Required | Region-specific Sigma API host URL. Must be HTTPS and a host in SIGMA_ALLOWED_HOSTS. |
SIGMA_ALLOWED_HOSTS |
official regional API hosts | Comma-separated hostname allowlist for SIGMA_API_BASE_URL and X-Sigma-Base-Url. Unset or empty uses the official Sigma regional API hosts. Loopback, private, link-local, and cloud-metadata targets are always rejected. |
SIGMA_MCP_PROFILE |
full |
Profile: full, readonly, analyst, author, modeler, embed, access_admin (see Profiles). An unknown value fails at startup. |
SIGMA_MCP_READONLY |
0 |
Set 1 to list only tools annotated readOnlyHint=true and refuse every other call (90 tools on full). Composes with any profile. |
SIGMA_MCP_ALLOW_BULK_DESTRUCTIVE |
0 |
Set 1 to let the two listed bulk tools (admin_bulk_deactivate_members, admin_bulk_remove_team_members) execute. Without it they are refused at call time. |
SIGMA_MCP_ENABLE_TOOL_SEARCH |
0 |
Set 1 (or --enable-tool-search) for Tool Search on full only. |
SIGMA_MCP_TOOL_SEARCH_BACKEND |
regex |
Tool Search backend: regex or bm25 (or --tool-search-backend). |
SIGMA_MCP_ENABLE_CODE_MODE |
0 |
Set 1 (or --enable-code-mode) for experimental Code Mode on full only; not with Tool Search. |
SIGMA_ALLOWED_TENANTS |
"" |
Comma-separated allowlist of tenant org IDs permitted for RFC 8693 token exchange. |
SIGMA_STRICT_TENANT_ALLOWLIST |
0 |
Set 1 to fail closed (HTTP 403) if a tenant request is made without an explicit allowlist entry. |
SIGMA_MCP_LOG_FORMAT |
text |
Set json for structured JSON logging with duration metrics (duration_ms). |
🧭 Profiles
Pick a profile with --profile or SIGMA_MCP_PROFILE (default full). Every profile mounts all five domains (workbooks, datasets, elements, workspace, admin). Job profiles then expose only an explicit list of tool names for one job; prompts and resources stay available on every profile. Each listed name is checked against the full catalog when the server builds, so an unknown profile or a typo in a list fails at startup with ValueError.
| Profile | Job it serves | Tools | With SIGMA_MCP_READONLY=1 |
|---|---|---|---|
full |
Complete catalog, nothing omitted. Bulk tools are listed and refused at call time unless SIGMA_MCP_ALLOW_BULK_DESTRUCTIVE=1. Tool Search and Code Mode attach only here. |
172 | 90 |
readonly |
Auditor / safe exploration: every tool annotated readOnlyHint=true across all mounts. |
90 | 90 |
analyst |
Business user finds, reads, exports and schedules workbooks and reports, bookmarks views, and asks workbook agents. | 31 | 23 |
author |
Workbook author builds, versions and verifies workbooks, reports and templates, and inspects elements while editing. | 40 | 28 |
modeler |
Data modeler maintains connections and data models, swaps workbook/report/model sources and materializes elements. | 33 | 24 |
embed |
Embedded-analytics engineer provisions tenants and tenant dashboards: templates, deployments, source swaps, embeds, tenant user attributes and connection syncs. | 50 | 27 |
access_admin |
Org admin onboards and offboards members, manages teams, grants and user attributes, workspace/workbook/connection access, and org security settings. | 52 | 22 |
Nine tools are in no job profile and are reachable only in full: workspace_delete_file, workspace_update_file, workspace_create_tag, workspace_delete_tag, admin_list_translations, admin_bulk_deactivate_members, admin_bulk_remove_team_members, admin_api_capabilities, and admin_list_recent_webhooks.
Read-only behavior
- The MCP
readOnlyHintannotation is the only thing that decides whether a tool is read-only. Every tool declares it explicitly:trueon the 90 reads andfalseon the 82 writes. A tool with no annotation or noreadOnlyHintcounts as a write. --profile readonlyorSIGMA_MCP_READONLY=1(on any profile) lists only the read-only tools, andReadOnlyGateMiddlewarerefuses any call to a real tool that is not read-only, including a write the filter hid. A refusal comes back as a tool result withisError: true.- A name that is not a tool on the server gets FastMCP's normal
Unknown toolerror, directly or throughcall_tool, so a typo is never reported as a blocked tool. - With Tool Search on, the gate checks the tool that
call_toolwraps. Reads throughcall_toolwork and writes are refused. Without Tool Search,call_toolis not a tool on the server, so a call to it getsUnknown tool: 'call_tool'. - If the gate cannot see the serving server, it refuses the call.
Bulk gate
admin_bulk_deactivate_members and admin_bulk_remove_team_members are listed in full. The admin domain guard refuses them at call time (isError: true) unless SIGMA_MCP_ALLOW_BULK_DESTRUCTIVE=1, and the handlers keep their own confirm / dry_run safeguards. Read-only mode hides and refuses them.
Tool Search and Code Mode
tools/list is flat by default. Discovery is opt-in and attaches only on full:
--enable-tool-search/SIGMA_MCP_ENABLE_TOOL_SEARCH=1replacestools/listwithsearch_toolsandcall_tool. The backend isregex(default) orbm25(--tool-search-backend/SIGMA_MCP_TOOL_SEARCH_BACKEND).--enable-code-mode/SIGMA_MCP_ENABLE_CODE_MODE=1attaches FastMCP's experimental Code Mode (search,get_schema,execute). Code Mode needs thefastmcp[code-mode]extra, which ships itspydantic-montysandbox, for exampleuvx --with "fastmcp[code-mode]" mcp-server-sigma --enable-code-mode. Without it, Code Mode is skipped with a warning and the flat catalog is served.- Turning on both raises
ValueError. Asking for either on another profile logs a warning and keeps the flat list. search_tools,searchandget_schemaonly read the catalog and are annotatedreadOnlyHint=true. Under read-only, Code Modeexecuteis refused.
📊 Feature & Tool Summary
The full profile lists 172 tools. Every tool name starts with the domain it is mounted under:
| Domain | Tools | Covers |
|---|---|---|
workbooks |
54 | Workbooks, reports and templates: contents/spec, pages, versions, bookmarks, schedules, exports, tags, grants, embeds, workbook agents, template deployment |
datasets |
22 | Connections and data models: connection grants, tests and schema syncs, cross-tenant connection sync, data model specs, columns, lineage and source swaps |
elements |
21 | Workbook elements, columns, controls, queries and sources; materializations; source-swap policies; Sigma docs search and formula reference |
workspace |
15 | Workspaces and their grants, files and folders, tags |
admin |
60 | Members, teams, user attributes, tenants, deployments, grants, org settings, AI config, IP allowlists, API connectors, recent webhook events |
| Total | 172 |
scripts/check_tool_contract.py fails CI if these counts drift from the live registry. The 2 bulk-destructive tools (admin_bulk_deactivate_members, admin_bulk_remove_team_members) are in the admin count and are refused at call time unless SIGMA_MCP_ALLOW_BULK_DESTRUCTIVE=1.
🍳 Composite Workflow Recipes
These high-level tools bundle multi-step API sequences into a single atomic call:
| Recipe Tool | What It Does |
|---|---|
workbooks_deploy_template_to_folder |
Instantiates a template & swaps warehouse sources in 1 call |
elements_materialize_and_wait |
Triggers a data materialization and polls until complete with timeout |
admin_onboard_member |
Atomically creates a member and assigns them to multiple teams |
admin_bulk_assign_team_members |
Batch-adds $N$ members to a team in a single request |
admin_bulk_remove_team_members |
Resolves member emails and batch-removes them from a team |
admin_bulk_deactivate_members |
Regex-matches members, generates dry-run report, and deactivates |
datasets_bulk_sync_tenant_connections |
Performs RFC 8693 token exchange per tenant to sync all connections |
workbooks_copy_workbook_to_member |
Duplicates a workbook directly into a user's home folder |
workbooks_promote_workbook |
Tags a workbook for version promotion (creates tag if missing) |
workbooks_export_and_download |
Exports workbook/element, handles 204 polling, returns final content |
datasets_sync_all_tables_in_schema |
Syncs an entire database.schema path across Sigma connections |
workbooks_reassign_workbook_ownership |
Bulk-transfers workbook ownership from one member email to another |
📐 MCP 2.0 Hints & Safety Annotations
Every tool includes structured MCP hints to assist AI clients with user permission prompts:
| Annotation | Count | Meaning |
|---|---|---|
readOnlyHint=true |
90 | Indicates intended non-mutation; clients may still require explicit user approval |
destructiveHint=true |
20 | Deletes, deactivates, or revokes; clients should prompt |
idempotentHint=true |
8 | Safe to retry; same input = same outcome |
openWorldHint=true |
172 | All tools hit an external API |
🧮 Writing Sigma Formulas
AI models frequently hallucinate SQL or Excel functions when writing Sigma formulas (e.g. using ArrayAgg() instead of List()).
Before writing any Sigma formula, call the built-in reference tool:
# Model prompt helper
Use tool `elements_formula_pitfalls` to check formula syntax rules.
See docs/formulas.md for full syntax details.
👩💻 Local Development & Testing
# Install dev tools
pip install -e ".[dev]"
# Run full test suite with 100% statement line coverage enforcement
pytest --cov=src/sigma_mcp --cov-fail-under=100 --cov-report=term-missing
# Run OpenAPI drift check
python scripts/check_openapi_drift.py
# Run MCP tool contract validation
python scripts/check_tool_contract.py
# Code formatting & type checking
ruff check src/
ruff format --check .
mypy --strict src/
🤝 Contributing & Community
Contributions are welcome! Please read CONTRIBUTING.md for development rules, SECURITY.md for security reporting, and CODE_OF_CONDUCT.md for community standards.
📜 License
MIT License.
Copyright (c) 2026 Christian Claudio.
Disclaimer: Not affiliated with, sponsored by, or endorsed by Sigma Computing, Inc.
Metadata
Release files for mcp-server-sigma 2.0.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 | |
|---|---|---|---|
| mcp_server_sigma-2.0.1.tar.gz | 455.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mcp_server_sigma-2.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 582.9 kB
Release files / mcp_server_sigma-2.0.1.tar.gz
| Download URL | mcp_server_sigma-2.0.1.tar.gz |
|---|---|
| Size | 455.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9bcf4703e57542a01a086fada4b7a03fbe3b7d3d67d13b7d56b469ae4c3c514e
|
|
BLAKE2b-256 checksum How to use checksums |
00abb41e18e992fb8f78fbc77ce1bcd51d3b91137d6cbb909a68fbad2998be1b
|
| 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 9, 2026.
Transparency logRelease files / mcp_server_sigma-2.0.1-py3-none-any.whl
| Download URL | mcp_server_sigma-2.0.1-py3-none-any.whl |
|---|---|
| Size | 127.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1570acafdbb2a29c91891a7207c9ce0476e1530cbaffa47934fbf4fadcc2a233
|
|
BLAKE2b-256 checksum How to use checksums |
73d4fb58948163332e77e124f49d56f47a827ea7b6dd72b8482a2667e9c272a0
|
| 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 9, 2026.
Transparency log