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 datasetrefresh_dataflow(dataflow_id)— trigger a dataflow runlist_cards(page_id)— get cards on a Domo page
Prerequisites
- A Domo instance with API credentials (Client ID + Secret)
- Python 3.11+
- The
pydomolibrary
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.

