Connection sequence
Configure the remote URL and the authorization flow described in authentication. Let the client library negotiate the protocol and manage the connection. Discover tools withtools/list, then call a tool with its advertised arguments.
The service in this edition uses a session-based MCP implementation. With that protocol family, the client initializes the connection, sends the initialized notification, and retains a returned session identifier. Do not assume that every later MCP protocol revision is supported by this service.
For a session-based connection, this is an example tool-call message after initialization:
curl. See the session-based Streamable HTTP specification.
Read the result at both levels
An MCP result may carry structured data, text content containing JSON, or a tool error. Inspect the outerisError flag and the decoded IQRush payload’s error field. A successful HTTP response alone does not mean the measurement succeeded.
The report starter includes read_result.py, a small decoder for MCP tool result objects. It handles a JSON text result as well as structured content and refuses to turn a tool error into data.
Discover instead of guessing
Usetools/list as the runtime contract for parameter names and types. Most measurement tools accept arrays for filters and group_by. Some analytical tools instead accept a JSON-encoded string. In particular, for get_paired_contrast.filters, send the filter array encoded as a string; do not pass a native array to that argument in this edition.
Keep the selected project and run in your application’s own request context. An assistant conversation does not make those IDs optional. Include them in every call that requires them.
Tool annotations may prompt the host to request confirmation. The declared annotations in this edition are conservative; do not classify a tool’s business behavior solely from its readOnlyHint. The tool references describe the actual operation.