Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Agents and MCP

Remote MCP: any agent, no checkout

pando mcp --http serves a whole Grovedock server to agents anywhere over the Model Context Protocol (2026-07-28, and the earlier versions from 2024-11-05, all served statelessly). An agent needs a URL and a token, nothing else: it reads, searches, writes and lands files, opens and reviews change requests, reports CI checks and reads its inbox, without cloning anything.

pando mcp --http 0.0.0.0:7430 --server https://pando.example.com --allowed-host mcp.example.com
pando token create claude --as agent/claude-01 --repo lumen/fleet --role write   # one token per agent

Connect an agent with the URL and its token:

claude mcp add --transport http pando https://mcp.example.com/mcp \
  --header "Authorization: Bearer $PANDO_TOKEN"                  # Claude Code

Claude Desktop, Cursor, ChatGPT, Gemini CLI and other clients that speak MCP over streamable HTTP take the same URL and header. Clients on versions before 2026-07-28 start with initialize as usual; the gateway answers it without keeping a session.

  • The token decides everything. The gateway passes each request’s token to the server and holds no credentials of its own, so an agent can do exactly what its token allows: limited to some repositories, a highest role, an expiry, every action in the audit log.
  • Protected branches still hold. When an agent writes to one, the change goes to a new review/ branch and a change request opens, asking the person the agent answers to.
  • Stateless: run as many gateways as you like behind a load balancer; nothing is shared.
ToolWhat it does
pando_repositoriesrepositories you can read, with today’s activity
pando_read_file, pando_list_directory, pando_find_filesread code at any branch or change
pando_history, pando_blame, pando_diffwho changed what, and when
pando_writewrite or delete files and land them as one change (or open a change request on a protected branch)
pando_change_requests, pando_change_requestchange requests and what blocks each
pando_open_change_request, pando_comment, pando_reviewpropose, discuss, approve or request changes
pando_land_change_requestland once nothing blocks it
pando_report_checkreport a CI result on a change request
pando_issues, pando_issue, pando_open_issue, pando_comment_on_issue, pando_update_issuework to do: read, open, discuss, close, assign
pando_inboxwhat needs you: assigned issues, requested reviews, changes requested on yours

The agent loop

  1. Someone assigns an issue to an agent (pando issue assign 12 agent/fix-01, or in the console). An issue webhook can wake the agent’s runner at once.
  2. The agent calls pando_inbox, reads the issue with pando_issue, and writes the fix on a branch with pando_write.
  3. It opens a change request saying “Fixes #12” with pando_open_change_request; the person it answers to is asked to review.
  4. After approval and passing checks it lands with pando_land_change_request, and the issue closes itself.

Local MCP, in a workspace

pando mcp serves Grovedock as Model Context Protocol tools over stdio, so coding agents read, commit and land without shelling out:

claude mcp add pando -- pando mcp      # Claude Code; other MCP clients work the same way

Run it inside a workspace. The tools:

ToolWhat it does
pando_catread a file at any revision
pando_lslist a directory at any revision
pando_findfind files whose path contains a string
pando_loghistory, optionally for one path
pando_blamewhich change last touched each line
pando_diffdiff between two revisions
pando_statusuncommitted changes in the workspace
pando_commitcreate a changeset from workspace changes
pando_landland committed work on the branch
pando_syncupdate the workspace to the branch head

Many agents on one branch

Agents can all land on main at once. The server rebases changes that touch different files and lands them in batches, so an agent never has to pull, rebase and retry. A change that really conflicts is refused with the conflicting paths, and the branch is untouched. On one laptop, 1,000 agents landing at once sustain about 500 changes a second; see Benchmarks.

SDKs

Read files, list directories, search and inspect history from your own tools, without a clone. Every client verifies content against its BLAKE3 id.

LanguagePackageExample
Pythonsdk/pythonClient(url).read_file("src/lib.rs")
TypeScriptsdk/typescriptawait new Client(url).readFile("src/lib.rs")
Gosdk/goc.ReadFile(ctx, "main", "src/lib.rs")

For any other language, generate a client from pando.proto. Object encodings are in pando_objects.proto.