@ikenga/mcp-iyke · v0.2.1 · Apache-2.0
Let the agent you already use drive your workspace.
Any MCP client — Claude Code, Cursor, or your own tool — can navigate panes, read workspace state, inspect logs, and interact with the UI. The agent and the workspace share a wire.
You ask Claude Code to set something up, it completes the task, and you switch to the desktop app to check the result. Then you switch back. Then back again. Two windows, two contexts, a constant seam. @ikenga/mcp-iyke closes that seam.
The agent reads what's on screen
iyke_state returns the current sidebar mode, the focused pane's route, and the
full pane tree. iyke_dom returns an accessibility-tree snapshot of the focused
pane — the same structure Playwright uses to identify elements.
iyke_screenshot returns a PNG of the window or a specific pane.
The agent can see where you are and what's in front of you — without you describing it.
The agent navigates
iyke_go navigates the focused pane to any route. iyke_split opens
a second (or third) pane, horizontally or vertically. iyke_focus switches
which pane is active by id or by 1-based index. iyke_mode switches the sidebar
activity mode. iyke_open opens a new tab — a route, a chat, an artifact, a
mini-app.
The agent interacts with UI elements
iyke_click, iyke_type, and iyke_key let the agent
interact with elements the same way a user would. iyke_wait blocks until a
condition is met: text appears, a selector resolves, a ref goes away.
This is useful for driving pkgs that don't have their own API surface — the agent can work with the visual UI directly.
The agent inspects the runtime
iyke_logs returns the last 500 console and error log entries from the running
webview. iyke_network returns the last 100 fetch/XHR entries with status and
duration. iyke_query_cache dumps the TanStack Query cache for the focused pane.
When the agent is debugging a pkg, it can read the evidence without you opening DevTools.
The agent talks to iframe pkgs
iyke_iframe_state reads the latest state published by an iframe pkg (like
Tasks). iyke_iframe_send fires a postMessage into a pkg pane. Pkgs that expose
structured state become legible to the agent without a custom API.
Full tool list
Layout & navigation
| Tool | What it does |
|---|---|
iyke_state | Current sidebar mode + focused pane route + full pane tree |
iyke_go | Navigate the focused pane to a route path |
iyke_mode | Switch sidebar activity mode |
iyke_open | Open a new tab (route, terminal, chat, artifact, mini-app) |
iyke_split | Split a pane horizontally or vertically |
iyke_focus | Focus a pane by id or 1-based DFS leaf index |
iyke_close | Close a pane (focused pane if pane_id omitted) |
Runtime inspection & interaction
| Tool | What it does |
|---|---|
iyke_dom | Accessibility-tree snapshot of the focused pane |
iyke_logs | Last 500 console + error log entries from the webview |
iyke_network | Last 100 fetch/XHR network entries with status + duration |
iyke_screenshot | PNG of the window or a specific pane |
iyke_wait | Wait until a predicate is satisfied (text / selector / ref / gone) |
iyke_click | Click an element by ref, selector, or text |
iyke_type | Type into an input, textarea, or contenteditable |
iyke_key | Dispatch a keyboard combo (e.g. Ctrl+S, Meta+K) |
iyke_query_cache | Dump TanStack Query cache for the focused pane |
iyke_devtools | Open Chrome DevTools (debug builds only) |
Iframe pkg state
| Tool | What it does |
|---|---|
iyke_iframe_state | Read the latest published state from an iframe pane |
iyke_iframe_send | Fire a postMessage to an iframe pane |
Install
Via Claude Code (recommended)
Install once, and every Claude Code session on your machine has the iyke_*
tools available. The shell doesn't need to be running for the install itself — the tools
report a structured error until the app is open.
npm install -g @ikenga/mcp-iyke Then register with Claude Code:
claude mcp add iyke -s user -- iyke-mcp Via npx (no global install)
claude mcp add iyke -s user -- npx -y @ikenga/mcp-iyke As an Ikenga package
When installed as a pkg, the shell manages the MCP server's lifecycle — it starts when the shell starts and registers itself with whatever engine (Claude Code, Gemini, Codex) is active.
ikenga add com.ikenga.mcp-iyke Requires the Ikenga shell. Get Ikenga →
Trust boundary
@ikenga/mcp-iyke reads control.json from your app-local-data
directory — macOS: ~/Library/Application Support/app.ikenga/control.json;
Linux: $XDG_DATA_HOME/app.ikenga/control.json;
Windows: %APPDATA%/app.ikenga/control.json.
The file contains the localhost port, the bearer token, and the owning PID. The MCP server
talks only to 127.0.0.1 on that port, with that token. No outbound network
calls, no telemetry.
If the Ikenga app isn't running, every tool call returns a structured error immediately —
it does not hang. Stale control.json files (left behind by a force-quit) are
auto-deleted once they are at least 5 minutes old. Younger stale files are reported rather
than silently overwritten, to avoid clobbering an app that is still starting up.
Works with
| Requires | Ikenga shell running (any version exposing the v1 control bridge) |
|---|---|
| MCP clients | Claude Code (claude mcp add), Cursor, any MCP-compatible client |
| Node.js | ≥ 20 |
| Bun | Runs without compilation (bun src/index.ts) |
| Network | Loopback only — 127.0.0.1 on the port from control.json |
| Published on | npm — @ikenga/mcp-iyke |
Apache-2.0. Read the license · Source on GitHub