Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y openscreenshot
MCP client config
{
"mcpServers": {
"openscreenshot": {
"command": "npx",
"args": [
"-y",
"openscreenshot"
]
}
}
}The whole page. One click. Yours to keep.
Full-page screenshots for Chrome and Firefox. Free editing. Local processing. No account.
|
Add to Chrome Chrome · Edge · Brave · Arc · Chromium |
Add to Firefox Firefox for desktop · 140+ |
|
MCP Local server · client setup required |
CLI Terminal · scripts · CI/CD |
Website · Docs · Roadmap · Report a bug
Chrome preview. Screenshot capture and editing are also available in Firefox.
Capture the full web page.
The full tour, every shortcut, and the settings reference live in the docs.
| Chrome & Chromium | Firefox | |
|---|---|---|
| Install | Chrome Web Store | Firefox Add-ons |
| Full-page, visible-area & region capture | ✓ | ✓ |
| Annotations, redaction & local history | ✓ | ✓ |
| Image, PDF & clipboard export | ✓ | ✓ |
| Screen recording | Chrome | Not available |
Firefox requires desktop version 140 or later. The Chrome extension also works in Edge, Brave, Arc, and other Chromium browsers. Screen-wide color picking and floating capture windows appear only when the browser supports them.
Prefer a capture menu on every click? Turn off Express mode in settings. For alternatives and a sourced feature comparison, see How it compares.
Choose Capture element from the page or extension right-click menu, or from the popup when Express mode is off. Hover over a card, image, chart, or table to highlight it. Use ↑ / ↓ to select a larger or smaller area, or ← / → to move between elements without a mouse. Click or press Enter to capture; Esc cancels.
The capture follows your existing Editor, Clipboard, or Download setting. The element must be fully visible: scroll it into view, or use the Capture full page fallback offered for clipped elements. Content inside an iframe is captured as part of the iframe's visible rectangle. No new permissions are needed. This feature is available in source builds and has not yet been released to the stores.
host_permissions is empty: activeTab grants access on your click, and the extension
does not have standing access to every website. Captures, recordings, and edits stay
in local browser storage until you export or delete them. Chrome can optionally request
broader access for recording across sites; Firefox does not request recording permissions. Full policy: PRIVACY.md.
| Permission | Why |
|---|---|
activeTab | Access the current tab — only when you click the extension, use a shortcut, or pick a capture from the right-click menu |
scripting | Inject on-demand page functions for scroll-and-stitch, region selection, the quick-mode clipboard write, and the recording's click tracker |
storage (+ unlimitedStorage) | Settings, the last region rect, editing drafts, a parked Record click, and stashing large full-page PNGs and recording chunks for the editor |
downloads | Save exports, quick-mode captures, and recording exports to your Downloads folder |
contextMenus | Add one capture submenu to the page right-click menu |
clipboardWrite | Copy a screenshot from the editor or from quick mode; it never reads the clipboard |
offscreen (Chrome) | Run the recording engine in a hidden document — MediaRecorder and the IndexedDB writes need a page context a service worker doesn't have |
tabCapture (Chrome, optional) | Requested once, at your first recording; every recording after that starts in one click |
<all_urls> (Chrome, optional host) | Only if you turn on "Record across sites" — keeps click tracking alive when a recording navigates to a new origin |
TypeScript (strict) + Preact, bundled by Vite + @crxjs/vite-plugin. One runtime dependency (Preact); unit tests with Vitest. Node.js 22.19+ and pnpm 10.33.0.
pnpm install --frozen-lockfile
pnpm run icons
| Chrome | Firefox | |
|---|---|---|
| Develop | pnpm run dev | pnpm run dev:firefox |
| Build | pnpm run build | pnpm run build:firefox |
| Package | pnpm run package | pnpm run package:firefox |
| Load locally | chrome://extensions → Developer mode → Load unpacked → dist/ | about:debugging → This Firefox → Load Temporary Add-on → dist-firefox/manifest.json |
pnpm typecheck
pnpm lint
pnpm test
pnpm format:check
pnpm lint:firefox # validate dist-firefox/ after building
The Firefox release guide covers reviewer source archives, verification, and automated Mozilla submissions. Tagged releases have separate Chrome and Firefox workflows; store review determines when each update becomes available.
For the website, use pnpm site:dev or pnpm site:deploy. See
CONTRIBUTING.md for the contribution workflow.
openscreenshot/
├── manifest.json # MV3 manifest (crxjs entry)
├── public/ # icons + i18n messages
├── src/
│ ├── background/ # service worker (capture + recording coordinator)
│ ├── content/ # on-demand capture funcs (scroll, region, recording click tracker)
│ ├── control/ # recording control tab: area, camera preview, Start/Stop (Preact)
│ ├── editor/ # annotation editor + export (Preact, own tab)
│ ├── offscreen/ # recording engine: MediaRecorder + IndexedDB chunks
│ ├── popup/ # popup UI (Preact)
│ ├── recorder/ # recording editor: timeline, zoom, trim, export (Preact, own tab)
│ └── shared/ # design tokens, messaging, storage, types, utils
├── mcp/ # optional local CLI + MCP server
├── site/ # Astro website + localized content
├── site-dist/ # generated site build, served by site-worker.js
├── tests/unit/ # unit tests (Vitest)
└── scripts/ # icon + screenshot pipelines
openscreenshot (npm) is a separate, optional tool that drives the Chrome already on your
machine — also fully local:
pnpm dlx openscreenshot shot https://example.com --out shot.png --full
Add this server entry to your MCP client’s configuration, then call capture_screenshot:
{
"command": "pnpm",
"args": ["dlx", "openscreenshot", "serve"]
}
The server runs locally over stdio. Your client must support launching a local MCP process; clients that only accept remote MCP URLs need a compatible bridge. Setup and availability depend on the client.
Built for the terminal-heavy parts of the job:
Desktop and web apps are also in progress. Follow their development on the roadmap.
See CONTRIBUTING.md and the roadmap. If OpenScreenShot is useful to you, you can buy me a coffee.
MIT © OpenScreenShot @PGHQdev