Soft pastel gradient blending from warm peach to cool blue
Agentic Data Plane / MCP Gateway

One path to every system your agents touch.

Connect a system once and every agent can use it, scoped to the tools it needs, with credentials it never holds and a policy that runs on the reply before the model ever sees it.

21 hosted connectors · 300+ Connect sources · Runs in your VPC

Reach

21 hosted MCP servers. 300+ sources behind the same plane.

Hosted connectors expose named tools with auth handled. Everything else in your estate arrives over Kafka, SQL or Iceberg, or as an OpenAPI spec, through Redpanda Connect.

A connector is a set of named tools with auth already handled. ServiceNow, for example, exposes three.

ServiceNowIncidents, requests and caller records.shared credential
mcp.acme-prod.cloud.redpanda.com/v1/servicenow-itsm · 3 tools
search_incidents read
Query incidents through the ServiceNow Table API.
query* · state · limit
get_incident read
Fetch a single incident by number.
number*
list_requests read
List service requests and their caller.
caller
* required · runs as this server's stored credential
Systems your agents reach
Clients your team already uses
Claude CodeCursorVS CodeCodex CLIClineRoo CodeopencodeMicrosoft TeamsPython SDKTypeScript SDKcurl
Tools in the prompt

An agent only sees the tools it needs.

A connector can expose dozens of tools, and every schema an agent holds is re-sent on every turn. Two mechanisms keep that list short: scope it yourself, or let the agent find tools at call time with Code Mode.

What the model carries in every promptlower is better
One tool call at a time104 tools · ~17,680 tokens
With Code Mode8 tools · ~1,360 tokens
13×
fewer tokens, every turn

Every schema is re-sent on every turn, so this is a cost the agent pays continuously, not once.

Tool counts are real. Token figures assume ~170 tokens per tool schema and Code Mode's two tools per connected server: an estimate of the shape, not a measurement.

Without Code Mode every schema, every turn
You are a helpful assistant. Your tools are:

list_customers(limit, starting_after)
get_customer(id)
create_customer(body)
update_invoice(id, body)
list_payments(limit, status)
delete_webhook(id)
// + 88 more Internal REST API tools
slack_post_message(channel, text, thread_ts)
slack_list_channels(types, limit)
search_incidents(query, state, limit)
get_incident(number)
query(sql, params, max_rows)
…
With Code Mode search, execute, and a sandbox
// the only tools on this endpoint: search, execute
const { tools } = await mcp.search({ query: "open incidents" })
// → servicenow.search_incidents

return await mcp.execute(`
  const open = await tools.servicenow.search_incidents({
    query: "active=true", state: "in_progress", limit: 25 })
  const tiers = await Promise.all(open.incidents.map(i =>
    tools.postgres.query({
      sql: "select tier from accounts where id = $1",
      params: [i.account_id] })))
  return open.incidents.map((i, n) => ({
    number: i.number, priority: i.priority, tier: tiers[n].rows[0].tier }))
`)

Twenty-six calls become one.

That script fetches 25 incidents and joins each one to its account tier. One at a time that is 26 round trips through the gateway. In the sandbox it is one, which is usually a bigger win than the tokens.

Same gateway, same policy.

The sandbox calls tools through the MCP gateway like anything else, so scoping, redaction and the audit log still apply. Or keep one call at a time and simply scope the list: one OpenAPI spec produced 94 tools, this agent sees 6.

How enforcement works

Policy runs before egress, not in a nightly report.

Every tool call is brokered. Fields are masked on the way back and disallowed calls are refused at the gateway, including ones the model was talked into trying.

A call it may make
A call it may not
search_incidents · 186msAllowed with redaction
1Support Triage asks for a toolsearch_incidents with query, state and a limit of 500.
2Gateway checks scope, clamps the arguments, attaches the credentialThe tool is in this agent's scope. limit is clamped to 25. The stored ServiceNow credential is attached.
3ServiceNow returns the raw recordIncidents with caller_id.email, caller_id.ssn and work_notes included.
4Policy masks 2 fields, hides 1, drops 1 row. Then the agent sees itThe policy runs on the way back, before the reply reaches the agent.

