> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/da/intelligens/ai-tools.md).

# AI Tools

Eksponér PowerShell-scripts som AI Tools i PowerShell Universal til brug for AI-agenter og eksterne MCP-klienter som GitHub Copilot, med godkendelse, roller og persistente miljøer.

AI Tools giver Dem mulighed for at eksponere PowerShell-scripts som værktøjer, der kan kaldes, til AI Agents og eksterne MCP-klienter. De er nyttige, når De ønsker, at en model skal hente PSU-data, køre en kontrolleret handling eller sende struktureret output tilbage til en prompt.

Hvert værktøj kan kræve godkendelse, håndhæve roller, vælge et udførelsesmiljø og valgfrit blive eksponeret via MCP.

## Opret et AI-værktøj

Gå til **Build > AI > Tools**, og vælg **Create AI Tool**. Vælg det script, der skal eksponeres, og beslut derefter, om værktøjet skal være tilgængeligt:

* Kun til PSU AI Agents.
* Til både AI Agents og MCP-klienter ved at aktivere **MCP**.

Hvis **Authenticated** er aktiveret, skal kalderen være logget på. Hvis der også er tildelt roller, skal kalderen have mindst én af disse roller.

### Beskrivelse

Beskrivelsen er en af de vigtigste dele af værktøjet. Den bør fortælle modellen:

* Hvornår værktøjet skal bruges.
* Hvad værktøjet returnerer.
* Om værktøjet ændrer tilstand.
* Eventuelle vigtige parameterforventninger.

Korte, konkrete beskrivelser fungerer bedst.

### Parametre

Parametre opdages automatisk fra PowerShell-scriptet. Kommentarbaseret hjælp anbefales kraftigt, fordi PSU bruger den til at opbygge bedre værktøjsbeskrivelser og parameterskemaer.

Dette eksempelscript er et godt AI Tool, fordi det har klare parametre og forudsigeligt output:

```powershell
<#
.SYNOPSIS
Returns the top running processes by CPU usage.

.PARAMETER Count
The number of processes to return.
#>
param(
    [Parameter()]
    [int]$Count = 5
)

Get-Process |
    Sort-Object CPU -Descending |
    Select-Object -First $Count Name, Id, CPU
```

Eksponér det som et værktøj:

```powershell
New-PSUAiTool -Name 'Get Running Processes' `
    -Description 'Returns the top running processes by CPU usage.' `
    -ScriptFullPath '/tools/Get-RunningProcesses.ps1' `
    -Authenticated `
    -Role @('Operator') `
    -Mcp
```

Nyttige cmdlets omfatter:

* `Get-PSUAiTool`
* `New-PSUAiTool`
* `Set-PSUAiTool`
* `Remove-PSUAiTool`

Gennemgå f.eks. værktøjer med:

```powershell
Get-PSUAiTool
Get-PSUAiTool -Name 'Get Running Processes'
```

## Kør værktøjer i et persistent miljø

Som standard starter hver invokering af et AI Tool en ny PowerShell-proces. For værktøjer, der kaldes ofte af en AI Agent eller en MCP-klient, skal De tildele et lokalt miljø med **Persistent Runspaces** aktiveret for at genbruge den kørende PowerShell-proces og undgå processtart ved hvert kald.

1. Opret eller rediger et miljø under **Manage > Environments > Environments**.
2. Aktivér **Persistent Runspaces**, og vælg en passende **Max Runspaces**-værdi.
3. Opret eller rediger AI Tool. På fanen **Execution** skal De vælge det pågældende miljø i **Run In**.

De kan også tildele miljøet i konfigurationen med `-Environment`:

```powershell
New-PSUAiTool -Name 'Get Running Processes' `
    -Description 'Returns the top running processes by CPU usage.' `
    -ScriptFullPath '/tools/Get-Running-Processes.ps1' `
    -Environment 'Persistent Tools' `
    -Mcp
