Skip to main content
Glama
domci

pinchtab-mcp

by domci

What is this?

PinchTab is a standalone Go binary that gives AI agents full control over a Chrome browser via an HTTP API. It is token-efficient, headless-capable, and supports persistent browser profiles.

pinchtab-mcp is a thin Model Context Protocol (MCP) stdio server that wraps PinchTab's HTTP API — making it available as a standard MCP tool in any compatible AI coding agent or chat client.

AI client (OpenCode / Cursor / Claude Desktop)
        │  MCP stdio (JSON-RPC)
        ▼
  pinchtab-mcp  ──HTTP──▶  PinchTab :9867  ──CDP──▶  Chrome

Why a separate MCP wrapper?

PinchTab exposes a plain HTTP API. MCP clients communicate over stdin/stdout using JSON-RPC. This server bridges the two, adding:

  • Single pinchtab tool with a unified action parameter — minimal context bloat

  • Typed, validated inputs via Zod

  • Auth token forwarding, configurable timeout

  • Screenshot responses as MCP image content (base64 JPEG)


Related MCP server: BrowserGenie MCP Server

Prerequisites

Requirement

Notes

Node.js ≥ 18

Required to run the MCP server

PinchTab

The Go binary must be running locally (or in Docker)

Install PinchTab

# macOS / Linux — recommended
curl -fsSL https://pinchtab.com/install.sh | bash

# Docker
docker run -d -p 9867:9867 ghcr.io/pinchtab/pinchtab:latest

Note: npm install -g pinchtab does not reliably install the binary on all platforms. Use the install script or Docker instead.

Full PinchTab docs: pinchtab.com/docs


Setup

1. Clone and build

git clone https://github.com/domci/pinchtab-mcp.git
cd pinchtab-mcp
npm install
npm run build

This compiles src/index.ts to dist/index.js.

2. Start PinchTab

In a separate terminal — PinchTab must be running before the MCP server is used:

# Basic
pinchtab

# With an auth token (recommended)
BRIDGE_TOKEN=my-secret pinchtab

If the MCP tool returns Connection failed, PinchTab is not running. Start it as above and retry.

3. Configure your client

OpenCode

Add to ~/.config/opencode/opencode.json (global) or opencode.json in your project root:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "pinchtab": {
      "type": "local",
      "command": ["node", "/absolute/path/to/pinchtab-mcp/dist/index.js"],
      "enabled": true,
      "environment": {
        "PINCHTAB_URL": "http://localhost:9867",
        "PINCHTAB_TOKEN": "my-secret"   // omit if no auth token
      }
    }
  }
}

Cursor IDE

Add to ~/.cursor/mcp.json (global) or .cursor/mcp.json in your project root:

{
  "mcpServers": {
    "pinchtab": {
      "command": "node",
      "args": ["/absolute/path/to/pinchtab-mcp/dist/index.js"],
      "env": {
        "PINCHTAB_URL": "http://localhost:9867",
        "PINCHTAB_TOKEN": "my-secret"
      },
      "type": "stdio"
    }
  }
}

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "pinchtab": {
      "command": "node",
      "args": ["/absolute/path/to/pinchtab-mcp/dist/index.js"],
      "env": {
        "PINCHTAB_URL": "http://localhost:9867"
      }
    }
  }
}

Environment variables

Variable

Default

Description

PINCHTAB_URL

http://localhost:9867

Base URL of the running PinchTab server

PINCHTAB_TOKEN

(empty)

Bearer token — must match BRIDGE_TOKEN set on PinchTab

PINCHTAB_TIMEOUT

30000

HTTP request timeout in milliseconds


Tool reference

A single pinchtab tool is registered. All operations are dispatched via the action parameter.

Actions

Action

Description

Key parameters

navigate

Navigate to a URL

url, newTab?, blockImages?, timeout?

snapshot

Accessibility tree of the current page

filter?, format?, diff?, maxTokens?, depth?

click

Click an element

ref

type

Type text into a focused element

ref, text

fill

Clear and fill an input

ref, text

press

Press a key

ref, key (e.g. Enter, Tab) — for form submission prefer click on the submit button

hover

Hover over an element

ref

scroll

Scroll the page

ref?, scrollY

select

Select a dropdown option

ref, value

focus

Focus an element

ref

text

Extract readable page text (~800 tokens)

mode? (readability|raw)

tabs

List, open, or close tabs

tabAction? (list|new|close)

screenshot

Capture a JPEG screenshot

quality? (1–100)

evaluate

Execute JavaScript in the page

expression

pdf

Export page as PDF

landscape?, scale?

health

Check PinchTab connectivity

All actions accept an optional tabId to target a specific tab.

Token strategy

Scenario

Recommended action

Approx. tokens

Read page content

text

~800

Find interactive elements

snapshot with filter=interactive&format=compact

~3,600

Track page changes

snapshot with diff=true

delta only

Visual verification

screenshot

~2,000


Example prompts

Navigate to https://news.ycombinator.com and extract the top 10 story titles.
use pinchtab
Go to https://example.com/login, fill in the username and password fields, and submit the form.
use pinchtab
Take a screenshot of the current page.
use pinchtab

Development

# Install dependencies
npm install

# Build (TypeScript → dist/)
npm run build

# Run directly
node dist/index.js

Project structure

pinchtab-mcp/
├── src/
│   └── index.ts       # MCP stdio server — all logic lives here
├── dist/              # Compiled output (git-ignored)
├── package.json
└── tsconfig.json

Troubleshooting

Connection failed: fetch failed. Is PinchTab running at http://localhost:9867? The PinchTab binary is not running. Start it with pinchtab in a separate terminal, then retry.

npm install -g pinchtab installs but pinchtab command is not found The npm package does not install the Go binary on all platforms. Use the install script instead:

curl -fsSL https://pinchtab.com/install.sh | bash

press Enter doesn't submit a form / page doesn't navigate Some sites handle form submission via click events on the submit button rather than keyboard events on the input. Use click on the submit button ref instead of press Enter on the input.

Search input shows "queryEnter" as its value This happens when press appends literally to the field value. Use fill to set the value cleanly, then click the submit button.


Security notes

  • BRIDGE_TOKEN / PINCHTAB_TOKEN — always set a token in production environments; rotate it regularly.

  • evaluate executes arbitrary JavaScript inside Chrome — restrict access to trusted agents and domains.

  • PinchTab should not be exposed to the public internet; keep it on localhost or behind a private network.


License

MIT — see LICENSE.


A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    -
    quality
    -
    maintenance
    An extension-based MCP server that enables AI assistants to control your existing Chrome browser, leveraging your active login states and settings for automation. It provides over 20 tools for tasks like semantic tab search, screen capture, network monitoring, and direct element interaction.
  • A
    license
    B
    quality
    B
    maintenance
    An MCP server that provides AI models with full browser automation capabilities through Chrome. It enables navigation, interaction, screenshots, and complete DevTools access by bridging AI clients with a companion Chrome extension.
    99
    9
    2
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Hosted real Google Chrome MCP with per-user persistent state. Navigate, click, type, screenshot.

  • Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/domci/pinchtab-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server