ToolPiper API

Offline

ToolPiper is the local AI server that powers ModelPiper. It runs on your Mac, manages inference engines, and exposes an OpenAI-compatible API at localhost:9998.

Base URLhttp://localhost:9998/v1SpecGET /v1/openapi.json

How It Works

ModelPiper is the web app you're looking at right now. It talks to ToolPiper, a native macOS app running in the background. ToolPiper manages the actual AI engines — llama.cpp for LLMs, FluidAudio for speech, CoreML for images, and more.

When you create a Provider in ModelPiper, you're setting up a configuration that pairs an AI model with a specific engine. For example: Use the Llama 3.2 3B model via llama.cpp or Use Parakeet for speech-to-text via FluidAudio. Each provider becomes a usable endpoint on the ToolPiper API.

ModelPiper uses an internal session key to stay connected to ToolPiper — you don't need to think about that. But if you want to build your own app on top of ToolPiper, you'll need a Developer Token.

Developer Tokens Pro

A dev token lets you use ToolPiper from your own code, just like an OpenAI API key. Create one, drop it into any OpenAI-compatible SDK, and point the base URL at localhost:9998/v1. That's it.

ToolPiper is offline. Start it to manage tokens.

Claude Code Zero-config

Wire ToolPiper into Claude Code with one click. We generate a dev token, write ~/.claude/settings.json, and register ToolPiper as an MCP server. Claude Code's /model picker shows every endpoint you've configured here.

New to all of this? See the comparison vs Ollama / vLLM / LM Studio.

ToolPiper is offline. Start it to connect Claude Code.

Anthropic Proxy Backend Phase 1 plumbing

ToolPiper will expose POST /v1/messages as an Anthropic-shape proxy so Claude Code (and any Anthropic-compatible client) can use any provider you've configured. Pick the global backend below, or bind a specific provider per token in the table above.

ToolPiper is offline. Start it to configure the proxy backend.

Quick Start

Drop-in replacement for the OpenAI SDK — just change the base URL and API key. Questions? @ModelPiper on X.

curl http://localhost:9998/v1/chat/completions \
  -H "Authorization: Bearer tp_YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.2-3b",
    "messages": [{"role": "user", "content": "Hello!"}]
  }'

MCP Server 147 tools

ToolPiper is also an MCP server. Install categories individually to control which tools your AI client sees — saves context tokens.

  • core12LLM inference, TTS, STT, embeddings, OCR
  • analysis8Image/text analysis, RAG, upscaling
  • browser19Browser automation, scraping, assertions
  • testing6PiperTest CRUD and execution
  • motion5Pose estimation, stream processing
  • outreach12GitHub, HN, Reddit, X, content queue
  • system29macOS system actions
  • video17Video creator pipeline
  • oauth4OAuth connection management
  • sieve4MediaPiper sieve cache inspection
  • filesystem13File read/write, git operations, shell commands

See MCP docs for install commands, profiles, and full tool reference.

Endpoints

Inference

OpenAI-compatible chat completions and model listing

  • GET/v1/modelsList available models
  • POST/v1/chat/completionsCreate chat completion (streaming supported)

Audio

Speech-to-text and text-to-speech

  • POST/v1/audio/transcriptionsTranscribe audio (STT)
  • POST/v1/audio/speechSynthesize speech (TTS), supports voice cloning

Image & Video

CoreML-powered image and video upscaling (PiperSR)

  • POST/v1/images/upscaleUpscale image 2x/4x via CoreML (returns PNG)
  • POST/v1/video/upscaleUpscale video 2x via PiperSR (base64 in/out)
  • POST/v1/video/upscale/urlUpscale video 2x from URL
  • POST/v1/video/upscale/fileUpscale video 2x using file paths (no base64 overhead)
  • GET/v1/video/upscale/{id}Check upscale job status
  • GET/v1/video/upscale/{id}/resultDownload upscaled video result (streaming)
  • POST/v1/benchmark/upscaleRun PiperSR benchmark suite (A–G)

