Pack local or remote codebases into AI-friendly files that LLMs and coding agents can read or search
Keelen is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Autonomous dev team steered from chat: plain-English requests in, tested merged PRs out.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http keelen-mcp https://keelen.ai/mcp
# 2 — ask your agent for something these tools do
# list_projects, create_project, submit_request and 40 more
Keelen costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http keelen-mcp https://keelen.ai/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
43 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
List the projects in this workspace, with what each one is building.
No parameter schema on file.
Start building something new: creates a GitHub repo and begins work on it. For a NEW repo. Given an existing repo, import_project(repo_full_name) is the right call — this one would create a second, empty repo beside it (list_github_repos() browses what the workspace can see). Scaffolds a new GitHub repo, a bootstrap-mode project, and submits build_description as the project
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | — |
| build_description | string | yes | — |
| project_kind | string | yes | — |
| private | boolean | no | — |
| preview_command | no | — | |
| org | no | — | |
| engine | no | — | |
| ci_runs_on | no | — | |
| framework | no | — |
Ask for a change in plain English: a feature, a bug fix, or a new direction. Each call carries ONE feature or intent; a multi-feature ask belongs in separate requests. text must be under 16000 characters. Returns {thread_id, status, next_action, poll_after_seconds, next_step}; next_step names the re-check of get_request_status after poll_after_seconds.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| text | string | yes | — |
| workflow_profile | no | — |
Check what happened to a request, and read any questions it asked back. Intake is async (~5min cadence), so the status changes between calls. next_action is one of: "wait" (still processing), "answer_questions" (answer_request takes one answer per question), "done" (see generated_roadmap_item_ids), "cancelled" (terminal, no items), "failed" (see intake_failure_reason), "appr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| thread_id | string | yes | — |
Say what this product is for, so every run knows what it is building toward. vision_md is free-form markdown and must be non-empty. Tenant-scoped: a project not in the caller's workspace 404s. Returns {project_id, product_vision_md, updated_at, next_step}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| vision_md | string | yes | — |
Set the outcome to aim at right now, so work is prioritised toward one thing. goal_md is free-form markdown and must be non-empty. Tenant-scoped: a project not in the caller's workspace 404s. Returns {project_id, product_goal_md, updated_at, next_step}.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| goal_md | string | yes | — |
See what is planned for a project and in what order. Queued rows also say whether the expand picker would elect them (electable) and, when not, why it skips them (skip_reason: awaiting_intake_thread | awaiting_clarification | crash_capped | noop_capped | crash_cooldown | noop_cooldown | held_on_open_pr | other). The first reason that applies, in that order, is the one retu
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| status | string | no | — |
Change what gets built first. ordered_ids is the desired front-to-back order of queued roadmap-item ids (list_roadmap returns them). The first id becomes the highest priority — the cadence expands the lowest-priority_int queued item next. Horizon pins still dominate: a pinned-later item stays at the back and a pinned-now item at the front, regardless of position in `ordered_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| ordered_ids | array | yes | — |
Cancel / close a single roadmap item (list_roadmap returns its id). For a DELIVERED or duplicate item that keeps re-parking: once the work has shipped, every expand produces no dev-ready tasks and files a recurring roadmap_item_parked escalation that has to be acked. Cancelling drops the item out of the expand queue AND resolves any open expand-lane escalation for it. Busine
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| item_id | string | yes | — |
Clear a queued roadmap item's horizon pin (now/next/later → none). A horizon pin dominates the queue sort, so reorder_roadmap cannot move a pinned item out of its band — a stale now pin on a delivered/duplicate item clogs the front of the queue. This unpins it and reprices the queue so the item follows plain priority order again (and reorder_roadmap can then move it). Only
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| item_id | string | yes | — |
Roll a Roblox project's place back to a previously-published version. For a roblox_game project, re-publishes the RETAINED build artifact for version_number (the web Roblox Publishing card lists published versions) — it never rebuilds from source, so rollback is fast + deterministic. This mints a NEW Roblox version pointing at the old build. Unknown version → 404; a versio
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| version_number | integer | yes | — |
Check how a project is doing: what is in flight, what shipped, what is stuck. Returns lifecycle status, open task count, queued roadmap item count, runs today, verification pass rate, open blockers, pause state, and freshness. Zero open_tasks does not mean an empty roadmap: queued_roadmap_items counts planned work awaiting expansion, including work held while the scheduler
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Close a task that should not be built — a duplicate, or work already shipped. For a task on the board that is obsolete: the change already landed in another PR, a sibling task covers it, or the user changed direction. The task is marked cancelled and keeps ALL of its history (acceptance criteria, QA steps, iterations) — nothing is deleted. reason is REQUIRED and is record
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| task_id | string | yes | — |
| reason | string | yes | — |
| superseded_by_task_id | no | — | |
| superseded_by_pr_number | no | — |
Read a project's current product goal (the outcome work is aimed at). The paired setter set_product_goal replaces the whole document rather than appending to it, so a write without a prior read silently discards whatever the user already recorded; adding a line means reading the current text, editing it, and setting the full result back. Returns {project_id, product_goal_md
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Read a project's current product vision (what the product is for). The paired setter set_product_vision replaces the whole document rather than appending to it, so a write without a prior read silently discards whatever the user already recorded; adding a line means reading the current text, editing it, and setting the full result back. Returns {project_id, product_vision_m
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
See what the work is stuck on and waiting for a human decision about. project_status only COUNTS open escalations; this returns each one with its kind, reason, detail_md, recommended_action, and (when task-scoped) the blocked task's title + PR url. A card about a roadmap item carries its roadmap_item_id (null for a task-only, project-level or synthetic row), which matches
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Acknowledge a handled ask only when no blocked task becomes invisible. decision_md is a required short note (why/how it was resolved), appended to the escalation's detail_md as an audit trail. Resolving a project_pause / orphan_pause RESUMES the project (clears the pause). A blocked task's final task_block/operator_action cannot be acknowledged: its typed retry, platform-pol
| Parameter | Type | Required | Notes |
|---|---|---|---|
| escalation_id | string | yes | — |
| decision_md | string | yes | — |
Grant one fresh attempt after fixing a recovery-budget task block. `escalation_id is the task_block id returned by list_escalations. Eligibility, tenant, task, failure class, task status, and competing blockers are all derived server-side. This is distinct from resolve_escalation`, which remains acknowledgement-only for task blocks. Business-level replay guard: an al
| Parameter | Type | Required | Notes |
|---|---|---|---|
| escalation_id | string | yes | — |
| decision_md | string | yes | — |
Run the dashboard's replay-guarded same-item dependency re-arm. `escalation_id is an expand_produced_nothing or roadmap_item_parked escalation id. Keelen verifies delivered structural prerequisites, grants one bounded expand retry, preserves the roadmap item id and depends_on_item_ids`, and resolves the matching cards in one transaction. A bounded live GitHub che
| Parameter | Type | Required | Notes |
|---|---|---|---|
| escalation_id | string | yes | — |
Resolve a platform-policy dead-end with a structured plan decision. `decision is one of reuse_existing_evidence, split_task, raise_project_cap, or remove_scenario. raise_project_cap also requires project_cap` (6..32). The decision becomes a new task-plan section; the same task lineage is requeued before the escalation resolves. On a project that runs
| Parameter | Type | Required | Notes |
|---|---|---|---|
| escalation_id | string | yes | — |
| decision | string | yes | — |
| decision_md | string | yes | — |
| project_cap | no | — |
Set this web_app project's ui-review scenario budget, or reset it. `scenario_cap is an integer from 6 through 32, or null` to reset to the platform default of 12. The screenshot cap derives from it and moves with it, so the two can never starve each other. Raising is always allowed, including from a completely full manifest. LOWERING is refused when the default branch a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| scenario_cap | no | — |
Replace an unretryable blocked task without losing its lineage. Creates a fresh, explicitly planned task under the same roadmap item and attempt lineage, transfers prerequisites and downstream dependents, and cancels the stale task with supersession provenance. The old PR, task, failures, criteria, and evidence remain in the audit history; nothing is marked delivered.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| task_id | string | yes | — |
| title | string | yes | — |
| body_md | string | yes | — |
| acceptance_criteria | array | yes | — |
| decision_md | string | yes | — |
Start, pause, or resume a project's autonomous work. action is one of: "enable" | "disable" | "resume" | "process_now". - enable/disable flip scheduler_enabled (the loop dispatches only enabled, status='active' projects). - resume clears a pause (peak/backoff/manual) so the project dispatches again. - process_now durably prioritizes and immediately attempts the next intake
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| action | string | yes | — |
Archive a project (reversible shelve) — frees a project slot in-tool. Stops any in-flight machine, then flips the project to archived: it drops out of the per-tier project cap (freeing a slot for a new project) and the loop stops dispatching it, but the project + its history are kept and can be restored from the dashboard project page. Stopping a machine DESTROYS the running
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Soft-delete a project (the harder option) — frees a slot and hides it. Stops any in-flight machine, then flips the project to deleted: it disappears from list_projects, drops out of the project cap, and the loop stops dispatching it. Deleting ALSO permanently purges the project's stored review artifacts. The row is retained for audit and re-importing the repo restores that
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Find security problems in a repository: a deep, whole-codebase review. Spawns a one-shot audit that scans the repo across a kind-aware taxonomy (secrets + git history, vulnerable/abandoned deps, injection, SSRF, path traversal, deserialization, crypto, info-leak, plus web authz/session/CORS, library API-misuse, game client-trust, or infra/CI as applicable) and posts findings t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Find where a codebase creates legal exposure (privacy, consent, data handling). Spawns a one-shot review machine that reads the checkout offline and maps what the code DOES onto commonly cited legal obligations, filtered by the project's saved compliance profile (jurisdictions plus eleven product facts). Findings land on the project's Legal page for a human to triage, readable
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Read a project's legal exposure findings, worst exposure first. Returns each finding as an OBSERVATION plus the obligation commonly cited over that pattern, its citation, the date the citation was last checked, and whether counsel has reviewed the registry entry (counsel_reviewed, false today for every entry). exposure_order is an ORDER, never a score: there is no grade, n
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| limit | integer | no | — |
| include_all | boolean | no | — |
Start a source-bound security control gap review for one project. The review records bounded engineering observations under the user's selected Cyber Essentials or CMMC Level 1 or Level 2 context. It does not determine framework standing, and it does not make changes. The disclaimer_md field must reach the user before any observation is summarised. The project needs a saved
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Read a project's security-control observations and review boundaries. The result groups records by evidence class without a total or an overall framework outcome. not_determinable and outside_review_scope qualify every observation. An empty group does not establish that a control is in place, and disclaimer_md must reach the user. limit defaults to 25 (max 100). `incl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| limit | integer | no | — |
| include_all | boolean | no | — |
Answer a thread's clarifying questions (status must be awaiting_answers). answers is a list of {"idx": <int from get_request_status>, "answer_md": <str, 1..2000 chars>}. Every question needs exactly one answer. The call flips the thread back to intake_pending; get_request_status reports the subsequent state.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| thread_id | string | yes | — |
| answers | array | yes | — |
Say what is wrong with what a request produced, and have it reworked. Status must be "done". feedback_md is 1..1979 chars. Moves the thread to refine_pending; get_request_status reports the revised items. Refinement re-plans the thread's roadmap items and can EDIT OR HARD-DELETE the task rows it generated earlier (the machine patch-tasks endpoint deletes them outright), so i
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| thread_id | string | yes | — |
| feedback_md | string | yes | — |
Create a Keelen account (or start agent login) — emails a 6-digit code. UNAUTHENTICATED — the only tool besides verify_email that works before a bearer key is configured. email is where the code is sent. Flow: signup(email) -> the user reads the 6-digit code from their inbox -> verify_email(email, code) returns a reveal-once API key, stored as this server's `Authorization: B
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | — |
Redeem the emailed 6-digit code for a reveal-once workspace API key. UNAUTHENTICATED. email + code must match a code issued by signup(email) within the last 15 minutes (5 attempts max). The returned api_key is shown exactly ONCE — store it ONLY in the MCP client config ("Authorization: Bearer <api_key>"), NEVER in a repo or a file you might commit. Reconnecting this serv
| Parameter | Type | Required | Notes |
|---|---|---|---|
| string | yes | — | |
| code | string | yes | — |
Check what is set up so far and what to do next to get building. Reports engine_connected / github_connected / project_count / payment_status and a next_action string whose value is authoritative, with this tool polled between steps. next_action is "call_tool" (the tool named in next_tool, with next_step describing the call) until onboarding is complete, then "done". (
No parameter schema on file.
Get a one-click, pre-authenticated dashboard sign-in link for the owner. The engine-connect step — and any dashboard task (billing card update, a project page) — needs a signed-in browser. Because this server has already authenticated the workspace owner, this mints a single-use magic-link login token and returns a /login?token=… deep link: opening it signs the user straight
No parameter schema on file.
Get the link that connects a GitHub account, so work can reach real repos. Returns an install_url that the user opens in a browser to pick the GitHub account/org, approve the install, and land on a "connected" page; get_onboarding_status() then reports github_connected true. The link expires in 10 minutes; a repeat call mints a fresh one.
No parameter schema on file.
List repos the workspace's GitHub connection can see (for import_project). Each entry has full_name, default_branch, private, language, pushed_at. A full_name is what import_project(repo_full_name) connects. Reading the list can MINT a short-lived GitHub installation token, so this is not a pure read. Returns 409 if GitHub isn't connected yet — connect_github() is required f
No parameter schema on file.
Connect an EXISTING GitHub repo as a Keelen project. This is the counterpart of create_project: it is for a repo that already exists, while create_project scaffolds a brand-new one. repo_full_name is "owner/repo" — it MUST be visible to the workspace's GitHub connection (list_github_repos() to browse; a non-visible repo 404s). engine is OPTIONAL — one of claude_code | cod
| Parameter | Type | Required | Notes |
|---|---|---|---|
| repo_full_name | string | yes | — |
| engine | no | — | |
| build_description | no | — | |
| project_kind | no | — | |
| stack | no | — | |
| preview_command | no | — |
Check whether a new project has finished setting up and is ready to build. Returns overall (provisioning | ready | errored), a 7-stage checklist, and a user-facing error_kind when a stage failed. next_action is "wait" with poll_after_seconds (~10s) while provisioning, "wait" with NO poll_after_seconds when errored (fix the reported cause, then re-check — polling again without
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
Billing status + a Stripe checkout link when a NEW subscription is needed. plan is one of starter | pro | agency (default starter). When the workspace has NO live subscription and needs one (open-signup unpaid, churned, or converting from a free/trial tier), returns a checkout_url with next_action "browser" — the user opens it in a browser (the one setup step that can't ha
| Parameter | Type | Required | Notes |
|---|---|---|---|
| plan | string | no | — |
Read a compact progress digest for one project (delivery, activity, holds, next decision). Returns the closed MCP projection: delivery counts and the five newest delivered items, a recent loop-activity count, current holds, the single highest-priority open decision, and more_decisions. Two steering fields are ALWAYS present: next_action is "call_tool"
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| since | no | — |
Stop one running iteration after confirmed runtime cleanup. Requires a personal active workspace owner. Workspace keys and Portfolio delegation cannot stop compute. The exact project iteration number binds the runtime. Cleanup failure leaves it active; a busy subject is refused. Confirmed cleanup finalizes unfinished runtime iterations, holds its legacy tasks for owner close o
| Parameter | Type | Required | Notes |
|---|---|---|---|
| project_id | string | yes | — |
| iter_n | integer | yes | — |
| reason | string | yes | — |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Keelen or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither: the repository linked on this page is where this record was collected from, not a copy of what the address serves, so it is not graded in its place. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.0.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Keelen can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.