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:
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.
Response
The response contains:
jsonrpcversionprotocolVersionfrom the MCP Server- Server capabilities such as
loggingandtools/listChanged - Server information including name, title, and version
The notifications/initialized request that follows does not contain an id and does not have a response.
After that, MCP Inspector requests:
tools/listresources/listprompts/list
The First Call: tools/list
Request
Each request includes metadata with a progressToken, which is automatically incremented by 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:
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:
Google also collects usage statistics to improve Chrome DevTools MCP.
To opt out:
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)_metawithprogressToken
Response
The response contains a result object with a content array.
The content array contains objects with:
typetext
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. `
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.