Early access is openRequest access
Mowa

Developers

Mowa over MCP.

The MCP server exposes the prompt registry, datasets, jobs, and usage as tools for AI clients. Connections authorize over OAuth, act inside exactly one workspace with your own membership role, and are available on every plan, subject to the workspace's plan limits.

01

Connect a client

Endpoint

https://mowa.dev/mcp

Paste the URL into any MCP client that speaks streamable HTTP, such as Claude, Cursor, or your own agent. The same server is also mounted at /api/mcp.

The client registers itself over OAuth 2.0 dynamic client registration and opens a browser window. You sign in to Mowa if you are not already signed in, then pick which workspace the connection acts as. Every tool call from that client runs inside the chosen workspace with your own membership role.

Client config
{
  "mcpServers": {
    "mowa": {
      "url": "https://mowa.dev/mcp"
    }
  }
}

The workspace choice is stored per user and per OAuth client. To switch workspaces, disconnect and reconnect the client so the authorization flow can ask again.

02

Tools

Results come back as JSON in the tool's text content. Failures return a tool error whose text is code: message, using the same codes as the REST API, including plan_limit when a Free workspace hits a cap, see limits.

list_prompts

List every prompt in the connected workspace with version counts and live status.

No inputs

Result
{
  "workspace": "acme",
  "prompts": [{ "id": "p9f2...", "name": "Support triage", "liveVersion": 3, "versionCount": 4 }]
}

get_prompt

Get one prompt with all versions, including each version's content, typed inputs, and typed outputs.

Inputs

Inputs for get_prompt
FieldTypeNotes
promptIdstringRequired, the prompt id
Result
{
  "prompt": { "id": "p9f2...", "name": "Support triage" },
  "versions": [{ "versionNumber": 4, "status": "draft", "inputs": [], "outputs": [] }]
}

create_prompt

Create a prompt with version 1 as a draft and enqueue AI interface analysis. Poll get_job_status with the returned analysisJobId for suggested typed inputs and outputs.

Inputs

Inputs for create_prompt
FieldTypeNotes
namestringRequired, human readable prompt name
contentstringRequired, the prompt template content
descriptionstringOptional
Result
{ "id": "p9f2...", "versionId": "v1a8...", "versionNumber": 1, "analysisJobId": "42" }

create_prompt_version

Add a new draft version to an existing prompt.

Inputs

Inputs for create_prompt_version
FieldTypeNotes
promptIdstringRequired, the prompt id
contentstringRequired, new version content
notesstringOptional change notes
Result
{ "versionId": "v2c1...", "versionNumber": 5 }

publish_version

Publish a prompt version as live. Requires an owner or admin role in the workspace, and the previous live version is archived.

Inputs

Inputs for publish_version
FieldTypeNotes
versionIdstringRequired, the version id to publish
Result
{ "versionId": "v2c1...", "versionNumber": 5, "status": "live" }

list_datasets

List every dataset in the connected workspace with row counts.

No inputs

Result
{
  "workspace": "acme",
  "datasets": [{ "id": "d4k1...", "name": "Ticket fixtures", "rowCount": 84 }]
}

get_dataset

Get one dataset with its typed columns and a sample of rows.

Inputs

Inputs for get_dataset
FieldTypeNotes
datasetIdstringRequired, the dataset id
limitinteger1 to 500, defaults to 25
offsetinteger0 or more, defaults to 0
Result
{
  "dataset": { "id": "d4k1...", "name": "Ticket fixtures" },
  "columns": [{ "name": "ticket", "type": "string", "optional": false }],
  "rows": [{ "id": "r7m3...", "data": { "ticket": "My invoice is wrong" } }],
  "rowCount": 84
}

add_dataset_row

Append one row to a dataset. Keys must match the dataset's column names, and required columns cannot be omitted.

Inputs

Inputs for add_dataset_row
FieldTypeNotes
datasetIdstringRequired, the dataset id
dataobjectRequired, row values keyed by column name
Result
{ "id": "r7m3..." }

generate_dataset_rows

Enqueue AI generation of synthetic rows for a dataset, up to 50 per run. Returns a jobId to poll with get_job_status.

Inputs

Inputs for generate_dataset_rows
FieldTypeNotes
datasetIdstringRequired, the dataset id
countintegerRequired, 1 to 50
guidancestringOptional, up to 500 characters for the generator
Result
{ "jobId": "43" }

get_job_status

Check a background job started by create_prompt or generate_dataset_rows. Returns state, progress, and the result once completed.

Inputs

Inputs for get_job_status
FieldTypeNotes
jobIdstringRequired, the job id
Result
{ "jobId": "43", "type": "dataset_generate", "state": "completed", "result": { "inserted": 25 } }

get_ai_usage

Aggregate AI usage for the connected workspace over the last 30 days: total calls, tokens, images, and a per-model breakdown.

No inputs

Result
{
  "windowDays": 30,
  "totals": { "calls": 128, "inputTokens": 90210, "outputTokens": 51000, "images": 4 },
  "models": [{ "model": "claude-sonnet-4-5", "provider": "anthropic", "calls": 96 }]
}

get_billing

Report the workspace's plan and usage against plan limits. Pass upgrade true to start a Stripe checkout for Pro and get a URL to open in a browser. Upgrading requires an owner or admin role, and a workspace already on Pro just says so.

Inputs

Inputs for get_billing
FieldTypeNotes
upgradebooleanDefaults to false, true starts a Pro checkout
Result
{
  "workspace": "acme",
  "plan": "free",
  "usage": { "prompts": 2, "datasets": 1, "syntheticRowsThisMonth": 25 },
  "limits": { "prompts": 2, "datasets": 1, "rowsPerDataset": 100, "syntheticRowsPerMonth": 25 },
  "checkoutUrl": "https://checkout.stripe.com/c/pay/cs_..."
}

help

A concise guide to Mowa and this connection: what Mowa is, the connected workspace and your role, what every tool does, the billing summary, and links to the docs, pricing, and dashboard.

No inputs

Result
{
  "about": "Mowa is the system of record for AI behavior...",
  "workspace": { "name": "Acme", "slug": "acme", "role": "owner" },
  "tools": { "list_prompts": "List every prompt with version counts and live status." },
  "billing": { "plan": "free", "usage": {}, "limits": {} },
  "links": { "docs": "https://mowa.dev/developers" }
}