Pose Estimation

Body keypoint detection for ControlNet, AnimateDiff, DWPose

  • POST/v1/pose/detectDetect body poses — skeleton image + JSON keypoints
  • POST/v1/pose/activateActivate a pose detection model
  • GET/v1/pose/activeGet currently active pose detector
  • GET/v1/pose/formatsList backends, renderers, and topologies
  • GET/v1/pose/modelsAvailable pose detection models
  • POST/v1/pose/stream/startStart the pose streaming WebSocket (on-demand, returns port)
  • POST/v1/pose/stream/stopStop the pose streaming WebSocket
  • GET/v1/pose/stream/statusCheck if pose stream WebSocket is running + port

Stream Processing

Real-time frame processing from WebSocket sources

  • POST/v1/stream/startStart stream session (connect to frame source)
  • POST/v1/stream/stopStop a stream session
  • GET/v1/stream/statusActive sessions and frame stats

RAG

Retrieval-Augmented Generation

  • GET/v1/rag/collectionsList collections
  • POST/v1/rag/collectionsCreate a collection
  • GET/v1/rag/collections/{id}Get collection details
  • PUT/v1/rag/collections/{id}Update a collection
  • DELETE/v1/rag/collections/{id}Delete a collection
  • GET/v1/rag/collections/{id}/chunksList chunks (paginated)
  • POST/v1/rag/collections/{id}/ingestStart document ingestion
  • GET/v1/rag/collections/{id}/ingest/statusIngestion progress
  • POST/v1/rag/collections/{id}/ingest/cancelCancel ingestion
  • POST/v1/rag/querySemantic search across collections
  • POST/v1/rag/browse-folderBrowse folder for ingestion

Cloud Proxy

Keychain-backed cloud API proxy

  • POST/v1/cloud/proxyProxy request to cloud provider
  • POST/v1/cloud/api-keySave API key to Keychain
  • GET/v1/cloud/api-keyLoad API key from Keychain
  • DELETE/v1/cloud/api-keyDelete API key from Keychain

Models

Model management and HuggingFace integration

  • GET/model-configsList curated model presets
  • POST/model-configs/installInstall a model by preset ID
  • GET/modelsList downloaded models
  • GET/models/{id}Get model details
  • DELETE/models/{id}Delete a downloaded model
  • GET/models/storageDisk usage for models
  • POST/models/scanScan filesystem for new models
  • GET/models/searchSearch HuggingFace
  • POST/models/downloadDownload from HuggingFace
  • GET/models/downloadsList active downloads
  • DELETE/models/downloads/{id}Cancel a download
  • GET/models/hf/{owner}/{repo}/filesList HuggingFace repo files

Engine

Inference engine control

  • GET/engine/statusEngine and backend status
  • POST/engine/loadLoad a model
  • POST/engine/unloadUnload a model or stop engine
  • GET/models/statePer-model runtime states

Auth

Developer tokens (Pro)

  • GET/v1/tokensList dev tokens (masked)
  • POST/v1/tokensCreate a dev token
  • PATCH/v1/tokens/{id}Update token label, origins, or endpoint binding
  • DELETE/v1/tokens/{id}Revoke a dev token

Anthropic Proxy

Settings for the Anthropic Messages proxy at /v1/messages

  • GET/v1/settings/anthropic-proxyRead global Anthropic proxy settings
  • PATCH/v1/settings/anthropic-proxyUpdate global proxy backend selection

Apple Vision

