Drafts only
create_draft_flow always makes a flow that is turned off. An assistant has no tool to turn a flow on, change a connection or see a key.
SentraBridge is an MCP server. Claude, or any assistant that speaks MCP, can look at your flows, runs and health, trace a record and draft a flow for a person to review. It works as you, and never sees record contents.
16 tools: 11 only read, 5 can change something.
The server address is https://app.sentrabridge.com/mcp. It signs in with an API token from Settings → API & AI assistants; the token dialog shows these same settings with your token filled in.
It speaks streamable HTTP with JSON answers (protocol versions 2025-11-25, 2025-06-18, 2025-03-26). There is no event stream, so GET answers 405.
The limit is 120 calls a minute per person.
claude mcp add --transport http sentrabridge https://app.sentrabridge.com/mcp \
--header "Authorization: Bearer sbk_…"{
"mcpServers": {
"sentrabridge": {
"type": "http",
"url": "https://app.sentrabridge.com/mcp",
"headers": {
"Authorization": "Bearer sbk_…"
}
}
}
}This list is read from the server's own code. A tool the token's role can't use answers with an error the assistant can explain.
| Tool | What it does | Minimum role | Kind | Inputs |
|---|---|---|---|---|
list_flows | Every flow in this workspace: name, trigger, schedule, on/off, last run and status. | Viewer | Reads | None |
get_flow | One flow: its steps in order (type and label), schedule, problems, notifications and status. Settings only; no records. | Viewer | Reads | flow_id |
describe_flow | A plain-English description of a flow, step by step, in wiring order: what starts it, what each step does with the records, which systems it reads and writes. Settings only. | Viewer | Reads | flow_id |
get_flow_yaml | The whole flow as a SentraBridge flow file (YAML): every step with its settings and the wires. Connections appear by name, never their keys. Use it to understand a flow in detail or as the starting point for update_draft_flow. | Viewer | Reads | flow_id |
flow_building_guide | Everything needed to write a SentraBridge flow file: the format, every step type with its settings and outputs, this workspace's connections with their resources and fields, and an example. Call this before create_draft_flow. | Viewer | Reads | None |
create_draft_flow | Create a new flow from a SentraBridge flow file (YAML; see flow_building_guide). It is created turned off, as a draft for a person to preview and turn on. Only connections that already exist in this workspace can be used. Returns the new flow, any problems to fix, and its address in SentraBridge. | Builder | Changes | yaml |
update_draft_flow | Replace the steps of a flow that is turned off with a new flow file (YAML). The old version stays in the flow's history and can be restored. Flows that are on are refused: a person must turn them off first. | Builder | Changes | flow_id, yaml |
run_history | Recent runs, newest first: status, counts in/out/failed, duration and redacted errors. Filter by flow or status. | Viewer | Reads | flow_id (optional), status (optional), limit (optional) |
get_run | One run step by step: counts, record IDs that moved (source → target), failures with their IDs and errors. | Viewer | Reads | run_id |
trace_record | Follow one record ID (a permit number, request ID…) through every run and system: where it was read, sent, what it became, or why it failed. | Viewer | Reads | record_id |
flow_health | Health over the last 7–90 days: runs per day, success rate per flow, slowest steps and connections needing attention. | Viewer | Reads | days (optional) |
list_connections | Connected systems: name, connector, status of the last test and which flows use them. Never credentials. | Viewer | Reads | None |
list_approvals | Approval requests: what is waiting, who can decide, and recent decisions. | Viewer | Reads | pending_only (optional) |
run_flow | Start a flow by hand, as the token's person. Returns the new run; check it with get_run. | Builder | Changes | flow_id |
run_flow_tests | Run every saved test of a flow in dry mode (made-up records in; nothing is read from sources, written, sent or emailed) and report pass or fail per test and per expectation. Answers hold plain messages only, never record values. | Builder | Changes | flow_id |
decide_approval | Approve or reject a waiting request, if the token's person is an approver. Approving continues the flow for those records. | Viewer | Changes | approval_id, decision, record_ids (optional), reason (optional) |
create_draft_flow always makes a flow that is turned off. An assistant has no tool to turn a flow on, change a connection or see a key.
update_draft_flow refuses a flow that is on. A person turns it off first. Earlier versions stay in the flow's history.
A draft can use only connections a person already set up. An assistant can't add a system or a credential.
Each tool call is written to the activity log with the token's name, and to the AI and MCP call log with timing and outcome, never the answer.
A viewer token can't draft, run or test. Tools that start runs (run_flow) need a builder token, so hand those out with care.
Tools answer with settings, counts, IDs and redacted errors. Flow test results are pass or fail with plain messages.
You don't need an assistant to use the tools. Any HTTP client can send JSON-RPC 2.0 to the same address: initialize, tools/list and tools/call.
Answers carry the data twice: as structuredContent for programs and as text for a model. Check isError before using it.
curl -s -X POST "$SENTRABRIDGE_URL/mcp" \
-H "Authorization: Bearer $SENTRABRIDGE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "list_flows", "arguments": {}}}'{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "list_flows",
"arguments": {}
}
}{
"jsonrpc": "2.0",
"id": 3,
"result": {
"content": [
{
"type": "text",
"text": "(the same data as structuredContent, as text)"
}
],
"structuredContent": {
"data": [
{
"id": "01m769bjwj9bnvmyggg6rp5kcn",
"name": "API reference webhook sample",
"description": null,
"enabled": false,
"trigger": "trigger.webhook",
"schedule": null,
"steps": 2,
"connectors": [],
"next_run_at": null,
"last_run_at": "2026-11-11T21:48:51+00:00",
"last_status": "ok",
"version": 1,
"template": null,
"updated_at": "2026-11-11T21:48:51+00:00",
"last_success_at": null,
"department": null
},
{
"id": "01m769bjp928n7vqvkaezxh05w",
"name": "API reference sample",
"description": "Every 15 minutes, upserts new and changed Sentra 311 requests into a PostGIS table, with a map point built from latitude and longitude.",
"enabled": false,
"trigger": "trigger.schedule",
"schedule": "*/15 * * * *",
"steps": 4,
"connectors": [
"01m74hqe33cy19f80c393jnpz7",
"01m74knwpc7xd4424q3ybrqf3b"
],
"next_run_at": null,
"last_run_at": null,
"last_status": null,
"version": 1,
"template": null,
"updated_at": "2026-11-11T21:48:51+00:00",
"last_success_at": null,
"department": null
}
]
},
"isError": false
}
}