MCP.Market

Ikenga iyke (control bridge) MCP server

by ikenga.dev·dev.ikenga/mcp-iyke·v0.2.3

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

A86/100grade A
What users say
No reviews yet
Be the first
Safety scan
A86/100

full report

Adoption
Growing

0 stars140 downloads/wk

Reviews

Write one

Nobody has reviewed Ikenga iyke (control bridge) yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Ikenga iyke (control bridge) tools (76, 14 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • iyke_agent_register

    Register this agent so locks and timers can attribute work to it. Returns an opaque id. Pass the id as holder to iyke_lock_acquire. Repeated calls with the same {id} bump last_seen_at; omit id to mint a new one.

  • iyke_chi_cancelwrite action

    Cancel a running chi agent run by run_id.

  • iyke_chi_list

    List chi agent runs. Optionally filter by engine_id. Returns rows newest-first with runId, engineId, status, and brief.

  • iyke_chi_resume

    Continue an existing chi agent run with a new prompt. Requires run_id from a previous iyke_chi_run or iyke_chi_list.

  • iyke_chi_runwrite action

    Start a new chi agent run against an engine. Returns { runId, status, output?, error? }. Use iyke_chi_status to poll for output. engine_id examples: claude-code, gemini, codex. mode controls permissions: plan, default, auto, bypassPermissions.

  • iyke_chi_status

    Get the current status and output of a chi run. Returns { runId, engineId, status, output?, error?, brief? }. Poll periodically after iyke_chi_run.

  • iyke_claude_asset_list_pins

    List Claude-config asset pins for a scope. Scope is "workspace" (cross-project) or "project:<id>" (this project only). Returns one entry per pin with preferred_tier + preferred_source.

  • iyke_claude_asset_pin

    Pin a preferred provider for a Claude-config asset name in a scope. When discovery finds the same asset name in multiple tiers (e.g. a `code-reviewer` agent in both ~/.claude/ and a project pkg), the lowest tier wins by default; a pin overrides that. Scope is "workspace" (cross-project) or "project:<id>" (this project only). preferred_tier is one of personal | workspace_pkg | project | project_pkg

  • iyke_claude_asset_unpinwrite action

    Remove a pinned resolution. Falls back to the default lowest-tier-wins rule.

  • iyke_claude_assets_list

    List Claude-config assets (skills, agents, commands, hooks, mcps) discovered for a project, grouped by provider tier. Returns a tree where each asset name maps to one or more AssetSource entries; multiple entries on the same name indicate a conflict between tiers. Defaults to the active project; pass project_id to query a specific one. Use this to see what an agent will actually load in a project

  • iyke_click

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

  • iyke_close

    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.

  • iyke_devtools

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

  • iyke_dom

    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.

  • iyke_focus

    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).

  • iyke_go

    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.

  • iyke_iframe_sendwrite action

    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.

  • iyke_iframe_state

    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.

  • iyke_key

    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.

  • iyke_kv_deletewrite action

    Delete a KV entry. Idempotent.

  • iyke_kv_get

    Read a JSON value at scope+key. Returns { key, value: null } if absent (200, not 404).

  • iyke_kv_list

    List KV entries in a scope. `prefix` filter narrows by key prefix.

  • iyke_kv_set

    Store a small JSON value at scope+key. Cap 64 KB per value; cap 1 MB total per scope. For larger durable text, use scratchpads. Scope defaults to active project.

  • iyke_layout_get

    Get the saved layout (pane tree, files-explorer state, panel sizes) for a project. Returns the raw layout_state row contents — each field is the JSON the shell wrote, or null when nothing has been saved for that key. Defaults to the active project; pass project_id to query a specific one. Useful for the conductor pattern (an agent inspecting "what does this project look like to the user").

  • iyke_layout_reset

    Reset a project's saved layout — deletes the pane tree, files-explorer state, and panel sizes rows. Next time the user (or anyone) switches to this project, the layout-swap orchestrator finds no saved state and leaves the current view in place. Use this to recover from a wedged layout or as part of a clean-slate workflow.

  • iyke_lock_acquire

    Acquire a project-scoped lease lock on a named resource. Use for short-lived coordination around shared files, plans, migrations. holder is the agent id from iyke_agent_register. ttl_ms defaults to 60000 (clamped to [1000, 600000]). If wait_ms is set, blocks up to that long for an existing lock to expire.

  • iyke_lock_release

    Release a lock you hold. No-op if held by someone else or already expired.

  • iyke_lock_renew

    Extend a lock you hold by ttl_ms. Useful for long-running work that needs more time than the original lease.

  • iyke_lock_status

    Check whether a resource is currently locked (active leases only). Returns held=false if the lease has expired.

  • iyke_logs

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

  • iyke_mcp_list

    List MCP servers visible from a project. Returns each (server name × source) pair so conflicts across tiers are surfaced separately. Each entry reports: source tier (personal | workspace_pkg | project | project_pkg), provider (pkg id or "personal"), lifecycle (long-lived | per-call | on-demand), live state (running / parked / crashed / blocked / not-started / on-demand), and the source file path.

  • iyke_mcp_restart

    Restart a supervised MCP server by pkg id. Restarts every long-lived MCP entry the pkg declares (the supervisor keys per pkg, not per server name). Useful when a child has wedged. Fails with 404 if the pkg is not supervised — per-call MCPs spawn fresh on every tool invocation and have nothing persistent to restart.

  • iyke_mode

    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.

  • iyke_network

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

  • iyke_open

    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` (a single .html file); "artifact-studio" requires `path` plus optional `density` (grid for a folder, loupe for a single artifact, compare for two — with a `vs` sibling path); "artifact-grid" is a ba

  • iyke_pa_actions_pause

    Pause a batch of drafted actions into the Ikenga approve gate for operator sign-off (ux_mode: approve). Call this INSTEAD of performing the side effect (sending an email, posting, etc.) once you have drafted the outgoing items: it writes them to the gate at /outbox/approvals where the operator edits + approves, then STOP — the operator's approval drives the real send, not you. Each draft's `payloa

  • iyke_pin_acknowledge

    Transition a pin from `open` to `in_progress`. Call this once you've read the pin and started working — the grid cell's pin dot flips to kola-amber so the user sees you're on it. Idempotent: later calls leave the existing `acknowledged_at` timestamp intact.

  • iyke_pin_read

    Fetch the full payload for an artifact-grid pin by id. The routing dispatcher pastes a short prompt referencing the pin id; call this tool to retrieve the structured context — artifact_path (the .html file on disk), selector (CSS selector inside the artifact iframe), text (the user's comment body), screenshot_path (local PNG of the targeted element, may be null), plus lifecycle stamps. Use the pat

  • iyke_pin_resolve

    Transition a pin to `resolved`. Call this after committing the change you set out to make — the grid cell's pin dot flips to verdigris (resolved). Users can also resolve manually from the grid right-click menu; this is the agent-initiated path for closing the loop without bouncing back to the human. Stamps `resolved_at` on first transition; idempotent on re-calls.

  • iyke_pkg_install_scope_set

    Change the scope of an installed pkg. scope="workspace" (always loaded) or "project:<id>" (loaded only when that project is active). Triggers a kernel reconcile so sidecars start/stop accordingly.

  • iyke_pkg_list

    List installed pkgs visible from the active project. Workspace-scoped pkgs are always included; project-scoped pkgs are included only when their project is active unless include_other_projects=true. Each entry: id, version, install_path, enabled, source, scope ("workspace" | "project:<id>"), active_now.

  • iyke_pkg_trust_list

    List trust state for every installed pkg. Returns one entry per pkg with state (auto_trusted / auto_granted / granted / needs_approval), declared sensitive permissions summary, and last grant timestamp when applicable. Use when surveying which third-party pkgs need user approval before their MCP tools can be invoked.

  • iyke_pkg_trust_status

    Get the trust state for a single installed pkg. Returns one of: auto_trusted (built-in com.ikenga.* shipped with the shell), auto_granted (no sensitive permissions declared), granted (user approved a specific manifest version), or needs_approval (sensitive perms declared but no current grant; either never approved, perms changed since last grant, or explicitly revoked). When state is needs_approva

  • iyke_pkg_uninstall

    Uninstall a pkg. Stops its sidecars, removes its registry entries, deletes its files. Project-scoped state in iyke_kv / iyke_scratchpads / iyke_todos survives. Builtins (com.ikenga.*) cannot be uninstalled.

  • iyke_pkg_violations_list

    List kernel-level permission-violation audit rows newest-first. Today only `shell.execute` denials write here (a pkg attempted to spawn a binary outside its manifest's declared allowlist). Returns one entry per attempt with attempted (the resolved command), declared (the manifest allowlist at attempt time, comma-joined), scope_kind ('shell.execute'), pkg_id, and occurred_at (unix millis). Pass pkg

  • iyke_project_archive

    Archive a project (soft-delete — sets archived_at, no data removed). The project disappears from the default switcher list but its sessions/pkgs/todos remain on disk and can be restored by a later iyke_project_update if needed. Refuses to archive the built-in "Default" project. If the archived project was active, the shell falls back to Default automatically.

  • iyke_project_createwrite action

    Create a new project in the Ikenga shell. Projects scope chats, installed pkgs, pane layouts, todos, scratchpads and cron jobs — switching project rebinds those surfaces. Slug `id` must match ^[a-z0-9][a-z0-9_-]{0,63}$ and be unique; `default` is reserved. `display_name` is freely Unicode, capped at 120 chars. `root_path` is optional but recommended — it becomes the cwd for new chats spawned insid

  • iyke_project_get_active

    Return the currently active project (id, display_name, root_path, icon, color, description, position, is_default, created_at). Call this before iyke_project_set_active or any project-scoped mutation so an agent knows which project the user is in.

  • iyke_project_list

    List projects in switcher order (position ASC, then created_at). Each entry has id, display_name, root_path, icon, color, description, position, is_default, created_at, archived_at. Archived projects are hidden by default — pass include_archived=true to surface them (e.g. when an agent is restoring an old project).

  • iyke_project_set_active

    Switch the shell's active project. Subsequent new chats, scratchpads, todos and pkg installs default to this project; existing project-scoped TanStack queries (sessions, pkgs, todos, scratchpads, cron) refetch automatically. Does NOT navigate panes — pane contents stay put until a phase-2/6-aware surface reads the new active id. Fails if the id is unknown or archived.

  • iyke_project_updatewrite action

    Patch fields on an existing project. Only the fields you pass in `patch` are touched — omit a field to leave it as is. Pass `null` to clear a nullable field (root_path, icon, color, description). `position` controls the project ordering in the activity-bar switcher (lower = earlier). Cannot change `id`; create a new project and migrate instead.

  • iyke_query_cache

    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.

  • iyke_scratchpad_append

    Append to a scratchpad without overwriting. Creates it if missing. `with_separator=true` (default) inserts a horizontal rule + timestamp between the prior body and the new content.

  • iyke_scratchpad_deletewrite action

    Delete a scratchpad by scope+name. Idempotent.

  • iyke_scratchpad_list

    List scratchpads in a scope (defaults to active project). Each entry has id, name, updated_at, and a 200-char preview.

  • iyke_scratchpad_read

    Read a scratchpad by scope+name. 404 if missing. Returns id, body, updated_at.

  • iyke_scratchpad_writewrite action

    Create or replace a project-scoped Markdown scratchpad. Use for plans, handoffs, working context that should outlive a chat. `scope` defaults to the active project (project:<active_id>); pass "workspace" or "pkg:<id>" to opt out. `name` is a slug unique within scope. Body cap 1 MB.

  • iyke_screenshot

    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/.

  • iyke_secret_deletewrite action

    Delete a secret from the given scope. Same scope semantics as iyke_secret_get. Returns ok even if the key did not exist. Does not touch the legacy unscoped key — to clean up legacy entries, delete the value at the unscoped key directly.

  • iyke_secret_get

    Read a secret from the vault. The scope arg partitions the read: omit it (or pass an empty string) to read from the active project; pass "workspace" to read a cross-project shared secret; pass "project:<id>" or "pkg:<id>" to target a specific partition. Returns the value as a string, or null when the key does not exist in the chosen scope. Falls back transparently to the legacy unscoped key when a

  • iyke_secret_list

    List secret KEY NAMES (not values) in a scope. Same scope semantics as iyke_secret_get. Returns sorted bare key names — the scope prefix is stripped. Use to inventory what secrets are stored in a project without revealing values.

  • iyke_secret_setwrite action

    Write a secret to the vault under the given scope (same scope semantics as iyke_secret_get). Triggers a re-dump of the runtime env-vault file so sidecars and per-call MCP children pick up the new value on next spawn. Use this sparingly — secrets are sensitive and the values land in the user's encrypted Stronghold snapshot.

  • iyke_session_list

    List Claude chat sessions. Filter by project (defaults to active); pass include_all=true to list across all projects. Returns at most 50 threads by default (max 200). Each entry has id, title, cwd, project_id, claude_session_id, created_at, updated_at.

  • iyke_session_move

    Move a chat thread between projects. Metadata-only — does not restart the claude subprocess. The cwd captured at spawn time stays whatever it was. Fails if the target project is unknown or archived.

  • iyke_session_start_in_project

    Mint a new Claude chat thread attached to a project. The shell resolves the project root as the session cwd, builds the layered Claude-config overlay dir (skills + agents + commands + merged .mcp.json) for the spawn, and routes the request through the ACP `session/new` handler. Returns the new thread_id; the actual subprocess spawns lazily on the first prompt — fire `acp_prompt` or open `/sessions

  • iyke_split

    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).

  • iyke_state

    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 chec

  • iyke_timer_cancelwrite action

    Cancel a pending timer by id. No-op if already fired or cancelled. Returns { cancelled: bool }.

  • iyke_timer_list

    List timers in a scope (defaults to active project). Optional status filter: pending | fired | cancelled. Returns timers sorted by fire_at ascending.

  • iyke_timer_schedule

    Schedule a one-shot timer in the active project (or specified scope). Pass either fire_at (absolute epoch-ms) or delay_ms (relative from now), not both. When the timer fires the shell emits an OS notification; if agent_id is set, an entry also lands in that agent's inbox (delivered on its next tool call, 24h TTL).

  • iyke_todo_complete

    Mark a todo as done and stamp completed_at. Equivalent to iyke_todo_update with status=done.

  • iyke_todo_createwrite action

    Create a project-scoped todo. Tags are free-form strings; assignee is a free-form name (agent or user). Set blocker_id to mark this todo as blocked by another.

  • iyke_todo_list

    List todos in a scope (defaults to active project). Filter by status, tag, assignee.

  • iyke_todo_updatewrite action

    Partial update of a todo. Only supplied fields are changed. Pass status="done" or use iyke_todo_complete for the common case.

  • iyke_type

    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.

  • iyke_wait

    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? }.

Public scan report

scanner v0.1.10 · 2026-11-02 · same rubric, same numbers if you re-run it

no findings
  • Code scan11 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 0 days ago15/15
  • Maintainer identitynamespace and repository owner differ4/10
Overall 86/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Ikenga iyke (control bridge) compares

Against every graded Productivity MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
86/100
higher than 68% of 1,299 Productivity servers
Tools
76
the typical Productivity server has 7
Tools that change things
18%
typical: 0%. Fewer write tools means less an agent can break
Downloads a week
140
more than 64% of 427 Productivity servers with a package

What its tools let an agent do: 62 read · 14 change

Install Ikenga iyke (control bridge) in Claude Code, Cursor or VS Code

Runs npx -y @ikenga/mcp-iyke on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add mcp-iyke -- npx -y @ikenga/mcp-iyke
Add to Cursor

What the publisher says

From the Ikenga iyke (control bridge) repository's README, as published. We do not edit it. Read it on GitHub

ikenga-pkgs

The canonical home for first-party Ikenga packages — engines, MCP servers, mini-apps, and

helpers — in one Apache-2.0 monorepo.

What it is

Every first-party Ikenga package lives here (ADR-009), versioned and published with Changesets. It's a good place to read working examples of each pkg archetype before authoring your own.

Layout

packages/
  engine/       AI engine adapters (claude-code, noop, …)
  mcp/          MCP servers (iyke, …)
  apps/         User-facing iframe mini-apps (studio, tasks, …)
  connectors/   External-service adapters
  sidecars/     Long-lived headless processes

Workflow

This monorepo uses Changesets for per-package versioning and publish.

pnpm install
pnpm -r build
pnpm changeset            # author a changeset describing your change
git commit -am "feat: ..."
# Open PR; on merge to main, "Version Packages" PR opens.
# Merging that PR publishes all bumped packages to npm and updates the registry index.

Each PR that changes a package must include a .changeset/*.md (the changeset-bot will nag you on PRs that don't).

Registry

Published versions appear in the ikenga-registry within seconds of pnpm changeset publish completing, via the scripts/update-registry-index.mjs step in the release workflow. The shell and ikenga CLI both consume that registry for discovery and install.

Links

  • ikenga — the desktop shell that loads these
  • ikenga-contract — the manifest schema each pkg validates against
  • Building in the Loop — biweekly letters on running a real multi-agent Claude Code system

License

Apache-2.0 — see LICENSE.

Nothing above is checked by us. What we check is on the safety report.

Ikenga iyke (control bridge): common questions

Is Ikenga iyke (control bridge) MCP server safe?
Yes, by our scan: it is graded A (86/100). Read the Ikenga iyke (control bridge) safety report
How do I install Ikenga iyke (control bridge)?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Ikenga iyke (control bridge) need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Ikenga iyke (control bridge) maintained?
The last commit was 2 days ago (2026-11-02). The latest release is v0.2.3.
What can I use instead of Ikenga iyke (control bridge)?
Servers from other publishers that do the same job: DOMShell MCP server, Renforge MCP server and iPhone Use MCP server. Compare all Ikenga iyke (control bridge) alternatives.
How does Ikenga iyke (control bridge) compare with other Productivity MCP servers?
safety score 86/100 (higher than 68% of 1,299 Productivity servers); tools 76 (the typical Productivity server has 7); tools that change things 18% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.

Alternatives to Ikenga iyke (control bridge)

Same job from other publishers: the closest match first, then the best rated.

All Ikenga iyke (control bridge) alternatives →
  • DOMShell
    Drive Chrome with filesystem commands (ls, cd, grep, click, type). One MCP tool, multi-agent.
    A
  • Renforge
    Inspect, drive and debug a running Ren'Py game: state, screenshots, guarded clicks, saves, builds.
    A
  • iPhone Use
    Drive a real iPhone from a Mac: read the screen as text, tap, type, scroll, replay saved flows.
    B
  • Hunch
    Focus-free macOS control for AI agents: drive your real Mac apps in the background, no stolen focus.
    A
  • Tailscale
    Drive a Tailscale node and its tailnet through the CLI and the control-plane API
    B