On-device image analysis via Apple Vision framework

  • POST/v1/apple/ocrText recognition (20+ languages, handwriting)
  • GET/v1/apple/ocr/languagesList supported OCR languages
  • POST/v1/apple/barcodeBarcode and QR code detection
  • POST/v1/apple/classifyImage classification (1000+ categories)
  • POST/v1/apple/face-detectFace detection with pose angles
  • POST/v1/apple/saliencyAttention or objectness saliency maps
  • POST/v1/apple/rectanglesRectangle and document detection
  • POST/v1/apple/feature-printImage feature vectors for similarity
  • POST/v1/apple/body-poseHuman body skeletal keypoints
  • POST/v1/apple/hand-poseHand and finger joint detection
  • POST/v1/apple/animalsCat and dog detection
  • POST/v1/apple/horizonHorizon angle detection
  • POST/v1/apple/documentDocument boundary detection

Apple NLP

On-device text analysis via Apple Natural Language framework

  • POST/v1/apple/nlp/languageLanguage detection with confidence scores
  • POST/v1/apple/nlp/sentimentSentiment analysis (-1 to +1)
  • POST/v1/apple/nlp/entitiesNamed entity recognition (people, places, orgs)
  • POST/v1/apple/nlp/tokenizeText tokenization (word, sentence, paragraph)
  • POST/v1/apple/nlp/lemmatizeWord lemmatization (running → run)
  • POST/v1/apple/nlp/posPart-of-speech tagging

Scrape

CDP-based web scraping with framework-aware readiness — up to 7 output formats from a single page load

  • POST/v1/scrapeStart a scrape job (markdown, text, readability, axTree, html, links, screenshot)
  • GET/v1/scrapeList recent scrape jobs
  • GET/v1/scrape/{jobId}Get scrape job status and result
  • GET/v1/youtube/transcriptGet YouTube video transcript (captions)

Browser (CDP)

Chrome DevTools Protocol automation — AX selectors, self-healing, mutation diffing

  • GET/v1/browser/statusConnection status and current page
  • GET/v1/browser/full-statusExtended status with pages and channels
  • GET/v1/browser/channelsAvailable Chrome channels (dev, canary, stable)
  • POST/v1/browser/connectConnect to Chrome (host + port)
  • POST/v1/browser/disconnectDisconnect from Chrome
  • GET/v1/browser/pagesList available browser pages
  • POST/v1/browser/select-pageSwitch to a page by ID
  • POST/v1/browser/new-tabOpen a new tab
  • POST/v1/browser/close-tabClose a tab
  • GET/v1/browser/snapshotAccessibility tree of current page
  • GET/v1/browser/screenshotScreenshot as base64 PNG
  • POST/v1/browser/actionPerform action (click, fill, navigate, etc.)
  • POST/v1/browser/assertAssert page state (visible, text, url, etc.)
  • POST/v1/browser/healHeal a broken selector
  • POST/v1/browser/evaluateExecute JavaScript in page
  • POST/v1/browser/resizeResize browser viewport
  • POST/v1/browser/dialogHandle JavaScript dialogs
  • GET/v1/browser/consoleRecent console messages (last 100)
  • POST/v1/browser/record/startStart recording user interactions
  • POST/v1/browser/record/stopStop recording, return action log
  • GET/v1/browser/record/streamSSE stream of live recorded actions
  • GET/v1/browser/networkList captured network requests
  • GET/v1/browser/network/statusNetwork logging status
  • POST/v1/browser/network/enableEnable network logging
  • POST/v1/browser/network/disableDisable network logging
  • DELETE/v1/browser/networkClear network log
  • GET/v1/browser/network/{requestId}/bodyGet request/response body
  • GET/v1/browser/storageGet cookies, localStorage, sessionStorage
  • DELETE/v1/browser/storageClear browser storage
  • POST/v1/browser/storage/cookieSet a cookie
  • POST/v1/browser/storage/localSet localStorage value
  • POST/v1/browser/storage/sessionSet sessionStorage value
  • POST/v1/browser/trace/startStart performance trace
  • POST/v1/browser/trace/stopStop performance trace
  • GET/v1/browser/trace/statusTrace status
  • GET/v1/browser/metricsGet performance metrics
  • GET/v1/browser/coverage/statusCode coverage status
  • POST/v1/browser/coverage/startStart JS/CSS code coverage
  • POST/v1/browser/coverage/stopStop coverage collection
  • GET/v1/browser/intercept/statusRequest interception status
  • POST/v1/browser/intercept/enableEnable request interception
  • POST/v1/browser/intercept/disableDisable request interception
  • GET/v1/browser/mocksList mock rules
  • POST/v1/browser/mocksCreate mock rule
  • DELETE/v1/browser/mocksClear all mock rules
  • DELETE/v1/browser/mocks/{id}Delete a mock rule
  • GET/v1/browser/webauthn/statusWebAuthn authenticator status
  • POST/v1/browser/webauthn/enableEnable virtual authenticator
  • POST/v1/browser/webauthn/disableDisable virtual authenticator
  • GET/v1/browser/webauthn/credentialsList WebAuthn credentials
  • DELETE/v1/browser/webauthn/credentials/{id}Delete a WebAuthn credential
  • POST/v1/browser/webauthn/verifySet credential as verified
  • POST/v1/browser/autofill/credit-cardSet credit card autofill data
  • POST/v1/browser/autofill/addressSet address autofill data

