fix(examples): Prevent transport from closing due to premature client drop (#324)
This commit is contained in:
parent
f1000930b6
commit
8967daf87f
2 changed files with 9 additions and 2 deletions
|
|
@ -74,7 +74,7 @@ async fn main() -> Result<()> {
|
||||||
if config.mcp.is_some() {
|
if config.mcp.is_some() {
|
||||||
let mcp_clients = config.create_mcp_clients().await?;
|
let mcp_clients = config.create_mcp_clients().await?;
|
||||||
|
|
||||||
for (name, client) in mcp_clients {
|
for (name, client) in mcp_clients.iter() {
|
||||||
println!("load MCP tool: {}", name);
|
println!("load MCP tool: {}", name);
|
||||||
let server = client.peer().clone();
|
let server = client.peer().clone();
|
||||||
let tools = get_mcp_tools(server).await?;
|
let tools = get_mcp_tools(server).await?;
|
||||||
|
|
@ -84,6 +84,7 @@ async fn main() -> Result<()> {
|
||||||
tool_set.add_tool(tool);
|
tool_set.add_tool(tool);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
tool_set.set_clients(mcp_clients);
|
||||||
}
|
}
|
||||||
|
|
||||||
// create chat session
|
// create chat session
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,9 @@ use std::{collections::HashMap, sync::Arc};
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use async_trait::async_trait;
|
use async_trait::async_trait;
|
||||||
use rmcp::{
|
use rmcp::{
|
||||||
|
RoleClient,
|
||||||
model::{CallToolRequestParam, CallToolResult, Tool as McpTool},
|
model::{CallToolRequestParam, CallToolResult, Tool as McpTool},
|
||||||
service::ServerSink,
|
service::{RunningService, ServerSink},
|
||||||
};
|
};
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
|
|
||||||
|
|
@ -70,9 +71,14 @@ impl Tool for McpToolAdapter {
|
||||||
#[derive(Default)]
|
#[derive(Default)]
|
||||||
pub struct ToolSet {
|
pub struct ToolSet {
|
||||||
tools: HashMap<String, Arc<dyn Tool>>,
|
tools: HashMap<String, Arc<dyn Tool>>,
|
||||||
|
clients: HashMap<String, RunningService<RoleClient, ()>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToolSet {
|
impl ToolSet {
|
||||||
|
pub fn set_clients(&mut self, clients: HashMap<String, RunningService<RoleClient, ()>>) {
|
||||||
|
self.clients = clients;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn add_tool<T: Tool + 'static>(&mut self, tool: T) {
|
pub fn add_tool<T: Tool + 'static>(&mut self, tool: T) {
|
||||||
self.tools.insert(tool.name(), Arc::new(tool));
|
self.tools.insert(tool.name(), Arc::new(tool));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue