# Maple

Hands a coding agent the review comments pinned to a live preview: it reads the context, edits the code and closes the note with a commit.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 21
- Author: maple-kit
- License: Apache-2.0 · policy=link-only · description only; the file stays with the author
- Source: https://github.com/maple-kit/maple/tree/HEAD/packages/mcp
- Updated: 2026-10-21
- HTML: https://affpapa.org/en/nevibecode/mcp/maple

## What it does

Maple gathers reviewer notes left on a running frontend, and this server passes them to the agent. The agent waits for a new comment, gets its anchor `file:line`, viewport, screenshot and the mock it was written under, makes the edit, then resolves the comment against the fixing commit. Reviewers stay in the overlay; both sides meet in the store.

Install the package with `npm install @maple-kit/mcp`. You get two binaries: `maple-mcp` for the server and `maple-stop-hook`, which blocks an agent from declaring itself done while comments remain open. Clients start the server with no arguments, so configuration lives in environment variables. The `github` store needs `GITHUB_TOKEN` with read and write access to pull-request comments plus `MAPLE_GITHUB_OWNER` and `MAPLE_GITHUB_REPO`. A missing value fails at startup instead of on the first tool call.

With no forge, comments are read from and written to `.maple/` in the working directory, which keeps the loop usable on a laptop without a pull request. That store is meant for a local machine, not a preview pod. Every package is 0.x with no compatibility promise, so pin it if the workflow matters to your team. `wait_for_comments` caps at 55 seconds because clients cut a call at 60, and a timeout counts as a result — agents that treat it as an error stop looping the moment nobody is watching.

## Requirements
- Needs: Node.js (commands run via npx)
- Environment variables: `GITHUB_TOKEN`, `MAPLE_GITHUB_OWNER`, `MAPLE_GITHUB_REPO`, `MAPLE_STORE` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env GITHUB_TOKEN=<GITHUB_TOKEN> --env MAPLE_GITHUB_OWNER=<MAPLE_GITHUB_OWNER> --env MAPLE_GITHUB_REPO=<MAPLE_GITHUB_REPO> --env MAPLE_STORE=<MAPLE_STORE> --transport stdio mcp -- npx -y @maple-kit/mcp
```
Replace <…> with your own values

### Codex

**Platform CLI**
```bash
codex mcp add mcp --env GITHUB_TOKEN=<GITHUB_TOKEN> --env MAPLE_GITHUB_OWNER=<MAPLE_GITHUB_OWNER> --env MAPLE_GITHUB_REPO=<MAPLE_GITHUB_REPO> --env MAPLE_STORE=<MAPLE_STORE> -- npx -y @maple-kit/mcp
```
Replace <…> with your own values

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "mcp": {
            "command": "npx",
            "args": [
                "-y",
                "@maple-kit/mcp"
            ],
            "env": {
                "GITHUB_TOKEN": "<GITHUB_TOKEN>",
                "MAPLE_GITHUB_OWNER": "<MAPLE_GITHUB_OWNER>",
                "MAPLE_GITHUB_REPO": "<MAPLE_GITHUB_REPO>",
                "MAPLE_STORE": "<MAPLE_STORE>"
            }
        }
    }
}
```
Replace <…> with your own values

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "mcp": {
            "type": "stdio",
            "command": "npx",
            "args": [
                "-y",
                "@maple-kit/mcp"
            ],
            "env": {
                "GITHUB_TOKEN": "<GITHUB_TOKEN>",
                "MAPLE_GITHUB_OWNER": "<MAPLE_GITHUB_OWNER>",
                "MAPLE_GITHUB_REPO": "<MAPLE_GITHUB_REPO>",
                "MAPLE_STORE": "<MAPLE_STORE>"
            }
        }
    }
}
```
Replace <…> with your own values

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e GITHUB_TOKEN=<GITHUB_TOKEN> -e MAPLE_GITHUB_OWNER=<MAPLE_GITHUB_OWNER> -e MAPLE_GITHUB_REPO=<MAPLE_GITHUB_REPO> -e MAPLE_STORE=<MAPLE_STORE> mcp npx -y @maple-kit/mcp
```
Replace <…> with your own values

## When to use it
- read a review comment together with its file and line anchor
- wait for the next comment instead of polling the page by hand
- resolve a comment and record the commit that fixed it
- run the review loop on a laptop without a pull request
- keep an agent from finishing while comments are still open

## Example prompts
- List the open review comments on branch `feature/cart`
- Wait for a new comment, then fix what it points at
- Resolve that comment and record the commit sha

## Similar
- [Front-End Checklist](https://affpapa.org/en/nevibecode/mcp/front-end-checklist.md) — MCP server · ★ 74559
- [Codebase Memory](https://affpapa.org/en/nevibecode/mcp/codebase-memory.md) — MCP server · ★ 47392
- [Serena MCP: the IDE for your agent](https://affpapa.org/en/nevibecode/mcp/serena-mcp-the-ide-for-your-agent.md) — MCP server · ★ 30677
- [Repomix](https://affpapa.org/en/nevibecode/mcp/repomix.md) — MCP server · ★ 29027
- [Repowise](https://affpapa.org/en/nevibecode/mcp/repowise.md) — MCP server · ★ 7891
- [sem](https://affpapa.org/en/nevibecode/mcp/sem.md) — MCP server · ★ 3422

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
