> ## Documentation Index
> Fetch the complete documentation index at: https://docs.duraton.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP tools

> The workflows tools an AI assistant can call over MCP.

Two MCP servers offer the same workflows tools, with the same names, arguments
and hints:

| Server | Address | Sign in |
| - | - | - |
| Project | `https://<slug>.<project-domain>/mcp` | A secret key (`dtn_sk_`) in the `apikey` header |
| Management | `/mcp` on the console's address | Your account, through OAuth |

Read tools are always listed. Write tools are listed only while MCP writes are
on for the project; the project server answers only for the key's own project.

Every write tool takes an optional `idempotencyKey`: the same key replays the
first result. Run inputs, outputs, errors and event data come back marked as
the project's data, never as instructions.

## Tools

| Tool | Access | Arguments | What it does |
| - | - | - | - |
| `workflows_list_workflows` | Read | `projectId`, `limit?`, `cursor?` | List a project's registered workflows with their triggers and the builds serving them. |
| `workflows_get_workflow` | Read | `projectId`, `app`, `name` | Get one workflow by app and name, with its input schema. |
| `workflows_list_runs` | Read | `projectId`, `app?`, `workflow?`, `status?`, `runType?`, `eventId?`, `since?`, `until?`, `buildId?`, `tags?`, `limit?`, `cursor?` | List a project's runs, newest first, filtered by workflow, status, trigger, build or tags. |
| `workflows_get_run` | Read | `projectId`, `runId` | Get one run: its status, input, result and error. |
| `workflows_list_steps` | Read | `projectId`, `runId`, `limit?`, `cursor?` | List a run's steps with their inputs, outputs and errors. |
| `workflows_list_run_logs` | Read | `projectId`, `runId`, `limit?`, `cursor?` | List the lines a run's worker logged, newest first. |
| `workflows_list_events` | Read | `projectId`, `name?`, `app?`, `source?`, `since?`, `until?`, `limit?`, `cursor?` | List the events a project received, newest first, filtered by name, app, source or time, each with the runs it started. |
| `workflows_get_event` | Read | `projectId`, `eventId` | Get one received event: its data, the waiting runs it woke and the runs it started. |
| `workflows_list_schedules` | Read | `projectId`, `limit?`, `cursor?` | List a project's schedules with their next fire times. |
| `workflows_get_schedule` | Read | `projectId`, `scheduleId` | Get one schedule: its workflow, cron, time zone, policies, input and next fire time. |
| `workflows_get_cron_preview` | Read | `projectId`, `cron`, `timezone?`, `count?` | Preview the next times a cron expression fires in a time zone, before a schedule uses it. |
| `workflows_list_tokens` | Read | `projectId`, `status?`, `limit?`, `cursor?` | List a project's wait tokens; a token's secret is never shown. |
| `workflows_list_runners` | Read | `projectId`, `limit?`, `cursor?` | List the workers connected to a project right now. |
| `workflows_get_limits` | Read | `projectId` | Get a project's workflow limits and what four of them measure now: queued and concurrent runs, schedules, connected workers. |
| `workflows_get_usage` | Read | `projectId`, `from`, `to` | Get a project's workflows and webhooks usage between two instants: runs, steps, events, run state byte-hours, webhook delivery attempts and their bytes. |
| `workflows_run_workflow` | Write | `projectId`, `app`, `name`, `input?`, `startAfter?`, `idempotencyKey?` | Start a run of a workflow with an input. |
| `workflows_send_event` | Write | `projectId`, `name`, `app?`, `data?`, `dedupeId?`, `idempotencyKey?` | Send an event: every workflow it triggers starts, and runs waiting on it wake. |
| `workflows_cancel_run` | Write | `projectId`, `runId`, `reason`, `idempotencyKey?` | Cancel a run that has not finished; the reason is audited. |
| `workflows_cancel_runs` | Write | `projectId`, `filter`, `idempotencyKey?` | Cancel every unfinished run a filter matches, at most 500. Filter by app, workflow, status, runType, since and tags; eventId, until and buildId are refused. |
| `workflows_pause_run` | Write | `projectId`, `runId`, `idempotencyKey?` | Pause a queued, running or waiting run: it keeps its progress and runs nothing until resumed. |
| `workflows_resume_run` | Write | `projectId`, `runId`, `idempotencyKey?` | Resume a paused run: it is queued again and continues where it stopped. |
| `workflows_replay_run` | Write | `projectId`, `runId`, `fromStep?`, `input?`, `idempotencyKey?` | Replay a run as a new run, from a step or from the start. |
| `workflows_replay_runs` | Write | `projectId`, `filter`, `fromStep?`, `idempotencyKey?` | Replay every finished run a filter matches, at most 500. Filter by app, workflow, status, runType and since; eventId, until, buildId and tags are refused. |
| `workflows_create_schedule` | Write | `projectId`, `workflow`, `cron`, `timezone`, `overlap`, `missedFire`, `catchUpWindowSeconds?`, `externalId?`, `input?`, `paused?`, `idempotencyKey?` | Create a schedule that starts a workflow on a cron expression in a time zone. |
| `workflows_update_schedule` | Write | `projectId`, `scheduleId`, `workflow?`, `cron?`, `timezone?`, `overlap?`, `missedFire?`, `catchUpWindowSeconds?`, `externalId?`, `input?`, `paused?`, `idempotencyKey?` | Change a schedule's cron, time zone, policies or input. |
| `workflows_delete_schedule` | Write | `projectId`, `scheduleId`, `idempotencyKey?` | Delete a schedule. |
| `workflows_pause_schedule` | Write | `projectId`, `scheduleId`, `idempotencyKey?` | Pause a schedule: it fires nothing until resumed. |
| `workflows_resume_schedule` | Write | `projectId`, `scheduleId`, `idempotencyKey?` | Resume a paused schedule from its next fire time. |
| `workflows_complete_token` | Write | `projectId`, `tokenId`, `data`, `idempotencyKey?` | Complete a wait token with data: the run waiting on it wakes. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.