Skip to content
Closed
Show file tree
Hide file tree
Changes from 50 commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
bb72c20
fix(mcp): reject unsafe Deep Agents projection types
rsliter Sep 1, 2026
bd8b2a1
fix(mcp): preserve Deep Agents status failures
rsliter Sep 1, 2026
c181980
fix(mcp): classify projection open races
rsliter Sep 1, 2026
00f5a63
fix(mcp): classify socket projection races
rsliter Sep 1, 2026
f1f854f
test(mcp): inspect dangling projection links
rsliter Sep 1, 2026
7293012
fix(mcp): classify post-open projection races
rsliter Sep 1, 2026
3c9e4ce
Merge branch 'main' into codex/fix-10754-mcp-projection-type
rsliter Sep 1, 2026
0bdb3d4
refactor(mcp): centralize projection type validation
prekshivyas Sep 1, 2026
23aadb7
Merge remote-tracking branch 'refs/remotes/origin/main' into codex/fi…
prekshivyas Sep 1, 2026
8c9c41f
Merge remote-tracking branch 'refs/remotes/origin/main' into codex/fi…
prekshivyas Sep 2, 2026
4367eb3
Merge remote-tracking branch 'refs/remotes/origin/main' into codex/fi…
prekshivyas Sep 2, 2026
391946b
test(mcp): exercise projection races at runtime
prekshivyas Sep 2, 2026
adb8794
Merge remote-tracking branch 'refs/remotes/origin/main' into codex/fi…
prekshivyas Sep 2, 2026
9a358d5
Merge remote-tracking branch 'refs/remotes/origin/main' into codex/fi…
prekshivyas Sep 2, 2026
66a0861
Merge remote-tracking branch 'origin/main' into codex/fix-10754-mcp-p…
rsliter Sep 2, 2026
bc89733
fix(mcp): preserve unsafe projection race types
rsliter Sep 2, 2026
259e010
Merge remote-tracking branch 'origin/codex/fix-10754-mcp-projection-t…
rsliter Sep 2, 2026
b77384e
fix(mcp): preserve unsafe race classification
prekshivyas Sep 2, 2026
5b04219
Merge remote-tracking branch 'origin/codex/fix-10754-mcp-projection-t…
prekshivyas Sep 2, 2026
89e98a7
fix(mcp): prioritize unsafe status paths
prekshivyas Sep 2, 2026
23deae3
merge: incorporate upstream main
prekshivyas Sep 2, 2026
dc950af
merge: incorporate upstream main
prekshivyas Sep 2, 2026
3455134
merge: sync upstream main
rsliter Sep 2, 2026
8872c56
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
9b927dd
merge: incorporate upstream main
prekshivyas Sep 2, 2026
ccefdb7
Merge remote-tracking branch 'origin/main' into codex/fix-10754-mcp-p…
rsliter Sep 2, 2026
b4adfd7
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
bec23e6
Merge remote-tracking branch 'origin/main' into codex/fix-10754-mcp-p…
rsliter Sep 2, 2026
7fab8d8
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
385f70e
merge: incorporate upstream main
prekshivyas Sep 2, 2026
a927818
merge: incorporate upstream main
rsliter Sep 2, 2026
79cccd9
fix(mcp): pin managed projection parents
prekshivyas Sep 2, 2026
0738f1f
merge: incorporate upstream main
prekshivyas Sep 2, 2026
854c257
fix(mcp): keep projection safety fix scoped
rsliter Sep 2, 2026
4d8f0aa
test(mcp): separate unsafe projection scenarios
prekshivyas Sep 2, 2026
1b18890
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
dac7b37
fix(mcp): restore projection parent trust boundary
prekshivyas Sep 2, 2026
57e892c
merge: incorporate upstream main
prekshivyas Sep 2, 2026
35318a0
test(mcp): exercise runtime detection in fixtures
prekshivyas Sep 2, 2026
825f6aa
test(mcp): isolate projection safety scenarios
prekshivyas Sep 2, 2026
6429a92
test(mcp): prove symlink targets stay unread
prekshivyas Sep 2, 2026
9c14ecc
merge: incorporate upstream main
prekshivyas Sep 2, 2026
66e0d23
docs(mcp): include parent path diagnostic
prekshivyas Sep 2, 2026
f2fe68d
test(mcp): target post-open projection swap
prekshivyas Sep 2, 2026
8373ae1
test(mcp): use behavior-named race boundaries
prekshivyas Sep 2, 2026
fa29f6c
test(mcp): harden projection fixture reads
rsliter Sep 2, 2026
9ea966c
merge: incorporate upstream main
prekshivyas Sep 2, 2026
169321f
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
524d337
fix(mcp): remove projection parent expansion
rsliter Sep 2, 2026
bd6bd83
fix(mcp): retain descriptor-bound projection parents
prekshivyas Sep 2, 2026
068ab29
test(mcp): read fixture targets from descriptors
rsliter Sep 2, 2026
a30831e
test(mcp): race projection from independent process
prekshivyas Sep 2, 2026
9d50882
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
db75578
merge: incorporate upstream main
prekshivyas Sep 2, 2026
269c1ad
fix(mcp): tighten projection review boundaries
prekshivyas Sep 2, 2026
a6ad937
test(mcp): harden fixture result read
rsliter Sep 2, 2026
0aa37e9
test(mcp): remove projection helper shape assertion
prekshivyas Sep 2, 2026
05d0fcb
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
286ef72
test(mcp): create fixture stop marker atomically
rsliter Sep 2, 2026
266da41
test(e2e): isolate blueprint command fixtures
prekshivyas Sep 2, 2026
de1a091
merge: synchronize shared PR branch
prekshivyas Sep 2, 2026
83d2330
test(e2e): use synthetic blueprint command fixture
prekshivyas Sep 2, 2026
b63ef9c
fix(mcp): pin legacy config parent descriptors
prekshivyas Sep 2, 2026
dbf5c9f
test(policy): mock typed read failure
prekshivyas Sep 2, 2026
07d8cb4
refactor(mcp): share Deep Agents runtime selection
prekshivyas Sep 2, 2026
db783ab
fix(mcp): narrow projection status safety
rsliter Sep 2, 2026
eefd998
fix(ci): restore review-head validation fixtures
prekshivyas Sep 2, 2026
1cf2440
test(mcp): simplify projection status coverage
prekshivyas Sep 2, 2026
9f9eeb6
fix(mcp): keep projection status change scoped
rsliter Sep 2, 2026
4d81dde
merge: synchronize maintainer scope
prekshivyas Sep 2, 2026
6572de2
test(mcp): exercise unsafe status composition
prekshivyas Sep 2, 2026
dead0c8
docs(mcp): clarify projection path diagnostics
rsliter Sep 2, 2026
88dcb68
docs(mcp): limit unsafe projection claim
rsliter Sep 2, 2026
78684fd
merge: refresh from upstream main
prekshivyas Sep 2, 2026
da3d372
docs(mcp): correct unsafe projection prefix
prekshivyas Sep 2, 2026
53aeb71
test(mcp): preserve unsafe projection evidence
prekshivyas Sep 2, 2026
9c2ed4d
docs(mcp): describe diagnostic indentation
rsliter Sep 2, 2026
bd8f1fc
fix(mcp): reject projection removal races
prekshivyas Sep 2, 2026
ef6efe3
merge: reconcile maintainer documentation
prekshivyas Sep 2, 2026
f3b9330
fix(mcp): keep status within file-type scope
rsliter Sep 2, 2026
bd3e42e
test(mcp): deduplicate unsafe status coverage
rsliter Sep 2, 2026
baeb975
merge: refresh from main
rsliter Sep 2, 2026
68618be
Merge remote-tracking branch 'origin/main' into codex/10807-remote-la…
rsliter Sep 2, 2026
c4a0d7c
refactor(mcp): centralize unsafe projection rejection
rsliter Sep 2, 2026
071c66e
Merge remote-tracking branch 'origin/main' into codex/10807-remote-la…
rsliter Sep 2, 2026
3d405ab
Merge remote-tracking branch 'origin/main' into codex/10807-remote-la…
rsliter Sep 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions docs/manage-sandboxes/manage-mcp-servers.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@ An existing valid provider can remain ready when a host variable is unset becaus

