Skip to content

Commit 9569a52

Browse files
authored
Merge pull request #121 from jackh726/update
Update rmcp to 1.0.0-alpha
2 parents a6bb83b + 1c474b2 commit 9569a52

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+305
-284
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ tracing-appender = "0.2"
3939
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
4040

4141
# MCP SDK
42-
rmcp = { version = "0.12.0", features = ["server", "transport-io", "schemars"] }
42+
rmcp = { version = "1.0.0-alpha", features = ["server", "transport-io", "schemars"] }
4343

4444
# CLI parsing
4545
clap = { version = "4.5", features = ["derive"] }

src/elizacp/src/eliza.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,8 +2473,7 @@ mod tests {
24732473

24742474
// Tokio blocking
24752475
let r = eliza.respond("my tokio code is blocking");
2476-
expect!["Tokio giveth, and Tokio taketh away."]
2477-
.assert_eq(&r);
2476+
expect!["Tokio giveth, and Tokio taketh away."].assert_eq(&r);
24782477
}
24792478
}
24802479

src/elizacp/src/lib.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use sacp::schema::{
99
PromptRequest, PromptResponse, SessionId, SessionNotification, SessionUpdate, StopReason,
1010
TextContent,
1111
};
12-
use sacp::{Agent, Client, ConnectionTo, Responder, ConnectTo};
12+
use sacp::{Agent, Client, ConnectTo, ConnectionTo, Responder};
1313
use std::collections::HashMap;
1414
use std::sync::{Arc, Mutex};
1515

