初学者的模型上下文协议(MCP)课程

发表于 2025-08-12 12:52:05 | 已阅读: 96  次

测试与调试

在开始测试你的 MCP 服务器之前,了解可用的工具和调试的最佳实践非常重要。有效的测试能确保服务器按预期运行,并帮助你快速发现和解决问题。以下部分将介绍验证 MCP 实现的推荐方法。

概述

本课将介绍如何选择合适的测试方法以及最有效的测试工具。

学习目标

完成本课后,你将能够:

  • 描述各种测试方法。
  • 使用不同工具有效地测试代码。

测试 MCP 服务器

MCP 提供了帮助你测试和调试服务器的工具:

  • MCP Inspector:一个命令行工具,可作为 CLI 工具或可视化工具运行。
  • 手动测试:你可以使用 curl 这类工具发送网络请求,任何支持 HTTP 的工具都可以。
  • 单元测试:可以使用你喜欢的测试框架来测试服务器和客户端的功能。

使用 MCP Inspector

我们在之前的课程中介绍过该工具的使用,这里做个简要说明。它是基于 Node.js 构建的工具,你可以通过调用 npx 命令来使用,npx 会临时下载并安装该工具,运行完成后会自动清理。

MCP Inspector 可以帮助你:

  • 发现服务器功能:自动检测可用的资源、工具和提示
  • 测试工具执行:尝试不同参数,实时查看响应
  • 查看服务器元数据:检查服务器信息、模式和配置

工具的典型运行示例如下:

npx @modelcontextprotocol/inspector node build/index.js

上述命令启动 MCP 及其可视化界面,并在浏览器中打开本地网页界面。你会看到一个仪表盘,显示已注册的 MCP 服务器、可用工具、资源和提示。该界面允许你交互式地测试工具执行、检查服务器元数据和查看实时响应,方便验证和调试 MCP 服务器实现。

界面示例如下: Inspector

你也可以在 CLI 模式下运行该工具,只需添加 --cli 参数。下面是以“CLI”模式运行工具并列出服务器上所有工具的示例:

npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list

手动测试

除了使用 inspector 工具测试服务器功能外,另一种类似的方法是使用支持 HTTP 的客户端工具,比如 curl。

使用 curl,你可以通过 HTTP 请求直接测试 MCP 服务器:

# 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 语句检查特定条件是否满足。

完整文件请查看 full file here

基于上述文件,你可以测试自己的服务器,确保功能按预期创建。

所有主流 SDK 都有类似的测试部分,你可以根据所选运行环境进行调整。

示例

额外资源

后续内容

免责声明
本文件使用 AI 翻译服务 Co-op Translator 进行翻译。虽然我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。对于因使用本翻译而产生的任何误解或误释,我们不承担任何责任。