Testing (PiperTest)

Visual test session management, execution, and coverage

  • GET/v1/test-sessionsList all test sessions
  • POST/v1/test-sessionsCreate a test session
  • POST/v1/test-sessions/importImport a test session
  • GET/v1/test-sessions/{id}Get test session by ID
  • PUT/v1/test-sessions/{id}Update a test session
  • DELETE/v1/test-sessions/{id}Delete a test session
  • POST/v1/test-sessions/{id}/runRun a saved test session
  • POST/v1/test-sessions/{id}/run/cancelCancel a running test
  • GET/v1/test-sessions/{id}/probeGet saved interaction map
  • POST/v1/test-sessions/{id}/coverageGet combined coverage report
  • POST/v1/test-sessions/{id}/exportExport to Playwright/Cypress
  • POST/v1/tests/runRun inline test steps
  • POST/v1/browser/probe/scanScan page for interaction coverage

Video Creator

Screenplays, recording, rendering, and narration

  • GET/v1/video/screenplaysList screenplays
  • POST/v1/video/screenplaysCreate a screenplay
  • GET/v1/video/screenplays/{id}Get screenplay details
  • PUT/v1/video/screenplays/{id}Update a screenplay
  • DELETE/v1/video/screenplays/{id}Delete a screenplay
  • GET/v1/video/screenplays/{id}/storyboardGet screenplay storyboard
  • POST/v1/video/screenplays/{id}/rehearseDry-run a screenplay
  • POST/v1/video/screenplays/{id}/recordRecord screenplay to video
  • POST/v1/video/screenplays/{id}/record/cancelCancel recording
  • POST/v1/video/screenplays/{id}/renderRender with styling/overlays
  • POST/v1/video/screenplays/{id}/render/cancelCancel rendering
  • POST/v1/video/screenplays/{id}/narrateGenerate TTS narration
  • POST/v1/video/screenplays/{id}/narrate/cancelCancel narration
  • GET/v1/video/screenplays/{id}/timelineGet timeline map
  • POST/v1/video/screenplays/{id}/edit/screenplayEdit screenplay structure
  • POST/v1/video/screenplays/{id}/edit/compositionEdit composition settings
  • POST/v1/video/screenplays/{id}/edit/narrationEdit narration settings

Conversations

Chat conversation persistence

  • GET/v1/conversationsList conversations
  • POST/v1/conversationsCreate a conversation
  • GET/v1/conversations/{id}Get conversation
  • PUT/v1/conversations/{id}Update conversation
  • DELETE/v1/conversations/{id}Delete conversation
  • POST/v1/conversations/{id}/renameRename conversation

OAuth

