Pass-through integration for local government · records are never stored System status1-559-251-7767Sentra familySign in
SentraBridgeIntegration platform
DevelopersModel Context Protocol

Connect an AI assistant

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.

§ How it works

How it works

16 tools: 11 only read, 5 can change something.

  1. 01Make a tokenViewer for looking, builder for drafting and running.
  2. 02Add the serverOne command or a few lines of settings.
  3. 03Ask in plain words"Why did last night's permit sync fail?"
  4. 04A person decidesDrafts stay off until someone previews and turns them on.

Connect

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 Code
claude mcp add --transport http sentrabridge https://app.sentrabridge.com/mcp \
  --header "Authorization: Bearer sbk_…"
Claude Desktop, Cursor, VS Code and other MCP apps
{
  "mcpServers": {
    "sentrabridge": {
      "type": "http",
      "url": "https://app.sentrabridge.com/mcp",
      "headers": {
        "Authorization": "Bearer sbk_…"
      }
    }
  }
}
§ Tools

What an assistant can do.

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.

MCP tools, their least role and inputs
ToolWhat it doesMinimum roleKindInputs
list_flowsEvery flow in this workspace: name, trigger, schedule, on/off, last run and status.ViewerReadsNone
get_flowOne flow: its steps in order (type and label), schedule, problems, notifications and status. Settings only; no records.ViewerReadsflow_id
describe_flowA 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.ViewerReadsflow_id
get_flow_yamlThe 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.ViewerReadsflow_id
flow_building_guideEverything 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.ViewerReadsNone
create_draft_flowCreate 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.BuilderChangesyaml
update_draft_flowReplace 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.BuilderChangesflow_id, yaml
run_historyRecent runs, newest first: status, counts in/out/failed, duration and redacted errors. Filter by flow or status.ViewerReadsflow_id (optional), status (optional), limit (optional)
get_runOne run step by step: counts, record IDs that moved (source → target), failures with their IDs and errors.ViewerReadsrun_id
trace_recordFollow 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.ViewerReadsrecord_id
flow_healthHealth over the last 7–90 days: runs per day, success rate per flow, slowest steps and connections needing attention.ViewerReadsdays (optional)
list_connectionsConnected systems: name, connector, status of the last test and which flows use them. Never credentials.ViewerReadsNone
list_approvalsApproval requests: what is waiting, who can decide, and recent decisions.ViewerReadspending_only (optional)
run_flowStart a flow by hand, as the token's person. Returns the new run; check it with get_run.BuilderChangesflow_id
run_flow_testsRun 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.BuilderChangesflow_id
decide_approvalApprove or reject a waiting request, if the token's person is an approver. Approving continues the flow for those records.ViewerChangesapproval_id, decision, record_ids (optional), reason (optional)
§ Guardrails

What an assistant can't do.

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.

Running flows are safe

update_draft_flow refuses a flow that is on. A person turns it off first. Earlier versions stay in the flow's history.

Existing connections only

A draft can use only connections a person already set up. An assistant can't add a system or a credential.

Everything is logged

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.

The token's role is the ceiling

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.

No record contents

Tools answer with settings, counts, IDs and redacted errors. Flow test results are pass or fail with plain messages.

Calling it yourself

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.

Call a tool with curl
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": {}}}'
Request body
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "list_flows",
    "arguments": {}
  }
}
Answer, shortened
{
  "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
  }
}