TypeWhisper MCP
Officialby TypeWhisper
README.md
# TypeWhisper MCP
`@typewhisper/mcp` exposes the local TypeWhisper API as a Model Context Protocol server for coding agents and other MCP clients.
It connects to a TypeWhisper app running locally or on a remote host and lets agents transcribe files, inspect model status, search transcription history, and manage Dictionary terms and corrections.
## Requirements
- Node.js 20 or newer on the machine running this MCP server
- TypeWhisper on a reachable macOS or Windows host
- TypeWhisper local API server enabled under **Settings > Advanced**
## Install
```bash
npm install -g @typewhisper/mcp
```
For local development from this repo:
```bash
npm install
npm run build
node dist/bin.js --help
```
## MCP Configuration
Most MCP clients can run the server over stdio:
```json
{
"mcpServers": {
"typewhisper": {
"command": "npx",
"args": ["-y", "@typewhisper/mcp"]
}
}
}
```
For a local checkout:
```json
{
"mcpServers": {
"typewhisper": {
"command": "node",
"args": ["/Users/marco/Projects/typewhisper-mcp/dist/bin.js"]
}
}
}
```
## Discovery
By default, the server mirrors the TypeWhisper CLI discovery behavior:
1. `TYPEWHISPER_API_BASE_URL`, `TYPEWHISPER_API_PORT`, and `TYPEWHISPER_API_TOKEN`
2. TypeWhisper discovery files:
- macOS: `~/Library/Application Support/TypeWhisper/api-discovery.json`
- Windows: `%LOCALAPPDATA%\\TypeWhisper-UserData\\api-discovery.json`
- Windows legacy fallback: `%LOCALAPPDATA%\\TypeWhisper\\api-discovery.json`
3. The matching legacy `api-port` file
4. `http://127.0.0.1:8978`
Use `--dev` or `TYPEWHISPER_DEV=1` to read development discovery files (`TypeWhisper-Dev` on macOS and `TypeWhisper-DevUserData` with a `TypeWhisper-Dev` fallback on Windows).
```bash
typewhisper-mcp --dev
typewhisper-mcp --base-url http://127.0.0.1:8978 --api-token "$TYPEWHISPER_API_TOKEN"
```
## Remote TypeWhisper Host
The MCP server itself can run on any Node.js platform. TypeWhisper currently binds its API to the host's loopback interface, so connect remote clients through a private tunnel instead of exposing the API publicly.
For example, forward a local port from the agent machine to the TypeWhisper host:
```bash
ssh -N -L 18978:127.0.0.1:8978 user@typewhisper-host
```
Then start the MCP server with the forwarded URL and the bearer token from the TypeWhisper host's `api-discovery.json`:
```bash
TYPEWHISPER_API_BASE_URL=http://127.0.0.1:18978 \
TYPEWHISPER_API_TOKEN="your-token" \
typewhisper-mcp
```
For `typewhisper_transcribe_file`, the absolute path is resolved by the TypeWhisper host. Remote clients must therefore provide a path that exists on that host, for example through a shared or synchronized directory.
## Tools
- `typewhisper_status`
- `typewhisper_list_models`
- `typewhisper_transcribe_file`
- `typewhisper_search_history`
- `typewhisper_list_dictionary_terms`
- `typewhisper_upsert_dictionary_terms`
- `typewhisper_delete_dictionary_term`
- `typewhisper_list_dictionary_corrections`
- `typewhisper_upsert_dictionary_correction`
- `typewhisper_delete_dictionary_correction`
`typewhisper_transcribe_file` requires an absolute path on the TypeWhisper host because TypeWhisper runs as a separate app process.
Recorder and live dictation controls are intentionally not part of the first release.
## Development
```bash
npm run typecheck
npm test
npm run build
npm pack --dry-run
```
## License
GPL-3.0-only
TDQS
A3.5/5.0
Scored across 10 tools
Disambiguation5/5
Each tool targets a distinct resource and action: dictionary corrections vs terms, models, history, status, and transcription. No overlap in purpose.
Naming Consistency4/5
All tools follow the 'typewhisper_verb_noun' pattern, but there are minor plural/singular inconsistencies (e.g., 'correction' vs 'corrections', 'term' vs 'terms') that reduce perfect consistency.
Tool Count5/5
Ten tools cover the core functionality of transcription and dictionary management without being excessive or insufficient.
Completeness4/5
The set provides CRUD operations for dictionary items, plus transcription, model listing, status, and history search. Missing individual get operations for dictionary items, but this is a minor gap.
Maintenance
ActivityStale
ResponsivenessNo issues