OAuth 2.1 connection management for third-party services

  • POST/v1/oauth/connectStart OAuth consent flow (Google, Reddit, GitHub, X)
  • POST/v1/oauth/connect/service-accountConnect Google service account
  • GET/v1/oauth/statusCheck all OAuth connection statuses
  • GET/v1/oauth/status/{provider}Check single provider status
  • DELETE/v1/oauth/disconnect/{provider}Disconnect and revoke tokens

Outreach

GitHub monitoring, content queue, HN, Reddit, X/Twitter, mentions

  • GET/v1/outreach/github/reposList GitHub repos
  • GET/v1/outreach/github/activityGitHub repo activity
  • GET/v1/outreach/github/compareCompare two Git refs
  • GET/v1/outreach/github/poll-stateGet GitHub polling state
  • POST/v1/outreach/github/poll-stateUpdate GitHub polling state
  • GET/v1/outreach/mentionsGet real-time web mentions
  • GET/v1/outreach/mentions/rulesList mention rules
  • POST/v1/outreach/mentions/rulesCreate mention rule
  • DELETE/v1/outreach/mentions/rules/{id}Delete mention rule
  • GET/v1/outreach/queueList outreach queue
  • GET/v1/outreach/queue/statsGet queue statistics
  • POST/v1/outreach/queueAdd draft to queue
  • POST/v1/outreach/queue/{id}/publishPublish a draft
  • DELETE/v1/outreach/queue/{id}Delete a draft
  • GET/v1/outreach/hn/searchSearch Hacker News
  • GET/v1/outreach/hn/trendingHN trending stories
  • GET/v1/outreach/reddit/searchSearch Reddit
  • POST/v1/outreach/reddit/postPost to Reddit
  • GET/v1/outreach/reddit/statusReddit connection status
  • POST/v1/outreach/x/browseBrowse X/Twitter via CDP
  • POST/v1/outreach/x/composeCompose tweet
  • GET/v1/outreach/memoryGet content memory state
  • GET/v1/outreach/memory/historyGet post history

System Actions

macOS system automation (26 action domains, integrated)

  • GET/v1/action-piper/statusSystem actions status
  • POST/v1/action-piper/executeExecute a system action
  • GET/v1/action-piper/app/listList running apps
  • GET/v1/action-piper/app/snapshotNative app AX snapshot
  • POST/v1/action-piper/app/actionPerform native app action
  • POST/v1/action-piper/app/assertAssert native app state
  • GET/v1/action-piper/window/listList all windows
  • GET/v1/action-piper/systemSystem info
  • GET/v1/action-piper/system/{domain}System info for specific domain

API Connections

Manage external API connections (OpenAI, Anthropic, Google, etc.)

  • GET/connectionsList API connections
  • POST/connectionsCreate API connection
  • PUT/connections/{id}Update API connection
  • DELETE/connections/{id}Delete API connection

Tool Permissions

MCP tool access control

  • GET/v1/tool-permissionsGet tool permission settings
  • PUT/v1/tool-permissionsUpdate tool permissions

Configurations

Endpoint-level inference configurations

  • GET/configurationsList all configurations
  • POST/configurationsCreate a configuration
  • PUT/configurations/{id}Update a configuration
  • DELETE/configurations/{id}Delete a configuration

Recording

Unified browser + native app recording

  • POST/v1/record/startStart unified recording session
  • POST/v1/record/stopStop recording session
  • GET/v1/record/streamSSE stream of recorded actions

Workflow Templates

Curated pipeline workflow templates

  • GET/workflow-templatesList available workflow templates

System

Health, resources, events, and logging

  • GET/statusHealth check (no auth)
  • GET/system/resourcesGPU, RAM, and ANE usage
  • GET/eventsSSE event stream
  • GET/licenseSubscription tier
  • GET/v1/openapi.jsonOpenAPI spec (no auth)
  • POST/logPost a single log entry (no auth)
  • GET/logsQuery log entries (no auth)
  • POST/logsPost log entries in batch (no auth)
  • GET/logs/streamReal-time SSE log stream
  • POST/clearClear all log entries
  • POST/exportExport logs to file