MCP Server

Offline

ToolPiper is an MCP server — 440 tools and 5 resources that give AI agents local inference, speech, vision and OCR, RAG, image generation and editing, video creation and generation, AX-powered browser automation, web scraping, PiperTest execution, outreach, SERP research, macOS system control, scheduling, and autonomous agent loops. Everything runs on-device.

Install

One command. All 440 tools are callable immediately, and the advertisement stays cheap: the wire ships tool names with schemas stripped to {type: object} except where typed parameters are genuinely needed, and an agent pulls full documentation on demand with tool_search and tool_docs. Add ?category= or ?profile= to the URL to advertise only a subset.

Claude CodeHTTP transport
claude mcp add --transport http toolpiper http://127.0.0.1:9998/mcp

Zero-config on loopback

A local connection to 127.0.0.1 needs no token and no consent — connection-level trust for a single-user machine. Only LAN and remote peers authenticate with a bearer.

No CLI middleman

Tools dispatch over HTTP to 127.0.0.1:9998. No ~/.toolpiper/mcp stdio binary in your path.

Per-tool permissions

Allow / Ask / Deny per tool lives in ToolPiper → Settings → Tool Permissions and travels with you, not the client. Remote bearer clients are listed in Connected Apps.

Other Clients

ToolPiper speaks MCP over Streamable HTTP. Any client that supports HTTP transport can connect to http://127.0.0.1:9998/mcp — Claude Code, Cursor, Devin, Codex, Gemini CLI, Cline. If a client offers a legacy "SSE" transport option, always pick Streamable HTTP instead.

Cursor / Devin / Gemini CLI

The same server entry works in each client's MCP config — ~/.cursor/mcp.json for Cursor, mcp_config.json for Devin, settings.json for Gemini CLI:

{
  "mcpServers": {
    "toolpiper": {
      "type": "http",
      "url": "http://127.0.0.1:9998/mcp"
    }
  }
}

Tool-count caps are handled for you

Some clients silently drop tools past a limit — Cursor at roughly 40, Devin at 100. ToolPiper recognises those clients and narrows the advertised set to fit: tools you explicitly allowed rank first, one slot is reserved for request_tools, and everything withheld stays reachable through it on demand. Narrowing, not truncation — a client we don't recognise gets the full catalog.

Scripted use

Sessions are created by initialize and carried in the Mcp-Session-Id header. On loopback no auth header is needed; from another machine (LAN/mesh) add Authorization: Bearer with the token from ~/Library/Application Support/ToolPiper/.toolpiper-token:

SESSION=$(curl -si -H "Content-Type: application/json" \
     -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"script","version":"1.0"}}}' \
     http://127.0.0.1:9998/mcp | tr -d '\r' | grep -i '^mcp-session-id:' | cut -d' ' -f2)

curl -H "Content-Type: application/json" -H "Mcp-Session-Id: $SESSION" \
     -d '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
     http://127.0.0.1:9998/mcp

Tools 440

Every row below derives from the same catalog the server advertises. Tool names are unprefixed — the MCP server namespace (toolpiper) provides branding and collision avoidance. Read-only tools advertise readOnlyHint and destructive tools advertise destructiveHint.

Core

