Where: faircode/mcp_server.py's _proxy_hints_impl (around line 127) and its @server.tool() wrapper.
faircode/proxy.py's proxy_hints() already accepts an optional held_out: dict | None parameter (added for issue #328 - lets a caller test a protected attribute that's already been dropped from the dataset, "we dropped the column so it's fine"), and faircode/cli.py's --proxy-hints-with PATH=COLUMN flag already wires this up end-to-end for the CLI. The MCP tool never passes held_out through at all - an agent calling proxy_hints via MCP has no way to reach this capability, even though it's fully implemented one layer down.
Suggested fix: add a held_out-equivalent parameter to the MCP proxy_hints tool (e.g. a {column: {path, column}}-shaped argument, or a simpler held_out_with: list[str] of "PATH=COLUMN" strings mirroring the CLI flag exactly, reusing cli._build_held_out's validation logic rather than re-implementing it).
Where:
faircode/mcp_server.py's_proxy_hints_impl(around line 127) and its@server.tool()wrapper.faircode/proxy.py'sproxy_hints()already accepts an optionalheld_out: dict | Noneparameter (added for issue #328 - lets a caller test a protected attribute that's already been dropped from the dataset, "we dropped the column so it's fine"), andfaircode/cli.py's--proxy-hints-with PATH=COLUMNflag already wires this up end-to-end for the CLI. The MCP tool never passesheld_outthrough at all - an agent callingproxy_hintsvia MCP has no way to reach this capability, even though it's fully implemented one layer down.Suggested fix: add a
held_out-equivalent parameter to the MCPproxy_hintstool (e.g. a{column: {path, column}}-shaped argument, or a simplerheld_out_with: list[str]of"PATH=COLUMN"strings mirroring the CLI flag exactly, reusingcli._build_held_out's validation logic rather than re-implementing it).