indykite-agent-gateway
IndyKite Agent Gateway
The IndyKite Agent Gateway (IAG) is a self-hosted proxy placed in front of exactly one downstream - an A2A agent or an MCP server. Run one IAG per protected downstream. IAG is not a generic reverse proxy: with protocol: a2a (default) it speaks the A2A JSON-RPC protocol and serves the protected agent's agent card; with protocol: mcp it serves one MCP endpoint (the path of service.base_url), forwards MCP Streamable HTTP traffic to the server's endpoint URL on the revisions 2025-06-18, 2025-11-25, and 2026-07-28, and publishes OAuth protected resource metadata. Either way the same decision runs in front.
For each request IAG decides in this order:
- Caller - the bearer token is introspected at the IdP; with a Token Service a workflow starts only at the agent the token was issued for, and a later hop arrives with
X-IK-Token. - Delegation token - the caller's token (or the incoming chain) and the protected agent's own client-credentials token are exchanged (RFC 8693) for a token whose
actclaim nests the chain. - Subject - ContX IQ
GET /contx-iq/v1/whoamiresolves the caller: type = theikg_node_typeof the Token Introspect configuration that validates the token, id = the token's subject claim. - Admission - one AuthZEN
POST /access/v1/evaluation: subject from whoami, actionauthzen.action, resource = the protected agent (its type from the token'sact.type,protected_agent.node_type, orAgent). The delegation token travels inX-IK-Tokenon that call in both modes, so the admission policy reads the chain as$ik_token.act_chainand compares it with theINVOKESpath of a workflow the subject mayCAN_TRIGGER. The gateway compares nothing itself:decision: falseis403. - Intent (a2a,
ibac.enabled) - the message text is sent to the Intent Agent before forwarding. - Forward and audit - one record per request, written before forwarding.
The gateway runs no Knowledge Query any more: contx_iq.query_id is ignored and a non-empty contx_iq.allowed_workflow_id stops it at startup (see the upgrade note in references/configuration.md).
When to use
Activate this skill when the user: