# Reado (mcpb · reado.mcpb)

Your code review comments from Reado, the read-first IDE, as context and tools for your agent.

- Trust score: 53/100 (low)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- mcpb · `reado.mcpb`: 53/100 (this document), [markdown](https://verifymcp.io/servers/watermelonbros-reado/reado.md), [page](https://verifymcp.io/servers/watermelonbros-reado/reado)

## Channel facts

- Registry: `mcpb`
- Package: `https://github.com/WatermelonBros/reado/releases/download/v1.34.0/reado.mcpb`
- Transport: `stdio`
- SHA-256: `d449c3da4d6486a1a21af37f1c31c2d4cd7ef544f7aaabec1e3ce377b2db5360`

## 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**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 16 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4218 tokens (~127/item across 33 items; 27 tools + 6 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 73/100
  - Stability observed for 22 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **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.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 29 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 Reado MCP server?

Reado ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, d449c3da4d6486a1a21af37f1c31c2d4cd7ef544f7aaabec1e3ce377b2db5360; the commands to do that are on this page. If it does not match, do not open it.

- Download bundle: `https://github.com/WatermelonBros/reado/releases/download/v1.34.0/reado.mcpb`
- SHA-256: `d449c3da4d6486a1a21af37f1c31c2d4cd7ef544f7aaabec1e3ce377b2db5360`

### Verify on macOS / Linux

```bash
echo "d449c3da4d6486a1a21af37f1c31c2d4cd7ef544f7aaabec1e3ce377b2db5360  reado.mcpb" | shasum -a 256 -c
```

### Verify on Windows (PowerShell)

```powershell
(Get-FileHash -Algorithm SHA256 .\reado.mcpb).Hash -eq "d449c3da4d6486a1a21af37f1c31c2d4cd7ef544f7aaabec1e3ce377b2db5360"
```

## 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 53, +1)

No change was recorded against any check on this day. Stability & Change Management went from 70 to 73. That category is still filling its 30-day observation window: 21 days of observed history at the previous scan, 22 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-03 (score 52, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-31 (score 51, +1)

No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-29 (score 50, +1)

No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-27 (score 49, +1)

No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-25 (score 48, +1)

No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-23 (score 47, +1)

No change was recorded against any check on this day. Stability & Change Management went from 27 to 30. That category is still filling its 30-day observation window: 8 days of observed history at the previous scan, 9 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-21 (score 46, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (27)

### `browser_console` (~77 tokens)

Read everything the preview page logged, as JSON: each entry's level (log/info/warn/error), message, source and stack. Use it to follow what the app is doing; for only what broke, browser_errors is shorter. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.

### `browser_network` (~69 tokens)

Read the preview page's network activity, as JSON: method, URL, status and timing per request, with failures flagged. Use it to check API calls, failed fetches and slow responses. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.

### `browser_errors` (~72 tokens)

Read only the preview's error-level console entries — errors and unhandled rejections — as JSON: the part of browser_console that answers "what broke?". Answers `No errors captured.` when there are none. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.

### `browser_eval` (~152 tokens)

Run a JavaScript expression in the preview page and answer its value, JSON-serialized. The escape hatch for what the other browser_* tools don't cover — reading app state, calling page functions, scrolling a nested container; prefer them when they fit. Evaluated synchronously (a Promise is not awaited), and it can change the page. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `js` (string, required): A JavaScript expression; wrap statements in an IIFE, e.g. `(() => { …; return x })()`.

### `browser_navigate` (~120 tokens)

Load a URL in the preview, replacing the current page. Only localhost and the origins the user allowlisted can be opened; anything else is refused with "origin not allowed". Answers the URL loaded. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `url` (string, required): Absolute (`http://localhost:5173/settings`) or relative to the current page (`/settings`).

### `browser_dom` (~151 tokens)

Inspect one element of the preview: its tag, outerHTML (first 2000 characters), box (x, y, width, height in CSS px, relative to the viewport) and key computed styles (display, color, background, font), as JSON; null when nothing matches. Use it to check structure and layout; for a picture use browser_frame, for anything else browser_eval. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `selector` (string, required): CSS selector; the first matching element is used (document.querySelector).

### `browser_animation` (~120 tokens)

Read the animations running on one element of the preview, as JSON: for each, its name, keyframes and computed timing (duration, delay, easing, progress). Answers an empty list when it has none, null when nothing matches. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `selector` (string, required): CSS selector; the first matching element is used (document.querySelector).

### `browser_click` (~132 tokens)

Click an element in the preview: scrolls it to the middle of the viewport, then fires a DOM click(). Answers `clicked`, or `not found` when nothing matches. It does not wait for what the click sets off — check the outcome with browser_dom, browser_errors or browser_frame. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `selector` (string, required): CSS selector; the first matching element is used (document.querySelector).

### `browser_hover` (~121 tokens)

Hover an element in the preview by dispatching mouseover and mouseenter — to open a menu or tooltip before inspecting it. Answers `hovered` or `not found`. These are synthetic events, so CSS :hover styles do not apply. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `selector` (string, required): CSS selector; the first matching element is used (document.querySelector).

### `browser_type` (~155 tokens)

Fill a form field in the preview: focuses it, replaces its whole value with `text`, then fires input and change. Answers `typed` or `not found`. No key events are sent, so keydown handlers and Enter-to-submit don't fire — click the submit button instead. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `selector` (string, required): CSS selector of an input, textarea or select; the first match is used.
- `text` (string, required): The field's new value. It replaces the old one; an empty string clears it.

### `browser_scroll` (~136 tokens)

Scroll the preview's window to an absolute position (window.scrollTo) — to bring content into view before browser_frame. Answers `scrolled`. browser_click already scrolls its target; a nested scroll container needs browser_eval. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

Input parameters:

- `x` (number): CSS pixels from the document's left edge. Defaults to 0.
- `y` (number): CSS pixels from the document's top. Defaults to 0.

### `browser_frame` (~97 tokens)

Screenshot the preview as it renders right now, answered as a PNG image. Use it to see layout and visual bugs, or the result of a click; for exact sizes and styles use browser_dom. Not available on Linux. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.

### `task_done` (~195 tokens)

Mark a task resolved once your change addresses it, recording how. With `verify`, Reado runs that command in the project root: exit 0 marks the task done and archives it; a failure — or no `verify` at all — leaves it resolved-but-unverified, visible for the human to check. Answers the task's id, state and resolution as JSON. If the attempt didn't work use task_fail; if you need the human, task_block.

Input parameters:

- `diffRef` (string): The commit or ref holding the change, e.g. a SHA, shown to the reviewer.
- `id` (string, required): The task's id, from `reado://tasks`.
- `model` (string): The model that made the change, for provenance. Defaults to $READO_MODEL.
- `verify` (string): A shell command that proves the fix, e.g. `pnpm test src/lib/api.test.ts`.

### `task_fail` (~110 tokens)

Record a failed attempt at a task. The task goes back to open for another try; the third failed attempt blocks it until the human answers. Answers the task's id, state and attempt count as JSON. When you already know you need the human, use task_block instead.

Input parameters:

- `id` (string, required): The task's id, from `reado://tasks`.
- `note` (string): What you tried and why it didn't work; posted as a reply in the task's thread, in Markdown.

### `task_block` (~110 tokens)

Block a task you cannot finish without the human — a decision, a credential or context you don't have. It stays blocked with your reason until they answer in Reado, which reopens it with a fresh attempt count. Blocking again replaces the reason. Answers the task's id, state and reason as JSON.

Input parameters:

- `id` (string, required): The task's id, from `reado://tasks`.
- `reason` (string, required): The question or missing piece, written for the human who has to answer it.

### `comment_add` (~194 tokens)

Anchor a new comment to a line range, signed by the agent. A `task` (the default) joins the user's task queue as work to do; a `note` explains something to the next reader without asking for action. Answers the new comment's id and state as JSON. To answer an existing comment use comment_reply; during a guided review use review_propose_comment, which the human approves first.

Input parameters:

- `body` (string, required): The comment, in Markdown.
- `end` (integer): Last line of the range, inclusive. Defaults to `line`.
- `file` (string, required): Project-relative path, e.g. `src/lib/api.ts`.
- `kind` (string): `task` asks for work (default); `note` only informs.
- `line` (integer, required): First line of the range, 1-based.
- `type` (string): What the comment is about. Defaults to note.

### `comment_reply` (~104 tokens)

Reply in an existing comment's thread, signed by the agent — to answer a question the user asked, or to explain what you changed. It does not change the comment's state: use task_done, task_fail or task_block for that. Answers the comment's id and state as JSON.

Input parameters:

- `body` (string, required): The reply, in Markdown.
- `id` (string, required): The comment's id, from `reado://comments` or `reado://tasks`.

### `mascot_say` (~144 tokens)

Say one line through Reado's mascot — the small companion in the corner of the user's screen. For the moment the user must know about while they are away from the desk: what you need from them, or what just landed. Not narration, not progress, not a running commentary: it interrupts a human, and a companion that chatters gets turned off. Use `ask` only when you are actually waiting for them. Text over 280 characters is refused, not truncated. Answers `said: <text>`.

Input parameters:

- `mood` (string): The mascot's expression. Defaults to talk.
- `text` (string, required): One line, at most 280 characters.

### `session_done` (~119 tokens)

Call this when your next act is to wait for the user — the request is finished, you are blocked, or you need an answer. NOT after a command returns or a step completes: if you will do anything else before stopping, it is too early. Reado alerts a user who has walked away, so a premature call fetches them back for nothing. Answers an acknowledgement.

Input parameters:

- `status` (string): How the request ended. Defaults to done.
- `summary` (string): One line on what happened; it becomes the notification's text.

### `session_show` (~112 tokens)

Read a guided-review session in full, as JSON: scope, objective, route, per-file state and summaries, proposals and their decisions, the files the scope is expected to contain, and any pending route change. Call it first on a READO GUIDED REVIEW prompt, or to find your place after losing context; for a single file, review_context is smaller.

Input parameters:

- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.

### `review_context` (~112 tokens)

Read one file's context in a guided review before reviewing it, as JSON: the session objective, the file's route entry (why it was ranked, related files), its state, its running summary and the proposals already on it. For the whole session use session_show.

Input parameters:

- `file` (string, required): Project-relative path, e.g. `src/lib/api.ts`.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.

### `review_plan` (~152 tokens)

Set a guided review's ranked route — the planning pass, once per session, before you review any file. Answers how many files you routed and the `uncovered` ones: files the scope contains that your route left out. Route each with review_propose_route_change, or declare it out of scope with `reado session set-file <id> --file <path> --state out-of-scope`. Refused if the session already has a route; propose a change instead.

Input parameters:

- `route` (array, required): Every file to review, riskiest first.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.

### `review_propose_route_change` (~151 tokens)

Propose a new route for a guided review already under way — a file you found that must be reviewed, a reorder, a file to drop. Nothing changes until the human accepts it in Reado: the current route keeps running, so carry on with the file you were on. A new proposal replaces one still pending. Answers a confirmation; refused without a `reason`.

Input parameters:

- `reason` (string, required): Why the route should change — what the human reads to decide.
- `route` (array, required): The whole proposed route, not just what changes.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.

### `review_propose_comment` (~209 tokens)

Propose a finding on the code during a guided review — a bug, a refactor, a performance issue — anchored to a line range. Only a proposal: the human accepts, edits or discards it, and only an accepted one becomes a comment. Answers the proposal's id. For a question or missing context rather than a finding use review_propose; outside a guided review, comment_add.

Input parameters:

- `body` (string, required): The finding: what is wrong and why, in Markdown.
- `end` (integer): Last line of the range, inclusive. Defaults to `line`.
- `file` (string, required): Project-relative path, e.g. `src/lib/api.ts`.
- `line` (integer, required): First line of the range, 1-based.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.
- `type` (string): What the comment is about. Defaults to note.

### `review_propose` (~182 tokens)

Propose a guided-review item that is not a finding on the code: a `question` for the human, a `follow-up` to do after the review, or `needs-context` when you cannot judge the code without information you don't have — prefer it to guessing. The human accepts or discards it. Answers the proposal's id. For a finding on specific lines use review_propose_comment.

Input parameters:

- `body` (string, required): The question, follow-up or missing context, in Markdown.
- `file` (string): Project-relative path it concerns, if any.
- `kind` (string, required): What you are raising.
- `line` (integer): Line it concerns, if any, 1-based.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.

### `review_summarize_file` (~138 tokens)

Record a file's mini-summary when you finish reviewing it in a guided review: what you checked, the risks you see, what comes next. It replaces the file's earlier summary, and marks a file with no state yet as reviewed. Answers a confirmation. For the whole review use session_summarize.

Input parameters:

- `file` (string, required): Project-relative path, e.g. `src/lib/api.ts`.
- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.
- `text` (string, required): The summary, a few lines, in Markdown.

### `session_summarize` (~103 tokens)

Record a guided review's overall recap once the routed files are done: what the review found, the risks that matter most, what is left. It replaces any earlier recap. Answers a confirmation. For one file's notes use review_summarize_file.

Input parameters:

- `sessionId` (string): The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open.
- `text` (string, required): The recap, in Markdown.

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/watermelonbros-reado/reado#diagnostics

## Score history

- 2026-11-05: 53
- 2026-11-04: 52
- 2026-11-03: 52
- 2026-11-02: 51
- 2026-11-01: 51
- 2026-10-31: 51
- 2026-10-30: 50
- 2026-10-29: 50
- 2026-10-28: 49
- 2026-10-27: 49
- 2026-10-26: 48
- 2026-10-25: 48
- 2026-10-24: 47
- 2026-10-23: 47
- 2026-10-22: 46
- 2026-10-21: 46
- 2026-10-20: 45
- 2026-10-19: 43
- 2026-10-18: 43
- 2026-10-17: 43
- 2026-10-16: 43
- 2026-10-15: 43
- 2026-10-14: 43
- 2026-10-13: 10
- 2026-10-12: 10
- 2026-10-10: 10

## Common questions

### What is the Reado MCP server?

Reado is an MCP server listed in the public MCP registry as io.github.WatermelonBros/reado. Your code review comments from Reado, the read-first IDE, as context and tools for your agent. This page covers its MCPB bundle (https://github.com/WatermelonBros/reado/releases/download/v1.34.0/reado.mcpb).

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

Reado scores 53 out of 100 on VerifyMCP. 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 Reado MCP server expose?

Reado exposes 27 tools: browser_console, browser_network, browser_errors, browser_eval, browser_navigate, and 22 more. Their descriptions and schemas cost roughly 3,537 tokens of context every time the server is loaded.

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

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

## Links

- Repository: https://github.com/WatermelonBros/reado
- Website: https://reado.watermelon-studio.it/
- Changelog RSS feed: https://verifymcp.io/servers/watermelonbros-reado/reado.xml
- Changelog JSON feed: https://verifymcp.io/servers/watermelonbros-reado/reado.json
- HTML version of this page: https://verifymcp.io/servers/watermelonbros-reado/reado
