# keelyard (pypi · keelyard)

Proof gate, undo and output trimming for Claude Code, Codex and OpenCode coding agents.

- Trust score: 66/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- pypi · `keelyard`: 66/100 (this document), [markdown](https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard.md), [page](https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard)

## Channel facts

- Registry: `pypi`
- Package: `keelyard`
- Version: `1.2.1`
- 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-11-05.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 2 of 38 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to akobirjontulqinovfuture/keelyard).
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 6 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 72/100
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 1382 tokens (~98/item across 14 items; 14 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 15 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the keelyard MCP server?

keelyard runs locally as a PyPI package, launched with uvx keelyard. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add akobirjontulqinovfuture-keelyard -- uvx keelyard
```

### Cursor

```json
{
  "mcpServers": {
    "akobirjontulqinovfuture-keelyard": {
      "command": "uvx",
      "args": [
        "keelyard"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "akobirjontulqinovfuture-keelyard": {
      "command": "uvx",
      "args": [
        "keelyard"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add akobirjontulqinovfuture-keelyard -- uvx keelyard
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "akobirjontulqinovfuture-keelyard": {
      "type": "local",
      "command": [
        "uvx",
        "keelyard"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add akobirjontulqinovfuture-keelyard --command uvx --arg keelyard
```

### Hermes

```yaml
mcp_servers:
  akobirjontulqinovfuture-keelyard:
    command: "uvx"
    args: ["keelyard"]
```

### Netclaw

```json
{
  "McpServers": {
    "akobirjontulqinovfuture-keelyard": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "keelyard"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add akobirjontulqinovfuture-keelyard -t stdio -c uvx -a keelyard
```

### Other

```json
{
  "mcpServers": {
    "akobirjontulqinovfuture-keelyard": {
      "command": "uvx",
      "args": [
        "keelyard"
      ]
    }
  }
}
```

## 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-11-05 (score 66, −15)

- [security regression] Malware scan: pass → unverified

### 2026-10-30 (score 81, +15)

- [security improvement] Malware scan: unverified → pass

### 2026-10-29 (score 66)

First indexed and scored.

## MCP tools (14)

### `proof_requirements` (~79 tokens)

Record what the user asked for as a checklist. Call this first. Duplicate items are ignored.

Returns {"requirements": [{"id", "text", "done", "evidence"}]}.

Input parameters:

- `items` (array, required): One short, checkable item per user ask, e.g. ["discount applies once", "empty cart costs 0"].

### `proof_check` (~91 tokens)

Mark one requirement as verified, with concrete evidence (a command and its result, or file:line).

Returns the updated requirement.

Input parameters:

- `evidence` (string, required): What you ran or saw, e.g. "pytest tests/test_cart.py::test_once passed" or "cart.py:14 caps at one use".
- `requirement_id` (integer, required): The id from proof_requirements, e.g. 1.

### `proof_run_tests` (~101 tokens)

Run the project's tests and record the result as evidence.

Returns {"exit", "passed", "seconds", "cmd", "output"} where output is a compact tail.

Input parameters:

- `command` (string): Optional override, e.g. "pytest -q tests/test_cart.py". Default: [proof].test_cmd or auto-detected.
- `phase` (string): "before" your change (baseline) or "after" it (required by the gate).

### `proof_status` (~34 tokens)

Is the work proven? Returns {"proven", "missing": [what to do next], "requirements", "report"}.

### `rewind_list` (~68 tokens)

List recent workspace snapshots, oldest first. One is taken after every edit or shell command.

Returns {"steps": [{"step", "tool", "ts", "files", "n_files"}], "total"}.

Input parameters:

- `last` (integer): How many recent steps, e.g. 20.

### `rewind_to` (~75 tokens)

Restore project files to how they were after `step`. A safety snapshot is taken first,
so calling rewind_to(safety_step) undoes this. Returns {"restored", "removed", "safety_step", "new_step"}.

Input parameters:

- `step` (integer, required): A step number from rewind_list, e.g. 3.

### `read_file` (~129 tokens)

Read a project file. A repeat read of an unchanged file returns a one-line notice instead of the
text; a changed file returns only the diff since your last read. Returns {"path", "content"}.

Input parameters:

- `end` (integer): Last line, inclusive; 0 = end of file.
- `force` (boolean): Return the full text even if you read it before (e.g. after compaction).
- `path` (string, required): Project-relative path, e.g. "src/cart.py". Windows separators are accepted.
- `start` (integer): First line, 1-based.

### `run_compact` (~94 tokens)

Run a command and return output with failures, errors and file:line kept and noise dropped.
Returns {"exit", "output"}; the output ends with an id for recall() when anything was cut.

Input parameters:

- `command` (string, required): Command line, run without a shell, e.g. "pytest -q" or "git log -n 20".
- `timeout` (integer): Seconds before the command is killed.

### `recall` (~55 tokens)

Return the full raw output that run_compact or the shell-output filter shortened.

Input parameters:

- `output_id` (string, required): The id printed by run_compact, e.g. "3f9a1c2b7d4e".

### `find_symbol` (~105 tokens)

Where is a symbol defined (best match first), and with refs=true where it is used.
Returns {"matches": [...], "remaining", "next_offset"?}; results are paged, never cut silently.

Input parameters:

- `name` (string, required): Function, class or type name, e.g. "Cart".
- `offset` (integer): Skip this many results; use next_offset from the last call.
- `refs` (boolean): Also list call sites and uses (source before tests).

### `swarm` (~193 tokens)

Run small tasks on the configured helper model in parallel. Each answer is checked: citations (path:line)
must exist; drafts must apply and pass the tests in a throwaway copy (never applied to your files).
Failed answers are retried with the checker's notes, best-of-N, then escalated to the strong model if set.
With no helper model configured, returns {"mode": "plan", "subagent_tasks": [...]} for your own subagents.

Input parameters:

- `tasks` (array, required): Each: {"kind": "ask"|"summarize"|"draft_edit"|"grep", "prompt": str, "files": [paths], "symbols": [names]}. "symbols" narrows the context to those definitions. Tip: swarm_plan builds this list for yo…

### `memory_search` (~128 tokens)

Search past Claude Code, Codex and OpenCode sessions, best match first. New sessions are indexed first.
Returns {"hits": [{"agent", "session", "project", "ts", "role", "snippet"}], "remaining", "next_offset"?}.

Input parameters:

- `budget_chars` (integer): Max characters of snippets returned.
- `offset` (integer): Skip this many hits; use next_offset from the last call.
- `query` (string, required): Words to look for, e.g. "stripe webhook signature".
- `this_project_only` (boolean): Only sessions that ran in this project.

### `work_state` (~108 tokens)

Compact state that survives compaction: requirements, decisions, changed files, open questions.
Record each key decision with a ref to the file line or command that backs it.

Input parameters:

- `action` (string): show, record, or resolve.
- `item` (integer): Id to resolve.
- `ref` (string): Evidence: "path:line", "cmd: <command>" or "#<proof item>". Required for decisions.
- `text` (string): The decision or question, one line.

### `workflow` (~40 tokens)

A short step-by-step guide: plan (plan-implement-verify), debug (loop), review (diff checklist).

Input parameters:

- `name` (string, required): Which guide.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard#diagnostics

## Score history

- 2026-11-05: 66
- 2026-11-04: 81
- 2026-11-03: 81
- 2026-11-02: 81
- 2026-11-01: 81
- 2026-10-31: 81
- 2026-10-30: 81
- 2026-10-29: 66

## Common questions

### What is the keelyard MCP server?

keelyard is an MCP server listed in the public MCP registry as io.github.akobirjontulqinovfuture/keelyard. Proof gate, undo and output trimming for Claude Code, Codex and OpenCode coding agents. This page covers its PyPI package (keelyard).

### Is the keelyard MCP server safe to use?

keelyard scores 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the keelyard MCP server expose?

keelyard exposes 14 tools: proof_requirements, proof_check, proof_run_tests, proof_status, rewind_list, and 9 more. Their descriptions and schemas cost roughly 1,300 tokens of context every time the server is loaded.

### Is the keelyard MCP server still maintained?

keelyard is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the keelyard MCP server under?

keelyard declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/keelyard/
- Socket report: https://socket.dev/pypi/package/keelyard
- Repository: https://github.com/akobirjontulqinovfuture/keelyard
- Website: https://akobirjontulqinovfuture.github.io/keelyard/
- Changelog RSS feed: https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard.xml
- Changelog JSON feed: https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard.json
- HTML version of this page: https://verifymcp.io/servers/akobirjontulqinovfuture-keelyard/keelyard
