MCP Server
ToolPiper is an MCP server — 300+ tools and 5 resources that give AI coding assistants access to local inference, speech, vision, OCR, NLP, RAG, image/video processing, AX-powered browser automation, web scraping, PiperTest execution, programmatic video creation, outreach, macOS system actions, and OAuth. No cloud, no API keys.
Install
One command. ToolPiper handles the rest — all 300+ tools are available immediately, and PiperMatch picks the relevant subset per chat turn so you don't burn context window on tool definitions you won't use.
Claude CodeHTTP transportclaude mcp add --transport http toolpiper http://127.0.0.1:9998/mcpFirst-call consent
Apple-signed clients (Claude Code, Cursor, Claude Desktop) auto-trust on first call. Other clients see a consent sheet in ToolPiper.
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. Per-app gating 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.
Cursor / Windsurf / Gemini Code
Add to .mcp.json in your project root:
{
"mcpServers": {
"toolpiper": {
"type": "http",
"url": "http://127.0.0.1:9998/mcp"
}
}
}CI / scripted use
For headless contexts that can't show a consent sheet, pre-issue a bearer token. Read it from ~/Library/Application Support/ToolPiper/.toolpiper-token and pass it as a bearer:
export TOOLPIPER_BEARER=$(cat ~/Library/Application\ Support/ToolPiper/.toolpiper-token)
curl -H "Authorization: Bearer $TOOLPIPER_BEARER" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' \
http://127.0.0.1:9998/mcpTools 300+
Tool names are unprefixed — the MCP server namespace (toolpiper) provides branding and collision avoidance. Every tool includes annotations (readOnlyHint, openWorldHint).
Core AI
30chatread-onlyRun a prompt through a local LLM (llama.cpp or Apple Intelligence)audio_transcriberead-onlyTranscribe audio to text (FluidAudio or MLX Audio)audio_speakConvert text to speech and save as WAVaudio_voice_cloneGenerate speech using a cloned voice from a reference audio sampletext_embedread-onlyGenerate vector embeddings (local model or Apple NL, 512-dim)vision_ocrread-onlyExtract text from images and PDFs (Apple Vision, 18+ languages)text_translateread-onlyTranslate text (Apple Translate or a local LLM)vision_camera_captureCapture a single still PNG from the Mac webcam (base64)model_listread-onlyList available models with status, RAM cost, and categoriesmodel_loadLoad a model into memory (auto-downloads if needed)model_unloadUnload a model from memory to free RAM/VRAMmodel_searchread-onlySearch HuggingFace for GGUF/MLX models matching a querymodel_repo_inforead-onlyInspect a HuggingFace repo — files, sizes, README, licensemodel_downloadDownload a GGUF/MLX model from HuggingFacemodel_download_listread-onlyList active and recent model downloadsmodel_download_cancelCancel an in-flight model downloadendpoint_listread-onlyList configured inference endpoints (local + cloud)endpoint_setSet the active inference endpointendpoint_statusread-onlyCheck health, latency, and load on an endpointendpoint_recommendread-onlyPick the best endpoint for a task given current statevoice_chat_settings_getread-onlyRead push-to-talk voice chat configurationvoice_chat_settings_setConfigure voice chat STT/TTS backends and behaviorvoice_chat_session_resetReset the voice chat session and clear short-term contextvoice_chat_memory_addAdd a long-lived memory to the voice chat contextvoice_chat_memory_clearClear voice chat memoriesclaude_code_installInstall the claude-tp helper that points Claude Code at ToolPiperclaude_code_uninstallRemove the claude-tp helper installationclaude_code_statusread-onlyCheck claude-tp install status and active configurationsystem_statusread-onlyServer health — backends, loaded models, GPU, RAM, license tiersystem_resourcesread-onlyLive CPU/RAM/GPU snapshot used by the resource intelligence layerAnalysis & RAG
11Filesystem & Git
18workspace_searchread-onlySearch pinned workspace files via Spotlight metadatafile_pick_directoryread-onlyShow a native folder picker and return the selected pathfile_list_directoryread-onlyList directory contents with size, type, and modified datefile_readread-onlyRead a file as UTF-8 textfile_writeWrite content to a file (overwrites if it exists)file_createCreate a new file — fails if it already existsfile_deleteDelete a file (moves to Trash for safety)code_searchread-onlyripgrep-style code search across a directory treearchive_createCreate a tar/zip archive from a directoryarchive_extractExtract a tar/zip archive to a directoryarchive_listread-onlyList the contents of an archive without extractingsystem_run_commandread-onlyRun a read-only shell command (allowlist-gated)git_statusread-onlygit status — clean/dirty, staged, untrackedgit_diffread-onlygit diff — staged or unstaged changesgit_logread-onlygit log — recent commit historygit_commitCreate a git commit with the given messagegit_checkoutCheck out a branch, tag, or commitgit_pushPush commits to a remoteCapture
3Browser & Web
28Custom Chrome DevTools Protocol engine. Playwright MCP and chrome-devtools MCP weren't cutting it.
role:button:Sign In, role:form:Login > role:button:Submitbrowser_snapshotread-onlyAX-tree snapshot of the current page — auto-connects, optional screenshotbrowser_actionClick, fill, navigate, press, drag, upload — AX selectors with self-healingbrowser_assertread-onlyAssert visible/hidden/text/url/count/attribute/console with pollingbrowser_consoleread-onlyConsole messages + optional network request logs for debuggingbrowser_recordRecord interactions with AX-enriched selectors and hierarchical scopingbrowser_statusread-onlyConnection lifecycle — status, version, attached pagebrowser_page_listread-onlyList open tabs with title, URL, and IDbrowser_page_selectSwitch the active tabbrowser_page_closeClose a tabbrowser_page_newOpen a new tab with an optional URLbrowser_disconnectDisconnect from the Chrome CDP sessionbrowser_viewport_resizeResize the active viewportbrowser_dialog_handleAccept or dismiss JS dialogs (alert/confirm/prompt)browser_launchLaunch a fresh Chrome instance with the CDP debugger attachedbrowser_evalExecute JavaScript in the page and return the serialized resultbrowser_networkNetwork traffic inspection — list, get body, filter by URL/statusbrowser_storageRead/write cookies, localStorage, and sessionStoragebrowser_performanceWeb Vitals tracing — LCP, FCP, CLS, TBT, JS heap, layout countsbrowser_coverageJS and CSS code coverage measurementbrowser_interceptMock or intercept network requests — stub APIs, simulate errorsbrowser_webauthnVirtual authenticator for passkey/WebAuthn testingbrowser_autofillTrigger Chrome native autofill on credit card and address fieldsbrowser_detectread-onlyDetect frontend framework, meta-framework, CMS, and state librariesweb_api_discoverread-onlyDiscover JSON APIs by watching a page’s network traffichttp_requestGeneral HTTP request with full header and body controlhttp_request_replayReplay a captured HTTP request from browser_network outputweb_scraperead-onlyCDP scraping with 7 output formats (markdown, AX tree, links, screenshot, etc.)youtube_transcriptread-onlyFetch transcript captions from a YouTube videoPiperTest
6test_listread-onlyList saved PiperTests with metadata (id, name, step count, last run)test_getread-onlyGet a full PiperTest by ID — groups, steps, AX paths, contexttest_saveCreate or update a grouped PiperTest session (groups → steps)test_deleteDelete a saved PiperTest by IDtest_runExecute a grouped PiperTest at native CDP speed with optional AX healingtest_exportread-onlyExport a PiperTest to Playwright or Cypress — deterministic, no AImacOS System
162Motion & Streaming
5Video Creator
17Outreach
15OAuth
4Sieve (MediaPiper)
4Resources 5
Read-only data the AI can pull into context without calling a tool.
toolpiper://statusServer health, version, loaded models, system resourcestoolpiper://modelsFull model catalog with availability and categoriestoolpiper://backendsBackend status — which engines are running and their capabilitiestoolpiper://testsSaved PiperTests with metadatatoolpiper://categoriesTool categories, counts, and profiles for filtering tools/listHow It Works
AI Client (Claude Code, Cursor, Windsurf, Gemini Code, etc.)
↓ JSON-RPC over Streamable HTTP
POST http://127.0.0.1:9998/mcp
↓ Bearer token (first-call consent or pre-issued)
ToolPiper.app (macOS, running)
↓ PiperMatch retrieval picks the relevant subset per turn
Backends (llama.cpp, FluidAudio, MLX Audio, Apple Intelligence, Vision, NLP, Pose, CDP, System Actions)Auth
Apple-signed clients (Claude Code, Cursor, Claude Desktop) auto-trust on first call. Other clients see a consent sheet in ToolPiper → Settings → Connected Apps. CI and scripted use can pre-issue a bearer from ~/Library/Application Support/ToolPiper/.toolpiper-token.
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.
Annotations
Every tool has readOnlyHint, openWorldHint, and idempotentHint (where applicable) so AI clients can make informed decisions about tool usage.
PiperMatch retrieval
Wire payload stays under Claude Code's ~28-31 KB per-server cap by stripping schemas to {type: object} on all-string tools and shipping typed schemas only where parameters can't be inferred from name + context. PiperMatch (an on-device CoreML retrieval model) then picks the relevant tool subset per turn for inference handlers, so the model sees what it needs without context inflation.
Permissions
Per-tool gating (Allow / Ask / Deny) lives in ToolPiper → Settings → Tool Permissions and travels with the user, not the client. Per-external-app gating in Settings → Connected Apps. Denied tools return an isError result; Ask-tier tools trigger a confirmation banner in ToolPiper before dispatching.
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
Inference and analysis tools return structuredContent (machine-readable JSON) alongside human-readable text — embed, ocr, model_list, rag_query, rag_collection_list, audio_speak, audio_voice_clone, image_upscale, and the test_* family.