Agent tool access control
Expose only approved tools to each agent, block destructive actions like delete or deploy, and require approval for sensitive calls, regardless of what the model decides.
Agents need more than a proxy. Odock puts a governed MCP gateway between your agents and every upstream server, enforcing auth, access policy, spend limits, and audit records before any tool executes.
One governed path for every tool call.
An MCP gateway is a control plane between AI agents and the MCP servers that expose tools like GitHub, Slack, and databases. Instead of every agent holding upstream credentials and reaching each server directly, all tool traffic flows through one governed endpoint that authenticates the caller, checks tool-level permissions, enforces budgets, and records every call. Odock ships it as part of one AI governance plane, so the same keys, budgets, and audit records govern your MCP tool traffic and your LLM traffic alike.
Expose only approved tools to each agent, block destructive actions like delete or deploy, and require approval for sensitive calls, regardless of what the model decides.
Agents authenticate to the gateway with virtual API keys. Upstream GitHub, Slack, or database credentials are stored once in Odock and injected only after governance checks pass.
Price tool calls per request and per byte, cap them with budgets and quotas, and attribute every call to a key, team, and user for chargeback and compliance review.
No request reaches an upstream server until it passes auth, access, inspection, and cost controls. Every outcome is recorded.
Validate the virtual API key.
Confirm access grants and server scope.
Filter tools, payloads, and policies.
Check budgets and quotas before execution.
Proxy upstream via HTTP, SSE, or STDIO.
Log tool, latency, status, and cost.
{
"apiKey": "vk_agent_prod_support",
"mcpServer": "github-tools-http",
"method": "tools/call",
"tool": "delete_file",
"reason": "blocked_tool",
"status": 403
}When an agent can write to a database, push to GitHub, or trigger a workflow, the risk boundary is no longer just the prompt. An MCP gateway gives platform and security teams a hard enforcement point on actions, not just outputs.
Allowlist known MCP servers, expose only approved tools, and block destructive actions before an agent can call them, regardless of what the model decides.
Authenticate every caller, check access grants, inspect payloads, and reject requests that fail safety, budget, or compliance rules before any upstream call is made.
Attribute every tool call to a key, app, team, and user. Give security and compliance teams the records they need to review governed agent behavior, or prove it to an auditor.
Odock covers everything platform teams need to run MCP in production: server registration, transport and auth setup, tool-level governance, pricing, and usage records your security team can actually read.
Register servers from a trusted catalog or add them manually. Review transport, auth config, scope, and enabled status before any agent can reach them.
Point every agent to `/v1/mcp/{slug}`. Odock authenticates the caller, confirms access, injects upstream credentials, runs governance checks, and records the outcome. The upstream server never receives an ungoverned request.
1# Use Odock's MCP endpoint directly from the official Python MCP client2import asyncio3import os4 5from mcp import ClientSession6from mcp.client.streamable_http import streamable_http_client7 8async def main():9 async with streamable_http_client(10 os.environ["ODOCK_MCP_URL"],11 headers={"Authorization": f"Bearer {os.environ['ODOCK_API_KEY']}"},12 ) as (read_stream, write_stream, _):13 async with ClientSession(read_stream, write_stream) as session:14 await session.initialize()15 result = await session.call_tool("get_me", arguments={})16 print(result)17 18asyncio.run(main())Compliance programs need answers to specific questions: who was authorized to use which tool, under what policy, with what evidence? An ungoverned MCP layer can't answer those questions. Odock can.
These are the recurring questions that come up when teams move from direct MCP server access to a governed gateway layer.
If your agents can call tools, you need the same level of control you already expect for model traffic. Odock governs both from a single request path.
# Use Odock's MCP endpoint directly from the official Python MCP clientimport asyncioimport os from mcp import ClientSessionfrom mcp.client.streamable_http import streamable_http_client async def main(): async with streamable_http_client( os.environ["ODOCK_MCP_URL"], headers={"Authorization": f"Bearer {os.environ['ODOCK_API_KEY']}"}, ) as (read_stream, write_stream, _): async with ClientSession(read_stream, write_stream) as session: await session.initialize() result = await session.call_tool("get_me", arguments={}) print(result) asyncio.run(main())