```

Hver invokering opretter stadig sin egen jobpost, sin egen status og sit eget output i **Run > Jobs**. Persistente miljøer genbruger PowerShell-processen og bevarer tilsigtet runspace-tilstand mellem kald, mens joboutput og annullering forbliver isolerede til den enkelte invokering.

Persistent kørsel gælder for berettigede lokale, ikke-minimale miljøer. Miljøerne Remote-agent, PowerShell remoting, container og Minimal fortsætter med at bruge deres normale kørselsstier.

Genstart af miljøet eller PSU-serveren starter en ny persistent proces, så runspace-tilstanden i hukommelsen nulstilles. Brug kun persistente miljøer, når genbrug af tilstand er tilsigtet, og angiv runspace-grænsen til den samtidighed, Deres værktøjer kræver.

## Brug af et værktøj i AI Agents

Tildel værktøjsnavne direkte i en AI-agent, eller brug jokertegnsmønstre som `ticket_*` eller `*`. PSU gør kun de matchende værktøjer tilgængelige for den pågældende agent.

Rollebaseret adgang håndhæves på begge niveauer:

* Brugeren skal have lov til at køre agenten.
* Brugeren skal også have tilladelse til at køre værktøjet.

Værktøjskørsler, der er startet af en agent, vises som underordnede job for AI-promptjobbet.

Eksempel på agentkonfiguration:

```powershell
Set-PSUAiAgent -Name 'SupportAgent' -Tool @('Get Running Processes', 'ticket_*')
```

## Brug af et værktøj via MCP

Model Context Protocol (MCP) giver fjernklienter som GitHub Copilot mulighed for at finde og kalde Deres værktøjer. PSU eksponerer MCP på `/api/v1/mcp`.

Kun værktøjer med **MCP** aktiveret vises for MCP-klienter.

Når værktøjerne eksponeres via MCP, normaliseres værktøjsnavnene for klienten. Mellemrum og punktummer konverteres f.eks. til understregninger.

Når en MCP-klient opretter forbindelse, filtrerer PSU synlige værktøjer ud fra:

* Om værktøjet er markeret til MCP.
* Om kalderen er godkendt, når det kræves.
* Om kalderen har mindst én påkrævet rolle.

Kald, der foretages via MCP, vises som MCP-jobs på siden Jobs.

Hvis Deres klient understøtter bearer-tokens, skal De angive et PSU-app-token, når De opretter forbindelse til MCP-slutpunktet.

## Adgang i GitHub Copilot

GitHub Copilot kan kalde PSU-værktøjer, når VS Code er konfigureret til at oprette forbindelse til PSU MCP-serveren.

I dette eksempel ombryder værktøjet et script, der returnerer kørende processer:

```powershell
Get-Process | Select-Object Name, Id
```

Når MCP-udvidelsen er aktiveret, skal De trykke på `Ctrl+Shift+P` og køre `MCP: Add Server...`.

Vælg HTTP-indstillingen, og angiv URL'en til MCP-slutpunktet. Som standard er dette `http://localhost:5000/api/v1/mcp`.

Det resulterende indhold af `settings.json` vil se nogenlunde sådan ud:

```json
"mcp": {
  "servers": {
    "PSU": {
      "url": "http://localhost:5000/api/v1/mcp"
    }
  }
}
```

Hvis forbindelsen lykkes, viser Copilot antallet af tilgængelige værktøjer.

De kan derefter bede Copilot om at bruge PSU-værktøjet. For eksempel:

```
Use the PSU tool to list the top 5 processes and create a PowerShell script that writes them to JSON.
```

Hvis De også eksponerer et værktøj, der starter en proces, kan en prompt som denne udløse den handling:

```
Use the PSU tool to start a new process named calc.
```

Hold værktøjsbeskrivelser og parameterhjælp tydelige, så Copilot kan vælge det korrekte værktøj uden forsøg og fejl.

## Navngiv MCP-serverforbindelser

PowerShell Universal identificerer sin MCP-server som `Universal.Server` som standard. Angiv et særskilt navn for hvert miljø, så flere MCP-forbindelser til PowerShell Universal er nemme at skelne i Visual Studio Code.

Konfigurer navnet i `appsettings.json`:

```json
{
  "Mcp": {
    "ServerName": "Production PSU"
  }
}
```

Til containeriserede eller miljøvariabelbaserede udrulninger skal De bruge:

```
Mcp__ServerName=Production PSU
```

Lad indstillingen være tom eller uspecificeret for at bevare standardnavnet `Universal.Server`.

## Styr AI- og MCP-adgang

Brug de globale indstillinger for AI og MCP til at sætte en grænse for serverkapaciteten og til at deaktivere AI-funktioner, når de ikke er tilladt i et miljø.

### Begræns MCP-anmodninger og jobs

Gå til **tandhjulet Settings > Automation** for at konfigurere:

* **MCP-anmodninger pr. minut**: Anmodninger over den konfigurerede hastighed afvises før udførelse.
* **MCP concurrent jobs**: Yderligere MCP-jobs venter, indtil der er en ledig udførelsesplads.

En værdi på `0` betyder ubegrænset. Negative værdier er ikke gyldige. Angiv begge grænser ud fra den kapacitet, der er tilgængelig for PowerShell Universal, og de scripts, der eksponeres som MCP-værktøjer.

### Deaktiver AI-funktioner

Vælg **Disable AI Features** under **tandhjulet Settings > Automation** for at deaktivere AI-funktioner for serveren. Dette skjuler AI Agents, AI Tools og AI Chat i admin console.

Deaktivering af AI fjerner også MCP-slutpunktet fra registrering af nye slutpunkter og returnerer `404 Not Found` for anmodninger til `/api/v1/mcp` med det samme. En genstart af serveren kræves ikke.

Til konfigurationsscripts skal De bruge `Set-PSUSetting -DisabledFeatures` til at administrere deaktiverede produktfunktioner. `-Features` forbliver et alias for eksisterende konfigurationer.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/powershell-universal/da/intelligens/ai-tools.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