33
audio_speakConvert text to speech and save as a WAV file. Pro $10/mo
audio_transcriberead-onlyTranscribe an audio file (WAV, MP3, M4A, FLAC) to text using on-device speech recognition. Pro $10/mo
audio_voice_cloneGenerate speech mimicking a voice from a reference audio sample. Pro $10/mo
chatread-onlyRun a prompt through a local LLM on this machine via ToolPiper.
claude_code_installInstall the bundled claude-tp helper so the user can run `claude-tp` in their terminal to launch Claude Code with ToolPiper as the inference backend and ToolPiper's MCP tools mounted.
claude_code_statusread-onlyRead-only diagnostic for the claude-tp helper installed by claude_code_install.
claude_code_uninstallReverse claude_code_install: removes the ~/.local/bin/claude-tp symlink, deletes the helper's config file, and revokes the inference bearer.
endpoint_listread-onlyList ToolPiper inference endpoints (LLM providers + models).
endpoint_recommendSuggest the best inference backend for the current conversation.
endpoint_setSwitch the inference backend ToolPiper uses.
endpoint_statusread-onlyShow the currently active inference backend for the caller.
model_checkpoint_addRegister the user's own pinned HuggingFace weights against a coded native media architecture family and start the download.
model_downloadStart downloading (or registering) a model, LoRA, VAE, or embedding from any source.
model_download_cancelCancel an in-flight model download by its download_id (from model_download_list or the response of model_download).
model_download_listread-onlyList active model downloads with their progress and download_id values.
model_listread-onlyList AI models available in ToolPiper.
model_loadLoad a model that is already downloaded into memory for inference.
model_repo_inforead-onlyFetch metadata, the full file list, a recommended variant, and (for community sources) the license and trigger words for a specific candidate.
model_searchread-onlyFind a model, LoRA, VAE, or embedding by free-text query across a source.
model_unloadUnload a model from memory to free RAM/VRAM.
system_resourcesread-onlyGet a live snapshot of Mac hardware resources — total/used/available RAM, GPU memory (Metal allocated + max, device utilization), GPU thermal state (nominal, fair, serious, critical), ANE activity (which backends are using the Neural Engine), and chip info (name, memory bandwidth).
system_statusread-onlyCheck if ToolPiper is running and get system status — loaded models, active backends, GPU thermal state, available RAM, and browser CDP connection state (connected, pageUrl).
text_embedread-onlyGenerate vector embeddings for text, entirely on-device.
text_translateread-onlyTranslate text between languages using Apple's on-device Translation framework.
tool_docsread-onlyGet the full description and typed input schema for named tools.
tool_searchread-onlyFind the right tools for a task by describing what you want to do in natural language.
vision_camera_captureread-onlyCapture a single still frame from the Mac's webcam and return it as a base64-encoded PNG (≤1280 px on the longest edge). Pro $10/mo
vision_ocrread-onlyExtract text from an image using Apple Vision OCR. Pro $10/mo
voice_chat_memory_addStore a persistent fact about the user that voice chat can reference in future sessions.
voice_chat_memory_clearWipe all persistent facts stored via voice_chat_memory_add.
voice_chat_session_resetClear the active voice chat conversation history.
voice_chat_settings_getread-onlyRead the current voice chat configuration — endpointConfigId, TTS voice, TTS speed, tools-enabled flag, and session timeout.
voice_chat_settings_setUpdate one or more voice chat configuration fields.

Analysis

51

Browser

30

Custom Chrome DevTools Protocol engine. Playwright MCP and chrome-devtools MCP weren't cutting it.

AX-native selectorsrole:button:Sign In, role:form:Login > role:button:Submit
Self-healingFuzzy AX match in ~5-15ms — no AI round-trip, no flaky CSS selectors
Mutation diffingEvery action returns what changed on the page — ~5 lines, not ~200
No dependenciesDirect CDP over WebSocket — no Playwright, no Puppeteer, no Node.js
Unique toolsWebAuthn virtual authenticator, Chrome native autofill, network interception with rule management
browser_actionDispatch a browser interaction (see the `action` enum). Pro $10/mo
browser_assertread-onlyAssert a condition on the current browser page. Pro $10/mo
browser_autofillTrigger Chrome's autofill on form fields. Pro $10/mo
browser_connectOwn the Chrome CDP connection lifecycle.
browser_consoleread-onlyGet browser console messages (log, warn, error) and optionally network request logs. Pro $10/mo
browser_coverageMeasure JavaScript and CSS code coverage. Pro $10/mo
browser_detectread-onlyDetect the frontend framework, meta-framework, CMS, state libraries, router, and dev/prod mode on the current page. Pro $10/mo
browser_dialog_handledestructiveResolve the pending JavaScript dialog. Pro $10/mo
browser_emulateEmulate device and environment conditions on the active Chrome tab. Pro $10/mo
browser_evalExecute JavaScript in the browser page and return the result. Pro $10/mo
browser_interceptdestructiveIntercept and mock network requests. Pro $10/mo
browser_locatorread-onlyGiven an element on the current page, return the canonical, ranked set of stable accessibility selectors to use in saved tests. Pro $10/mo
browser_networkInspect network traffic in the browser with full request/response detail. Pro $10/mo
browser_page_closedestructiveClose a Chrome tab by its id (from browser_page_list). Pro $10/mo
browser_page_listread-onlyList the open Chrome tabs the CDP debugger sees, with each tab's id, URL, and title.
browser_page_newOpen a new Chrome tab, optionally navigating to a URL. Pro $10/mo
browser_page_selectSwitch the active Chrome tab the other browser_* tools operate on. Pro $10/mo
browser_pdfRender the current browser page to a PDF file and return its path as a resource link. Pro $10/mo
browser_performanceMeasure and audit browser performance. Pro $10/mo
browser_recordRecord user interactions as action events (clicks, fills, navigations) for test creation — not screen video (use video_record for that). Pro $10/mo
browser_snapshotread-onlyGet a structural snapshot of the current browser page via Chrome's accessibility engine.
browser_storagedestructiveRead and write browser storage: cookies, localStorage, sessionStorage. Pro $10/mo
browser_viewport_resizeSet the viewport width and height for the active Chrome tab, and optionally the device pixel ratio it renders at. Pro $10/mo
browser_webauthnTest WebAuthn/passkey flows with a virtual authenticator. Pro $10/mo
browser_webmcpDiscover and invoke WebMCP tools that the current page exposes.
http_requestMake a raw HTTP request to any URL — returns the HTTP status code, response headers, and raw response body (JSON, text, or bytes). Pro $10/mo
http_request_replayread-onlyReplay a discovered API endpoint with optional parameter overrides. Pro $10/mo
web_api_discoverread-onlyPassively analyze already-captured browser network traffic to discover API endpoints. Pro $10/mo
web_scraperead-onlyFetch a URL in a real Chrome browser and return rendered content. Pro $10/mo
youtube_transcriptread-onlyFetch the transcript (captions) of a YouTube video. Pro $10/mo

