{"id":3495,"date":"2025-09-26T16:34:18","date_gmt":"2025-09-26T14:34:18","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=3495"},"modified":"2025-09-26T20:07:36","modified_gmt":"2025-09-26T18:07:36","slug":"mcp-powershell-server-http","status":"publish","type":"post","link":"https:\/\/de.davidka.net\/de\/2025\/09\/26\/mcp-powershell-server-http\/","title":{"rendered":"Dokumentation f\u00fcr Entwickler: MCP PowerShell HTTP Server. (mcp-powershell-server-http.py)"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">1. \u00dcberblick<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><code class=\"\" data-line=\"\">mcp-powershell-http.ps1<\/code> ist ein eigenst\u00e4ndiger HTTP-Server, der in PowerShell geschrieben wurde, um PowerShell-Skripte sicher aus der Ferne auszuf\u00fchren. Er fungiert als &#8222;Br\u00fccke&#8220; zwischen einem externen Client (z. B. einem KI-Assistenten) und der lokalen PowerShell-Umgebung und verwendet f\u00fcr die Kommunikation das JSON-RPC 2.0-Protokoll.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Hauptmerkmale:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sicherheit:<\/strong> Jedes Skript wird in einer vollst\u00e4ndig isolierten PowerShell-Instanz (<code class=\"\" data-line=\"\">Runspace<\/code>) ausgef\u00fchrt, was Auswirkungen auf die Hauptumgebung des Servers verhindert.<\/li>\n\n\n\n<li><strong>Flexible Konfiguration:<\/strong> Serverparameter (Port, Host, Timeouts) k\u00f6nnen \u00fcber Befehlszeilenargumente und eine externe JSON-Datei konfiguriert werden.<\/li>\n\n\n\n<li><strong>Stabilit\u00e4t:<\/strong> Eine umfassende Fehlerbehandlung auf allen Ebenen (HTTP, JSON, Skriptausf\u00fchrung) gew\u00e4hrleistet den zuverl\u00e4ssigen Betrieb des Servers.<\/li>\n\n\n\n<li><strong>MCP-Protokoll:<\/strong> Implementiert das Standard-MCP-Protokoll f\u00fcr die Interaktion, einschlie\u00dflich der Methoden <code class=\"\" data-line=\"\">initialize<\/code>, <code class=\"\" data-line=\"\">tools\/list<\/code> und <code class=\"\" data-line=\"\">tools\/call<\/code>.<\/li>\n\n\n\n<li><strong>Ressourcenkontrolle:<\/strong> Integrierte Timeouts und eine Begrenzung der Ausgabegr\u00f6\u00dfe verhindern den Missbrauch von Ressourcen.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">2. Ausf\u00fchrung und Konfiguration<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Voraussetzungen:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PowerShell 7.0 oder h\u00f6her.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Befehlszeilenparameter:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Parameter<\/th><th class=\"has-text-align-left\" data-align=\"left\">Typ<\/th><th class=\"has-text-align-left\" data-align=\"left\">Beschreibung<\/th><th class=\"has-text-align-left\" data-align=\"left\">Standardwert<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">-Port<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">[int]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Der Port, an dem der Server auf HTTP-Anfragen lauscht.<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">8090<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">-ServerHost<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">[string]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Der Host (IP-Adresse oder Domainname), an den der Server gebunden wird.<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">localhost<\/code><\/td><\/tr><tr><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">-ConfigFile<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">[string]<\/code><\/td><td class=\"has-text-align-left\" data-align=\"left\">Der Pfad zu einer Konfigurationsdatei im JSON-Format. Parameter aus dieser Datei \u00fcberschreiben die Standardwerte und Befehlszeilenargumente.<\/td><td class=\"has-text-align-left\" data-align=\"left\"><code class=\"\" data-line=\"\">$null<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Anwendungsbeispiel:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">.\\mcp-powershell-http.ps1 -Port 8090 -ServerHost 0.0.0.0 -ConfigFile &quot;C:\\config\\settings.json&quot;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Konfigurationsdatei (<code class=\"\" data-line=\"\">settings.json<\/code>):<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Der Server kann seine Konfiguration aus einer JSON-Datei laden. Dies ist der empfohlene Ansatz f\u00fcr Produktionsumgebungen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Beispiel <code class=\"\" data-line=\"\">settings.json<\/code> aus dem Repository:<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">{\n  &quot;Port&quot;: 8090,\n  &quot;Host&quot;: &quot;localhost&quot;,\n  &quot;MaxConcurrentRequests&quot;: 10,\n  &quot;TimeoutSeconds&quot;: 300,\n  &quot;LogLevel&quot;: &quot;INFO&quot;,\n  &quot;AllowedPaths&quot;: &#091;\n    &quot;C:\\\\Scripts\\\\&quot;,\n    &quot;C:\\\\Users\\\\%USERNAME%\\\\Documents\\\\&quot;\n  ],\n  &quot;Security&quot;: {\n    &quot;EnableScriptValidation&quot;: false,\n    &quot;BlockDangerousCommands&quot;: false,\n    &quot;RestrictedCommands&quot;: &#091;\n      &quot;Remove-Item -Path C:\\\\Windows\\\\*&quot;,\n      &quot;Format-Volume&quot;\n    ]\n  }\n}<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">3. Architektur und Funktionen<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Das Skript ist logisch in mehrere Regionen (<code class=\"\" data-line=\"\">#region<\/code>) unterteilt, um die Navigation zu vereinfachen.<\/p>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Region: <code class=\"\" data-line=\"\">Utility Functions<\/code> (Hilfsfunktionen)<\/strong><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">Write-Log<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Gibt formatierte und farbige Nachrichten mit einem Zeitstempel in der Konsole aus. Dies ist die Hauptfunktion f\u00fcr die Protokollierung.<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Message<\/code> <code class=\"\" data-line=\"\">[string]<\/code> (obligatorisch): Der Nachrichtentext.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Level<\/code> <code class=\"\" data-line=\"\">[string]<\/code> (optional): Die Protokollierungsstufe (<code class=\"\" data-line=\"\">DEBUG<\/code>, <code class=\"\" data-line=\"\">INFO<\/code>, <code class=\"\" data-line=\"\">WARNING<\/code>, <code class=\"\" data-line=\"\">ERROR<\/code>). Beeinflusst die Farbe der Ausgabe.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">Test-MCPRequest<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> \u00dcberpr\u00fcft, ob die eingehende Anfrage die grundlegenden Anforderungen des JSON-RPC 2.0-Protokolls erf\u00fcllt (Vorhandensein der Felder <code class=\"\" data-line=\"\">jsonrpc: &quot;2.0&quot;<\/code> und <code class=\"\" data-line=\"\">method<\/code>).<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Request<\/code> <code class=\"\" data-line=\"\">[hashtable]<\/code> (obligatorisch): Die aus JSON deserialisierte Anfrage.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00fcckgabewert:<\/strong> <code class=\"\" data-line=\"\">$true<\/code>, wenn die Anfrage g\u00fcltig ist, andernfalls <code class=\"\" data-line=\"\">$false<\/code>.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">New-MCPResponse<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Eine Factory-Funktion zur Erstellung standardisierter JSON-RPC-Antwortobjekte.<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Id<\/code> <code class=\"\" data-line=\"\">[object]<\/code>: Der Bezeichner der Anfrage.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Result<\/code> <code class=\"\" data-line=\"\">[object]<\/code>: Das Objekt, das ein erfolgreiches Ergebnis enth\u00e4lt.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Error<\/code> <code class=\"\" data-line=\"\">[hashtable]<\/code>: Das Objekt, das Fehlerinformationen enth\u00e4lt.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00fcckgabewert:<\/strong> Eine <code class=\"\" data-line=\"\">[hashtable]<\/code> mit der vollst\u00e4ndigen Antwortstruktur.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">Test-ScriptSafety<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> \u00dcberpr\u00fcft das Skript auf potenziell gef\u00e4hrliche Befehle, die in der globalen Variablen <code class=\"\" data-line=\"\">$script:RestrictedCommands<\/code> aufgef\u00fchrt sind.<\/li>\n\n\n\n<li><strong>Hinweis:<\/strong> In der bereitgestellten Version ist diese Funktion standardm\u00e4\u00dfig deaktiviert (<code class=\"\" data-line=\"\">return $true<\/code>). F\u00fcr den Produktionseinsatz sollte sie aktiviert und konfiguriert werden.<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Script<\/code> <code class=\"\" data-line=\"\">[string]<\/code> (obligatorisch): Der zu \u00fcberpr\u00fcfende PowerShell-Skripttext.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00fcckgabewert:<\/strong> <code class=\"\" data-line=\"\">$true<\/code>, wenn das Skript sicher ist, andernfalls <code class=\"\" data-line=\"\">$false<\/code>.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Region: <code class=\"\" data-line=\"\">Core Logic<\/code> (Kernlogik)<\/strong><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">Invoke-PowerShellScript<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Die Kernfunktion, die f\u00fcr die sichere Ausf\u00fchrung eines PowerShell-Skripts verantwortlich ist.<\/li>\n\n\n\n<li><strong>Ablauf:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Erstellt eine neue, vollst\u00e4ndig isolierte PowerShell-Instanz (<code class=\"\" data-line=\"\">[powershell]::Create()<\/code>).<\/li>\n\n\n\n<li>(Optional) Legt das Arbeitsverzeichnis innerhalb dieser Instanz fest.<\/li>\n\n\n\n<li>F\u00fcgt den Skripttext und seine Parameter zur Instanz hinzu.<\/li>\n\n\n\n<li>F\u00fchrt das Skript asynchron mit einem Timeout aus.<\/li>\n\n\n\n<li>Sammelt die Ausgabe (<code class=\"\" data-line=\"\">Output<\/code>)-, Fehler (<code class=\"\" data-line=\"\">Error<\/code>)- und Warnungs (<code class=\"\" data-line=\"\">Warning<\/code>)-Streams.<\/li>\n\n\n\n<li>Begrenzt die Ausgabegr\u00f6\u00dfe (Standard 10.000 Zeichen), um gro\u00dfe Daten\u00fcbertragungen zu verhindern.<\/li>\n\n\n\n<li>Gibt die Ressourcen nach Abschluss wieder frei (<code class=\"\" data-line=\"\">Dispose()<\/code>).<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Script<\/code> <code class=\"\" data-line=\"\">[string]<\/code> (obligatorisch): Der auszuf\u00fchrende Code.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Parameters<\/code> <code class=\"\" data-line=\"\">[hashtable]<\/code>: Parameter, die an das Skript \u00fcbergeben werden.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$TimeoutSeconds<\/code> <code class=\"\" data-line=\"\">[int]<\/code>: Maximale Ausf\u00fchrungszeit in Sekunden.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$WorkingDirectory<\/code> <code class=\"\" data-line=\"\">[string]<\/code>: Das Arbeitsverzeichnis f\u00fcr das Skript.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00fcckgabewert:<\/strong> Eine <code class=\"\" data-line=\"\">[hashtable]<\/code> mit den Ergebnissen: <code class=\"\" data-line=\"\">success<\/code> (bool), <code class=\"\" data-line=\"\">output<\/code> (string), <code class=\"\" data-line=\"\">errors<\/code> (array), <code class=\"\" data-line=\"\">warnings<\/code> (array), <code class=\"\" data-line=\"\">executionTime<\/code> (double).<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Region: <code class=\"\" data-line=\"\">MCP Protocol Methods<\/code> (MCP-Protokollmethoden)<\/strong><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Ein Dispatcher, der die Aufrufe von MCP-Protokollmethoden verarbeitet.<\/li>\n\n\n\n<li><strong>Ablauf:<\/strong> Verwendet eine <code class=\"\" data-line=\"\">switch<\/code>-Anweisung auf den Methodennamen (<code class=\"\" data-line=\"\">$Method<\/code>), um die entsprechende Logik aufzurufen.<\/li>\n\n\n\n<li><strong>Unterst\u00fctzte Methoden:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">&quot;initialize&quot;<\/code>: Gibt Informationen \u00fcber den Server zur\u00fcck.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">&quot;tools\/list&quot;<\/code>: Gibt eine Liste der verf\u00fcgbaren Tools zur\u00fcck (in diesem Fall nur <code class=\"\" data-line=\"\">&quot;run-script&quot;<\/code>).<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">&quot;tools\/call&quot;<\/code>: Verarbeitet einen Tool-Aufruf. Extrahiert die Parameter und ruft <code class=\"\" data-line=\"\">Invoke-PowerShellScript<\/code> zur Ausf\u00fchrung auf.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Method<\/code> <code class=\"\" data-line=\"\">[string]<\/code>: Der Name der aufzurufenden Methode.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Params<\/code> <code class=\"\" data-line=\"\">[hashtable]<\/code>: Die Parameter der Methode.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">$Id<\/code> <code class=\"\" data-line=\"\">[object]<\/code>: Der Bezeichner der Anfrage.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>R\u00fcckgabewert:<\/strong> Eine <code class=\"\" data-line=\"\">[hashtable]<\/code>, die die vollst\u00e4ndige, sendebereite MCP-Antwort darstellt.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h5 class=\"wp-block-heading\"><strong>Region: <code class=\"\" data-line=\"\">HTTP Server<\/code><\/strong><\/h5>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code class=\"\" data-line=\"\">Invoke-RequestHandler<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Verarbeitet den gesamten Lebenszyklus einer einzelnen HTTP-Anfrage.<\/li>\n\n\n\n<li><strong>Ablauf:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Richtet CORS-Header ein.<\/li>\n\n\n\n<li>Behandelt <code class=\"\" data-line=\"\">OPTIONS<\/code>-Anfragen (CORS-Preflight).<\/li>\n\n\n\n<li>\u00dcberpr\u00fcft, ob die Anfragemethode <code class=\"\" data-line=\"\">POST<\/code> ist.<\/li>\n\n\n\n<li>Liest und validiert den Anfragetext (Body).<\/li>\n\n\n\n<li>Parst das JSON und konvertiert es in eine Hashtabelle.<\/li>\n\n\n\n<li>Ruft <code class=\"\" data-line=\"\">Test-MCPRequest<\/code> zur Validierung auf.<\/li>\n\n\n\n<li>\u00dcbergibt die Anfrage zur Verarbeitung an <code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code>.<\/li>\n\n\n\n<li>Serialisiert die Antwort zur\u00fcck in JSON und sendet sie an den Client.<\/li>\n\n\n\n<li>Behandelt alle m\u00f6glichen Fehler auf diesem Weg.<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li><strong>Parameter:<\/strong>\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">$Context<\/code> <code class=\"\" data-line=\"\">[System.Net.HttpListenerContext]<\/code>: Der HTTP-Anfragekontext vom .NET-Listener.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong><code class=\"\" data-line=\"\">Start-MCPServer<\/code><\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Zweck:<\/strong> Die Hauptfunktion, die den HTTP-Listener initialisiert und startet.<\/li>\n\n\n\n<li><strong>Ablauf:<\/strong>\n<ol class=\"wp-block-list\">\n<li>Erstellt und konfiguriert ein <code class=\"\" data-line=\"\">System.Net.HttpListener<\/code>-Objekt.<\/li>\n\n\n\n<li>Startet den Listener mit <code class=\"\" data-line=\"\">listener.Start()<\/code>.<\/li>\n\n\n\n<li>Tritt in eine Endlosschleife <code class=\"\" data-line=\"\">while ($listener.IsListening)<\/code> ein, um auf eingehende Verbindungen zu warten.<\/li>\n\n\n\n<li>Ruft f\u00fcr jede Verbindung <code class=\"\" data-line=\"\">Invoke-RequestHandler<\/code> auf.<\/li>\n\n\n\n<li>Stoppt den Server ordnungsgem\u00e4\u00df, wenn der Prozess beendet wird.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">4. Ablauf einer Anforderungsausf\u00fchrung<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ein Client sendet eine <code class=\"\" data-line=\"\">POST<\/code>-Anfrage mit <code class=\"\" data-line=\"\">Content-Type: application\/json<\/code> an die URL des Servers.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">Start-MCPServer<\/code> nimmt die Anfrage entgegen und \u00fcbergibt sie an <code class=\"\" data-line=\"\">Invoke-RequestHandler<\/code>.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">Invoke-RequestHandler<\/code> validiert die HTTP-Header, die Methode und parst den JSON-Body.<\/li>\n\n\n\n<li>Die g\u00fcltige MCP-Anfrage wird an <code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code> \u00fcbergeben.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code> stellt fest, dass die Methode <code class=\"\" data-line=\"\">tools\/call<\/code> mit dem Tool <code class=\"\" data-line=\"\">run-script<\/code> aufgerufen wurde.<\/li>\n\n\n\n<li>Die Parameter (Skript, Timeout usw.) werden an <code class=\"\" data-line=\"\">Invoke-PowerShellScript<\/code> \u00fcbergeben.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">Invoke-PowerShellScript<\/code> f\u00fchrt das Skript in einer isolierten Umgebung aus.<\/li>\n\n\n\n<li>Das Ausf\u00fchrungsergebnis wird die Aufrufkette zur\u00fcckgegeben, in eine Standard-JSON-RPC-Antwort formatiert und von <code class=\"\" data-line=\"\">Invoke-RequestHandler<\/code> an den Client zur\u00fcckgesendet.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">5. Erweiterung der Funktionalit\u00e4t<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Um ein neues &#8222;Tool&#8220; (neben <code class=\"\" data-line=\"\">run-script<\/code>) hinzuzuf\u00fcgen, muss ein Entwickler:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Eine Beschreibung des neuen Tools zum Block <code class=\"\" data-line=\"\">&quot;tools\/list&quot;<\/code> in der Funktion <code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code> hinzuf\u00fcgen.<\/li>\n\n\n\n<li>Einen neuen <code class=\"\" data-line=\"\">case<\/code>-Zweig f\u00fcr dieses Tool in der <code class=\"\" data-line=\"\">switch ($toolName)<\/code>-Anweisung innerhalb des <code class=\"\" data-line=\"\">&quot;tools\/call&quot;<\/code>-Blocks von <code class=\"\" data-line=\"\">Invoke-MCPMethod<\/code> hinzuf\u00fcgen.<\/li>\n\n\n\n<li>Die Logik f\u00fcr das neue Tool implementieren.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>1. \u00dcberblick mcp-powershell-http.ps1 ist ein eigenst\u00e4ndiger HTTP-Server, der in PowerShell geschrieben wurde, um PowerShell-Skripte sicher aus der Ferne auszuf\u00fchren. Er fungiert als &#8222;Br\u00fccke&#8220; zwischen einem externen Client (z. B. einem KI-Assistenten) und der lokalen PowerShell-Umgebung und verwendet f\u00fcr die Kommunikation das JSON-RPC 2.0-Protokoll. Hauptmerkmale: 2. Ausf\u00fchrung und Konfiguration Voraussetzungen: Befehlszeilenparameter: Parameter Typ Beschreibung Standardwert -Port&hellip;&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":"","_themeisle_gutenberg_block_has_review":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-3495","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3495","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/comments?post=3495"}],"version-history":[{"count":0,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/posts\/3495\/revisions"}],"wp:attachment":[{"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/media?parent=3495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/categories?post=3495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/de.davidka.net\/de\/wp-json\/wp\/v2\/tags?post=3495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}