TellWorldAI 世界档案
问档案English

首页›实践›实践

实践

MCP 服务器怎么测试

测试 MCP 服务器有三种办法:用 MCP Inspector 看工具并交互调用,用 curl 直接发 HTTP 请求,再用单元测试逐个检查工具。本文讲清每种怎么做。

这篇适合谁,读完能做到什么

你已经写好了一个 MCP 服务器,想确认它的工具能被正确列出、能正确执行,并且以后改代码时不会悄悄出问题。读完这篇,你能用三种方式测试它:用 MCP Inspector 看服务器暴露了什么,用 curl 直接调用,用 pytest 为工具写单元测试[1]。

测试有三种办法

这门课的测试一课列出了三种方法[1]:

  • MCP Inspector:基于 Node.js 的工具,既能当命令行工具用,也能打开可视化界面[1][3]。
  • 手工测试:任何能发 HTTP 请求的工具都行,curl 就是一个[1]。
  • 单元测试:用你熟悉的测试框架,分别测试服务器和客户端的功能[1]。

用 MCP Inspector 测试

MCP Inspector 通过 npx 启动。npx 会临时下载并安装它,请求运行结束后自动清理[1]。它能帮你发现服务器提供的资源、工具和提示词,用不同参数试着执行工具,并查看服务器的元信息、schema 和配置[1]。

启动可视化界面的命令是[1]:

npx @modelcontextprotocol/inspector node build/index.js

这条命令会在浏览器里打开一个本地网页,列出已注册的服务器和它的工具、资源、提示词。你可以在页面上执行工具,实时看到返回结果[1]。

加上 --cli 就进入命令行模式。下面的命令会列出服务器上的全部工具[1]:

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

用 curl 直接调用

如果服务器通过 HTTP 对外提供接口,可以直接用 curl 调用。示例用的是 3000 端口和 /v1/metadata、/v1/tools/execute 两个路径,它们只是示例[1]:

# 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"}}'

调用工具就是发一个 POST 请求,请求体里写明工具名和参数[1]。命令行工具总体上用起来更快,也便于写成脚本,所以在 CI/CD 环境里有用[1]。

用 pytest 写单元测试

单元测试逐个检查工具和资源是否按预期工作[1]。Python 示例用的是 pytest,测试就是普通函数加 assert 断言。示例把整个模块标记为异步测试,并从 mcp.server.fastmcp 导入 FastMCP[1]:

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.
    """

示例创建了一个名为 test 的服务器,里面有 test_tool_1 和 test_tool_2 两个工具,各自返回一个固定字符串[1]。然后它用四种方式调用 list_tools:不传 cursor、传 cursor=None、传字符串、传空字符串,每次都断言返回两个工具[1]。

三种办法怎么配合

先用 MCP Inspector 看服务器列出了哪些工具、资源和提示词,确认它们被正确注册。再用 curl 或 Inspector 的 CLI 模式做能写进脚本的检查,这类检查适合放进 CI/CD。最后用单元测试把每个工具的行为固定下来,之后改代码时能尽早发现回归[1]。

限制和常见问题

  • 示例的 docstring 写明,FastMCP 目前没有实现分页,所以这个测试只能确认客户端能传入 cursor 参数[1]。
  • 示例里的 HTTP 地址只是示例,实际测试时要换成你自己服务器的地址[1]。
  • 示例服务器在 Java、.NET、JavaScript、TypeScript 和 Python 中都有[1]。各主流 SDK 的测试部分大体相似,换语言时照同样的思路调整即可[1]。
  • 完整的测试文件在 MCP Python SDK 仓库里[4],SDK 本身的地址见[2]。

下一步

同一套内容的下一部分讲部署[1]。SDK 和测试的官方仓库见前面的脚注[2][4]。

本文改编自 Microsoft 开源课程 mcp-for-beginners 的测试一课[1],原文以 MIT 许可证发布。

来源

  1. 1
    Testing and DebuggingMicrosoft mcp-for-beginners (MIT)
  2. 2
    MCP Python SDKModel Context Protocol
  3. 3
    MCP InspectorModel Context Protocol
  4. 4
    test_list_methods_cursor.pyModel Context Protocol

引用本页: MCP 服务器怎么测试. TellWorld, https://www.tellworld.net/zh/practice/practice-mcp-testing. 更新于 2026-11-14

相关动态