From 3d9f36c4027dee87afa98d7806ec053b3d2fa6c7 Mon Sep 17 00:00:00 2001 From: Zhongxuan Wang Date: Wed, 5 Aug 2026 16:19:37 -0700 Subject: [PATCH 1/3] fix: preserve NAT stdio MCP arguments and environment Signed-off-by: Zhongxuan Wang --- .../nat/src/nemo_fabric_adapters/nat/adapter.py | 7 +++++-- tests/adapters/test_external_nat_adapter.py | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/external/nat/src/nemo_fabric_adapters/nat/adapter.py b/external/nat/src/nemo_fabric_adapters/nat/adapter.py index bc5aec51..a8dfcd32 100644 --- a/external/nat/src/nemo_fabric_adapters/nat/adapter.py +++ b/external/nat/src/nemo_fabric_adapters/nat/adapter.py @@ -340,8 +340,11 @@ def nat_mcp_server_config(name: str, server: Any) -> dict[str, Any]: "transport": "stdio", "command": command[0], } - if command[1:]: - result["args"] = command[1:] + args = [*command[1:], *common_utils.normalize_list(server.get("args"))] + if args: + result["args"] = args + if env := server.get("env"): + result["env"] = env return result if transport in {"http", "streamablehttp"}: diff --git a/tests/adapters/test_external_nat_adapter.py b/tests/adapters/test_external_nat_adapter.py index 5ca19a8d..41806c1c 100644 --- a/tests/adapters/test_external_nat_adapter.py +++ b/tests/adapters/test_external_nat_adapter.py @@ -995,7 +995,7 @@ def test_mcp_server_normalizes_streamable_http_aliases(transport: str): } -def test_mcp_stdio_expands_environment_and_parses_quoted_arguments( +def test_mcp_stdio_expands_command_and_maps_structured_args_and_env( monkeypatch: pytest.MonkeyPatch, ): monkeypatch.setenv("NAT_TEST_MCP_COMMAND", "/opt/nat/bin/mcp-server") @@ -1005,13 +1005,23 @@ def test_mcp_stdio_expands_environment_and_parses_quoted_arguments( { "transport": "stdio", "url": "$NAT_TEST_MCP_COMMAND --label 'safe mode' --port 9000", + "args": ["--trace", "--request-timeout=10"], + "env": {"NAT_MCP_TOKEN": "test-token"}, }, ) assert result == { "transport": "stdio", "command": "/opt/nat/bin/mcp-server", - "args": ["--label", "safe mode", "--port", "9000"], + "args": [ + "--label", + "safe mode", + "--port", + "9000", + "--trace", + "--request-timeout=10", + ], + "env": {"NAT_MCP_TOKEN": "test-token"}, } From 88be484dd108239ca70c639643e21623b1cfb321 Mon Sep 17 00:00:00 2001 From: Zhongxuan Wang Date: Thu, 6 Aug 2026 10:23:08 -0700 Subject: [PATCH 2/3] docs: describe NAT stdio MCP mapping Signed-off-by: Zhongxuan Wang --- external/nat/README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/external/nat/README.md b/external/nat/README.md index 253dc50d..97c64a17 100644 --- a/external/nat/README.md +++ b/external/nat/README.md @@ -50,6 +50,12 @@ The adapter consumes the routed `capability_plan.native.mcp_servers` entries, including the normalized per-server filters. NeMo Fabric MCP tool names remain bare server-local names; NAT exposes a selected member as `__`. +For a `stdio` server, the adapter expands `$VAR` references in `url`, splits the +result using shell quoting rules, and uses the first token as the NAT command. +It appends structured `args` after arguments parsed from `url` and forwards `env` +to the NAT process environment. Variable expansion applies only to `url`; `args` +and `env` values are used literally. + | NeMo Fabric server policy | Generated NAT function group | | --- | --- | | `allowed_tools` omitted and `blocked_tools=[]` | No `include` or `exclude`; expose all discovered tools | From e60c1857371d3fd66e5dd3dce3b762e8c392e0ff Mon Sep 17 00:00:00 2001 From: Zhongxuan Wang Date: Thu, 6 Aug 2026 10:29:47 -0700 Subject: [PATCH 3/3] docs: simplify NAT stdio mapping description Signed-off-by: Zhongxuan Wang --- external/nat/README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/external/nat/README.md b/external/nat/README.md index 97c64a17..d5767d9e 100644 --- a/external/nat/README.md +++ b/external/nat/README.md @@ -50,11 +50,9 @@ The adapter consumes the routed `capability_plan.native.mcp_servers` entries, including the normalized per-server filters. NeMo Fabric MCP tool names remain bare server-local names; NAT exposes a selected member as `__`. -For a `stdio` server, the adapter expands `$VAR` references in `url`, splits the -result using shell quoting rules, and uses the first token as the NAT command. -It appends structured `args` after arguments parsed from `url` and forwards `env` -to the NAT process environment. Variable expansion applies only to `url`; `args` -and `env` values are used literally. +For `stdio` servers, NeMo Fabric expands `$VAR` references in `url`, parses the +command and inline arguments, appends structured `args`, and forwards `env` to +NAT. Only `url` supports variable expansion; `args` and `env` values are literal. | NeMo Fabric server policy | Generated NAT function group | | --- | --- |