Skip to main content
Glama
kimtth

Azure OpenAI

by kimtth

MCP-сервер и клиент с Azure OpenAI и OpenAI

  • Минимальная реализация серверного/клиентского приложения с использованием протокола контекста модели (MCP) и Azure OpenAI.

    1. MCP-сервер построен на базе FastMCP.

    2. Playwright — это фреймворк с открытым исходным кодом от Microsoft для сквозного тестирования современных веб-приложений.

    3. Ответ MCP о доступных инструментах будет преобразован в формат вызова функций OpenAI.

    4. Мост, преобразующий ответ MCP-сервера в формат вызова функций OpenAI, настраивает реализацию MCP-LLM Bridge.

    5. Для обеспечения стабильного соединения объект сервера передается непосредственно в мост.

    6. client_bridge поддерживает как внутрипроцессные, так и внешние (stdio) подключения к MCP-серверу, что позволяет повторно использовать их разными клиентами (например, Claude Code, VS Code, пользовательские скрипты).

Related MCP server: MCP Server Example

Протокол контекста модели (MCP)

Протокол контекста модели (MCP) — это открытый протокол, который обеспечивает безопасное и контролируемое взаимодействие между приложениями ИИ и локальными или удаленными ресурсами.

Официальные репозитории

Ресурсы сообщества

Связанные проекты

  • FastMCP: быстрый и «питонический» способ создания MCP-серверов.

  • Chat MCP: MCP-клиент

  • MCP-LLM Bridge: реализация MCP, обеспечивающая связь между MCP-серверами и LLM, совместимыми с OpenAI

MCP Playwright

Конфигурация

В период разработки в декабре 2024 года проект на Python следует инициализировать с помощью 'uv'. Другие библиотеки управления зависимостями, такие как 'pip' и 'poetry', пока не полностью поддерживаются CLI MCP.

  1. Переименуйте .env.template в .env, затем заполните значения в .env для Azure OpenAI:

    AZURE_OPEN_AI_ENDPOINT=
    AZURE_OPEN_AI_API_KEY=
    AZURE_OPEN_AI_DEPLOYMENT_MODEL=
    AZURE_OPEN_AI_API_VERSION=
  2. Установите uv для управления библиотеками Python

    pip install uv
    uv sync
  3. Выполните python chatgui.py

    • На демонстрационном экране показано, как клиент запускает браузер для перехода по URL-адресу.

Использование с внешними клиентами

MCP-сервер может использоваться внешними клиентами (Claude Desktop, VS Code, Claude Code и т. д.) через конфигурацию mcp.json.

Claude Desktop / Claude Code

Добавьте в ваш claude_desktop_config.json (Claude Desktop) или .claude/mcp.json (Claude Code):

{
  "mcpServers": {
    "browser-navigator": {
      "command": "uv",
      "args": ["run", "fastmcp", "run", "./server/browser_navigator_server.py:app"],
      "cwd": "/path/to/mcp-aoai-web-browsing",
      "env": {
        "AZURE_OPEN_AI_ENDPOINT": "...",
        "AZURE_OPEN_AI_API_KEY": "...",
        "AZURE_OPEN_AI_DEPLOYMENT_MODEL": "...",
        "AZURE_OPEN_AI_API_VERSION": "..."
      }
    }
  }
}

VS Code

Добавьте в .vscode/mcp.json в вашей рабочей области:

{
  "servers": {
    "browser-navigator": {
      "command": "uv",
      "args": ["run", "fastmcp", "run", "./server/browser_navigator_server.py:app"],
      "cwd": "${workspaceFolder}",
      "env": {
        "AZURE_OPEN_AI_ENDPOINT": "...",
        "AZURE_OPEN_AI_API_KEY": "...",
        "AZURE_OPEN_AI_DEPLOYMENT_MODEL": "...",
        "AZURE_OPEN_AI_API_VERSION": "..."
      }
    }
  }
}

Программное использование моста (stdio)

client_bridge также поддерживает подключение к внешним MCP-серверам через stdio из Python:

from client_bridge import BridgeConfig, MCPServerConfig, BridgeManager
from client_bridge.llm_config import get_default_llm_config

config = BridgeConfig(
    server_config=MCPServerConfig(
        command="uv",
        args=["run", "fastmcp", "run", "./server/browser_navigator_server.py:app"],
    ),
    llm_config=get_default_llm_config(),
    system_prompt="You are a helpful assistant.",
)

async with BridgeManager(config) as bridge:
    response = await bridge.process_message("Navigate to https://example.com")

Использование стандартного OpenAI (не Azure)

from client_bridge.llm_config import get_openai_llm_config

config = BridgeConfig(
    mcp=server,
    llm_config=get_openai_llm_config(),
)

Установите переменные окружения:

OPENAI_API_KEY=sk-...
OPENAI_MODEL=gpt-...

Прямое выполнение инструментов

Для клиентов, которые управляют собственным циклом LLM, мост предоставляет метаданные инструментов и возможность прямого выполнения:

async with BridgeManager(config) as bridge:
    tools = bridge.get_tools()  # OpenAI function calling format
    result = await bridge.execute_tool("playwright_navigate", {"url": "https://example.com"})

Относительно 'stdio'

stdio — это транспортный уровень (поток необработанных данных), в то время как JSON-RPC — это прикладной протокол (структурированная коммуникация). Они различны, но часто используются как взаимозаменяемые, например, «JSON-RPC поверх stdio» в протоколах.

Описание инструмента

@self.mcp.tool()
async def playwright_navigate(url: str, timeout=30000, wait_until="load"):
    """Navigate to a URL.""" -> This comment provides a description, which may be used in a mechanism similar to function calling in LLMs.

# Output
Tool(name='playwright_navigate', description='Navigate to a URL.', inputSchema={'properties': {'url': {'title': 'Url', 'type': 'string'}, 'timeout': {'default': 30000, 'title': 'timeout', 'type': 'string'}

Совет: uv

uv run: Run a script.
uv venv: Create a new virtual environment. By default, '.venv'.
uv add: Add a dependency to a script
uv remove: Remove a dependency from a script
uv sync: Sync (Install) the project's dependencies with the environment.

Совет

  • команда taskkill для python.exe

taskkill /IM python.exe /F
  • Visual Code: Отладчик Python: Отладка с помощью launch.json запустит отладчик, используя конфигурацию из .vscode/launch.json.

Related MCP Connectors

Related MCP Servers