Tool tree
gradeNot graded
read_workbenchAnswer
Inspect the data currently loaded in the Toolsmith workbench: its column names, row count, and a few sample rows. Call this FIRST, before forging a tool, so the code you write matches the real column names.
View tool JSON
{
"name": "read_workbench",
"kind": "answer",
"impl": "imperative",
"description": "Inspect the data currently loaded in the Toolsmith workbench: its column names, row count, and a few sample rows. Call this FIRST, before forging a tool, so the code you write matches the real column names.",
"inputSchema": {
"type": "object",
"properties": {
"sample_rows": {
"type": "integer",
"description": "How many sample rows to return (default 3, max 20)."
}
}
},
"page": "/toolsmith/"
}forge_toolAction
Create a BRAND NEW WebMCP tool on this page and expose it to yourself. Use this whenever you need a capability this page does not already have — do not apologise for a missing tool, forge it. The `code` you pass is the BODY of a JavaScript function with the signature (input, data, helpers) and it must RETURN a JSON-serialisable value. • input — the arguments the caller passes, matching input_schema • data — the workbench rows, as an array of plain objects (call read_workbench first) • helpers — { today(), parseDate(v), daysUntil(v), num(v), sum(arr), groupBy(rows,key), sortBy(rows,key,dir) } The code runs in a locked-down Web Worker: there is NO network, NO DOM, NO storage, and a 3 second limit. Write pure computation only. Unless the human has switched on auto-approve, the forged tool starts in a PENDING state: a person reads your code and clicks Approve before it is registered. Tell the user to look at the Forge panel.
View tool JSON
{
"name": "forge_tool",
"kind": "act",
"impl": "imperative",
"description": "Create a BRAND NEW WebMCP tool on this page and expose it to yourself. Use this whenever you need a capability this page does not already have — do not apologise for a missing tool, forge it.\nThe `code` you pass is the BODY of a JavaScript function with the signature (input, data, helpers) and it must RETURN a JSON-serialisable value.\n • input — the arguments the caller passes, matching input_schema\n • data — the workbench rows, as an array of plain objects (call read_workbench first)\n • helpers — { today(), parseDate(v), daysUntil(v), num(v), sum(arr), groupBy(rows,key), sortBy(rows,key,dir) }\nThe code runs in a locked-down Web Worker: there is NO network, NO DOM, NO storage, and a 3 second limit. Write pure computation only.\nUnless the human has switched on auto-approve, the forged tool starts in a PENDING state: a person reads your code and clicks Approve before it is registered. Tell the user to look at the Forge panel.",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Tool name: letters, digits, underscore or dash, 1-64 chars."
},
"description": {
"type": "string",
"description": "What the tool does and when to call it, written for another agent to read."
},
"input_schema": {
"type": "string",
"description": "A JSON Schema object for the arguments, given as a JSON string. Use {\"type\":\"object\",\"properties\":{}} if it takes none."
},
"code": {
"type": "string",
"description": "The JavaScript function body. Must return a value."
}
},
"required": [
"name",
"description",
"code"
]
},
"page": "/toolsmith/"
}list_forged_toolsAnswer
List every tool forged on this page, with its current status (pending, live, retired) and how many times it has been called. Use it to check whether a tool you forged has been approved yet.
View tool JSON
{
"name": "list_forged_tools",
"kind": "answer",
"impl": "imperative",
"description": "List every tool forged on this page, with its current status (pending, live, retired) and how many times it has been called. Use it to check whether a tool you forged has been approved yet.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/toolsmith/"
}revise_toolAction
Replace the code and/or schema of a tool that was already forged. A live tool is unregistered and returns to PENDING so a human re-approves the new version — the same review gate as forging. Use this when a tool you wrote threw an error or returned the wrong shape.
View tool JSON
{
"name": "revise_tool",
"kind": "act",
"impl": "imperative",
"description": "Replace the code and/or schema of a tool that was already forged. A live tool is unregistered and returns to PENDING so a human re-approves the new version — the same review gate as forging. Use this when a tool you wrote threw an error or returned the wrong shape.",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"code": {
"type": "string",
"description": "New function body. Omit to keep the current one."
},
"input_schema": {
"type": "string",
"description": "New JSON Schema as a JSON string. Omit to keep the current one."
},
"description": {
"type": "string"
}
},
"required": [
"name"
]
},
"page": "/toolsmith/"
}retire_toolAction
Permanently unregister a forged tool. Toolsmith aborts the AbortSignal the tool was registered with, so it disappears from document.modelContext immediately and can no longer be called by anyone.
View tool JSON
{
"name": "retire_tool",
"kind": "act",
"impl": "imperative",
"description": "Permanently unregister a forged tool. Toolsmith aborts the AbortSignal the tool was registered with, so it disappears from document.modelContext immediately and can no longer be called by anyone.",
"inputSchema": {
"type": "object",
"properties": {
"name": {
"type": "string"
}
},
"required": [
"name"
]
},
"page": "/toolsmith/"
}