Internal MCP Servers¶
Mark a static MCP server as internal when the model should use its tools but clients should not see them in responses, for example a memory or retrieval server that supports the model behind the scenes. For MCP in general, see Model Context Protocol.
servers:
- name: internal-memory
protocol: streamable
url: http://127.0.0.1:28080/mcp
internal: trueinternal defaults to false. It applies only to static servers declared under servers: in the MCP config file. A server that a request supplies by URL is never internal.
What Changes¶
The flag changes only what SMG puts in client-visible Responses output. It does not change transport setup, tool discovery, approval, or execution. The model still sees the server's tools, SMG still runs the calls and returns the results to the model, and the smg_mcp_* metrics still count them.
For an internal server, SMG removes these items from the Responses output:
- The server's
mcp_list_toolsitem mcp_callitems for the server's toolsmcp_approval_requestitems for the server's tools
A client-declared function tool that has the same name as an internal tool stays visible.
Where It Applies¶
| Output | Filtered |
|---|---|
| Non-streaming Responses on gRPC workers, including gpt-oss (Harmony) models | Yes |
| Non-streaming Responses on an OpenAI-compatible provider | Yes |
The final response.completed event and the stored copy of a streamed response on an OpenAI-compatible provider |
Yes |
| Other live streaming events, on every path | No |
Hosted-tool items from built-in routing (web_search_call, code_interpreter_call, file_search_call, image_generation_call) |
No |
If an internal server also sets builtin_type, its hosted-tool items stay visible. Its mcp_list_tools item is hidden either way, as it is for every server with builtin_type set.
The flag is generic. It does not imply any vendor-specific behavior.