# PinchTab SMCP Plugins This directory holds plugins for [SMCP](https://github.com/sanctumos/smcp) (Model Context Protocol server for the Animus/Letta/Sanctum ecosystem). SMCP discovers plugins by scanning a directory for `plugins//cli.py` and running `python cli.py --describe` to get tool schemas. ## SMCP contract (reference) Instructions below match the SMCP plugin contract. If your SMCP version differs, prefer [sanctumos/smcp](https://github.com/sanctumos/smcp) and its docs. - **Discovery:** SMCP scans the directory set in **`MCP_PLUGINS_DIR`** (or its default `plugins/`). For each subdirectory `` that contains a file **`cli.py`**, it runs `python cli.py --describe` and expects a single JSON object on stdout with: - **`plugin`:** `{ "name", "version", "description" }` - **`commands`:** array of `{ "name", "description", "parameters": [ { "name", "type", "description", "required", "default" } ] }` - **Fallback:** If `--describe` is not supported, SMCP may run `python cli.py --help` and scrape an "Available commands:" section (no param schemas). - **Tool naming:** Registered tools are **`__`** (double underscore), e.g. `pinchtab__navigate`. Legacy `plugin.command` may still be supported. - **Execution:** For a tool call, SMCP runs `python cli.py --arg1 val1 --arg2 val2 ...`. Argument names use **kebab-case** (`--base-url`, `--instance-id`). SMCP maps underscores to dashes; booleans `true` become `--flag` only; arrays become repeated `--arg item`. Default timeout is **300 seconds**. The plugin must print a **single JSON object to stdout**; SMCP returns it as the tool result. - **Plugin layout:** Each plugin must live in a folder `/` with **`cli.py`** (required, and must be executable). `__init__.py`, `README.md`, and `requirements.txt` are optional. ## Installation (PinchTab plugin) 1. **Point SMCP at this plugins directory** - Set **`MCP_PLUGINS_DIR`** to the path of **this** directory (the one that **contains** the `pinchtab` folder). - Example: if the repo is at `/home/me/pinchtab`, set `MCP_PLUGINS_DIR=/home/me/pinchtab/plugins`. SMCP will then find `pinchtab/cli.py` and discover the plugin. - Alternatively, copy the **`pinchtab`** folder into your existing SMCP plugins directory so you have `.../plugins/pinchtab/cli.py`. 2. **Make the CLI executable** ```bash chmod +x /path/to/plugins/pinchtab/cli.py ``` 3. **No Python dependencies** for this plugin (stdlib only). Skip `pip install -r requirements.txt` for runtime. 4. **Restart the SMCP server** so it rescans and loads the plugin. ## Verify discovery From the repo root: ```bash python3 plugins/pinchtab/cli.py --describe | head -30 ``` You should see JSON with `"plugin": {"name": "pinchtab", ...}` and `"commands": [...]`. ## PinchTab URL and auth - The plugin defaults to **`--base-url http://localhost:9867`** (orchestrator). Agents pass `base_url`, and optionally `token` and `instance_id`, per tool call; no plugin-specific env vars are required. - If PinchTab is protected with **`PINCHTAB_TOKEN`**, agents must pass `token` in the tool arguments (or configure it in your MCP server if it supports per-plugin env). --- ## pinchtab Full SMCP plugin for the PinchTab HTTP API: health, instances, instance-start/stop, tabs, navigate, snapshot, action, actions, text, screenshot, pdf, evaluate, cookies-get, stealth-status. - **Path:** `pinchtab/` (so SMCP sees `plugins/pinchtab/cli.py`). - **Describe:** `python cli.py --describe` returns the JSON schema above. - **Tests:** `cd pinchtab && python3 -m venv .venv && .venv/bin/pip install pytest && .venv/bin/pytest tests/ -v` See [pinchtab/README.md](pinchtab/README.md) for command list and usage.