Skip to main content
Beyond LLM traffic, TrustGate runs a dedicated MCP plane (:8082) that fronts Model Context Protocol servers. Rather than connecting an agent to each MCP server directly, TrustGate aggregates several servers into a single MCP endpoint — composing their tools, prompts, and resources — and applies the same tenancy, access control, auth, and observability as LLM traffic.

One endpoint, many servers

An agent connects to one TrustGate MCP endpoint and sees a unified surface. TrustGate speaks JSON-RPC over the streamable-http transport and implements the standard methods:
MethodReturns
tools/list · tools/callThe composed tool catalog, and tool invocation.
resources/list · resources/templates/list · resources/readComposed resources and templates.
prompts/list · prompts/getComposed prompts.
Behind the endpoint, each upstream is an MCP registry (type: MCP). TrustGate fans list calls out to the bound registries, merges the results, and routes each call/read/get to the owning server.

Tool name composition

Because two servers can expose the same tool name, TrustGate keeps names unique on the merged surface:
  • Unique names pass through unchanged.
  • On a collision, the tool is prefixed with the registry name (e.g. asana_create_task).
  • If that still collides, a short registry id is added; as a last resort a numeric suffix.
So an agent always sees stable, unambiguous names regardless of how many servers are behind the endpoint.

Registering an MCP server

Register a server as a registry of type: MCP with an mcp_target:
FieldMeaning
codeCatalog code (e.g. com.asana/mcp) — the join key the console uses to tell whether a catalog server is already connected. Empty for custom servers added by raw URL.
urlThe server’s http(s) endpoint (required).
transportstreamable-http (defaults to it; the only supported transport).
headersStatic headers sent upstream.
authHow TrustGate authenticates to the server (see below).
Browse pre-seeded enterprise servers via GET /v1/mcp-servers-catalog, validate a connection with test-connection, and list a registry’s live tools via GET /v1/gateways/{gateway_id}/registries/{id}/tools.

Toolkits — scoping what an agent can use

A consumer doesn’t automatically get every tool on every bound server. Access is governed by a toolkit — a list of grants, each scoping a registry to specific tools, prompts, or resources:
Entry fieldMeaning
registry_idWhich MCP registry the grant applies to.
tool / prompt / resourceThe capability name to allow; * grants all of that kind.
expose_asOptional rename for how the capability appears to the agent.
For inline MCP consumers, the toolkit lives on the consumer (mcp.toolkit). For role-based consumers, the effective view is built from the matched roles:
  • Registries = the union of the matched roles’ MCP registries.
  • Toolkit = the union of the roles’ mcp_policies toolkits. A role that binds an MCP registry without an explicit toolkit grants that server fully.
So one MCP endpoint can present a different, identity-scoped toolkit to each caller.

Fail mode

fail_mode decides what happens when an upstream server is unavailable:
  • open — degrade gracefully (skip the failed server).
  • closed — fail the call.
For role-based consumers, the effective mode is open only when every contributing role declares it open; otherwise it is closed (and closed when no role grants access).

Upstream authentication

mcp_target.auth.mode controls how TrustGate authenticates to the MCP server. Each mode has its own requirements:
ModeBehaviorRequires
noneNo upstream auth.
staticA fixed header/token on every call.header + value.
passthroughForward the caller’s own bearer token unchanged.expected_audience (unconstrained passthrough is rejected); the caller’s token audience must match.
exchangeExchange the caller’s token for a downstream one (STS).a pattern (see below).
forwardedUse a per-user credential the user authorized once (OAuth connect).provider + registration config.

Exchange patterns

The exchange mode implements standard token-exchange patterns:
PatternRequires
impersonationaudience
delegationaudience + actor
obo (on-behalf-of)scope (e.g. resource/.default)
token_exchangeaudience

Forwarded (per-user OAuth)

For SaaS servers where each end-user must connect their own account (e.g. their Asana), forwarded mode stores a per-user OAuth credential:
  • Set provider and either registration: auto (TrustGate registers the client) or registration: manual with client_id, authorize_url, and token_url.
  • The first call for a user with no stored credential returns a consent-required signal with a connect link; the user authorizes the provider once and the credential is vaulted.
  • TrustGate refreshes expiring credentials automatically and re-prompts for consent only when a grant can no longer be refreshed.

Agent authentication

The MCP plane is itself an OAuth2 authorization server for the agents connecting to it, implementing the standard discovery and flow endpoints:
EndpointPurpose
/.well-known/oauth-protected-resourceProtected-resource metadata.
/.well-known/oauth-authorization-serverAuthorization-server metadata.
/registerDynamic Client Registration (DCR).
/authorize · /callback · /tokenAuthorization-code flow with PKCE.
/.well-known/jwks.jsonPublic keys for token verification.
/connect · /disconnectConnect/disconnect an agent’s link to a downstream provider (the consent flow used by forwarded auth).
Together these let an agent register, obtain a token, call the unified MCP endpoint, and — when a downstream needs per-user authorization — complete a one-time connect without leaving the gateway.