Filesystem

24
archive_createBundle files and folders into a zip / tar / tar.gz archive. Pro $10/mo
archive_extractUnpack a zip / tar / tar.gz archive back into files. Pro $10/mo
archive_listread-onlyList entries inside a zip / tar / tar.gz archive without extracting. Pro $10/mo
code_searchread-onlygrep INSIDE source files. Pro $10/mo
file_copyCopy a file or a directory tree to a new path, creating missing parent directories. Pro $10/mo
file_createCreate a new file with optional initial content. Pro $10/mo
file_create_directoryCreate a directory, creating missing parent directories as needed. Pro $10/mo
file_deletedestructivePermanently delete a single file from the filesystem. Pro $10/mo
file_delete_directorydestructiveDelete a directory. Pro $10/mo
file_editReplace an exact, unique span of text in an existing file — the surgical alternative to rewriting the whole file with file_write. Pro $10/mo
file_list_directoryread-onlyList a directory under `entries` (name, path, type, size, mtime epoch-seconds, is_symlink, kind UTI). Pro $10/mo
file_moveMove or rename a file or directory. Pro $10/mo
file_pick_directoryread-onlyOpen a native macOS file/folder picker dialog and return the selected path with isDirectory flag. Pro $10/mo
file_readread-onlyRead the contents of a text file as a UTF-8 string. Pro $10/mo
file_writeWrite content to a file, creating parent directories if needed. Pro $10/mo
git_checkoutSwitch to a branch, tag, or commit hash. Pro $10/mo
git_commitCreate a git commit with the currently staged changes. Pro $10/mo
git_diffread-onlyShow file diffs in a git repository. Pro $10/mo
git_logread-onlyShow recent commit history for a git repository. Pro $10/mo
git_pushdestructivePush commits to a remote repository. Pro $10/mo
git_statusread-onlyShow the working tree status of a git repository. Pro $10/mo
system_run_commanddestructiveExecute a shell command and stream stdout/stderr in real time. Pro $10/mo
workspace_addGrant the agent access to a directory this session by pinning it to the workspace access list. Pro $10/mo
workspace_searchread-onlyFind files and folders by filename or path prefix. Pro $10/mo

Capture

6

Testing

6
test_deletedestructiveDelete a saved PiperTest by ID. Max $49/mo
test_exportread-onlyExport a PiperTest to Playwright or Cypress code. Max $49/mo
test_getread-onlyGet a full PiperTest by ID with all steps, AX paths, element metadata, and execution context. Max $49/mo
test_listread-onlyList saved PiperTests with metadata (id, name, step count, last run status). Max $49/mo
test_runExecute a PiperTest via CDP at native speed (~10-50ms/step). Max $49/mo
test_saveCreate or update a grouped PiperTest. Max $49/mo

Motion

5

Outreach

18

Search

3

Sieve