caller_id.ssn and work_notes are never in the prompt, and never in any log downstream of it.

delete_webhook · 9msRefused before egress
1Billing Ops asks for a tooldelete_webhook on the Internal REST API, after a prompt in a ticket told it to "clean up old integrations".
2Gateway checks scopedelete_webhook is a destructive operation and is tool-level denied for this agent.
3Refused at the gatewayNo credential is attached and no request leaves the plane. 403 returned to the agent in 9ms.
4Logged, with the prompt that caused itThe audit log records who asked, what was refused and why. The SIEM sees it in real time.

The model was talked into trying. The gateway did not care; the policy is not in the prompt.

audit log · who asked · what was allowed · what was refusedLIVE
16:34:22200Slack · Support Triage · slack_post_message240ms
16:34:15200ServiceNow · Support Triage · search_incidents · redacted186ms
16:34:08403Internal REST API · Billing Ops · delete_webhook · refused9ms
16:34:01200PostgreSQL · Revenue Analyst · query910ms
16:33:54200Jira · Release Notes · jira_search156ms
16:33:47200Internal REST API · Billing Ops · get_invoice · redacted320ms
16:33:40403Internal REST API · Outbound SDR · export_all_customers · refused11ms
16:33:33200Kafka · Revenue Analyst · list_topics274ms
8–11ms
Refused calls. Policy rejects them before egress.
142–910ms
Allowed calls. The time to actually reach Slack, Postgres or Kafka.
That gap is the proof the gate is in the path. Workspace-wide, immutable, streamed to your SIEM.
Identity

The agent never holds a credential.

Secrets stay in the vault. An agent presents a short-lived, scoped identity and the gateway attaches the real credential at call time, which is why a leaked agent config leaks nothing.

1
Agent
Calls with a short-lived, scoped identity. No secret on board.
2
MCP Gateway
Pulls the credential from the vault and attaches it, at call time.
3
Upstream API
The call carries the real credential. The agent never saw it.
Vault
Secrets never leave
Steal an agent's config and you hold a name and an identity that expired minutes ago.

Per-user OAuth

user delegated

Each person signs in with their own account. Tool calls run with that person's identity and permissions, and the audit trail names them.

Good for Slack, Jira, Google Drive. Anywhere the answer depends on who is asking.

BambooHR · get_compensation · "What does my team earn?"
Priya Subramanian · Eng Manager
4 records
Ana Lopez · €82,400
Ben Weber · €76,000
Mira Okonkwo · €88,500
Tom Vega · €71,200
Tom Vega · Engineer
1 record
Tom Vega (them) · €71,200
The gateway does not decide who sees what. BambooHR already knows; the gateway only carries the identity of the person who asked.

Shared credential

service account

All agents share one stored credential. No individual sign-in; every call uses the same identity, and the secret is a subresource of this server alone.

Good for databases, bot tokens, internal APIs. Where there is one right answer.

One connection, every server that uses it.

A person links their Slack account once. Every per-user MCP server that uses Slack reuses it: no per-server setup, no second consent screen. Revoke it in one place and every server stops acting as them.

Connect

Anything that speaks MCP points at one URL.

Sign-in happens in the browser. The client identifies itself by a URL it publishes, so there is no OAuth client to pre-register and nothing left behind to expire.

  • Tool calls land in this server's activity tab either way
  • Code Mode lets an agent compose tools in a sandbox instead of one call at a time
  • Re-run discovery and the tool list updates without touching the agent
Claude Code
Codex CLI
Cursor / VS Code
$ claude mcp add --transport http --scope user \
    redpanda https://mcp.acme-prod.cloud.redpanda.com/v1
$ codex mcp add redpanda \
    --url https://mcp.acme-prod.cloud.redpanda.com/v1
{ "mcpServers": { "redpanda": {
    "url": "https://mcp.acme-prod.cloud.redpanda.com/v1"
} } }
Also Claude, ChatGPT, Python SDK, TypeScript SDK, curl: any client that speaks MCP over streamable HTTP, listed here or not.

Point one agent at it and watch the log.

You will see what it reaches, what got masked, and what it tried that it should not have.