Skip to content

refactor(goal): rmcp nori-client MCP server#492

Merged
CSRessel merged 4 commits into
mainfrom
refactor/nori-client-mcp
Jun 1, 2026
Merged

refactor(goal): rmcp nori-client MCP server#492
CSRessel merged 4 commits into
mainfrom
refactor/nori-client-mcp

Conversation

@CSRessel
Copy link
Copy Markdown
Collaborator

@CSRessel CSRessel commented May 29, 2026

Summary

🤖 Generated with Nori

Rebased onto main after #491 merged. Implements review item R1: replace the goal feature's hand-rolled networking with the workspace's rmcp SDK, and rename the loopback MCP server nori-goal -> nori-client.

  • Delete the bespoke stack: removes thread_goal_http_mcp.rs and the hand-dispatched JSON-RPC in thread_goal_mcp.rs.
  • rmcp server: new nori_client_mcp.rs hosts get_goal/create_goal/update_goal as typed #[tool] handlers on an rmcp StreamableHttpService (stateless), served over a loopback axum listener. Behavior preserved: same tool semantics, same ThreadGoalUpdated events, same connected-gate flip on initialize for hidden-continuation chaining.
  • Rename nori-goal -> nori-client: the advertised server is Nori's general harness-side channel to the agent; the goal tools are its first tenants. Renamed across code, tests, and docs.
  • Deps: acp/Cargo.toml gains axum and enables rmcp server/macros/schemars/streamable HTTP server features; tests enable the rmcp streamable HTTP client feature.

Test Plan

  • cargo test -p nori-acp (passed: lib tests, integration tests, and doc tests; includes real_mcp_client_round_trips_over_http and over-the-wire continuation-gate coverage)
  • cargo build --bin nori
  • cargo test -p tui-pty-e2e
  • just fmt
  • env RUSTC_WRAPPER= just fix -p nori-acp (sccache was blocked in this environment; clearing RUSTC_WRAPPER let clippy run cleanly)
  • Close-the-loop: drove the TUI with elizacp in isolated tmux; verified agent: elizacp, prompt render, input submission, and prompt return.

Share Nori with your team: https://www.npmjs.com/package/nori-skillsets

@CSRessel CSRessel changed the title refactor(goal): rmcp nori-client MCP server (was hand-rolled nori-goal) refactor(goal): rmcp nori-client MCP server Jun 1, 2026
Base automatically changed from feat/goal to main June 1, 2026 17:00
CSRessel added 4 commits June 1, 2026 13:09
…goal -> nori-client

Replace the hand-rolled HTTP/1.1 server (thread_goal_http_mcp.rs, ~213 LoC) and
hand-dispatched JSON-RPC (thread_goal_mcp.rs) with rmcp's spec-compliant
StreamableHttpService and typed #[tool] handlers in nori_client_mcp.rs, served
over a loopback axum listener. Rename the advertised MCP server from `nori-goal`
to `nori-client` — Nori's general harness-side channel to the agent, not a
goal-only surface.
Update the acp Noridoc and the goal architecture-diagram note for R1: the
loopback goal MCP server is now rmcp's StreamableHttpService with typed #[tool]
handlers (nori_client_mcp.rs), and the advertised server is renamed nori-goal ->
nori-client to reflect that it is Nori's general harness-side channel to the
agent, with the goal tools as its first tenants.
- Add real_mcp_client_round_trips_over_http: a real rmcp StreamableHttp client
  connects to the loopback nori-client server, verifies the initialize handshake
  flips the `connected` gate, lists tools, and round-trips create_goal/get_goal.
  Enables rmcp client features on the acp dev-dependency only (no new crate).
- Rename GoalRuntime.http_server -> mcp_server for clarity.
- Fix stale mock-acp-agent/docs.md reference to the deleted goal MCP modules.
@CSRessel CSRessel force-pushed the refactor/nori-client-mcp branch from 71354db to 428b5a5 Compare June 1, 2026 17:20
@CSRessel CSRessel merged commit 75f505d into main Jun 1, 2026
2 checks passed
@CSRessel CSRessel deleted the refactor/nori-client-mcp branch June 1, 2026 17:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant