litellm - 💡(How to fix) Fix [Bug]: BYOK for non-OpenAPI spec MCP missing in UI

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Root Cause

  1. Create form: Show BYOK block when transportType is http, sse, or openapi (exclude stdio).
  2. Edit form: Add is_byok, byok_description, byok_api_key_help_url to mcp_server_edit.tsx for existing servers (read-only hint if toggling off after users have credentials).
  3. Docs: Clarify BYOK applies to OpenAPI-generated MCP and native HTTP MCP servers. Optional: add GET /v1/mcp/server/{server_id}/user-credential/status symmetric to oauth-user-credential/status for BYOK (today only has_user_credential on list endpoint).

Workaround (today)

Register via API:

curl -X POST "$LITELLM_BASE/v1/mcp/server" \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server_name": "my_mcp_server",
    "url": "https://my-mcp.example.com/mcp",
    "transport": "http",
    "auth_type": "bearer_token",
    "is_byok": true,
    "allow_all_keys": true,
    "byok_description": ["Describe access for users"],
    "byok_api_key_help_url": "https://docs.example.com/api-keys"
  }'

Users store PAT via playground Connect or POST /v1/mcp/server/{server_id}/user-credential.

Impact

  • Enterprise deployments with FastMCP / Streamable HTTP servers (not OpenAPI specs) cannot self-serve BYOK registration in UI
  • Forces API/script registration and confuses operators who assume BYOK is OpenAPI-only because the UI implies it
  • Edit flow cannot enable BYOK on existing HTTP servers without delete/recreate via API

Environment

  • LiteLLM proxy with DB (store_model_in_db, MCP in supported_db_objects)
  • MCP server type: FastMCP, transport: http, auth_type: bearer_token, per-user PAT
  • Reproduced on LiteLLM dashboard “Add New MCP Server” modal (version aligned with BerriAI/litellm main as of 2026-05)

Version / fork note

Observed in downstream fork wdpr-ra-litellm; same UI code path exists upstream in ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.tsx.

Fix Action

Fix / Workaround

  1. Create form: Show BYOK block when transportType is http, sse, or openapi (exclude stdio).
  2. Edit form: Add is_byok, byok_description, byok_api_key_help_url to mcp_server_edit.tsx for existing servers (read-only hint if toggling off after users have credentials).
  3. Docs: Clarify BYOK applies to OpenAPI-generated MCP and native HTTP MCP servers. Optional: add GET /v1/mcp/server/{server_id}/user-credential/status symmetric to oauth-user-credential/status for BYOK (today only has_user_credential on list endpoint).

Workaround (today)

Register via API:

curl -X POST "$LITELLM_BASE/v1/mcp/server" \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server_name": "my_mcp_server",
    "url": "https://my-mcp.example.com/mcp",
    "transport": "http",
    "auth_type": "bearer_token",
    "is_byok": true,
    "allow_all_keys": true,
    "byok_description": ["Describe access for users"],
    "byok_api_key_help_url": "https://docs.example.com/api-keys"
  }'

Users store PAT via playground Connect or POST /v1/mcp/server/{server_id}/user-credential.

Impact

  • Enterprise deployments with FastMCP / Streamable HTTP servers (not OpenAPI specs) cannot self-serve BYOK registration in UI
  • Forces API/script registration and confuses operators who assume BYOK is OpenAPI-only because the UI implies it
  • Edit flow cannot enable BYOK on existing HTTP servers without delete/recreate via API

Environment

  • LiteLLM proxy with DB (store_model_in_db, MCP in supported_db_objects)
  • MCP server type: FastMCP, transport: http, auth_type: bearer_token, per-user PAT
  • Reproduced on LiteLLM dashboard “Add New MCP Server” modal (version aligned with BerriAI/litellm main as of 2026-05)

Version / fork note

Observed in downstream fork wdpr-ra-litellm; same UI code path exists upstream in ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.tsx.

Code Example

curl -X POST "$LITELLM_BASE/v1/mcp/server" \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server_name": "my_mcp_server",
    "url": "https://my-mcp.example.com/mcp",
    "transport": "http",
    "auth_type": "bearer_token",
    "is_byok": true,
    "allow_all_keys": true,
    "byok_description": ["Describe access for users"],
    "byok_api_key_help_url": "https://docs.example.com/api-keys"
  }'

---
RAW_BUFFERClick to expand / collapse

Check for existing issues

  • I have searched the existing issues and checked that my issue is not a duplicate.

What happened?

  1. Create form: Show BYOK block when transportType is http, sse, or openapi (exclude stdio).
  2. Edit form: Add is_byok, byok_description, byok_api_key_help_url to mcp_server_edit.tsx for existing servers (read-only hint if toggling off after users have credentials).
  3. Docs: Clarify BYOK applies to OpenAPI-generated MCP and native HTTP MCP servers. Optional: add GET /v1/mcp/server/{server_id}/user-credential/status symmetric to oauth-user-credential/status for BYOK (today only has_user_credential on list endpoint).

Workaround (today)

Register via API:

curl -X POST "$LITELLM_BASE/v1/mcp/server" \
  -H "Authorization: Bearer $ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "server_name": "my_mcp_server",
    "url": "https://my-mcp.example.com/mcp",
    "transport": "http",
    "auth_type": "bearer_token",
    "is_byok": true,
    "allow_all_keys": true,
    "byok_description": ["Describe access for users"],
    "byok_api_key_help_url": "https://docs.example.com/api-keys"
  }'

Users store PAT via playground Connect or POST /v1/mcp/server/{server_id}/user-credential.

Impact

  • Enterprise deployments with FastMCP / Streamable HTTP servers (not OpenAPI specs) cannot self-serve BYOK registration in UI
  • Forces API/script registration and confuses operators who assume BYOK is OpenAPI-only because the UI implies it
  • Edit flow cannot enable BYOK on existing HTTP servers without delete/recreate via API

Environment

  • LiteLLM proxy with DB (store_model_in_db, MCP in supported_db_objects)
  • MCP server type: FastMCP, transport: http, auth_type: bearer_token, per-user PAT
  • Reproduced on LiteLLM dashboard “Add New MCP Server” modal (version aligned with BerriAI/litellm main as of 2026-05)

Version / fork note

Observed in downstream fork wdpr-ra-litellm; same UI code path exists upstream in ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.tsx.

Steps to Reproduce

Relevant log output

What part of LiteLLM is this about?

UI Dashboard

What LiteLLM version are you on ?

v1.83.14

Twitter / LinkedIn details

No response

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING