MCP stdio-to-Streamable-HTTP proxy with Databricks OAuth
Project description
uc-mcp-proxy
MCP stdio-to-Streamable-HTTP proxy with Databricks OAuth.
Lets any MCP client that speaks stdio (e.g. Claude Desktop, Claude Code) connect to any Databricks MCP server — Managed, External, or Apps — handling authentication automatically.
Installation
# Run directly (no install needed)
uvx uc-mcp-proxy --url <MCP_SERVER_URL>
# Or install globally
uv tool install uc-mcp-proxy
Requires Python 3.10+.
First-run authentication
uc-mcp-proxy expects a configured Databricks CLI profile. Set one up first:
databricks configure --host https://<workspace>
Then pass it to the proxy:
uvx uc-mcp-proxy --url <MCP_SERVER_URL> --profile <name>
If the profile uses OAuth U2M (auth_type = databricks-cli) and the cached
token is expired, uc-mcp-proxy runs databricks auth login --profile <name>
automatically the first time it launches, opening a browser tab. Subsequent
runs use the refreshed token.
uc-mcp-proxy will only auto-login for OAuth (databricks-cli) profiles.
For PAT, M2M, Azure, or other auth types, the proxy diagnoses the failure
and points you at the right remediation — it never runs databricks auth login against a non-OAuth profile because that would overwrite your
existing credentials in ~/.databrickscfg.
To skip the auto-login (CI / headless), pass --no-auto-login and ensure
DATABRICKS_TOKEN or another credential is set in the environment.
Databricks MCP Server Types
| Server Type | URL Pattern |
|---|---|
| Managed MCP (UC Functions, Vector Search, Genie, SQL) | https://<workspace>/api/2.0/mcp/functions/{catalog}/{schema} |
| External MCP (GitHub, Google Drive, and others) | https://<workspace>/api/2.0/mcp/external/{connection_name} |
| Apps (custom MCP servers) | https://<workspace>.databricks.com/apps/<app>/mcp |
Apps require OAuth. Use
--auth-type databricks-cliwhen connecting to a Databricks App. Managed and External MCP servers also work with PAT and other auth types.
Usage
Claude Desktop / Claude Code (.mcp.json)
Add to your MCP client configuration:
{
"mcpServers": {
"unity-catalog": {
"type": "stdio",
"command": "uvx",
"args": [
"uc-mcp-proxy",
"--url", "<MCP_SERVER_URL>"
]
}
}
}
CLI
uc-mcp-proxy --url <MCP_SERVER_URL> [--profile <DATABRICKS_PROFILE>] [--auth-type <AUTH_TYPE>]
| Flag | Description |
|---|---|
--url |
(required) Remote MCP server URL |
--profile |
Databricks CLI profile name (uses default if omitted) |
--auth-type |
Databricks auth type, e.g. databricks-cli |
--meta KEY=VALUE |
Meta parameter injected into tools/call _meta (repeatable) |
--no-verify-ssl |
Disable SSL certificate verification (use with caution — see below) |
Meta Parameters (Managed MCP)
Databricks Managed MCP servers accept configuration — for example, selecting a SQL warehouse — via the MCP _meta field in the JSON-RPC request body, not as HTTP headers. See the Databricks meta-param docs for the supported keys per server type.
Use --meta KEY=VALUE (repeatable) — the proxy merges these into params._meta on every outgoing tools/call request:
uvx uc-mcp-proxy \
--url https://workspace.databricks.com/api/2.0/mcp/sql \
--meta warehouse_id=abc123
Or in .mcp.json:
{
"mcpServers": {
"sql-mcp": {
"type": "stdio",
"command": "uvx",
"args": [
"uc-mcp-proxy",
"--url", "https://workspace.databricks.com/api/2.0/mcp/sql",
"--meta", "warehouse_id=abc123"
]
}
}
}
If the MCP client already sets a _meta key that the proxy is also configured to inject, the proxy value wins and a warning is written to stderr.
SSL Certificate Verification
Some Azure Databricks instances use self-signed or internally-signed certificates that are not trusted by the system's default CA bundle. This causes errors like:
SSL_CERTIFICATE_VERIFY_FAILED: certificate verify failed: unable to get local issuer certificate
Use --no-verify-ssl to disable certificate verification:
uvx uc-mcp-proxy \
--url https://workspace.azuredatabricks.net/api/2.0/mcp/functions/main/default \
--no-verify-ssl
Or in .mcp.json:
{
"mcpServers": {
"unity-catalog": {
"type": "stdio",
"command": "uvx",
"args": [
"uc-mcp-proxy",
"--url", "https://workspace.azuredatabricks.net/api/2.0/mcp/functions/main/default",
"--no-verify-ssl"
]
}
}
}
Security warning:
--no-verify-ssldisables all certificate validation, which exposes connections to man-in-the-middle (MITM) attacks. Only use this flag in trusted network environments (e.g. a private corporate VPN) where you control the network path to the Databricks workspace.
How It Works
- Starts an MCP stdio server (stdin/stdout)
- Connects to the remote MCP server via Streamable HTTP
- Injects a fresh Databricks OAuth token on every HTTP request
- Bridges messages bidirectionally between the two transports
Authentication
Authentication is handled by the Databricks SDK. The SDK auto-detects the method, or you can force one with --auth-type.
| Auth type | Managed / External MCP | Apps MCP |
|---|---|---|
databricks-cli — token from ~/.databrickscfg |
✅ | ✅ recommended |
pat — personal access token |
✅ | ❌ not supported |
oauth-m2m — service principal |
✅ | ✅ |
| OAuth U2M — browser-based login | ✅ | ✅ |
Development
uv sync # install dependencies
uv run pytest -m unit -v # run unit tests
uv run pytest -m integration -v # run integration tests
uv build # build package
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uc_mcp_proxy-0.5.0.tar.gz.
File metadata
- Download URL: uc_mcp_proxy-0.5.0.tar.gz
- Upload date:
- Size: 115.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6bc82f02d20d796e2d16b6c1a04494183d2915371688ca0da973eec57fbf878f
|
|
| MD5 |
93d1d539bb8ae048070b01c5e0fc0955
|
|
| BLAKE2b-256 |
0d3b3b94ae14311236982af8a63dad9f0546f541e052630dde9e194ccd8abecc
|
Provenance
The following attestation bundles were made for uc_mcp_proxy-0.5.0.tar.gz:
Publisher:
publish.yml on IceRhymers/uc-mcp-proxy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uc_mcp_proxy-0.5.0.tar.gz -
Subject digest:
6bc82f02d20d796e2d16b6c1a04494183d2915371688ca0da973eec57fbf878f - Sigstore transparency entry: 1564027015
- Sigstore integration time:
-
Permalink:
IceRhymers/uc-mcp-proxy@6b94efd92eef8db182a73344286c4ddfde3f35d3 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/IceRhymers
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6b94efd92eef8db182a73344286c4ddfde3f35d3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file uc_mcp_proxy-0.5.0-py3-none-any.whl.
File metadata
- Download URL: uc_mcp_proxy-0.5.0-py3-none-any.whl
- Upload date:
- Size: 11.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ef5c30e9667ea40cbaee68079cf2790b171f0af8dcd95f93829bf0b116a626e
|
|
| MD5 |
2571d437f96192e448e992a4d1ebb31c
|
|
| BLAKE2b-256 |
30764747ac5fd206d551794395012951d510a747bb3d9f18d76a0c796c192fd8
|
Provenance
The following attestation bundles were made for uc_mcp_proxy-0.5.0-py3-none-any.whl:
Publisher:
publish.yml on IceRhymers/uc-mcp-proxy
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
uc_mcp_proxy-0.5.0-py3-none-any.whl -
Subject digest:
4ef5c30e9667ea40cbaee68079cf2790b171f0af8dcd95f93829bf0b116a626e - Sigstore transparency entry: 1564027134
- Sigstore integration time:
-
Permalink:
IceRhymers/uc-mcp-proxy@6b94efd92eef8db182a73344286c4ddfde3f35d3 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/IceRhymers
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@6b94efd92eef8db182a73344286c4ddfde3f35d3 -
Trigger Event:
push
-
Statement type: