OpenDocs MCP Server
OfficialClick on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenDocs MCP Serverdocument signing up a new user and save it as an App Flow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenDocs
An AI agent documents every feature of your app, so nothing stays a hidden gem.
OpenDocs turns an agent's browser session into a structured, re-runnable App Flow: screenshots plus steps, compiled into a guide your support team can share.
Status: alpha. Published to npm under the
alphatag.
What's here
This repo is the open-source client (MIT):
Package | What it is |
| One binary per OS: the |
| The public API contract, limits, and redaction patterns shared with the OpenDocs service |
The service (API and web) lives in apps/api and apps/web and can be self-hosted (see below). The client only sends screenshots your
agent picks. Sensitive fields are covered in the page before capture, on by default.
Related MCP server: DemoMotion
Install (alpha)
npx -y opendocs-cli@alpha login --key <your-key>Claude Code:
claude mcp add opendocs -- npx -y opendocs-cli@alpha mcpCursor:
{
"mcpServers": {
"opendocs": {
"command": "npx",
"args": ["-y", "opendocs-cli@alpha", "mcp"]
}
}
}The alpha talks to https://opendocs.tunnel.juniyadi.id by default; set OPENDOCS_API_URL to override it.
Recording on staging
If you record on a staging host but the app is public under a different domain, set OPENDOCS_URL_MAP so the
doc shows the public host instead:
OPENDOCS_URL_MAP=pfnapp.my.id=pfnapp.idFormat is comma-separated from=to pairs. Only the host (and port) is swapped; path, query and hash are kept.
Screenshots are not edited, so keep the host out of the captured viewport (e.g. no visible URL bar).
Self-host
One docker compose stack: Postgres, S3 storage (bundled MinIO by default), the api and the web app.
Everything is served from one port (docs at /, dashboard at /admin, api at /api).
Requirements: Docker with Compose v2, and a GitHub account to create an OAuth app. Sign-in is GitHub
only; without GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET nobody can log in.
Copy the config and edit it.
.env.exampledocuments every variable.git clone https://github.com/opendocs-dev/opendocs && cd opendocs cp .env.example .envRequired:
PUBLIC_URL(the URL users open, no path),BETTER_AUTH_SECRET(32+ characters,openssl rand -hex 32),ADMIN_EMAILS(comma list),POSTGRES_PASSWORD, theS3_*keys (S3_SECRET_ACCESS_KEYis also the MinIO password), and the GitHub pair below. Images are pulled fromghcr.io/opendocs-dev/opendocs-{api,web}at the tag inOPENDOCS_VERSION(.env.examplesetsedge, the latestmain; pin a release such as1.0.0for production).PUBLIC_URLand the other settings are read at runtime: edit.envanddocker compose up -dto apply.Create a GitHub OAuth app (GitHub, Settings, Developer settings, OAuth Apps). Set the callback URL to
${PUBLIC_URL}/api/auth/callback/githuband put the client id and secret inGITHUB_CLIENT_IDandGITHUB_CLIENT_SECRET.Start it.
docker compose up -dThe api validates its config on start and exits with a list of every bad variable (
docker compose logs api), then applies database migrations.Open
PUBLIC_URLand sign in with GitHub. The first user to sign in becomes the owner; put your email inADMIN_EMAILSso it is an admin. Create an API key under/admin/keys.Point the CLI at your instance:
export OPENDOCS_API_URL=<PUBLIC_URL>/api/v1 npx -y opendocs-cli@alpha login --key <your-key>
TLS: the stack publishes plain HTTP on WEB_PORT (default 3000). Put a reverse proxy with TLS in front
and set PUBLIC_URL to its https URL.
External S3 (Cloudflare R2, Backblaze B2, AWS S3): set COMPOSE_PROFILES= (empty) in .env so MinIO is not
started, and set S3_ENDPOINT, S3_BUCKET, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY, S3_REGION
(R2 uses auto) and S3_FORCE_PATH_STYLE (false for AWS and R2). Create the bucket yourself.
Set ASSET_BASE_URL to serve images from a CDN or public bucket instead of through the api.
Upgrade: set the new OPENDOCS_VERSION in .env (not needed for edge), then
docker compose pull && docker compose up -d. Migrations run on api start; data lives in the
pgdata and miniodata volumes. The dev-only Postgres for tests is docker-compose.dev.yml.
To build the images from this checkout instead of pulling them:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildBuild from source
git clone https://github.com/opendocs-dev/opendocs && cd opendocs
bun install
bun run --cwd packages/cli build # → packages/cli/dist/opendocs
OPENDOCS_API_URL=<site>/api/v1 ./packages/cli/dist/opendocs login --key <your-key>Security
See SECURITY.md.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Loom for agents: AI agents record narrated product demos, plus transcripts, summaries, and search.
Browser-based QA for AI-built software. Test pages with real browsers via agents.
Captured web interfaces, screenshots, flows and structured evidence for AI coding agents.
Let your AI agent operate any website through a real, logged-in browser session.
11,617
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceRecords browser sessions and provides structured context (clicks, console, network, screenshots) for AI coding agents to understand and act upon.2MIT
- AlicenseNot gradedqualityBmaintenanceEnables an AI agent to operate a web app, record a deterministic session, and compile an editable project into a polished MP4 with zooms, cuts, captions, callouts, and reproducible renders.MIT
- AlicenseAqualityBmaintenanceTurn screen recordings into automated Playwright E2E reproduction tests, structured GitHub bug reports with clickable video timestamps, and SOP walkthroughs.611 npmMIT
- FlicenseNot gradedqualityAmaintenanceGives coding agents full browser context — user actions, network, console, storage, DOM events, and screen recordings — from captured browser flows. This lets agents debug reported issues and generate or run regression tests without spending time and tokens reproducing them.-