{"record":{"id":"22bd8bbe342f5cbb","repo":"BerriAI/litellm","slug":"stdio-mcp-servers-cannot-be-submitted-via-the-user","errorCode":null,"errorMessage":"stdio MCP servers cannot be submitted via the user registration workflow. Ask a proxy admin to add this server via POST /v1/mcp/server or to declare it in config.yaml.","messagePattern":"stdio MCP servers cannot be submitted via the user registration workflow\\. Ask a proxy admin to add this server via POST /v1/mcp/server or to declare it in config\\.yaml\\.","errorType":"http","errorClass":"HTTPException","httpStatus":400,"severity":"error","filePath":"litellm/proxy/management_endpoints/mcp_management_endpoints.py","lineNumber":1258,"sourceCode":"                status_code=status.HTTP_403_FORBIDDEN,\n                detail={\n                    \"error\": \"PROXY_ADMIN users should use POST /v1/mcp/server to create servers directly instead of the submission workflow.\"\n                },\n            )\n\n        if not user_api_key_dict.team_id:\n            raise HTTPException(\n                status_code=status.HTTP_400_BAD_REQUEST,\n                detail={\"error\": \"Registration requires an API key associated with a team. Use a team-scoped key.\"},\n            )\n\n        # stdio servers spawn a local subprocess on the proxy host with the\n        # configured command + args, so accepting them from non-admin callers\n        # would let a team member propose a server config that an admin could\n        # rubber-stamp into local code execution. Restrict stdio submission to\n        # the admin POST /v1/mcp/server path or to config.yaml.\n        if payload.transport == MCPTransport.stdio:\n            raise HTTPException(\n                status_code=status.HTTP_400_BAD_REQUEST,\n                detail={\n                    \"error\": (\n                        \"stdio MCP servers cannot be submitted via the user \"\n                        \"registration workflow. Ask a proxy admin to add this \"\n                        \"server via POST /v1/mcp/server or to declare it in \"\n                        \"config.yaml.\"\n                    )\n                },\n            )\n\n        prisma_client: Final = get_prisma_client_or_throw(\"Database not connected. Connect a database to your proxy\")\n\n        validate_and_normalize_mcp_server_payload(payload)\n        stamp_omitted_oauth2_flow(payload)\n        _validate_mcp_required_fields(payload)\n\n        payload.approval_status = MCPApprovalStatus.pending_review","sourceCodeStart":1240,"sourceCodeEnd":1276,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/proxy/management_endpoints/mcp_management_endpoints.py#L1240-L1276","documentation":"Error \"stdio MCP servers cannot be submitted via the user registration workflow. Ask a proxy admin to add this server via POST /v1/mcp/server or to declare it in config.yaml.\" thrown in BerriAI/litellm.","triggerScenarios":"Thrown at litellm/proxy/management_endpoints/mcp_management_endpoints.py:1258 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ask a proxy admin to add the stdio server via POST /v1/mcp/server or config.yaml.","Submit only remote (HTTP/SSE) MCP servers through the user registration workflow."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}