Lägga till plugin-program från en MCP-server

MCP är Model Context Protocol, det är ett öppet protokoll som är utformat för att göra det enkelt att lägga till ytterligare funktioner i AI-program. Mer information finns i dokumentationen . Med semantisk kernel kan du lägga till plugin-program från en MCP-server till dina agenter. Detta är användbart när du vill använda plugin-program som görs tillgängliga som en MCP-server.

Semantisk kernel stöder flera MCP-plugin-typer, inklusive MCPStdioPlugin och MCPStreamableHttpPlugin. Dessa plugin-program möjliggör anslutningar till både lokala MCP-servrar och servrar som ansluter via SSE via HTTPS.

Lägga till plugin-program från en lokal MCP-server

Om du vill lägga till en mcp-server som körs lokalt kan du använda de välbekanta MCP-kommandona, till exempel npx, docker eller uvx, så om du vill köra någon av dessa kontrollerar du att de är installerade.

När du till exempel tittar på din claude desktop-konfiguration, eller vscode-settings.json, skulle du se något liknande:

{
    "mcpServers": {
        "github": {
           "command": "docker",
           "args": [
                 "run",
                 "-i",
                 "--rm",
                 "-e",
                 "GITHUB_PERSONAL_ACCESS_TOKEN",
                 "ghcr.io/github/github-mcp-server"
           ],
           "env": {
                 "GITHUB_PERSONAL_ACCESS_TOKEN": "..."
           }
        }
    }
}

För att göra samma plugin-program tillgängligt för din kernel eller agent gör du följande:

Anmärkning

Se till att installera Semantic Kernel med mcp-extrat, till exempel:

pip install semantic-kernel[mcp]
import os
from semantic_kernel import Kernel
from semantic_kernel.connectors.mcp import MCPStdioPlugin

async def main():
    async with MCPStdioPlugin(
        name="Github",
        description="Github Plugin",
        command="docker",
        args=["run", "-i", "--rm", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"],
        env={"GITHUB_PERSONAL_ACCESS_TOKEN": os.getenv("GITHUB_PERSONAL_ACCESS_TOKEN")},
    ) as github_plugin:
        kernel = Kernel()
        kernel.add_plugin(github_plugin)
        # Do something with the kernel

En SSE-baserad MCP-server är ännu enklare eftersom den bara behöver URL:en:

import os
from semantic_kernel import Kernel
from semantic_kernel.connectors.mcp import MCPSsePlugin

async def main():
    async with MCPSsePlugin(
        name="Github",
        description="Github Plugin",
        url="http://localhost:8080",
    ) as github_plugin:
        kernel = Kernel()
        kernel.add_plugin(github_plugin)
        # Do something with the kernel

I båda fallen används asynkron kontexthanterare för att konfigurera anslutningen och stänga den, så kan du också göra detta manuellt:

import os
from semantic_kernel import Kernel
from semantic_kernel.connectors.mcp import MCPSsePlugin

async def main():
    plugin = MCPSsePlugin(
        name="Github",
        description="Github Plugin",
        url="http://localhost:8080",
    )
    await plugin.connect()   
    kernel = Kernel()
    kernel.add_plugin(github_plugin)
    # Do something with the kernel
    await plugin.close()

Alla MCP-plugin-program har ytterligare alternativ:

  • load_tools: Om du vill läsa in verktygen från MCP-servern eller inte är detta användbart när du vet att det inte finns några tillgängliga verktyg, standardvärdet är Sant.
  • load_prompts: Oavsett om du vill läsa in prompterna från MCP-servern eller inte, är detta användbart när du vet att det inte finns några tillgängliga prompter, standardvärdet är True. Vi har också hört fall där anropet för att läsa in frågor låser sig när det inte finns några frågor. Därför är det ett bra alternativ att ställa in på False om du vet att det inte finns några tillgängliga frågor.
  • request_timeout: Tidsgränsen för begäranden till MCP-servern är användbar när du vet att servern ibland inte svarar och du inte vill att appen ska hängas.

Anmärkning

MCP-dokumentationen kommer snart för .Net.

Anmärkning

MCP-dokumentationen kommer snart för Java.