# Ikenga iyke (control bridge) (npm · @ikenga/mcp-iyke)

Drive a running Ikenga desktop app from MCP clients — DOM, click, type, navigate, screenshot.

- Trust score: 66/100 (medium)
- Change this week: +23
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@ikenga/mcp-iyke`: 66/100 (this document), [markdown](https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke.md), [page](https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke)

## Channel facts

- Registry: `npm`
- Package: `@ikenga/mcp-iyke`
- Version: `0.1.2`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (96 of 100), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 58 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 70/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1526 tokens (~80/item across 19 items; 19 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 76/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 29% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add royalti-io-ikenga-pkg-mcp-iyke -- npx -y @ikenga/mcp-iyke
```

### Codex

```bash
codex mcp add royalti-io-ikenga-pkg-mcp-iyke -- npx -y @ikenga/mcp-iyke
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "royalti-io-ikenga-pkg-mcp-iyke": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ikenga/mcp-iyke"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add royalti-io-ikenga-pkg-mcp-iyke --command npx --arg -y --arg @ikenga/mcp-iyke
```

### Hermes

```yaml
mcp_servers:
  royalti-io-ikenga-pkg-mcp-iyke:
    command: "npx"
    args: ["-y", "@ikenga/mcp-iyke"]
```

### Other

