从 MCP 服务器添加插件

MCP 是模型上下文协议,它是一种开放协议,旨在允许将其他功能轻松添加到 AI 应用程序,请参阅 文档 了解详细信息。 语义内核允许将插件从 MCP 服务器添加到代理。 如果要使用作为 MCP 服务器提供的插件,这非常有用。

语义内核支持多种 MCP 插件类型,包括 MCPStdioPlugin 和 MCPStreamableHttpPlugin。 这些插件支持连接到本地 MCP 服务器,以及通过 SSE 通过 HTTPS 连接的服务器。

从本地 MCP 服务器添加插件

若要添加本地运行的 MCP 服务器,可以使用熟悉的 MCP 命令,例如npxdocker,或者uvx,如果要运行其中一个命令,请确保已安装这些命令。

例如,查看克劳德桌面配置或 vscode settings.json时,会看到如下所示的内容:

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

若要使同一插件可用于内核或代理,需要执行以下作:

注释

确保安装语义内核时附加 mcp,例如:

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

基于 SSE 的 MCP 服务器甚至更简单,因为它只需要 URL:

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

在这两种情况下,异步上下文管理器都用于设置连接并关闭连接,也可以手动执行此作:

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()

所有 MCP 插件都有其他选项:

  • load_tools:无论是否从 MCP 服务器加载工具,如果知道没有可用的工具,默认值为 True 时,这非常有用。
  • load_prompts:无论是否从 MCP 服务器加载提示,如果知道没有可用的提示,默认值为 True 时,这非常有用。 我们也听说过在没有提示时调用加载提示会挂起的情况,所以如果你知道没有可用的提示,可以将其设置为False,这是一个不错的选择。
  • request_timeout:对 MCP 服务器的请求超时很有用,尤其是在您知道服务器有时不响应且希望避免您的应用程序挂起的情况下。

注释

MCP 文档即将推出适用于 .Net。

注释

MCP 文档即将推出 Java。