Token-based MCP servers from the same container; OAuth MCP limitations and Linear example.
Goal: use MCP servers from this Coolify deployment (where Claude Code runs inside the container).
This setup uses remote MCP servers (hosted by the provider), and Claude Code makes outbound HTTPS calls to them.
If the MCP server is already hosted publicly (like Linear), you just add it to Claude Code and the container makes outbound HTTPS calls to it.
This project currently supports only API key / token-based auth for MCP servers (for example, setting an Authorization: Bearer <token> header).
We do not support OAuth-based MCP servers yet (i.e. servers that require completing a browser login flow + redirect/callback to obtain tokens). A future approach may register Omnidev as an OAuth app with each provider; for now use token-based MCP auth.
You can set this up either by:
~/.claude/.claude.json inside the container (recommended for precise control), orClaude config example (~/.claude/.claude.json):
{
"mcpServers": {
"linear-server": {
"type": "http",
"url": "https://mcp.linear.app/mcp",
"headers": {
"Authorization": "Bearer <token>"
}
}
},
"enabledMcpjsonServers": []
}
If you prefer to add the server first via CLI:
claude mcp add --scope user --transport http linear-server https://mcp.linear.app/mcp
Notes:
--scope user: this makes the MCP server available in all workspaces (so it doesn’t matter what directory you run claude mcp add from).Then edit ~/.claude/.claude.json to add the headers block (as shown above).
That’s it — no container port changes required.
Some setups use an input prompt to avoid hard-coding tokens in the JSON:
{
"servers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/",
"headers": {
"Authorization": "Bearer ${input:github_mcp_pat}"
}
}
},
"inputs": [
{
"type": "promptString",
"id": "github_mcp_pat",
"description": "GitHub Personal Access Token",
"password": true
}
]
}