Hi, I’m evaluating Permit MCP Gateway for our MCP ...
# permit-saas
a
Hi, I’m evaluating Permit MCP Gateway for our MCP use case and would like to clarify a few things: 1. For an upstream MCP server that does not support OAuth, can we configure a static API token / PAT from a service account and have Permit send it to the upstream server, for example, as
Authorization: Bearer <token>
or a custom header? If yes, where is this configured and how are secrets stored/rotated? 2. How exactly can we grant specific users or groups access to specific tools on a specific MCP server? Is the model limited to
Low / Medium / High
trust levels, or can we configure an exact
user/group × tool
permission matrix via UI, API, or policy? 3. For OAuth-protected upstream MCP servers, does every end user have to complete the upstream OAuth flow individually, or can Permit use admin/service-account credentials for all users? How are Permit-level permissions separated from upstream permissions? 4. When using Permit Cloud, which outbound IP addresses are used to call upstream MCP servers? We need to allowlist incoming connections on our side. Are these IPs static and region-specific?
a
Hi @Aleksandr Filippov, I'm an AI assistant for Permit.io. I'll analyze available sources and get back to you shortly.
1. Static API Tokens for Non-OAuth Upstream MCP Servers For upstream MCP servers that don't require OAuth, the gateway handles this transparently — if the upstream server doesn't require authentication, no token is sent (1) . The documented consent flow shows that when the Consent Service probes an upstream server and doesn't receive a
401
response indicating OAuth is required, the upstream OAuth step is skipped entirely . The sources don't document a configuration option for static API tokens, service account credentials, or custom headers for non-OAuth upstream servers. The architecture shows that upstream OAuth tokens are stored in Redis when OAuth is required, but there's no mention of static token configuration . 2. Granular User/Tool Permissions The permission model is based on the ​*Low / Medium / High trust level system*​ (2) (1) . Tools are auto-classified into these trust levels based on naming patterns during import (2) : • ​*Low trust*​ — read-only tools (default for tools not matching medium or high patterns) (3) • ​*Medium trust*​ — write operations (tools containing:
create
,
write
,
update
,
set
,
modify
, etc.) • ​*High trust*​ — destructive operations (tools containing:
delete
,
remove
,
destroy
,
drop
, etc.) Trust levels are hierarchical — higher levels inherit all permissions from lower levels . The sources indicate that admins grant users access to specific MCP servers and set a per-user trust ceiling, and users then choose their agent's trust level during consent (up to that ceiling) (2) (1) . However, the sources don't document a way to create an exact
user × tool
permission matrix that grants access to individual tools outside of the trust level framework. The gateway returns all tools in
list_tools
responses regardless of the agent's trust level, with authorization enforcement happening exclusively at
call_tool
time (3) . 3. Upstream OAuth Flow For OAuth-protected upstream MCP servers, ​*every end user must complete the upstream OAuth flow individually*​ (1) . The consent flow shows: 1. The Consent Service probes the upstream server and receives a
401
indicating OAuth is required 2. The user is redirected to the upstream provider to authorize 3. The Consent Service exchanges the authorization code for tokens 4. The upstream tokens are stored securely and used for all future tool calls proxied through the gateway The sources don't document an option to use admin or service-account credentials for all users. The architecture explicitly shows that upstream OAuth tokens are stored per-user session and used when proxying tool calls . Permit-level permissions (the trust level system) are separate from upstream permissions — Permit enforces which tools an agent can call based on trust levels, while upstream OAuth handles authentication to the upstream service (3) (2) . 4. Outbound IP Addresses for Permit Cloud The sources don't document static outbound IP addresses for the Permit Cloud hosted gateway deployment. The egress requirements table in the on-premises installation guide lists upstream MCP servers as a required destination, but this is in the context of customer-controlled deployments, not the hosted cloud service (4)
Feel free to tag me with additional questions. I also appreciate feedback, it helps me improve. 👍 button 👎 button
Appreciate the feedback! Feel free to ask me again with additional guidance or context.
o
AI gave good answers I'm augmenting on top 1. For Paying customers we can add additional auth mechanics. 2. The policies generated automatically are built in Permit (each MCP setup bound to a Permit Environment);and you can customize them at app.permit.com including via adding custom OPA Rego via the gitops feature
3. Giving access without bounding to a authenticating and binding to a specific user is probably a bad idea for both zero trust and for users delegating access to their own surfaces within services. But this can technically be done
4. We don't provide static IPs, but the Gateway does support approaching an MCP server with a dedicated secret for auth
a
Thanks, that helps! A few follow-ups: 1. When you say "for paying customers", which plans does that include? Pro, Enterprise, or only a custom Enterprise/professional-services engagement? 2. For the "dedicated secret for auth" to the upstream MCP server: - Can it be sent as
Authorization: Bearer <token>
? - Can it be sent as a custom header? - Is it configured per MCP server or per Gateway host? - Is it used both during import/tool discovery and during runtime tool calls? - How is it stored and rotated? 3. For policies, I can see generated roles/actions in https://app.permit.io/policy-editor, including
mcp_toolbox#low/medium/high
and exact tool actions. Can we safely customize these generated policies, or can MCP Gateway sync/re-import overwrite them? 4. So we can implement a true
user/group x MCP tool
permission matrix, not just Low/Medium/High trust levels. right? 5. At runtime, does the Gateway check permissions as
agent|client_id
only? If so, how should we model per-human permissions so they apply correctly to ChatGPT agent calls?
o
1. Enterprise or PRO with significant scale. 2. You can see the preview docs for the feature here - https://deploy-preview-623--permitio-docs.netlify.app/permit-mcp-gateway/architecture/#upstream-authentication-gateway-jwt (I was under the impression this was already merged (CC @david , @Ze'ev Manilovich) 3. In most flows objects won't be overwritten, but I'd encourage you to focus on adding on top (additional relationships attributes etc.) instead of mutating the auto generated objects. If you work with Rego directly by adding more rules they would override by default, you can read more about this here https://docs.permit.io/integrations/gitops/custom_policy/ 4. Yes. And We also plan to add customization of the levels via the agent.security UI directly 5. Via ReBAC policies that focus on the human to resource link to derive the policy decision
🙏 1