Прежде чем начать тестировать ваш MCP сервер, важно понять доступные инструменты и лучшие практики отладки. Эффективное тестирование гарантирует, что сервер работает как задумано, и помогает быстро выявлять и устранять проблемы. В следующем разделе описаны рекомендуемые подходы для проверки вашей реализации MCP.
В этом уроке рассматривается, как выбрать правильный подход к тестированию и наиболее эффективный инструмент.
К концу урока вы сможете:
- Описывать различные подходы к тестированию.
- Использовать разные инструменты для эффективного тестирования кода.
MCP предоставляет инструменты для тестирования и отладки ваших серверов:
- MCP Inspector: инструмент командной строки, который можно запускать как в CLI, так и в визуальном режиме.
- Ручное тестирование: можно использовать такие инструменты, как curl, для выполнения веб-запросов, но подойдет любой инструмент, поддерживающий HTTP.
- Модульное тестирование: можно использовать предпочитаемый фреймворк для тестирования функций как сервера, так и клиента.
Мы уже описывали использование этого инструмента в предыдущих уроках, но давайте кратко повторим. Это инструмент, написанный на Node.js, который можно запустить через npx. Он временно скачает и установит инструмент, выполнит ваш запрос и затем очистит себя.
MCP Inspector помогает:
- Обнаруживать возможности сервера: автоматически определяет доступные ресурсы, инструменты и подсказки
- Тестировать выполнение инструментов: пробовать разные параметры и видеть ответы в реальном времени
- Просматривать метаданные сервера: изучать информацию о сервере, схемы и конфигурации
Типичный запуск инструмента выглядит так:
npx @modelcontextprotocol/inspector node build/index.jsЭта команда запускает MCP и его визуальный интерфейс, открывая локальный веб-интерфейс в вашем браузере. Вы увидите панель управления с зарегистрированными MCP серверами, их доступными инструментами, ресурсами и подсказками. Интерфейс позволяет интерактивно тестировать выполнение инструментов, просматривать метаданные сервера и получать ответы в реальном времени, что облегчает проверку и отладку реализации MCP сервера.
Также можно запустить этот инструмент в режиме CLI, добавив атрибут --cli. Пример запуска в режиме "CLI", который выводит список всех инструментов на сервере:
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/listПомимо использования MCP Inspector для проверки возможностей сервера, можно использовать клиент, поддерживающий HTTP, например curl.
С помощью curl вы можете тестировать MCP серверы напрямую через HTTP-запросы:
# Example: Test server metadata
curl http://localhost:3000/v1/metadata
# Example: Execute a tool
curl -X POST http://localhost:3000/v1/tools/execute \
-H "Content-Type: application/json" \
-d '{"name": "calculator", "parameters": {"expression": "2+2"}}'Как видно из примера с curl, вы используете POST-запрос для вызова инструмента с полезной нагрузкой, содержащей имя инструмента и его параметры. Выбирайте подход, который вам удобнее. CLI-инструменты обычно работают быстрее и их легко автоматизировать, что полезно в CI/CD средах.
Создавайте модульные тесты для ваших инструментов и ресурсов, чтобы убедиться, что они работают корректно. Вот пример тестового кода.
import pytest
from mcp.server.fastmcp import FastMCP
from mcp.shared.memory import (
create_connected_server_and_client_session as create_session,
)
# Mark the whole module for async tests
pytestmark = pytest.mark.anyio
async def test_list_tools_cursor_parameter():
"""Test that the cursor parameter is accepted for list_tools.
Note: FastMCP doesn't currently implement pagination, so this test
only verifies that the cursor parameter is accepted by the client.
"""
server = FastMCP("test")
# Create a couple of test tools
@server.tool(name="test_tool_1")
async def test_tool_1() -> str:
"""First test tool"""
return "Result 1"
@server.tool(name="test_tool_2")
async def test_tool_2() -> str:
"""Second test tool"""
return "Result 2"
async with create_session(server._mcp_server) as client_session:
# Test without cursor parameter (omitted)
result1 = await client_session.list_tools()
assert len(result1.tools) == 2
# Test with cursor=None
result2 = await client_session.list_tools(cursor=None)
assert len(result2.tools) == 2
# Test with cursor as string
result3 = await client_session.list_tools(cursor="some_cursor_value")
assert len(result3.tools) == 2
# Test with empty string cursor
result4 = await client_session.list_tools(cursor="")
assert len(result4.tools) == 2
Приведённый код делает следующее:
- Использует фреймворк pytest, который позволяет создавать тесты в виде функций и использовать assert для проверок.
- Создаёт MCP сервер с двумя разными инструментами.
- Использует оператор
assertдля проверки выполнения определённых условий.
Полный файл можно посмотреть здесь
Используя этот файл, вы можете протестировать свой сервер и убедиться, что возможности создаются корректно.
Все основные SDK имеют похожие разделы для тестирования, так что вы можете адаптировать их под выбранную среду выполнения.
- Далее: Развертывание
Отказ от ответственности:
Этот документ был переведен с помощью сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия по обеспечению точности, просим учитывать, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется обращаться к профессиональному человеческому переводу. Мы не несем ответственности за любые недоразумения или неправильные толкования, возникшие в результате использования данного перевода.
