diff --git a/ext/mcp/src/internal-test.rs b/ext/mcp/src/internal-test.rs index 0552815..56867e4 100644 --- a/ext/mcp/src/internal-test.rs +++ b/ext/mcp/src/internal-test.rs @@ -1,19 +1,20 @@ -use std::collections::HashMap; use std::process::Stdio; use std::sync::Arc; use jsonrpsee::core::async_trait; use jsonrpsee::core::client::{ Client, ClientBuilder, ClientT, ReceivedMessage, TransportReceiverT, TransportSenderT, }; +use jsonrpsee::core::params::ObjectParams; use jsonrpsee::core::traits::ToRpcParams; -use jsonrpsee::rpc_params; use tokio::process::{Child, ChildStdin, ChildStdout}; -use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader, Stdin, Stdout}; +use tokio::io::{AsyncBufReadExt, AsyncReadExt, AsyncWriteExt, BufReader}; use serde::{Deserialize, Serialize}; use serde_json::Error; use serde_json::value::RawValue; +use tokio::time::sleep; +use tracing::debug; use types::{Implementation, InitializeRequestParams, InitializeResult}; -use crate::types::ClientCapabilities; +use crate::types::{ClientCapabilities, ListToolsRequestParams, ListToolsResult}; mod types; @@ -37,6 +38,7 @@ impl TransportSenderT for StdioTransport { #[tracing::instrument(skip(self), level = "trace")] async fn send(&mut self, msg: String) -> Result<(), Self::Error> { + debug!("Sending: {}", msg); let mut stdin = self.stdin.lock().await; stdin.write_all(msg.as_bytes()).await?; stdin.write_all(b"\n").await?; @@ -53,6 +55,7 @@ impl TransportReceiverT for StdioTransport { let mut stdout = self.stdout.lock().await; let mut str = String::new(); stdout.read_line(&mut str).await?; + debug!("Received: {}", str); Ok(ReceivedMessage::Text(str)) } } @@ -66,6 +69,14 @@ impl ToRpcParams for RpcArg { } } +struct NoParams; + +impl ToRpcParams for NoParams { + fn to_rpc_params(self) -> Result>, Error> { + Ok(None) + } +} + #[tokio::main] async fn main() -> anyhow::Result<()> { tracing_subscriber::fmt() @@ -98,5 +109,10 @@ async fn main() -> anyhow::Result<()> { println!("Response: {:?}", response); + client.notification("notifications/initialized", NoParams).await?; + + let response: ListToolsResult = client.request("tools/list", RpcArg(ListToolsRequestParams::default())).await?; + println!("Response: {:#?}", response); + Ok(()) }