Public/Disconnect-McpServer.ps1
|
function Disconnect-McpServer { <# .SYNOPSIS Terminates MCP server session(s), their process trees and any registered proxy functions. .PARAMETER Server Session name(s). Accepts pipeline input from Get-McpServer. .PARAMETER All Disconnect every active session. .EXAMPLE Disconnect-McpServer -Server everything .EXAMPLE Disconnect-McpServer -All #> [CmdletBinding(DefaultParameterSetName = 'Named')] param( [Parameter(Mandatory, ParameterSetName = 'Named', Position = 0, ValueFromPipeline, ValueFromPipelineByPropertyName)] [Alias('Name')] [string[]]$Server, [Parameter(Mandatory, ParameterSetName = 'All')] [switch]$All ) process { $targets = if ($All) { @($script:Sessions.Keys) } else { $Server } foreach ($name in $targets) { if (-not $script:Sessions.ContainsKey($name)) { Write-Error -ErrorRecord (New-McpError -ErrorId 'McpSessionNotFound' -Category ObjectNotFound -TargetObject $name ` -Message "No MCP session named '$name'.") continue } Remove-McpSession -Session $script:Sessions[$name] Write-Verbose "Disconnected '$name'" } } } |