My Notes on MCP Testing - Part 2

Trying Out MCP Tools to Understand the Interaction Patterns and Responses

I started exploring ChromeDevTools MCP using MCP Inspector to understand how MCP interactions work and what requests and responses are exchanged between the client and server.



Pre-Requisites

  • Node.js
  • Chrome Browser

In the terminal, I ran the following command:

npx @modelcontextprotocol/inspector npx -y chrome-devtools-mcp@latest

This tells MCP Inspector to launch the ChromeDevTools MCP server.


What Happens When the MCP Server Is Enabled?

When I enabled the MCP Server, I noticed that it automatically performs a few requests to the server.


/initialize

This is a request sent from the Client to the Server.

Request

The request contains:

  • Protocol Version
  • Client Capabilities such as sampling, elicitation, and roots

Note: sampling and roots are deprecated in the latest version of the MCP Protocol.

{
"protocolVersion": "2025-11-25",
"capabilities": {
"sampling": {},
"elicitation": { "form": {}, "url": {} },
"roots": { "listChanged": true },
"tasks": {
"list": {},
"cancel": {},
"requests": {
"sampling": { "createMessage": {} },
"elicitation": { "create": {} }
}
},
"extensions": {
"io.modelcontextprotocol/tasks": {},
"io.modelcontextprotocol/ui": {
"mimeTypes": ["text/html;profile=mcp-app"],
"elicitation": {}
},
"io.modelcontextprotocol/skills": {}
}
},
"clientInfo": { "name": "mcp-inspector", "version": "0.0.0" }
}

Response

The response contains:

  • jsonrpc version
  • protocolVersion from the MCP Server
  • Server capabilities such as logging and tools/listChanged
  • Server information including name, title, and version

{
"jsonrpc": "2.0",
"id": 0,
"result": {
"protocolVersion": "2025-11-25",
"capabilities": { "logging": {}, "tools": { "listChanged": true } },
"serverInfo": {
"name": "chrome_devtools",
"title": "Chrome DevTools MCP server",
"version": "1.10.1"
}
}
}

The notifications/initialized request that follows does not contain an id and does not have a response.

After that, MCP Inspector requests:

  • tools/list
  • resources/list
  • prompts/list



The First Call: tools/list

Request

Each request includes metadata with a progressToken, which is automatically incremented by 1.

{
"_meta": {
"progressToken": 1
}
}


MCP in the Latest Protocol Versions

In the latest MCP protocol versions (2026-07-28 and later), there is no /initialize handshake because MCP is stateless.

Every request carries:

  • Protocol version
  • Client information
  • Client capabilities

These are included within the _meta fields.

Clients discover server capabilities using the mandatory server/discover request.

But How Does the Server Notify Clients When Things Change?

Servers that support the listChanged capability notify clients whenever their offerings change.

Notifications include:

notifications/tools/list_changed
notifications/resources/list_changed
notifications/prompts/list_changed


Important Note

ChromeDevTools MCP exposes the content of the browser instance to MCP clients, allowing them to inspect, debug, and modify data within the browser or DevTools.

Avoid sharing sensitive or personal information that you do not want MCP clients to access.

Performance tools may send trace URLs to the Google CrUX API to fetch real-user experience data.

To disable this behavior:

--no-performance-crux

Google also collects usage statistics to improve Chrome DevTools MCP.

To opt out:

--no-usage-statistics

For more details:

https://github.com/ChromeDevTools/chrome-devtools-mcp#usage-statistics


My First Test with the new_page Tool

I performed my first test using the new_page tool.

Request

The request contains:

  • name (tool name)
  • arguments (parameters passed to the tool)
  • _meta with progressToken

Response

The response contains a result object with a content array.

The content array contains objects with:

  • type
  • text
Note: There can be structuredContent which is optional one.


Types of Errors in MCP

There are two types of errors in MCP:

1. Protocol Error

These occur when there is an issue with the MCP protocol request itself.

2. Tool Execution Error

These occur while executing a tool.

When an incorrect request is sent, a normal response is still returned, but with:  `isError: true. `

{
"jsonrpc": "2.0",
"id": 4,
"result": {
"content": [
{
"type": "text",
"text": "Unknown arguments for tool"
}
],
"isError": true
}
}



When the model receives this response along with the error message, it can use that information, together with elicitation, to retry or adjust. 

(Elicitation =The server requests additional input from the user via the client)


Final Thoughts

This small exercise helped me understand how MCP clients and servers interact.

By simply observing the requests exchanged by MCP Inspector, I was able to see:

  • How initialization works
  • How tools, resources, and prompts are discovered
  • How tool requests are structured
  • How responses are returned
  • How MCP handles errors
  • How clients are notified when tools, resources, or prompts change

Watching the actual traffic gives a much clearer picture of MCP than just reading the specification. It helped me understand the interactions and response patterns in a much more practical way.

Popular Posts

JMeter Producing Error: Windows RegCreateKeyEx(...) returned error code 5

Understanding about Contract Testing