
Security News
Ruby's Bundler 4.0.18 Extends Cooldown to bundle lock and bundle cache
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.
screenpipe-mcp
Advanced tools
MCP server for screenpipe - search your screen recordings and audio transcriptions
https://github.com/user-attachments/assets/7466a689-7703-4f0b-b3e1-b1cb9ed70cff
MCP server for screenpipe - search your screen recordings, audio transcriptions, and control your computer with AI.
The most reliable setup is to install the screenpipe desktop app and connect Claude Desktop from Settings → Connections (or during onboarding). This writes a config that:
bun shipped with the app (an absolute path — no Node/npx
or PATH dependency, and ~3× faster cold start), andSCREENPIPE_LOCAL_API_KEY into the server's env, so the MCP
authenticates instantly instead of running slow key discovery at startup.Both matter: a config without the key forces the server to discover it via
subprocess fallbacks, which on a cold package cache can stall Claude Desktop's MCP
startup and produce Could not attach to MCP server screenpipe.
If you're not using the desktop app, edit your Claude Desktop config:
~/Library/Application Support/Claude/claude_desktop_config.json%AppData%\Claude\claude_desktop_config.json{
"mcpServers": {
"screenpipe": {
"command": "npx",
"args": ["-y", "screenpipe-mcp@latest"],
"env": {
"SCREENPIPE_LOCAL_API_KEY": "sp-…"
}
}
}
}
Requires Node/npx on PATH. Pin @latest so the first install doesn't cache a
stale version forever. Get your key with screenpipe auth token. If you omit the
key, the server will try to discover it (bundled bun → npx → local DB) — this works
but is slower and can time out on first run.
Enterprise admins: add SCREENPIPE_ENTERPRISE_TOKEN (and, for orgs running their
own query gateway, SCREENPIPE_TEAM_API_URL) to the same env block to get the
team-* tools — see Enterprise team tools.
The MCP server can run over HTTP using the Streamable HTTP transport, allowing remote MCP clients to connect over the network instead of stdio. This is ideal when your AI assistant (e.g., OpenClaw) runs on a different machine than screenpipe.
# loopback only (default)
npx -y screenpipe-mcp --http --port 3031
# expose to your LAN with bearer auth
npx -y screenpipe-mcp --http --listen-on-lan --api-key $(openssl rand -hex 16)
# or from source — must build first so dist/ exists
bun install && bun run build
bun run start:http -- --port 3031
Tip:
npx screenpipe-mcp-http(without--http) does not work — npm resolves by package name, and there is noscreenpipe-mcp-httppackage. The HTTP server ships as a transport inside thescreenpipe-mcppackage; use--httpas shown above, or invoke the bin directly withnpx -p screenpipe-mcp screenpipe-mcp-http.
The server exposes:
http://localhost:3031/mcp — Streamable HTTP transport (POST for requests, GET for SSE stream)http://localhost:3031/health — always unauthenticated, for monitorsOptions:
| Flag | Description | Default |
|---|---|---|
--port | Port for the MCP HTTP server | 3031 |
--screenpipe-port | Port where screenpipe API is running | 3030 |
--listen-on-lan | Bind 0.0.0.0 so other devices on the LAN can connect. Requires --api-key. | off (binds 127.0.0.1) |
--api-key <secret> | Bearer token required for non-loopback requests (Authorization: Bearer <secret>). Loopback always allowed. | none |
Connecting a remote MCP client:
Point any MCP client that supports HTTP transport at the /mcp endpoint:
{
"mcpServers": {
"screenpipe": {
"url": "http://<your-ip>:3031/mcp",
"headers": {
"Authorization": "Bearer <your-secret>"
}
}
}
}
If your machines are on different networks, expose port 3031 via Tailscale, SSH tunnel, or similar — see the OpenClaw integration guide for detailed examples.
Note: The HTTP server currently exposes
search_contentonly. The stdio server has the full tool set (export-video, list-meetings, activity-summary, search-elements, frame-context). We're working on bringing HTTP to full parity.
Clone and build from source:
git clone https://github.com/screenpipe/screenpipe
cd screenpipe/packages/screenpipe-mcp
bun install
bun run build
Then configure Claude Desktop:
{
"mcpServers": {
"screenpipe": {
"command": "node",
"args": ["/absolute/path/to/screenpipe-mcp/dist/index.js"]
}
}
}
Note: Restart Claude Desktop after making changes.
team-*)team-search, team-devices and team-records query your whole org instead of
just this machine. They are registered only when an enterprise admin token is
present, and they need two independent settings: a token, and the base URL of
the API that token is valid for.
An sk_ent_… enterprise admin token, resolved in this order:
SCREENPIPE_ENTERPRISE_TOKEN env var (MCP config, terminal)team_api_token in ~/.screenpipe/enterprise.json — written by the desktop
app's Settings → Privacy → Admin Team API TokenNo token → the team-* tools do not appear at all.
| Priority | Where | Example |
|---|---|---|
| 1 | --team-api-url flag | npx -y screenpipe-mcp --team-api-url https://sp-gw.acme.internal/api/enterprise/v1 |
| 2 | SCREENPIPE_TEAM_API_URL env var | SCREENPIPE_TEAM_API_URL=https://sp-gw.acme.internal/api/enterprise/v1 |
| 3 | gateway_url in ~/.screenpipe/enterprise.json | { "gateway_url": "https://sp-gw.acme.internal/api/enterprise/v1" } |
| 4 | (default) the hosted control plane | https://screenpi.pe/api/enterprise/v1 |
Trailing slashes are trimmed, so both …/v1 and …/v1/ work.
If your org runs its own query gateway, you must set this. On the write-only
archive tier your telemetry never reaches the hosted API — it lands in your own
object storage and is served by a gateway inside your network. The hosted API has
no read path to that data, so leaving the default in place makes every team-*
call fail with HTTP 401, even though the tools show up and the token is valid.
The bearer token is the same either way; only the base URL moves.
Full Claude Desktop config for a gateway org:
{
"mcpServers": {
"screenpipe": {
"command": "npx",
"args": ["-y", "screenpipe-mcp@latest"],
"env": {
"SCREENPIPE_LOCAL_API_KEY": "sp-…",
"SCREENPIPE_ENTERPRISE_TOKEN": "sk_ent_…",
"SCREENPIPE_TEAM_API_URL": "https://sp-gw.acme.internal/api/enterprise/v1"
}
}
}
}
Verify which base a running server picked up by asking for team-devices — the
error text on a missing token also prints the base currently in use.
screenpipe-mcp >= 0.19.0. 0.18.15 and earlier hardcode the
hosted base and cannot be repointed at a gateway at all. Check with
npm view screenpipe-mcp version, or read serverInfo.version from the MCP
initialize response.gateway_url from
the org's policy poll. It needs an admin signed in on that machine; on a
server or CI box use the env var or the flag.--http) exposes search_content only; team-* tools are
stdio-only..mcpb bundle (Claude Desktop extension install) has no UI for these
variables — use the manual NPX config above for gateway orgs.Test with MCP Inspector:
npx @modelcontextprotocol/inspector npx screenpipe-mcp
| Mode | Command | Use Case |
|---|---|---|
| stdio (default) | npx screenpipe-mcp | Claude Desktop, local MCP clients |
| HTTP | npx screenpipe-mcp --http | Remote clients, network access, OpenClaw on VPS |
Search through recorded content with content type filtering:
all — OCR + Audio + Accessibility (default)ocr — Screen text from screenshotsaudio — Audio transcriptionsinput — User actions (clicks, keystrokes, clipboard, app switches)accessibility — Accessibility tree textparsed — Compact app-specific messages, emails, tasks, documents, and code review (experimental; may be empty when parsing is disabled or unsupported)frame_id or resolved actor_idExport screen recordings as video files:
Get a lightweight compressed activity overview for a time range:
List detected meetings with id, duration, app, attendees, and note snippet. Pass q to filter by substring (title, attendees, notes) — q searches all meeting history, so omit the time range when looking for a person or topic. Follow up with get-meeting (optionally include_transcript: true) for the full note and speaker-attributed transcript.
Search structured UI elements (accessibility tree nodes and OCR text blocks):
outline view by default — a deduped, indented tree of the
text-bearing nodes (#id refs, (off-screen) flags), ~91% fewer tokens than
raw element JSONpurpose: "automation" for automation targeting context with response-local
refs, best-effort stable keys, state, bounds, and allowed actions. Refresh it
before each action; historical database ids are not live control handles.
computer-use remains a legacy alias.purpose is omitted, the MCP follows the desktop AI context use setting.
The backward-compatible default remains the read/memory outline.The whole element tree for one frame, as the same compact outline. Pass
purpose: "automation" for the automation targeting view.
Get accessibility text, parsed tree nodes, and extracted URLs for a specific frame.
Fast FTS5 keyword search across OCR + audio combined. Returns matches with frame_id, app, timestamp, and text positions.
Manage the meeting store. list-meetings filters by substring; get-meeting returns title/attendees/times/full note (add include_transcript: true for the speaker-attributed transcript). update-meeting writes only the fields you pass. start-meeting and stop-meeting drive manual meeting recording sessions.
Speaker identification workflow. Search by name prefix, list speakers that haven't been named yet, rename a speaker, or merge two speakers when the same person was detected as different ones.
Tag a screen frame (vision) or audio chunk (audio) so it can be retrieved later.
Create, update, or delete a persistent memory (facts, preferences, decisions the user wants to remember).
Send a notification to the screenpipe desktop UI.
Start or stop audio recording. This does not pause or resume screen capture.
Check if screenpipe is running and healthy. Returns recording status, frame/audio stats, and timestamps.
List available audio input/output devices for recording.
List available monitors/screens for capture.
Manage pipes — scheduled AI automations that run a markdown prompt on a schedule (e.g. "every day at 9am"). list-pipes shows enabled state + schedule; create-pipe creates one; run-pipe triggers a one-off test run; pipe-logs fetches recent execution output.
Team-tier tools, registered only when an enterprise admin token is configured. team-search runs substring search across the entire org's telemetry, team-devices lists enrolled devices (hostname, OS), and team-records dumps chronological frame, parsed-app, or audio data for a time window. Orgs running their own query gateway must also set SCREENPIPE_TEAM_API_URL — see Enterprise team tools for the full precedence order.
curl), the list endpoints (/search, /elements, /frames/{id}/elements) accept ?format=csv|tsv for a columnar table (column names written once) and ?fields=a,b,c to select only the columns you need (dotted paths like content.text); the element endpoints also accept ?format=outline (~91% fewer tokens than JSON) or ?format=automation for fresh refs, best-effort keys, actions, state, and bounds. On list-shaped results that is a 70–91% token cut versus the default JSON, which stays unchanged when no param is set.The Screenpipe MCP server is a local-only bridge between Claude and your local Screenpipe instance. It does not collect, transmit, or store tool results, recordings, OCR text, audio transcripts, screenshots, or UI events on its own.
When Claude invokes a tool (search-content, activity-summary, etc.)
the MCP server forwards the request to http://localhost:3030 — the
Screenpipe daemon running on your machine — and returns the response.
That's the entire data path.
The MCP server sends privacy-preserving crash and error reports to Screenpipe's Sentry project so we can diagnose startup failures like "server disconnected" or "could not attach to MCP server". These reports include the MCP package version, runtime, transport mode, and sanitized exception details. They do not include tool arguments, tool results, screen content, audio, transcripts, screenshots, API tokens, or your home-directory path.
To disable crash/error reporting, set any of:
SCREENPIPE_MCP_SENTRY_DISABLED=1, SCREENPIPE_TELEMETRY_DISABLED=1, or
SCREENPIPE_DISABLE_TELEMETRY=1 in the MCP launch environment.
Tool calls are passed straight through to your local Screenpipe daemon and the results stream back to Claude. The MCP server doesn't keep anything.
Nothing is stored by the MCP server itself. Recordings, OCR text,
audio transcripts, and UI events are stored by the Screenpipe app in a
SQLite database under ~/.screenpipe/ on your device. Retention is
whatever you configure inside the Screenpipe app — typically you
control it via the storage settings panel.
The MCP server talks to localhost:3030 for tool calls and to Screenpipe's
Sentry project for sanitized crash/error reports unless disabled as above.
It does not contact Anthropic or send recorded content to Screenpipe's servers.
If you choose to enable optional cloud features inside the Screenpipe
app itself (e.g. cloud sync, cloud AI), those are governed by the
Screenpipe app's privacy policy, not this MCP server's data flow.
The MCP server has no persistent state. The data your Screenpipe app
captures is retained according to your Screenpipe storage configuration
and is deletable at any time (rm -rf ~/.screenpipe removes everything).
The Screenpipe MCP server is source-available under the Screenpipe Commercial License and the entire source is public at https://github.com/screenpipe/screenpipe/tree/main/packages/screenpipe-mcp. Every line is auditable.
Questions or concerns: open an issue at https://github.com/screenpipe/screenpipe/issues or reach out via https://screenpi.pe.
FAQs
MCP server for screenpipe - search your screen recordings and audio transcriptions
The npm package screenpipe-mcp receives a total of 3,951 weekly downloads. As such, screenpipe-mcp popularity was classified as popular.
We found that screenpipe-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.