@@ -294,7 +294,7 @@ impl ElizaAgent {
294294
tool_name: &str,
295295
params_json: &str,
296296
) -> Result<String> {
297-
use rmcp::model::CallToolRequestParam;
297+
use rmcp::model::CallToolRequestParams;
298298

299299
// Parse params JSON
300300
let params = serde_json::from_str::<serde_json::Value>(params_json)
@@ -308,10 +308,10 @@ impl ElizaAgent {
308308

309309
// Call the tool
310310
let tool_result = mcp_client
311-
.call_tool(CallToolRequestParam {
312-
name: tool_name.into(),
313-
arguments: params_obj,
314-
})
311+
.call_tool(
312+
CallToolRequestParams::new(tool_name)
313+
.with_arguments(params_obj.unwrap_or_default()),
314+
)
315315
.await?;
316316

317317
tracing::debug!("Tool call result: {:?}", tool_result);
@@ -368,7 +368,8 @@ fn parse_tool_call(input: &str) -> Option<(String, String, String)> {
368368

369369
impl ConnectTo<Client> for ElizaAgent {
370370
async fn connect_to(self, client: impl ConnectTo<Agent>) -> Result<(), sacp::Error> {
371-
Agent.builder()
371+
Agent
372+
.builder()
372373
.name("elizacp")
373374
.on_receive_request(
374375
async |initialize: InitializeRequest, responder, _cx| {

src/elizacp/tests/mcp_tool_invocation.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ async fn test_elizacp_mcp_tool_call() -> Result<(), sacp::Error> {
3939
// Create channel to collect session notifications
4040
let (notification_tx, mut notification_rx) = futures::channel::mpsc::unbounded();
4141

42-
Client.builder()
42+
Client
43+
.builder()
4344
.name("test-client")
4445
.on_receive_notification(
4546
{
@@ -63,9 +64,10 @@ async fn test_elizacp_mcp_tool_call() -> Result<(), sacp::Error> {
6364
})
6465
.connect_with(transport, async |connection_to_client| {
6566
// Initialize
66-
let _init_response =
67-
recv(connection_to_client.send_request(InitializeRequest::new(ProtocolVersion::LATEST)))
68-
.await?;
67+
let _init_response = recv(
68+
connection_to_client.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
69+
)
70+
.await?;
6971

7072
// Create session with an MCP server
7173
// Use the mcp-echo-server from sacp-test (pre-built binary)

src/sacp-conductor/src/conductor/mcp_bridge/actor.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use futures::{SinkExt as _, StreamExt as _, channel::mpsc};
2-
use sacp::{DynConnectTo, Dispatch, ConnectTo, role::mcp, schema::McpDisconnectNotification};
2+
use sacp::{ConnectTo, Dispatch, DynConnectTo, role::mcp, schema::McpDisconnectNotification};
33
use tracing::info;
44

55
use crate::conductor::ConductorMessage;
@@ -41,7 +41,8 @@ impl McpBridgeConnectionActor {
4141
to_mcp_client_rx,
4242
} = self;
4343

44-
let result = mcp::Client.builder()
44+
let result = mcp::Client
45+
.builder()
4546
.name(format!("mpc-client-to-conductor({connection_id})"))
4647
// When we receive a message from the MCP client, forward it to the conductor
4748
.on_receive_dispatch(

src/sacp-conductor/src/snoop.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use futures::StreamExt;
22
use futures_concurrency::future::TryJoin;
3-
use sacp::{Channel, DynConnectTo, Role, ConnectTo, jsonrpcmsg};
3+
use sacp::{Channel, ConnectTo, DynConnectTo, Role, jsonrpcmsg};
44

55
pub struct SnooperComponent<R: Role> {
66
base_component: DynConnectTo<R>,
@@ -29,7 +29,10 @@ impl<R: Role> SnooperComponent<R> {
2929
}
3030

3131
impl<R: Role> ConnectTo<R> for SnooperComponent<R> {
32-
async fn connect_to(mut self, client: impl ConnectTo<R::Counterpart>) -> Result<(), sacp::Error> {
32+
async fn connect_to(
33+
mut self,
34+
client: impl ConnectTo<R::Counterpart>,
35+
) -> Result<(), sacp::Error> {
3336
let (client_a, mut client_b) = Channel::duplex();
3437

3538
let client_future = client.connect_to(client_a);

src/sacp-conductor/tests/empty_conductor_eliza.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! 3. Messages flow correctly through the empty conductor to eliza
77
//! 4. The full chain works end-to-end
88
9-
use sacp::{Agent, Client, Conductor, Proxy, ConnectTo};
9+
use sacp::{Agent, Client, Conductor, ConnectTo, Proxy};
1010
use sacp_conductor::{ConductorImpl, ProxiesAndAgent};
1111
use tokio::io::duplex;
1212
use tokio_util::compat::{TokioAsyncReadCompatExt, TokioAsyncWriteCompatExt};

src/sacp-conductor/tests/initialization_sequence.rs

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use sacp::schema::{
1010
AgentCapabilities, InitializeProxyRequest, InitializeRequest, InitializeResponse,
1111
ProtocolVersion,
1212
};
13-
use sacp::{Agent, Client, Conductor, DynConnectTo, Proxy, ConnectTo};
13+
use sacp::{Agent, Client, Conductor, ConnectTo, DynConnectTo, Proxy};
1414
use sacp_conductor::{ConductorImpl, ProxiesAndAgent};
1515
use std::sync::Arc;
1616
use std::sync::Mutex;
@@ -73,7 +73,8 @@ impl ConnectTo<Conductor> for InitComponent {
7373
let config = self.config;
7474
let config2 = Arc::clone(&config);
7575

76-
Proxy.builder()
76+
Proxy
77+
.builder()
7778
.name("init-component")
7879
// Handle InitializeProxyRequest (we're a proxy)
7980
.on_receive_request_from(
@@ -121,7 +122,8 @@ async fn run_test_with_components(
121122

122123
let transport = sacp::ByteStreams::new(editor_out.compat_write(), editor_in.compat());
123124

124-
sacp::Client.builder()
125+
sacp::Client
126+
.builder()
125127
.name("editor-to-connector")
126128
.with_spawned(|_cx| async move {
127129
ConductorImpl::new_agent(
@@ -144,8 +146,10 @@ async fn test_single_component_gets_initialize_request() -> Result<(), sacp::Err
144146
// Single component (agent) should receive InitializeRequest - we use ElizaAgent
145147
// which properly handles InitializeRequest
146148
run_test_with_components(vec![], async |connection_to_editor| {
147-
let init_response =
148-
recv(connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST))).await;
149+
let init_response = recv(
150+
connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
151+
)
152+
.await;
149153

150154
assert!(
151155
init_response.is_ok(),
@@ -166,18 +170,23 @@ async fn test_two_components_proxy_gets_initialize_proxy() -> Result<(), sacp::E
166170
// Second component (agent, ElizaAgent) gets InitializeRequest
167171
let component1 = InitConfig::new();
168172

169-
run_test_with_components(vec![InitComponent::new(&component1)], async |connection_to_editor| {
170-
let init_response =
171-
recv(connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST))).await;
173+
run_test_with_components(
174+
vec![InitComponent::new(&component1)],
175+
async |connection_to_editor| {
176+
let init_response = recv(
177+
connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
178+
)
179+
.await;
172180

173-
assert!(
174-
init_response.is_ok(),
175-
"Initialize should succeed: {:?}",
176-
init_response
177-
);
181+
assert!(
182+
init_response.is_ok(),
183+
"Initialize should succeed: {:?}",
184+
init_response
185+
);
178186

179-
Ok::<(), sacp::Error>(())
180-
})
187+
Ok::<(), sacp::Error>(())
188+
},
189+
)
181190
.await?;
182191

183192
// First component (proxy) should receive InitializeProxyRequest
@@ -205,8 +214,10 @@ async fn test_three_components_all_proxies_get_initialize_proxy() -> Result<(),
205214
InitComponent::new(&component2),
206215
],
207216
async |connection_to_editor| {
208-
let init_response =
209-
recv(connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST))).await;
217+
let init_response = recv(
218+
connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
219+
)
220+
.await;
210221

211222
assert!(
212223
init_response.is_ok(),
@@ -241,11 +252,9 @@ async fn test_three_components_all_proxies_get_initialize_proxy() -> Result<(),
241252
struct BadProxy;
242253

243254
impl ConnectTo<Conductor> for BadProxy {
244-
async fn connect_to(
245-
self,
246-
client: impl ConnectTo<Proxy>,
247-
) -> Result<(), sacp::Error> {
248-
Proxy.builder()
255+
async fn connect_to(self, client: impl ConnectTo<Proxy>) -> Result<(), sacp::Error> {
256+
Proxy
257+
.builder()
249258
.name("bad-proxy")
250259
.on_receive_request_from(
251260
Client,
@@ -275,7 +284,8 @@ async fn run_bad_proxy_test(
275284

276285
let transport = sacp::ByteStreams::new(editor_out.compat_write(), editor_in.compat());
277286

278-
sacp::Client.builder()
287+
sacp::Client
288+
.builder()
279289
.name("editor-to-connector")
280290
.with_spawned(|_cx| async move {
281291
ConductorImpl::new_agent(
@@ -301,8 +311,10 @@ async fn test_conductor_rejects_initialize_proxy_forwarded_to_agent() -> Result<
301311
vec![DynConnectTo::new(BadProxy)],
302312
DynConnectTo::new(ElizaAgent::new(true)),
303313
async |connection_to_editor| {
304-
let init_response =
305-
recv(connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST))).await;
314+
let init_response = recv(
315+
connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
316+
)
317+
.await;
306318

307319
if let Err(err) = init_response {
308320
assert!(
@@ -342,8 +354,10 @@ async fn test_conductor_rejects_initialize_proxy_forwarded_to_proxy() -> Result<
342354
],
343355
DynConnectTo::new(ElizaAgent::new(true)), // Agent
344356
async |connection_to_editor| {
345-
let init_response =
346-
recv(connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST))).await;
357+
let init_response = recv(
358+
connection_to_editor.send_request(InitializeRequest::new(ProtocolVersion::LATEST)),
359+
)
360+
.await;
347361

348362
// The error may come through recv() or bubble up through the test harness
349363
if let Err(err) = init_response {

0 commit comments

Comments
 (0)