10 tools registered. Strongest in tool quality, weakest in task completion.
get_match_state: description is 509 characters, over Chrome's 500-character guidance; get_match_state: declares no required list, so an agent cannot tell which parameters are mandatory; play_mcpencil:{
name: "get_match_state",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}get_match_state: Description instructs agent how to behave and what to read; play_mcpencil: Description instructs agent when to call and how to continue; configure_match: Description instructs agent when to call and what values to send; start_match: Description instructs agent when to start{
name: "get_match_state",
// Metadata DESCRIBES the tool - it never addresses the agent reading it.
// Rewrite any name, description, title, or schema field description that
// instructs the agent (which tool to prefer, what to output, rules to
// ignore) so it states what the tool does and what it returns instead.
description: "Searches the catalog and returns matching items with prices."
}{
"name": "get_match_state",
"description": "Canonical page-exposed WebMCP continuation state. Before joining, it identifies play_mcpencil as the entry action. After joining, read role, mustContinue, completionCondition, exact nextAction, urgency, deadline, and the privatePrompt when you are the agent artist. Between turns, pass afterRevision and waitMs 25000. Guessers should visually inspect the rendered page/canvas as the primary picture; canvasPerception is a fast 32x22 text raster fallback and compact canvasGeometry is only a final cross-check.",
"inputSchema": {
"type": "object",
"properties": {
"afterRevision": {
"type": "integer",
"minimum": 0,
"description": "Optional last revision; wait for something newer."
},
"waitMs": {
"type": "integer",
"minimum": 0,
"maximum": 25000,
"description": "Optional wait for a newer revision. Use 25000 between turns."
}
},
"additionalProperties": false
},
"annotations": {
"readOnlyHint": true,
"untrustedContentHint": true
}
}usable: weak; clarity: weak// Make the tool's effect visible on the page the person is looking at:
// update the same UI your existing human flow uses when your_tool_name runs,
// so the person co-browsing sees what the agent just did.
execute: async (args, { signal }) => {
const result = await performAction(args, signal);
renderResultInPage(result); // the human-visible half of the same action
return result;
}get_match_state: description is 509 characters, over Chrome's 500-character guidance; get_match_state: declares no required list, so an agent cannot tell which parameters are mandatory; play_mcpencil:{
name: "get_match_state",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}{ name: "play_mcpencil" /* short, unique, verb-based */ }get_match_state: Description instructs agent how to behave and what to read; play_mcpencil: Description instructs agent when to call and how to continue; configure_match: Description instructs agent when to call and what values to send; start_match: Description instructs agent when to start{
name: "get_match_state",
// Metadata DESCRIBES the tool - it never addresses the agent reading it.
// Rewrite any name, description, title, or schema field description that
// instructs the agent (which tool to prefer, what to output, rules to
// ignore) so it states what the tool does and what it returns instead.
description: "Searches the catalog and returns matching items with prices."
}{}{}{}