MCPcopy Create free account
hub / github.com/GCWing/BitFun / execute_mcp_delete

Method execute_mcp_delete

src/apps/cli/src/modes/chat.rs:2658–2733  ·  view source on GitHub ↗

Execute MCP server delete (called from main loop after render)

(
        &mut self,
        server_id: &str,
        chat_view: &mut ChatView,
        chat_state: &mut ChatState,
        rt_handle: &tokio::runtime::Handle,
    )

Source from the content-addressed store, hash-verified

2656
2657 /// Execute MCP server delete (called from main loop after render)
2658 fn execute_mcp_delete(
2659 &mut self,
2660 server_id: &str,
2661 chat_view: &mut ChatView,
2662 chat_state: &mut ChatState,
2663 rt_handle: &tokio::runtime::Handle,
2664 ) {
2665 let mcp_service = match crate::get_mcp_service() {
2666 Some(svc) => svc.clone(),
2667 None => {
2668 chat_state.add_system_message("MCP service not initialized".to_string());
2669 chat_view.mcp_selector_set_loading(None);
2670 return;
2671 }
2672 };
2673
2674 let server_id_owned = server_id.to_string();
2675 let task_server_id = server_id_owned.clone();
2676 let handle = rt_handle.spawn(async move {
2677 // Delete config first so UI can reflect removal immediately even if stop is blocked.
2678 mcp_service
2679 .config_service()
2680 .delete_server_config(&server_id_owned)
2681 .await?;
2682
2683 // Best-effort async cleanup: slow startups may hold process write lock for a long time.
2684 // Retry stop with short timeout, without blocking the delete operation completion.
2685 let cleanup_service = mcp_service.clone();
2686 let cleanup_server_id = server_id_owned.clone();
2687 tokio::spawn(async move {
2688 for attempt in 1..=20 {
2689 let stop_result = tokio::time::timeout(
2690 Duration::from_millis(250),
2691 cleanup_service
2692 .server_manager()
2693 .stop_server(&cleanup_server_id),
2694 )
2695 .await;
2696
2697 match stop_result {
2698 Ok(Ok(())) => return,
2699 Ok(Err(bitfun_core::util::errors::BitFunError::NotFound(_))) => return,
2700 Ok(Err(e)) => {
2701 tracing::debug!(
2702 "Best-effort MCP stop failed: id={} attempt={} error={}",
2703 cleanup_server_id,
2704 attempt,
2705 e
2706 );
2707 }
2708 Err(_) => {
2709 tracing::debug!(
2710 "Best-effort MCP stop timed out: id={} attempt={}",
2711 cleanup_server_id,
2712 attempt
2713 );
2714 }
2715 }

Callers 1

runMethod · 0.80

Calls 10

get_mcp_serviceFunction · 0.85
add_system_messageMethod · 0.80
config_serviceMethod · 0.80
server_managerMethod · 0.80
cloneMethod · 0.45
spawnMethod · 0.45
delete_server_configMethod · 0.45
stop_serverMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected