Jae Wilson @DataCrew
Domo

How to Build an MCP Server with Domo

April 9, 2026

Domo has a solid API. Most people use it through the UI. But if you're building AI agents or automating your data workflows, you want your agent to be able to query a dataset, trigger a dataflow, or publish a card — programmatically, from a prompt.

That's what an MCP (Model Context Protocol) server gives you.

What we're building

A Python MCP server that exposes Domo operations as tools your AI agent can call:

  • query_dataset(dataset_id, sql) — run a SQL query against any Domo dataset
  • refresh_dataflow(dataflow_id) — trigger a dataflow run
  • list_cards(page_id) — get cards on a Domo page

Prerequisites

  • A Domo instance with API credentials (Client ID + Secret)
  • Python 3.11+
  • The pydomo library

Setting up the MCP server

from mcp.server import Server
from mcp.server.models import InitializationOptions
import pydomo
 
app = Server("domo-mcp")
 
domo = pydomo.Domo(
    client_id=os.environ["DOMO_CLIENT_ID"],
    client_secret=os.environ["DOMO_CLIENT_SECRET"],
    logger_name="domo-mcp",
    log_level=logging.WARNING,
)
 
@app.tool()
async def query_dataset(dataset_id: str, sql: str) -> str:
    """Run a SQL query against a Domo dataset."""
    result = domo.ds_query(dataset_id, sql)
    return json.dumps(result["rows"])

Why this matters

Once your Domo instance is an MCP server, every AI agent that supports MCP — Claude, Cursor, any OpenAI-compatible client — can access your data platform as a tool. That's the foundation for building agentic data workflows.

Full code in the GitHub repo linked above.

Related

More posts on similar topics.

Got a project in mind?

hire me →

Getting value from the content but not ready to hire?

let's call it professional development

☕ buy me a coffee →

Want a practitioner take on Domo and AI, every month?

free, no spam, unsubscribe anytime

📰 subscribe to the digest →