Private beta
Tremi MCP
Connect a developer MCP client to discover published workflows, inspect normalized run evidence, and create contained simulations.
https://www.tremi.ai/api/mcp- 1
Enable MCP
Ask a Tremi platform administrator to enable MCP for the workspace.
- 2
Publish a workflow
Publish the workflow whose contract and simulation tools the client will use.
Open workflows - 3
- 4
Connect and verify
Add the endpoint and bearer key to Codex or MCP Inspector, then confirm all five tools appear.
Configure a client
list_published_workflowsget_workflow_contractsimulate_workflowlist_runsget_run
Access and authentication
Use a dedicated Tremi bearer key and grant only the scopes the client needs.
| Scope | Allows |
|---|---|
workflows:read | List published workflows and read their safe contracts. |
workflows:simulate | Create deterministic, internally contained simulations. |
runs:read | List runs and read normalized run evidence. |
workflows:run remains a backward-compatible simulation superset, but live runs are not available through MCP.
Codex
Store the Tremi key in TREMI_API_KEY, then add the server to your Codex configuration.
[mcp_servers.tremi]
url = "https://www.tremi.ai/api/mcp"
bearer_token_env_var = "TREMI_API_KEY"MCP Inspector
- Start MCP Inspector with
npx @modelcontextprotocol/inspector. - Select Streamable HTTP and enter
https://www.tremi.ai/api/mcp. - Add
Authorization: Bearer $TREMI_API_KEY, connect, and confirm the five tools listed above.
list_published_workflowsList published workflows
List published Tremi workflows available in the authenticated workspace.
- Scope
workflows:read- Read only
- true
- External delivery
- None
list_published_workflows
{
"limit": 20
}{
"workflows": [
{
"name": "Evaluation follow-up",
"slug": "evaluation-follow-up",
"description": "Follow up after a customer evaluation.",
"version": 4,
"publishedAt": "2026-08-27T14:12:00.000Z"
}
],
"nextCursor": null
}Input
| Field | Type | Required | Description |
|---|---|---|---|
cursor | string | No | Opaque cursor returned by the previous page. |
limit | integer | No | Page size from 1 through 50. Defaults to 20. |
Result
| Field | Type | Required | Description |
|---|---|---|---|
workflows | array | Yes | Published workflow summaries in stable publication order. |
workflows[].name | string | Yes | Workspace-facing workflow name. |
workflows[].slug |
get_workflow_contractGet workflow contract
Get the safe public contract for one published Tremi workflow.
- Scope
workflows:read- Read only
- true
- External delivery
- None
get_workflow_contract
{
"workflowSlug": "evaluation-follow-up"
}{
"name": "Evaluation follow-up",
"slug": "evaluation-follow-up",
"description": "Follow up after a customer evaluation.",
"version": 4,
"schemaVersion": 2,
"channels": [
"voice"
],
"stopConditions": [
"voice.goal_completed",
"recipient.opt_out"
],
"requiredDestinations": [
"phone"
],
"variables": {
"first_name": {
"type": "string",
"description": "Customer first name.",
"nullable": false,
"sensitive": false,
"example": "User"
}
},
"publishedAt": "2026-08-27T14:12:00.000Z"
}Input
| Field | Type | Required | Description |
|---|---|---|---|
workflowSlug | string | Yes | Slug of a published workflow in the authenticated workspace. |
Result
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Workspace-facing workflow name. |
slug | string | Yes | Stable published workflow slug. |
description | string | Yes | Safe published workflow description. |
version | integer |
simulate_workflowSimulate workflow
Create a contained deterministic simulation that stores normal Tremi run evidence.
- Scope
workflows:simulate- Read only
- false
- External delivery
- None
simulate_workflow
{
"workflowSlug": "evaluation-follow-up",
"idempotencyKey": "evaluation-2048",
"variables": {
"first_name": "User"
}
}{
"id": "run_01K4MCP2048",
"state": "queued",
"workflowVersion": 4,
"createdAt": "2026-08-27T14:12:00.000Z",
"replayed": false,
"resultWebhookDelivery": "suppressed"
}Input
| Field | Type | Required | Description |
|---|---|---|---|
workflowSlug | string | Yes | Slug of a published workflow in the authenticated workspace. |
idempotencyKey | string | Yes | Caller key of at most 200 characters for safe retries. |
variables | object | No | Scalar workflow variables. Defaults to an empty object. |
Result
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Public identifier of the simulated run. |
state | run state |
list_runsList runs
List normalized Tremi run summaries in the authenticated workspace.
- Scope
runs:read- Read only
- true
- External delivery
- None
list_runs
{
"workflowSlug": "evaluation-follow-up",
"mode": "simulation",
"limit": 20
}{
"runs": [
{
"id": "run_01K4MCP2048",
"workflow": {
"name": "Evaluation follow-up",
"slug": "evaluation-follow-up",
"version": 4
},
"state": "completed",
"outcome": "goal_achieved",
"mode": "simulation",
"resultWebhookPolicy": "suppress",
"createdAt": "2026-08-27T14:12:00.000Z",
"updatedAt": "2026-08-27T14:14:06.000Z"
}
],
"nextCursor": null
}Input
| Field | Type | Required | Description |
|---|---|---|---|
workflowSlug | string | No | Return runs for one workflow slug. |
state | run state | No | Return runs in one lifecycle state. |
mode | live | simulation | No | Return runs created in one execution mode. |
cursor | string | No | Opaque cursor returned by the previous page. |
limit | integer | No | Page size from 1 through 50. Defaults to 20. |
Result
| Field | Type | Required | Description |
|---|
get_runGet run
Get normalized evidence for one Tremi run without recipient or provider-sensitive data.
- Scope
runs:read- Read only
- true
- External delivery
- None
get_run
{
"runId": "run_01K4MCP2048"
}{
"id": "run_01K4MCP2048",
"workflow": {
"name": "Evaluation follow-up",
"slug": "evaluation-follow-up",
"version": 4
},
"state": "completed",
"outcome": "goal_achieved",
"mode": "simulation",
"resultWebhookPolicy": "suppress",
"attempts": [
{
"stepIndex": 0,
"channel": "voice",
"state": "delivered",
"errorCode": null,
"startedAt": "2026-08-27T14:12:02.000Z",
"completedAt": "2026-08-27T14:13:26.000Z"
}
],
"events": [
{
"name": "run.created",
"occurredAt": "2026-08-27T14:12:00.000Z"
},
{
"name": "run.completed",
"occurredAt": "2026-08-27T14:14:06.000Z"
}
],
"createdAt": "2026-08-27T14:12:00.000Z",
"updatedAt": "2026-08-27T14:14:06.000Z"
}Input
| Field | Type | Required | Description |
|---|---|---|---|
runId | string | Yes | Public Tremi run identifier. |
Result
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Public run identifier. |
workflow | object | Yes | Workflow name, slug, and immutable version. Draft simulations use version 0 and include draftRevision. |
state | run state | Yes | Current run lifecycle state. |
outcome | outcome | null | Yes |
Simulation isolation
An MCP simulation creates ordinary Tremi run evidence without causing external delivery.
- Tremi creates a normal run in
simulationmode and stores deterministic attempts, run events, state transitions, and the terminal outcome. - Tremi generates reserved synthetic recipient values and fixed
{source: "tremi-mcp"}metadata server-side. - No provider adapter is invoked and no recipient is contacted.
- No result-webhook event, attempt, delivery job, or outbound webhook request is created.
- The result reports
resultWebhookDelivery: "suppressed".
Optional MCP test-webhook delivery is deferred to a later release. V1 has no input or separate tool that can enable it.
Pagination and idempotency
List tools use opaque cursors backed by stable timestamp and public-identifier ordering.
- List size defaults to 20 and accepts values from 1 through 50.
- Pass the returned
nextCursorunchanged to retrieve the next page. simulate_workflowrequires an idempotency key of at most 200 characters.- Tremi namespaces that key to the authenticated API key. Replaying the same key and input returns the original run.
- Reusing the key with different input returns
idempotency_conflict.
Workflow contracts
Published workflow metadata gives agents a useful contract without exposing prompts, message bodies, provider resources, or run input values.
Schema v2 requires a workflow description and a descriptor for every referenced template variable. Each descriptor declares type, description, nullable, sensitive, and an optional example. Publishing rejects missing or extra descriptors and run creation enforces declared types and nullability.
Published schema-v1 workflows remain readable and runnable. Tremi represents each inferred v1 template variable as any_scalar, nullable, with a generic description. Saving and publishing a new revision upgrades the authoring contract to v2.
Errors and limits
Tool failures are returned as safe MCP error results without raw exceptions or request data.
| Code | Meaning |
|---|---|
authentication_required | The bearer key is missing or invalid. |
forbidden | The API key lacks the tool scope. |
mcp_not_enabled | The workspace private-beta entitlement is disabled. |
validation_failed | The tool input, cursor, workflow variables, or contract is invalid. |
not_found | The workflow or run is not available in the authenticated workspace. |
idempotency_conflict | The simulation key was reused with different input or is still processing. |
rate_limited | The key exceeded 120 protocol requests or 10 simulations per minute. |
internal_error | The request could not be completed safely. |
Tool annotations
Tool annotations tell compatible clients how each operation behaves.
| Tool | readOnlyHint | destructiveHint | openWorldHint |
|---|---|---|---|
list_published_workflows | true | false | false |
get_workflow_contract | true | false | false |
simulate_workflow | false | false | false |
list_runs | true | false | false |
get_run | true | false | false |
simulate_workflow is not read-only because it creates a run. It is non-destructive and has openWorldHint: false because it cannot contact providers, recipients, or result-webhook destinations.
ChatGPT integration
The private beta uses Tremi API keys for developer MCP clients.
Public ChatGPT web integration requires the later OAuth phase and is not supported by this bearer-key beta. See the OpenAI authentication guidance for the authorization model required for that release.