```json
{
  "mcpServers": {
    "royalti-io-ikenga-pkg-mcp-iyke": {
      "command": "npx",
      "args": [
        "-y",
        "@ikenga/mcp-iyke"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 66, +4)

- [functional improvement] Stability: unverified → 0.27

### 2026-08-02 (score 62, +5)

- [security regression] Known CVEs: partial → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Security disclosure: fail → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Dependency health: partial → unverified
- [functional improvement] Schema quality: unverified → good

### 2026-08-01 (score 57, +38)

- [security regression] Provenance: unverified → fail
- [security improvement] Malware scan: unverified → pass
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] MCP protocol: unverified → pass
- [functional] Licence: Apache-2.0

### 2026-07-31 (score 19, −24)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 43)

First indexed and scored.

## MCP tools (19)

### `iyke_state` (~121 tokens)

Get the current state of the Ikenga desktop app — sidebar mode, focused pane route, and the full pane tree under shell.panes. shell.panes has shape { leaves: [{ id, focused, activeTabIdx, tabs: [{kind,title}] }], tree: <recursive PaneNode> }; use leaves[].id with iyke_focus or iyke_close (pane_id) to operate on a specific pane. Call this before iyke_go / iyke_mode / iyke_focus / iyke_close to check what the user is currently looking at.

### `iyke_go` (~77 tokens)

Navigate the focused pane to a route path inside the Ikenga desktop app (e.g. "/notes/today"). Path must start with "/". This replaces the focused pane's active tab content; use iyke_open with kind=route to add a new tab instead.

Input parameters:

- `path` (string, required): Route path, must start with "/".

### `iyke_mode` (~60 tokens)

Switch the activity-bar sidebar mode. Valid modes: app, files, agents, sessions, settings, storyboard, video-engine, canvas-design, image-generator. The first five are core; the rest are mini-apps.

Input parameters:

- `mode` (string, required)

### `iyke_open` (~128 tokens)

Open a new tab in the focused pane. `kind` selects the view type. For "route" pass `path`; "terminal" optionally `cmd` (a shell command string); "chat" requires `session_id`; "artifact" requires `path`; "mini-app" requires `name`.

Input parameters:

- `cmd` (string): For terminal kind. Omit for default login shell.
- `kind` (string, required)
- `name` (string): For mini-app kind.
- `path` (string): For route or artifact kinds.
- `session_id` (string): For chat kind.

### `iyke_split` (~76 tokens)

Split the focused pane (or a specific pane via pane_id) into two. "horizontal" splits side-by-side; "vertical" splits top-bottom. Subject to the in-app MAX_LEAVES cap (currently 6).

Input parameters:

- `direction` (string, required)
- `pane_id` (string): Optional. Defaults to focused pane.

### `iyke_focus` (~74 tokens)

Focus a specific pane. Provide either pane_id (leaf id from iyke_state response — shell.panes.leaves[].id) or index (1-based DFS leaf index, matching the in-app ⌃1..⌃6 keyboard shortcuts).

Input parameters:

- `index` (integer)
- `pane_id` (string)

### `iyke_close` (~82 tokens)

Close a pane (or the focused pane if pane_id omitted). Closes the entire pane and all its tabs — to close a single tab from the in-app keyboard, use ⌘⇧W (⌘W closes the whole pane). Refuses to close the last remaining pane.

Input parameters:

- `pane_id` (string): Optional. Defaults to focused pane.

### `iyke_dom` (~120 tokens)

Take an accessibility-tree snapshot of the focused pane. Returns Playwright-style text plus structured JSON. Each interactive element gets a stable ref like e1, e2; pass that ref to iyke_click / iyke_type / iyke_key. Refs invalidate on the next snapshot or page navigation. Use `query` for substring filter, `all=true` to include hidden elements.

Input parameters:

- `all` (boolean): Include hidden + aria-hidden elements.
- `pane` (string)
- `query` (string): Substring filter against role/name/value.

### `iyke_logs` (~76 tokens)

Read recent console + error logs (last 500) from the running webview. Includes window error and unhandledrejection captures.

Input parameters:

- `level` (string)
- `since` (integer): Only entries with ts >= this (epoch ms).
- `source` (string): Filter by pane source ("shell" or leaf id).

### `iyke_network` (~54 tokens)

Read recent fetch + XHR network activity (last 100). Each entry has method, url, status, duration_ms, and error if it failed.

Input parameters:

- `since` (integer)
- `source` (string)

### `iyke_screenshot` (~79 tokens)

Capture a PNG screenshot of either the full window or a specific pane. Returns the saved path, dimensions, and byte count. Default writes to ~/.local/share/ikenga/screenshots/.

Input parameters:

- `out_path` (string): Override default output path.
- `pane_id` (string): Required when target=pane.
- `target` (string)

### `iyke_wait` (~82 tokens)

Wait until a predicate is satisfied or timeout. Use this after iyke_click / iyke_go to wait for the new state to render, instead of fixed sleeps. Returns { satisfied, elapsed_ms, message? }.

Input parameters:

- `kind` (string, required)
- `pane` (string)
- `timeout_ms` (integer)
- `value` (string, required)

### `iyke_click` (~75 tokens)

Click an element. Specify exactly one of `ref` (from iyke_dom), `selector` (CSS), or `text` (innerText match). Refs are most reliable.

Input parameters:

- `pane` (string)
- `ref` (string)
- `selector` (string)
- `text` (string)

### `iyke_type` (~82 tokens)

Type text into an input/textarea/contenteditable element. Specify exactly one of `ref` or `selector`. By default appends; pass `replace=true` to overwrite the existing value.

Input parameters:

- `pane` (string)
- `ref` (string)
- `replace` (boolean)
- `selector` (string)
- `text` (string, required)

### `iyke_key` (~105 tokens)

Dispatch a keyboard combo. Use names like "Enter", "Escape", "Tab", "ArrowDown", and modifiers Ctrl/Alt/Shift/Meta separated by + or , (e.g. "Ctrl+S", "Meta+K"). Optional `ref`/`selector` targets a specific element; otherwise the active element receives.

Input parameters:

- `combo` (string, required)
- `pane` (string)
- `ref` (string)
- `selector` (string)

### `iyke_query_cache` (~67 tokens)

Dump the TanStack Query cache: queryKey, status, fetchStatus, isStale, dataUpdatedAt, errorUpdatedAt, error, and a 200-char data preview for each entry. Useful for diagnosing stale data or failed fetches.

Input parameters:

- `pane` (string)

### `iyke_devtools` (~31 tokens)

Open Chrome DevTools for the main webview (debug builds only). Returns 503 in production builds.

### `iyke_iframe_state` (~61 tokens)

Read the latest published state object for an iframe pane (storyboard cursor, comp current frame, etc.). Iframes call publishState(key, value) from their iyke-bridge to expose runtime state for inspection.

Input parameters:

- `pane` (string, required)

### `iyke_iframe_send` (~76 tokens)

Send a fire-and-forget postMessage to an iframe pane. The iframe bridge listens for known kinds (e.g. "story-select") and acts on the payload. Use to drive mini-app actions from outside the running app.

Input parameters:

- `kind` (string, required)
- `pane` (string, required)
- `payload`

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 62
- 2026-08-01: 57
- 2026-07-31: 19
- 2026-07-30: 43
- 2026-07-28: 43
- 2026-07-27: 43

## Links

- npm package: https://www.npmjs.com/package/@ikenga/mcp-iyke
- Socket report: https://socket.dev/npm/package/@ikenga/mcp-iyke
- Repository: https://github.com/Royalti-io/ikenga-pkg-mcp-iyke
- Changelog RSS feed: https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke/changelog.json
- HTML version of this page: https://verifymcp.io/servers/royalti-io-ikenga-pkg-mcp-iyke/ikenga-mcp-iyke