4

System

181

Video

68

Video Tools

7

OAuth

4

Resources 5

Read-only data the AI can pull into context without calling a tool.

toolpiper://statusServer health, version, loaded models, system resources
toolpiper://modelsFull model catalog with availability and categories
toolpiper://backendsBackend status — which engines are running and their capabilities
toolpiper://testsSaved PiperTests with metadata
toolpiper://categoriesTool categories, counts, and profiles for filtering tools/list

How It Works

AI Client (Claude Code, Cursor, Devin, Codex, Gemini CLI, Cline, etc.)
    ↓ JSON-RPC over Streamable HTTP — POST 127.0.0.1:9998/mcp [?category= | ?profile=]
ToolPiper.app (macOS, running)
    ↓ in-process dispatch — route() direct, no socket round-trip
Backends (llama.cpp, FluidAudio, MLX Audio, Apple Intelligence, Vision, NLP, Pose, CDP, System Actions)

Auth

Loopback connections (127.0.0.1) are trusted at the connection level — no token, no consent sheet, zero config for every local MCP client. LAN, mesh, and remote peers authenticate with Authorization: Bearer (pre-issued at ~/Library/Application Support/ToolPiper/.toolpiper-token) and appear in ToolPiper → Settings → Connected Apps. Sessions are tracked via the Mcp-Session-Id header.

Errors

If ToolPiper isn't running, the MCP endpoint is unreachable and the AI client surfaces a connection error pointing back at modelpiper.com/download. ToolPiper's own errors (auth, model not loaded, permission denied) come back as isError: true tool results with the message attached verbatim.

Stuck on “Needs authentication”?

A loopback connection to 127.0.0.1:9998 is auto-trusted and never needs OAuth. If your client still shows “Needs authentication” — typically after updating ToolPiper while a session was open — it has cached a stale auth state that restarting the client won't clear. Remove and re-add the server: run claude mcp remove toolpiper -s local, then claude mcp add --transport http toolpiper http://127.0.0.1:9998/mcp. It reconnects immediately. Don't click “Authenticate” — on a loopback connection that opens an OAuth page you don't need.

On-demand discovery

Every tools/list carries a reserved request_tools meta-tool: an agent that needs a capability outside its current tool list describes it ("read a PDF") and gets back the matching tools' full callable schemas. In-catalog, tool_search finds tools by task and tool_docs returns full typed schemas by name. For clients with tool-count caps (Cursor ~40, Devin 100), ToolPiper narrows the advertised set to fit and keeps the remainder reachable through the hatch — narrowing, not truncation.

Annotations

Every tool is classified. Read-only tools advertise readOnlyHint and destructive tools advertise destructiveHint, so an AI client can tell a file read from a file delete before it decides what to run without asking. Each hint is sent only when true, which is exactly how MCP defines the defaults, so an absent hint reads as false rather than as unknown.

Context economics

The advertised catalog ships tool names with input schemas stripped to {type: object}; typed schemas ride the wire only where parameters can't be inferred from name and context. Connecting with ?category= or ?profile= trims both the tool set and the server's teaching instructions to the matching sections. ToolPiper's own chat surfaces go further: PiperMatch, an on-device retrieval model, picks the relevant tool subset per turn.

Permissions

Per-tool gating (Allow / Ask / Deny) lives in ToolPiper → Settings → Tool Permissions and travels with the user, not the client. Denied tools are stripped from the advertisement and refused at dispatch. A tool set to Ask is advertised with destructiveHint so a conforming client confirms with you before running it.

Federation

ToolPiper is also an MCP client: connected servers' tools are surfaced alongside the native catalog under namespaced ids. Install VisionPiper and its screen-capture control plane appears as mcp__visionpiper__* — one connection for your agent, every piper app behind it.

Live updates

Open GET /mcp with Accept: text/event-stream and the session id to receive notifications/tools/list_changed when the catalog shifts — a model loads, a license changes, a federated server connects. Clients that don't subscribe simply poll tools/list.

Prompts

5 workflow templates available via prompts/list: setup-model, audit-page, create-test, voice-over, research-topic. Each returns step-by-step instructions with the right tool sequence.

Structured output

54 tools declare an outputSchema and return structuredContent (machine-readable JSON) alongside human-readable text — text_embed, vision_ocr, model_list, rag_query, audio_speak, image_upscale, and the file and Git families among them.