MCP Proxy
Provides OAuth-based authentication for Atlassian services (e.g., Confluence Cloud) to enable user credential management and tool execution through the MCP proxy.
Allows users to connect their Confluence account and access Confluence tools (e.g., search pages, read content, create and update pages) via the MCP proxy using an Atlassian API token.
Allows users to connect their GitHub account and access GitHub tools (e.g., managing repositories, issues, pull requests) via the MCP proxy using a Personal Access Token.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP ProxyConnect my GitHub account"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Proxy
A self-hosted proxy that gives each user their own credentials for upstream MCP (Model Context Protocol) servers. Users connect services like GitHub and Confluence by visiting a one-time secure link, the LLM never sees the credentials.
How it works
OpenWebUI → MCP Proxy → Upstream MCP servers → GitHub / Confluence / ...
(per-user (user's own
credential credentials
injection) forwarded)The proxy sits between OpenWebUI and upstream MCP servers. When the LLM calls a tool, the proxy intercepts the request, looks up the calling user's stored credential, and forwards the call to the upstream server with that credential attached. Each user's keys are stored encrypted with two independent layers (AES-256-GCM with a master key + a per-user key derived from the JWT secret), so a single compromised secret is not enough to decrypt stored credentials.
For a full explanation see docs/how-it-works.md.
Related MCP server: AI Service Gateway MCP
Quick start
Prerequisites
Docker and Docker Compose
A running OpenWebUI instance
A running Redis instance
There are two compose files depending on your setup:
File | Use when |
| You already run GitHub MCP and Confluence MCP separately, just deploys the proxy |
| Full local stack, deploys proxy + GitHub MCP + Confluence MCP together |
1. Configure environment
cp .env.example .envEdit .env and fill in all values. Required:
Variable | Description |
| Must match your OpenWebUI |
| Base64-encoded 32-byte AES key - see instruction below |
| Redis connection string, e.g. |
| Public-facing URL of this proxy, no trailing slash |
| JSON map of service name to upstream MCP URL, e.g. |
Generate a master encryption key:
python -c "import os,base64; print(base64.b64encode(os.urandom(32)).decode())"2. Start the proxy
docker compose up -dOr with the full dev stack (includes GitHub MCP and Confluence MCP):
docker compose -f dev-stack-proxy/docker-compose.yaml up -d3. Register in OpenWebUI
Settings → Connections → MCP Servers → Add:
TYPE: MCP Streamable HTTP
URL: http://localhost:8000/mcp
AUTH: Session (Will forward user JWT(cookie) to the proxy so it knows who its talking to)If OpenWebUI runs in Docker on the same host, use http://host.docker.internal:8000/mcp or the container name.
Connecting services
Users connect services through the chat interface - no admin action needed per user.
GitHub
In chat: "Connect my GitHub account"
Open the one-time link the assistant provides
Paste a GitHub PAT (Personal Access Token) with
reposcopeReturn to chat
For GitHub Enterprise, set GITHUB_HOST in .env to your enterprise hostname.
Confluence
In chat: "Connect my Confluence account"
Open the one-time link
Enter your Atlassian email and an API token (generate at
https://id.atlassian.com/manage-profile/security/api-tokens)Return to chat
Requires CONFLUENCE_URL and ATLASSIAN_OAUTH_CLOUD_ID in .env. See docs/atlassian-oauth-setup.md.
Once connected, the LLM can search pages, read content, create and update pages, and more - full tool execution works end-to-end using Basic auth with the user's API token.
Adding any other MCP server
Add the service to MCP_SERVERS in .env and a container entry to docker-compose.yaml. Tool discovery is automatic - no code changes needed for services that use standard Bearer auth.
See docs/configuration.md for auth header scheme configuration.
Available tools (exposed to the LLM)
Tool | Description |
| Generate a one-time link to connect a service |
| List all tools from authenticated upstream services |
| Call a tool on an upstream service |
| Show which services the user has connected |
| Remove a stored credential |
Multiple credentials per service
Users can store multiple credentials for the same service using aliases, useful for different GitHub organisations or scoped tokens:
"Connect my GitHub account for org my org"
→ get_auth_url('github', alias='my org')
"Connect my GitHub personal account"
→ get_auth_url('github', alias='')The LLM uses the alias when calling tools:
call_tool('list_repositories', {}, alias='my org')Security
Credentials are encrypted at rest with two independent AES-256-GCM layers
Outer layer:
MASTER_ENCRYPTION_KEYInner layer: HKDF-derived from
WEBUI_SECRET_KEY+user_idAuth links are one-time use with a 5-minute TTL
User identity is verified on every request via JWT signed with
WEBUI_SECRET_KEYCredentials expire after a user-selected TTL (30 / 90 / 180 / 365 days)
Documentation
File | Contents |
Conceptual and technical explanation | |
Request flow, component design, design decisions | |
Operator setup guide | |
All environment variables | |
LLM-facing tools reference | |
Confluence Cloud setup |
Project structure
MCP_Proxy/
├── main.py # FastMCP app, tool definitions, routing
├── auth.py # JWT verification
├── auth_flow.py # One-time auth URL and credential form
├── credentials.py # Encrypted credential storage (Redis)
├── registry.py # Upstream MCP server discovery and tool dispatch
├── Dockerfile
├── docker-compose.yaml # Proxy only - bring your own upstream MCP servers
├── .env.example
├── dev-stack-proxy/
│ ├── docker-compose.yaml # Full stack - proxy + GitHub MCP + Confluence MCP
│ └── .env.example
└── docs/This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
Zero-setup MCP gateway securely connecting AI to your tools with authentication and workflows
The Remote MCP server acts as a standardized bridge between LLM applications (like Claude, ChatGPT, and Cursor) and external services, enabling AI agents to access external tools and resources. Its primary capability is providing a centralized search tool to discover other MCP servers and their respective tools. Unlike local implementations, it runs remotely with OAuth authentication and permission controls for security.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
FlicenseNot gradedqualityBmaintenanceSelf-hosted MCP gateway that connects Claude, ChatGPT, and other AI agents to 20+ enterprise tools (GitLab, Jira, Notion, Google Workspace, Slack, Grafana, …) with OAuth, audit logs, and zero data leaving your infrastructure-- AlicenseNot gradedqualityCmaintenanceEnables AI agents to securely access authenticated services (HTTP, SSH, SMTP) without exposing secrets, by acting as a server-side proxy that injects authentication.MIT
- AlicenseNot gradedqualityCmaintenanceA security-hardened MCP gateway that enables AI agents to call LLM APIs (Gemini, OpenAI, Claude, etc.) using ephemeral proxy tokens, eliminating exposure of real API keys.566Apache 2.0
- AlicenseNot gradedqualityBmaintenanceAn MCP server that provides ephemeral credentials and persistent MCP connections for AI coding agents, enabling secure access to services like GitHub and AWS without exposing secrets to the agent.11Apache 2.0