15 tools registered. Strongest in tool selection, weakest in trust.
describe_current_state: description is 697 characters, over Chrome's 500-character guidance; add_widget: 1 parameter has no description (title); bind_data: 1 parameter has no description (fields); add{
name: "describe_current_state",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}describe_current_state, read_widget_data, get_activity_log{
name: "describe_current_state",
// Declare readOnlyHint: true on tools that truly have no side effects -
// that is the claim that lets an agent relax confirmation on reads.
// (false is the default, so declaring it adds no information.)
annotations: { readOnlyHint: true }
}describe_current_state: Description instructs agent how to behave; add_widget: Description instructs agent on tool preference and usage; add_rows: Description instructs agent on required actions and prohibitions; create_form_tool: Description instructs agent on required actions and prohibitions{
name: "describe_current_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": "describe_current_state",
"description": "Returns the board snapshot plus unfinished. Empty tables, kanban, and checklists need add_rows (or bind_data first). A form with fields but no minted tool needs create_form_tool. add_rows does not mint. Also: title, theme, widgets (id, type, title, position, config, fields, rowCount, sample rows), mintedTools, last 10 activity entries, stateVersion, and humanChangesSinceLastDescribe: every human create, rename, drag, edit, delete, undo, or sample-load command since your last call, newest first with undone state. Read it before reorganizing so you build on their changes rather than over them. Pass stateVersion as expectedStateVersion on your next static mutation; STALE_STATE means re-read.",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"properties": {
"include_sample_rows": {
"default": true,
"description": "Set false to omit sample rows for a smaller response.",
"type": "boolean"
}
},
"additionalProperties": false
},
"annotations": {}
}usable: weak; clarity: weak; obstruction: 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;
}describe_current_state: description is 697 characters, over Chrome's 500-character guidance; add_widget: 1 parameter has no description (title); bind_data: 1 parameter has no description (fields); add{
name: "describe_current_state",
inputSchema: {
type: "object",
properties: {
query: { type: "string", description: "What to search for" }
},
required: ["query"]
}
}{ name: "bind_data" /* short, unique, verb-based */ }describe_current_state, read_widget_data, get_activity_log{
name: "describe_current_state",
// Declare readOnlyHint: true on tools that truly have no side effects -
// that is the claim that lets an agent relax confirmation on reads.
// (false is the default, so declaring it adds no information.)
annotations: { readOnlyHint: true }
}describe_current_state: Description instructs agent how to behave; add_widget: Description instructs agent on tool preference and usage; add_rows: Description instructs agent on required actions and prohibitions; create_form_tool: Description instructs agent on required actions and prohibitions{
name: "describe_current_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."
}{}{
"type": "table",
"title": "New Widget"
}{
"widgetId": "w_x8Kd2q",
"fields": [
{
"key": "field_name",
"label": "Field Name",
"type": "text"
}
]
}