#31909 [Bug]: mcp_semantic_tool_filter strips ALL tools (N->0) for standard nested chat/completions tool format — _extract_tool_info only reads top-level name
### Check for existing issues
- [x] I have searched the existing issues and checked that my issue is not a duplicate.
### What happened?
With `litellm_settings.mcp_semantic_tool_filter.enabled: true`, any `/chat/completions` request whose `tools` array uses the **standard OpenAI nested format** — `{"type": "function", "function": {"name": ..., "description": ...}}` — gets **every tool silently stripped** before the request reaches the model. The proxy logs `Semantic tool filter: N->0 tools` and the response carries `x-litellm-semantic-filter: N->0`.
This is the format sent by common OpenAI-compatible clients (observed with Open WebUI, which re-sends the proxy's own MCP gateway tools in this shape), so in practice the filter breaks all tool calling for those clients. The model then answers "I don't have the ability to search the web..." despite the client having sent the tools.
### Root cause
`litellm/proxy/_experimental/mcp_server/semantic_tool_filter.py` → `SemanticMCPToolFilter._extract_tool_info()`:
```python if isinstance(tool, dict): # OpenAI function format name = tool.get("name", "") description = tool.get("description", name) ```
For the nested chat/comp…