craft-ts-runtime-change-web-mcp

Inspect, override, and mutate craft-ts primitive runtime state through the registry MCP bridge.

3|Updated Jan 9, 2026
One-click install
npx skills add https://github.com/craft-ts/craft-ts --skill craft-ts-runtime-change-web-mcp-craft-ts
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: craft-ts-runtime-change-web-mcp
Source: https://github.com/craft-ts/craft-ts/tree/main/.agents/skills/craft-ts-runtime-change-web-mcp
Command: npx skills add https://github.com/craft-ts/craft-ts --skill craft-ts-runtime-change-web-mcp-craft-ts

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Changing the behavior of a running craft-ts application normally requires editing TypeScript and reloading the page. This Skill lets you explain, inspect, call, override, restore, and directly mutate primitive values (state, query, asyncProcess, mutation, queryParams) in a live browser tab through the function-registry MCP bridge, without touching source code. ## Core Features & Use Cases - Runtime method overrides: Replace an insertion method's implementation at runtime with a JavaScript expression via registry.override, then restore the original with registry.restore. - Direct primitive value mutation: Read and modify root query, asyncProcess, mutation, and queryParams values with registry.query.*, registry.mutation.*, registry.asyncProcess.*, and registry.queryParams.* tools, including grouped primitives targeted by id. - Diagnosis and observability: Inspect entries with registry.list/registry.get, audit structured events with registry.logs, and diagnose failures such as missing capabilities, disconnected clients, or invalid override sources. - Use Case: A developer wants the displayed query list in the demo app to show renamed rows without reloading the page. The Skill selects the browser client, finds the root query entry, and calls registry.query.update with a mapping function, returning the post-mutation list immediately. ## Quick Start Use the craft-ts-runtime-change-web-mcp skill to rename every row in the currently displayed query list without reloading the page.

Frequently Asked Questions about craft-ts-runtime-change-web-mcp

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I override a method in a running craft-ts app without reloading?▼

Call registry.clients to pick the browser tab, registry.list to find the method entry, then registry.override with a JavaScript expression that evaluates to a function receiving args and the primitive capability. The override lives in browser memory until a full page reload.

How do I change the displayed query list at runtime?▼

Select the client, find the root query entry with registry.list, read it with registry.get, then call registry.query.update with a mapping function such as current.map(item => ({...item, name: `AI ${item.name}`})). The return value is the post-mutation list.

What is the difference between registry.call and registry.override?▼

registry.call executes an existing registry entry once without changing future behavior. registry.override replaces what the method does on every subsequent invocation until you call registry.restore or reload the page.

Why does registry.override fail with 'does not expose primitive runtime capabilities'?▼

The selected entry is not a supported insertion method for state, insertSelect, query, asyncProcess, mutation, or queryParams. Use registry.list and registry.get to pick an entry whose capabilities include a primitive context.

Can I mutate a grouped query instance by id?▼

Yes. Read registry.get and pick an exact value from primitive.ids, then pass it as id to registry.query.get/set/update/patch, equivalent to queryRef.select(id). An id like '1-4' identifies one query instance, not list items.

What happens to overrides when the page reloads or the component is destroyed?▼

A full page reload clears all overrides because they live in browser memory. Component destruction removes the entry, and since recreated components get a new counter suffix in their key, they do not inherit the old override.