For a trusted private server, status resolves the endpoint without changing managed state. Text output reports `private address pins: match`, `drift`, or `unresolved`. JSON output reports the same value in `trustedPrivateTarget.state` and includes the recorded pins. Status never adds a new address to the policy.

<AgentOnly variant="deepagents">

Before it reads `/sandbox/.deepagents/.nemoclaw-mcp.json`, Deep Agents Code v2 `mcp status` checks the path type.
It does not follow a final symbolic link or read from a FIFO.
If the path is a symbolic link, FIFO, or another non-regular file, the command names the path type, writes no status output, and exits with status `2`.
The diagnostic starts with `Unsafe managed Deep Agents MCP projection path:` and names a type such as `symbolic link`, `FIFO`, `non-regular file`, or `non-directory parent`.
Other Deep Agents inspection failures can also exit with status `2`.
Use the standard error diagnostic to distinguish an unsafe path from another inspection failure.
Deep Agents Code v1 reads the legacy `.deepagents/.mcp.json` path and does not expose these type-specific diagnostics.

</AgentOnly>

## Discover Advertised Tools

Pass `--tools` with one server name to request the server's advertised tool names:
Expand Down
12 changes: 7 additions & 5 deletions src/lib/actions/sandbox/mcp-bridge-adapter-deepagents-legacy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ export function buildDeepAgentsMcpRollbackRegisterCommand(
...DEEPAGENTS_MANAGED_PROJECTION_HELPERS,
...DEEPAGENTS_LEGACY_CONFIG_HELPERS,
...MANAGED_HTTP_SERVER_MATCH_HELPERS,
`runtime_kind = "auto" # NEMOCLAW_DEEPAGENTS_RUNTIME_TEST_ANCHOR`,
`runtime_kind = "auto"`,
"if runtime_kind == 'auto':",
" runtime_kind = 'unknown'",
" try:",
Expand All @@ -71,14 +71,16 @@ export function buildDeepAgentsMcpRollbackRegisterCommand(
"data = {}",
"managed_identity = None",
"managed_descriptor = None",
"managed_parent_identity = None",
"managed_parent_descriptor = None",
"legacy_identity = None",
"def fail_rollback(message):",
" close_managed_projection_descriptor(managed_descriptor)",
" close_managed_projection_descriptors(managed_descriptor, managed_parent_descriptor)",
" print(message, file=sys.stderr)",
" raise SystemExit(2)",
"try:",
" if is_v2:",
" data, managed_identity, managed_descriptor = load_managed_projection_for_update(config_path)",
" data, managed_identity, managed_descriptor, managed_parent_descriptor, managed_parent_identity = load_managed_projection_for_update(config_path)",
" elif os.path.lexists(config_path):",
" data, legacy_identity = read_legacy_config(config_path)",
"except (OSError, UnicodeDecodeError, ValueError) as exc:",
Expand Down Expand Up @@ -108,8 +110,8 @@ export function buildDeepAgentsMcpRollbackRegisterCommand(
" if payload['server'] in servers and current != payload['expected']:",
" fail_rollback(f'Refusing to overwrite user-owned legacy MCP server at {config_path}')",
" servers[payload['server']] = payload['expected']",
"config_path.parent.mkdir(parents=True, exist_ok=True)",
"if not is_v2:",
" config_path.parent.mkdir(parents=True, exist_ok=True)",
" tmp_fd, tmp_name = tempfile.mkstemp(prefix='.nemoclaw-mcp.', dir=config_path.parent)",
" try:",
" os.fchmod(tmp_fd, 0o600)",
Expand All @@ -131,7 +133,7 @@ export function buildDeepAgentsMcpRollbackRegisterCommand(
" pass",
"else:",
" try:",
" write_managed_projection(config_path, data, managed_identity, managed_descriptor)",
" write_managed_projection(config_path, data, managed_identity, managed_descriptor, managed_parent_descriptor, managed_parent_identity)",
" except (OSError, ValueError) as exc:",
" fail_rollback(f'Could not publish managed MCP rollback state at {config_path}: {exc}')",
"try:",
Expand Down
Loading
Loading