{"id":3512,"date":"2025-09-26T20:11:45","date_gmt":"2025-09-26T18:11:45","guid":{"rendered":"https:\/\/davidka.net\/ru\/?p=3512"},"modified":"2025-09-26T23:04:56","modified_gmt":"2025-09-26T21:04:56","slug":"mcp-powershell-server-stdio","status":"publish","type":"post","link":"https:\/\/it.davidka.net\/it\/mcp-powershell-server-stdio\/","title":{"rendered":"Documentazione del Server MCP PowerShell. STDIO Server. (mcp-powershell-server-stdio.py)"},"content":{"rendered":"\n<div id=\"rtoc-mokuji-wrapper\" class=\"rtoc-mokuji-content frame2 preset1 animation-fade rtoc_open default\" data-id=\"3512\" data-theme=\"Neve - Davidka\">\n\t\t\t<div id=\"rtoc-mokuji-title\" class=\"rtoc_btn_none rtoc_left\">\n\t\t\t\n\t\t\t<span>In Questo Articolo<\/span>\n\t\t\t<\/div><ol class=\"rtoc-mokuji decimal_ol level-1\"><li class=\"rtoc-item\"><a href=\"#rtoc-1\">Descrizione<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-2\">Architettura<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-3\">Componenti Principali<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-4\">Struttura del File<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-5\">Funzioni<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-6\">ConvertFrom-JsonToHashtable<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-7\">Write-Log<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-8\">Test-MCPRequest<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-9\">New-MCPResponse<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-10\">Gestione degli Errori<\/a><ul class=\"rtoc-mokuji mokuji_ul level-2\"><li class=\"rtoc-item\"><a href=\"#rtoc-11\">Codici di Errore MCP<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-12\">Registrazione degli Errori<\/a><\/li><\/ul><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-13\">Limitazioni<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-14\">Prestazioni<\/a><\/li><li class=\"rtoc-item\"><a href=\"#rtoc-15\">Scalabilit\u00e0<\/a><\/li><\/ol><\/div><h2 id=\"rtoc-1\"  class=\"wp-block-heading\">Descrizione<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il Server MCP PowerShell \u00e8 un server che implementa il Model Context Protocol (MCP) per l&#8217;esecuzione di script PowerShell. Il server opera in modalit\u00e0 STDIO e fornisce strumenti per l&#8217;esecuzione sicura di comandi PowerShell attraverso un&#8217;interfaccia standardizzata.<\/p>\n\n\n\n<h2 id=\"rtoc-2\"  class=\"wp-block-heading\">Architettura<\/h2>\n\n\n\n<h3 id=\"rtoc-3\"  class=\"wp-block-heading\">Componenti Principali<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Convertitore JSON<\/strong> &#8211; Una funzione per convertire JSON in tabelle hash di PowerShell.<\/li>\n\n\n\n<li><strong>Registrazione (Logging)<\/strong> &#8211; Un sistema per scrivere eventi su un file.<\/li>\n\n\n\n<li><strong>Gestore MCP<\/strong> &#8211; La logica principale per l&#8217;elaborazione delle richieste MCP.<\/li>\n\n\n\n<li><strong>Esecutore PowerShell<\/strong> &#8211; Esecuzione isolata di script.<\/li>\n\n\n\n<li><strong>Interfaccia STDIO<\/strong> &#8211; Comunicazione tramite flussi standard.<\/li>\n<\/ol>\n\n\n\n<h3 id=\"rtoc-4\"  class=\"wp-block-heading\">Struttura del File<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">mcp-powershell-stdio.ps1\n\u251c\u2500\u2500 ConvertFrom-JsonToHashtable    # Funzione di conversione JSON\n\u251c\u2500\u2500 Write-Log                      # Funzione di logging\n\u251c\u2500\u2500 Test-MCPRequest               # Validazione delle richieste MCP\n\u251c\u2500\u2500 New-MCPResponse               # Creazione delle risposte MCP\n\u251c\u2500\u2500 Invoke-PowerShellScript       # Esecuzione di script PowerShell\n\u251c\u2500\u2500 Invoke-MCPMethod              # Elaborazione dei metodi MCP\n\u251c\u2500\u2500 Send-MCPResponse              # Invio delle risposte\n\u251c\u2500\u2500 Start-MCPServer               # Ciclo principale del server\n\u2514\u2500\u2500 Inizializzazione e avvio<\/code><\/pre>\n\n\n\n<h2 id=\"rtoc-5\"  class=\"wp-block-heading\">Funzioni<\/h2>\n\n\n\n<h3 id=\"rtoc-6\"  class=\"wp-block-heading\">ConvertFrom-JsonToHashtable<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">function ConvertFrom-JsonToHashtable {\n    param(&#091;string]$Json)\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scopo<\/strong>: Questa funzione converte una stringa JSON in tabelle hash di PowerShell per la compatibilit\u00e0 con PowerShell 5.x.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Parametri<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">Json<\/code> (string) &#8211; La stringa JSON da convertire.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Restituisce<\/strong>: Una tabella hash con i dati convertiti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caratteristiche<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Conversione ricorsiva di oggetti nidificati.<\/li>\n\n\n\n<li>Gestione di array e collezioni.<\/li>\n\n\n\n<li>Compatibilit\u00e0 con PowerShell 5.x.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"rtoc-7\"  class=\"wp-block-heading\">Write-Log<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">function Write-Log {\n    param(\n        &#091;Parameter(Mandatory=$true)]\n        &#091;string]$Message,\n\n        &#091;Parameter(Mandatory=$false)]\n        &#091;ValidateSet(&quot;INFO&quot;, &quot;WARNING&quot;, &quot;ERROR&quot;, &quot;DEBUG&quot;)]\n        &#091;string]$Level = &quot;INFO&quot;\n    )\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scopo<\/strong>: Questa funzione scrive i log in un file, poich\u00e9 <code class=\"\" data-line=\"\">stdout<\/code> viene utilizzato per la comunicazione MCP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Parametri<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">Message<\/code> (string) &#8211; Il messaggio da scrivere nel log.<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">Level<\/code> (string) &#8211; Il livello di logging (INFO, WARNING, ERROR, DEBUG).<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Caratteristiche<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scrive nel file <code class=\"\" data-line=\"\">$env:TEMP\\mcp-powershell-server.log<\/code>.<\/li>\n\n\n\n<li>Timestamp in formato <code class=\"\" data-line=\"\">yyyy-MM-dd HH:mm:ss<\/code>.<\/li>\n\n\n\n<li>Codifica UTF-8.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"rtoc-8\"  class=\"wp-block-heading\">Test-MCPRequest<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">function Test-MCPRequest {\n    param(\n        &#091;Parameter(Mandatory=$true)]\n        &#091;hashtable]$Request\n    )\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scopo<\/strong>: Questa funzione valida una richiesta MCP per la conformit\u00e0 al protocollo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Parametri<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">Request<\/code> (hashtable) &#8211; La richiesta MCP da validare.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Restituisce<\/strong>: Booleano &#8211; Il risultato della validazione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Controlli<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Presenza del campo <code class=\"\" data-line=\"\">jsonrpc<\/code> con il valore &#8220;2.0&#8221;.<\/li>\n\n\n\n<li>Presenza del campo obbligatorio <code class=\"\" data-line=\"\">method<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 id=\"rtoc-9\"  class=\"wp-block-heading\">New-MCPResponse<\/h3>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">function New-MCPResponse {\n    param(\n        &#091;Parameter(Mandatory=$false)]\n        &#091;object]$Id = $null,\n\n        &#091;Parameter(Mandatory=$false)]\n        &#091;object]$Result = $null,\n\n        &#091;Parameter(Mandatory=$false)]\n        &#091;hashtable]$Error = $null\n    )\n}```\n\n**Scopo**: Questa funzione crea una risposta MCP standardizzata.\n\n**Parametri**:\n- `Id` (object) - L&#039;identificatore della richiesta.\n- `Result` (object) - Il risultato dell&#039;operazione.\n- `Error` (hashtable) - Informazioni sull&#039;errore.\n\n**Restituisce**: Una `Hashtable` con la risposta MCP.\n\n### Invoke-PowerShellScript<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">powershell<br>function Invoke-PowerShellScript {<br>param(<br>[Parameter(Mandatory=$true)]<br>[string]$Script,<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">    &#091;Parameter(Mandatory=$false)]\n    &#091;hashtable]$Parameters = @{},\n\n    &#091;Parameter(Mandatory=$false)]\n    &#091;int]$TimeoutSeconds = 300,\n\n    &#091;Parameter(Mandatory=$false)]\n    &#091;string]$WorkingDirectory = $PWD\n)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">**Scopo**: Questa funzione esegue uno script PowerShell in un processo isolato.\n\n**Parametri**:\n- `Script` (string) - Lo script PowerShell da eseguire.\n- `Parameters` (hashtable) - Parametri per lo script.\n- `TimeoutSeconds` (int) - Timeout di esecuzione (predefinito 300 sec).\n- `WorkingDirectory` (string) - La directory di lavoro.\n\n**Restituisce**: Una `Hashtable` con i risultati dell&#039;esecuzione:\n- `success` (bool) - Lo stato dell&#039;esecuzione.\n- `output` (string) - L&#039;output del comando.\n- `errors` (array) - Un array di errori.\n- `warnings` (array) - Un array di avvisi.\n\n**Caratteristiche**:\n- Isolamento tramite un processo PowerShell separato.\n- Supporto per il timeout.\n- Raccolta di tutti i flussi di output (output, error, warning).\n- Pulizia automatica delle risorse.\n\n## Metodi MCP\n\n### initialize\n\n**Scopo**: Inizializza il server MCP e scambia informazioni sulle capacit\u00e0.\n\n**Risposta**:<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>{<br>&#8220;protocolVersion&#8221;: &#8220;2024-11-05&#8221;,<br>&#8220;capabilities&#8221;: {<br>&#8220;tools&#8221;: {<br>&#8220;listChanged&#8221;: true<br>}<br>},<br>&#8220;serverInfo&#8221;: {<br>&#8220;name&#8221;: &#8220;PowerShell Script Runner&#8221;,<br>&#8220;version&#8221;: &#8220;1.0.0&#8221;,<br>&#8220;description&#8221;: &#8220;Esegue script PowerShell tramite MCP&#8221;<br>}<br>}<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">### tools\/list\n\n**Scopo**: Ottiene l&#039;elenco degli strumenti disponibili.\n\n**Risposta**: Un array di strumenti con la descrizione dei loro schemi di parametri di input.\n\n### tools\/call\n\n**Scopo**: Chiama uno strumento specifico con parametri.\n\n**Parametri**:\n- `name` (string) - Il nome dello strumento.\n- `arguments` (object) - Argomenti per lo strumento.\n\n## Strumenti\n\n### run-script\n\n**Scopo**: Esegue uno script PowerShell con i parametri specificati.\n\n**Schema dei Parametri di Input**:<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>{<br>&#8220;type&#8221;: &#8220;object&#8221;,<br>&#8220;properties&#8221;: {<br>&#8220;script&#8221;: {<br>&#8220;type&#8221;: &#8220;string&#8221;,<br>&#8220;description&#8221;: &#8220;Script PowerShell da eseguire&#8221;<br>},<br>&#8220;parameters&#8221;: {<br>&#8220;type&#8221;: &#8220;object&#8221;,<br>&#8220;description&#8221;: &#8220;Parametri per lo script (opzionale)&#8221;,<br>&#8220;additionalProperties&#8221;: true<br>},<br>&#8220;workingDirectory&#8221;: {<br>&#8220;type&#8221;: &#8220;string&#8221;,<br>&#8220;description&#8221;: &#8220;Directory di lavoro per l&#8217;esecuzione (opzionale)&#8221;,<br>&#8220;default&#8221;: &#8220;&#8221;<br>},<br>&#8220;timeoutSeconds&#8221;: {<br>&#8220;type&#8221;: &#8220;integer&#8221;,<br>&#8220;description&#8221;: &#8220;Timeout di esecuzione in secondi (opzionale)&#8221;,<br>&#8220;default&#8221;: 300,<br>&#8220;minimum&#8221;: 1,<br>&#8220;maximum&#8221;: 3600<br>}<br>},<br>&#8220;required&#8221;: [&#8220;script&#8221;]<br>}<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">**Risposta**: Una struttura con i risultati dell&#039;esecuzione, che include:\n- Output del comando formattato.\n- Errori (se presenti).\n- Avvisi (se presenti).\n- Metadati dell&#039;esecuzione.\n\n## Configurazione\n\n### Codifica<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">powershell<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">Il server \u00e8 configurato per funzionare con la codifica UTF-8 per la corretta gestione dei dati JSON.\n\n### Logging\n\n- **File di log**: `$env:TEMP\\mcp-powershell-server.log`\n- **Codifica**: UTF-8\n- **Livelli**: INFO, WARNING, ERROR, DEBUG\n- **Formato**: `&#091;yyyy-MM-dd HH:mm:ss] &#091;LEVEL] Messaggio`\n\n### Sicurezza\n\n- Isolamento degli script tramite processi PowerShell separati.\n- Timeout per prevenire blocchi.\n- Validazione di tutte le richieste in arrivo.\n- Registrazione di tutte le operazioni.\n\n## Utilizzo\n\n### Avvio del Server<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">powershell<br>.\\mcp-powershell-stdio.ps1<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">Il server si avvia in modalit\u00e0 STDIO e attende i comandi MCP tramite l&#039;input standard.\n\n### Esempi di Richieste MCP\n\n#### Inizializzazione<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>{<br>&#8220;jsonrpc&#8221;: &#8220;2.0&#8221;,<br>&#8220;id&#8221;: 1,<br>&#8220;method&#8221;: &#8220;initialize&#8221;,<br>&#8220;params&#8221;: {<br>&#8220;protocolVersion&#8221;: &#8220;2024-11-05&#8221;,<br>&#8220;capabilities&#8221;: {},<br>&#8220;clientInfo&#8221;: {<br>&#8220;name&#8221;: &#8220;test-client&#8221;,<br>&#8220;version&#8221;: &#8220;1.0.0&#8221;<br>}<br>}<br>}<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#### Elenco Strumenti<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>{<br>&#8220;jsonrpc&#8221;: &#8220;2.0&#8221;,<br>&#8220;id&#8221;: 2,<br>&#8220;method&#8221;: &#8220;tools\/list&#8221;<br>}<\/p>\n\n\n\n<pre class=\"wp-block-code line-numbers\"><code class=\" language-python\" data-line=\"\">#### Esecuzione Script<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">json<br>{<br>&#8220;jsonrpc&#8221;: &#8220;2.0&#8221;,<br>&#8220;id&#8221;: 3,<br>&#8220;method&#8221;: &#8220;tools\/call&#8221;,<br>&#8220;params&#8221;: {<br>&#8220;name&#8221;: &#8220;run-script&#8221;,<br>&#8220;arguments&#8221;: {<br>&#8220;script&#8221;: &#8220;Get-Process | Select-Object -First 5 Name, CPU&#8221;,<br>&#8220;timeoutSeconds&#8221;: 60<br>}<br>}<br>}<br>&#8220;`<\/p>\n\n\n\n<h2 id=\"rtoc-10\"  class=\"wp-block-heading\">Gestione degli Errori<\/h2>\n\n\n\n<h3 id=\"rtoc-11\"  class=\"wp-block-heading\">Codici di Errore MCP<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code class=\"\" data-line=\"\">-32700<\/code>: Errore di parsing JSON (Parse error)<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">-32600<\/code>: Richiesta MCP non valida (Invalid Request)<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">-32601<\/code>: Metodo o strumento non trovato (Method not found)<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">-32602<\/code>: Parametri non validi (Invalid params)<\/li>\n\n\n\n<li><code class=\"\" data-line=\"\">-32603<\/code>: Errore interno del server (Internal error)<\/li>\n<\/ul>\n\n\n\n<h3 id=\"rtoc-12\"  class=\"wp-block-heading\">Registrazione degli Errori<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Tutti gli errori vengono registrati in un file con informazioni dettagliate:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Timestamp<\/li>\n\n\n\n<li>Livello di errore<\/li>\n\n\n\n<li>Descrizione dettagliata<\/li>\n\n\n\n<li>Stack trace (se necessario)<\/li>\n<\/ul>\n\n\n\n<h2 id=\"rtoc-13\"  class=\"wp-block-heading\">Limitazioni<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Timeout di esecuzione<\/strong>: Massimo 3600 secondi (1 ora).<\/li>\n\n\n\n<li><strong>Isolamento dei processi<\/strong>: Ogni script viene eseguito in un processo separato.<\/li>\n\n\n\n<li><strong>Codifica<\/strong>: Solo UTF-8.<\/li>\n\n\n\n<li><strong>Compatibilit\u00e0<\/strong>: PowerShell 5.x e versioni successive.<\/li>\n<\/ol>\n\n\n\n<h2 id=\"rtoc-14\"  class=\"wp-block-heading\">Prestazioni<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Overhead minimo per la creazione di processi.<\/li>\n\n\n\n<li>Serializzazione JSON efficiente.<\/li>\n\n\n\n<li>Pulizia automatica delle risorse.<\/li>\n\n\n\n<li>Logging ottimizzato.<\/li>\n<\/ul>\n\n\n\n<h2 id=\"rtoc-15\"  class=\"wp-block-heading\">Scalabilit\u00e0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Il server \u00e8 progettato per gestire una richiesta alla volta in modalit\u00e0 sincrona. Per l&#8217;elaborazione parallela, \u00e8 necessario eseguire pi\u00f9 istanze del server.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Versione della documentazione: 1.0.0<\/em><br><em>Data di creazione: 15 settembre 2025<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In Questo Articolo Descrizione Architettura Componenti Principali Struttura del File Funzioni ConvertFrom-JsonToHashtable Write-Log Test-MCPRequest New-MCPResponse Gestione degli Errori Codici di Errore MCP Registrazione degli Errori Limitazioni Prestazioni Scalabilit\u00e0 Descrizione Il Server MCP PowerShell \u00e8 un server che implementa il Model Context Protocol (MCP) per l&#8217;esecuzione di script PowerShell. Il server opera in modalit\u00e0 STDIO e&hellip;&nbsp;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"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":[937],"tags":[944,108,938,939],"class_list":["post-3512","post","type-post","status-publish","format-standard","hentry","category-mcp-powershell-server","tag-tag-client-server","tag-tag-mcp","tag-tag-mcp-server","tag-tag-powershell-script-execution"],"acf":[],"_links":{"self":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/3512","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/comments?post=3512"}],"version-history":[{"count":0,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/posts\/3512\/revisions"}],"wp:attachment":[{"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/media?parent=3512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/categories?post=3512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/it.davidka.net\/it\/wp-json\/wp\/v2\/tags?post=3512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}