@ikenga/mcp-iyke
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| iyke_stateA | 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: }; 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_goA | 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_modeA | 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_openA | Open a new tab in the focused pane. |
| iyke_splitA | 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_focusA | 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_closeA | 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_domA | 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 |
| iyke_logsA | Read recent console + error logs (last 500) from the running webview. Includes window error and unhandledrejection captures. |
| iyke_networkC | Read recent fetch + XHR network activity (last 100). Each entry has method, url, status, duration_ms, and error if it failed. |
| iyke_screenshotA | 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_waitA | 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? }. |
| iyke_clickB | Click an element. Specify exactly one of |
| iyke_typeA | Type text into an input/textarea/contenteditable element. Specify exactly one of |
| iyke_keyA | 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 |
| iyke_query_cacheA | 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_devtoolsA | Open Chrome DevTools for the main webview (debug builds only). Returns 503 in production builds. |
| iyke_iframe_stateC | 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_iframe_sendB | 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_project_createA | 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 |
| iyke_project_updateA | Patch fields on an existing project. Only the fields you pass in |
| iyke_project_listA | 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_archiveA | 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_set_activeA | 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_get_activeA | 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_session_listA | 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_moveA | 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_projectA | 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 |
| iyke_mcp_listA | 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. Defaults to the active project; pass project_id to query a specific one. |
| iyke_mcp_restartA | 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_pkg_trust_statusA | 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_approval, MCP tools/call against this pkg returns the structured |
| iyke_pkg_trust_listA | 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_violations_listA | List kernel-level permission-violation audit rows newest-first. Today only |
| iyke_secret_getA | 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:" or "pkg:" 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 scoped value is missing (with a deprecation log on the host). |
| iyke_secret_setA | 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_secret_deleteA | 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_listA | 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_layout_getA | 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_resetA | 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_claude_assets_listA | 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 context. |
| iyke_claude_asset_pinA | 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 |
| iyke_claude_asset_unpinA | Remove a pinned resolution. Falls back to the default lowest-tier-wins rule. |
| iyke_claude_asset_list_pinsA | List Claude-config asset pins for a scope. Scope is "workspace" (cross-project) or "project:" (this project only). Returns one entry per pin with preferred_tier + preferred_source. |
| iyke_agent_registerA | 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_scratchpad_writeA | Create or replace a project-scoped Markdown scratchpad. Use for plans, handoffs, working context that should outlive a chat. |
| iyke_scratchpad_appendA | Append to a scratchpad without overwriting. Creates it if missing. |
| iyke_scratchpad_readA | Read a scratchpad by scope+name. 404 if missing. Returns id, body, updated_at. |
| iyke_scratchpad_listA | List scratchpads in a scope (defaults to active project). Each entry has id, name, updated_at, and a 200-char preview. |
| iyke_scratchpad_deleteB | Delete a scratchpad by scope+name. Idempotent. |
| iyke_kv_setA | 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_kv_getB | Read a JSON value at scope+key. Returns { key, value: null } if absent (200, not 404). |
| iyke_kv_deleteB | Delete a KV entry. Idempotent. |
| iyke_kv_listB | List KV entries in a scope. |
| iyke_lock_acquireA | 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_statusA | Check whether a resource is currently locked (active leases only). Returns held=false if the lease has expired. |
| iyke_lock_releaseA | Release a lock you hold. No-op if held by someone else or already expired. |
| iyke_lock_renewA | Extend a lock you hold by ttl_ms. Useful for long-running work that needs more time than the original lease. |
| iyke_todo_createB | 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_updateA | Partial update of a todo. Only supplied fields are changed. Pass status="done" or use iyke_todo_complete for the common case. |
| iyke_todo_listB | List todos in a scope (defaults to active project). Filter by status, tag, assignee. |
| iyke_todo_completeA | Mark a todo as done and stamp completed_at. Equivalent to iyke_todo_update with status=done. |
| iyke_timer_scheduleA | 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_timer_cancelA | Cancel a pending timer by id. No-op if already fired or cancelled. Returns { cancelled: bool }. |
| iyke_timer_listA | List timers in a scope (defaults to active project). Optional status filter: pending | fired | cancelled. Returns timers sorted by fire_at ascending. |
| iyke_pkg_listA | 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:"), active_now. |
| iyke_pkg_install_scope_setA | Change the scope of an installed pkg. scope="workspace" (always loaded) or "project:" (loaded only when that project is active). Triggers a kernel reconcile so sidecars start/stop accordingly. |
| iyke_pkg_uninstallA | 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. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Royalti-io/ikenga-pkg-mcp-iyke'
If you have feedback or need assistance with the MCP directory API, please join our Discord server