Windy Word
Control Windy Word voice-to-text from any MCP agent — 60 tools across 12 categories.
Connector by sneakyfree · GitHub account verified by the MCP Registry
Install
Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.
npx agentmarket install connector/sneakyfree-windy-word-mcp
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.
- Tools
- 47 read · 46 write · 9 delete · 13 not yet classified
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Tools by what they do 115
Read from the source code; the running server may list different tools.
Read 47 · Look things up without changing anything.
describe_settingdetect_hardwareextract_document_textget_active_paste_strategyget_active_voice_cloneget_archive_statsget_autostart_statusget_billing_historyget_billing_summaryget_cloud_clone_order_statusget_configget_install_history
Show 35 more tools
get_install_statusget_my_planget_paste_historyget_paste_targetget_platformget_recording_stateget_sound_effect_stateget_translation_memory_statsget_versionget_widget_stateget_window_stateget_windytune_statelist_archive_entrieslist_audio_deviceslist_clone_bundleslist_clone_watcherslist_diagnostic_checkslist_hotkeyslist_install_jobslist_installable_dependencieslist_modelslist_paste_strategieslist_recent_setting_changeslist_settingslist_sound_effect_packslist_tts_voiceslist_voice_cloneslookup_translation_memorypreview_voice_clonequick_translateread_archive_entryscan_folder_for_mediasearch_archivesshow_hide_windowtranslate_text
Write 46 · Create, change, send or run things.
archives_by_date_rangeauto_pastebring_window_to_frontbulk_export_archives_textbulk_ingest_to_clonecancel_recordingcloud_diagnosecreate_voice_clone_from_pathinstall_dependencyinstall_dependency_asynclogout_accountopen_archive_folder
Show 34 more tools
open_upgrade_checkoutrestart_apprun_diagnosticsrun_paste_injection_testsave_text_filesave_translation_memorysend_notificationset_active_sound_packset_active_voice_cloneset_always_on_topset_analytics_enabledset_autostartset_configset_font_sizeset_hotkeyset_languageset_master_sfx_volumeset_modelset_opacityset_panel_visibilityset_paste_strategyset_settingset_sound_effect_modeset_sound_hookset_themeset_video_fullscreenset_window_geometryspeak_textstart_recordingstop_recordingstop_speakingsubmit_voice_clone_to_cloudtoggle_recordingunmaximize_window
Delete 9 · Delete, drop, revoke or wipe things.
bulk_delete_archivesclear_install_historyclear_paste_historyclear_translation_memorydelete_archive_entrydelete_voice_clonereset_hotkeyssetup_install_polkit_ruleundo_last_setting_change
Not yet classified 13 · We could not tell from the name and description.
check_for_updatesexport_soul_file_to_pathmaximize_windowminimize_windowopen_billing_portalopen_urlpaste_transcriptpause_other_audioquit_appresume_other_audiotest_paste_strategytranscribe_audio_file
Show 1 more tools
watch_folder_for_recordings
Secrets and settings it asks for
Other settings (environment variables or headers).
WINDY_WORD_MCP_HOSTWINDY_WORD_MCP_PORTWINDY_WORD_MCP_TIMEOUT_MS
Network hosts it talks to 3
github.com· found in codewindy-fix-me.windyword.workers.dev· found in codewindyword.ai· found in code
Files it touches
/home/user/Documents/my-soul-2026-05.zip/tmp/wwm-nonexistent-audio.wav/tmp/wwm-stress-nonexistent.wav/tmp/wwm-stress-soul.zip- Your home directory (~)
- Any path the agent passes to its tools
Tools (115)
Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].
archives_by_date_rangeReturn archived sessions whose start timestamp falls within [from, to]. Either endpoint is optional — omit from for "since beginning", omit to for "until now". Sorted newest first. Use ISO 8601 (date or date+time, e.g. "2026-05-20" or "2026-05-20T18:00:00Z").
auto_pasteExecute the auto-paste flow against an explicit candidate chain. Returns the winning strategy + per-strategy diagnostic data. Useful for stress-testing fallback behavior. WARNING: injects text into the focused window.
bring_window_to_frontRestore the window if minimized, show it if hidden, and raise it above other windows. DOES NOT steal keyboard focus on macOS — the main window is focusable:false to protect the recording flow from focus-theft against the user's external app. The window comes to the visual front; input focus stays where it was. Returns {focused:false} on macOS to make this explicit.
bulk_delete_archivesTear down multiple archive entries in one call. Each entry's .md transcript + linked audio + linked video are removed. REQUIRES an explicit confirm token "YES-DELETE-<N>" where N matches the ids.length — this is the guard that prevents an agent hallucinating "yes" and accidentally wiping the entire history. Each id's outcome is reported independently in the response (not-found ids do not abort the batch).
bulk_export_archives_textExport the transcript text of multiple archive entries to a directory. One file per entry, named by the archive id. Format = "md" (default — with header), "txt" (plain transcript), or "json" (full entry metadata + text). targetDir is created recursively if missing. Per-id status returned; failures do not abort the batch. Pair with search_archives or archives_by_date_range to assemble the id list.
bulk_ingest_to_cloneCopy a batch of audio files into the voice-samples store, creating one voice-clone entry per file (ElevenLabs multi-sample training model). Use this after scan_folder_for_media finds the files the user wants to clone from — typical flow: scan → confirm with user → bulk_ingest_to_clone(filtered paths) → submit_voice_clone_to_cloud on each resulting cloneId. Returns per-file results so partial failures are visible. Capped at 100 paths per call (chunk larger sets). Audio extensions: webm, wav, mp3, ogg, m4a, flac. Mismatched extensions are reported as failures within the response, not as a top-le…
cancel_recordingCancel an in-flight recording without saving the result. Safe to call when idle (returns wasRecording:false). Unlike toggle_recording which stops the recording AND triggers transcribe + paste, this drops the audio entirely. Useful when the agent realizes the recording was started by mistake or the user said "wait, scratch that".
check_for_updatesTrigger electron-updater's update check. Mirrors the "Check for Updates" button in Settings → About. Returns immediately; the actual check runs asynchronously. Agents can poll get_config lastUpdateCheck to see when it last ran. SAFE — only downloads; install still requires a user-driven quitAndInstall via the in-app button.
clear_install_historyWipe the in-memory install audit log. Useful between test runs.
clear_paste_historyReset the in-memory paste history buffer. Useful between stress-test runs.
clear_translation_memoryWipe the entire translation-memory cache. Destructive — confirm with the user before calling.
cloud_diagnoseRun local diagnostics AND route the findings to the windy-fix-me cloud-relay for LLM-augmented remediation. Returns both the local rule-based findings and the cloud-relay's structured remediation (each entry has rootCause, a specific MCP tool call to invoke, fallback, verification steps). Use this when local run_diagnostics surfaces warnings/errors and you want expert-level fix guidance that knows about platform-specific quirks the local rules don't. Relay endpoint: https://windy-fix-me.windyword.workers.dev/diagnose (override via WINDY_FIX_ME_URL env var on the Windy Word side). May add ~2-3s…
create_voice_clone_from_pathCreate a voice clone from an audio file on disk. Copies the source file into Windy Word's voice-samples directory under a fresh UUID, registers the clone in the local DB, and returns the new clone's metadata (with hasAudio=true). Supported audio extensions: .webm, .wav, .mp3, .ogg, .m4a, .flac. Source file must exist and be readable; the copy itself is path-confined to Windy's voice-samples dir. Use list_voice_clones afterward to see it and set_active_voice_clone to activate.
delete_archive_entryTear down an archive entry: removes the transcript .md file + linked audio + linked video, all path-confined to the archive folder. Irreversible — confirm with the user before calling. Returns the list of filenames actually deleted.
delete_voice_cloneDelete a voice clone (metadata + audio file on disk). If the deleted clone was the active one, activeId is reset to null. Returns the deleted clone's id and name for audit purposes. Irreversible — confirm with the user before calling.
Show 100 more tools
describe_settingReturn the full catalog entry for one setting (type / allowed values / description / default / side effects / restartRequired / sensitivity) plus its current value from the live store. Returns an error if the path is not in the catalog — use get_config for paths outside it.
detect_hardwareReturn system hardware info: totalRAM (GB), freeRAM (GB), cpuModel, cpuCores, platform, arch, gpu (NVIDIA via nvidia-smi on Linux/Windows; Apple Silicon Metal/MPS on macOS arm64; null otherwise), diskFreeGB (homedir partition). Used by Doctor checks and model-selection decisions — bigger models need more RAM, GPU-accelerated paths only fire when gpu != null.
export_soul_file_to_pathExport the user's entire Windy Word archive (audio + video + transcripts) as a single zip file at the given path. The Forma Animae artifact — Grant's exportable "soul" for use with the Windy Clone digital-twin pipeline or as a portable backup. Includes a manifest.json with stats (file counts, word counts, date range). Refuses to overwrite existing files unless overwrite=true. Creates parent directories as needed. Pairs with the existing export-soul-file IPC the renderer uses via the Soul File button (which opens a save dialog) — this is the path-based variant for agent-driven exports.
extract_document_textExtract plain text from a document file at a given path. Supports .txt / .md / .csv (read as UTF-8), .html (strip tags), .pdf (regex scrape — best-effort, may return [PDF text extraction yielded nothing] for image-only PDFs), .docx (xml-strip). Default size cap 5MB; override via maxBytes (up to 20MB). Returns {ok, path, ext, sizeBytes, textLength, text}.
get_active_paste_strategyReturn the currently selected paste strategy, the user-configured fallback chain, and the resolved chain that will actually be tried at paste time. When strategy is "auto", the chain comes from defaultFallbackChain() with hotkey-collision demotion applied.
get_active_voice_cloneReturn the currently-active voice clone (the one used for TTS playback), or {active: null} if no clone is selected.
get_archive_statsReturn aggregate stats for the user's recording archive: totalFiles, totalSizeMB, days (number of distinct date directories), audioHours, videoHours, totalWords, totalSessions, totalChars. Cached server-side for 30s — responses include `cached` + `cacheAgeSec` so the agent knows freshness.
get_autostart_statusCheck whether Windy Word is configured to auto-launch on user login. Returns {platform, enabled, desktopFile?}. Linux checks for ~/.config/autostart/windy-pro.desktop; macOS/Windows use electron's app.getLoginItemSettings(). Pure read — no state change.
get_billing_historyReturn the user's purchase / transaction history — the answer to "show me my receipts", "what have I paid for", "list my transactions". Returns an array of transactions with { id, tier, billing_type, amount_cents, currency, created_at, stripe_session_id }. Requires sign-in.
get_billing_summaryReturn a high-level billing summary — current tier, lifetime spend, next renewal (if subscribed). Answer to "what does my bill look like", "billing summary", "how much have I spent on Windy Word". Requires sign-in.
get_cloud_clone_order_statusCheck the status of a Windy Clone cloud-training order — used after submit_voice_clone_to_cloud to poll for ElevenLabs training completion. Requires the user to be signed in to their Windy account; returns a clean 401-shape error if not. Returns the raw order body from the Windy Clone API.
get_configReturn the settings an agent may read, by setting path: { settings: { path: value } }. Values only where an agent may read them; personal, path and account values come back as { isSet, redacted: true }, and sign-in tokens, sessions and consent switches are never returned. Use list_settings / describe_setting for descriptions and set_setting to change one.
get_install_historyReturn the audit log of recent install_dependency attempts on this machine (timestamp, tool, package, exact command, exit code, elapsed ms, whether the tool is on PATH after, stdout/stderr tails). In-memory; resets when Windy Word restarts.
get_install_statusReturn the current state of an async install job started by install_dependency_async. Status is "running" (still in flight) or "completed" (finished — check result.ok for success). If the job is not found (FIFO-evicted after 50 jobs, or wrong jobId), returns status="unknown".
get_my_planReturn the signed-in user's identity and license tier — the answer to "what plan am I on", "what tier am I on", "am I a pro user", "what subscription do I have". Returns { userId, name, email, tier, devices, deviceLimit, createdAt }. Tier is one of {free, pro, lifetime, team}. If the user is not signed in, returns ok:false with a "Not signed in" error — surface that to the user and offer to walk them through sign-in.
get_paste_historyReturn the last N paste attempts with diagnostic data: timestamp, text length, content hash (NOT the actual text), strategy chain attempted, winner, target window type. The buffer is in-memory and resets when the app restarts.
get_paste_targetDetect whether the currently focused window is XWayland or Wayland-native (or unknown). This is what xdotool sees — agents use it to verify their assumptions before picking a strategy, because XWayland targets accept different keystrokes than Wayland-native ones.
get_platformReturn OS / arch / distro / display-server / desktop-environment / tool-availability info for the machine running Windy Word. Use this first when diagnosing paste / hotkey issues — the platform determines which strategies and capabilities are valid.
get_recording_stateReturn the recording-flow state: isRecording (main-process truth), pythonEngineRunning (transcription backend alive), totalPasteAttempts (counter — increments after every paste attempt; use to detect activity between polls). Read-only and cheap. Use this BEFORE doing anything intrusive — if isRecording=true, the user is actively recording and you should defer or use toggle_recording to stop them gracefully.
get_sound_effect_stateReturn the current sound-effects configuration: per-hook-stage enabled/volume settings (the 6 stages are start, during, stop, process, warning, paste), the active sound pack, master SFX volume, and any per-stage custom sound overrides. The 6 hookStages are always returned even when live state read fails (so agents can show the stage catalog). **Phase 1 limitation:** Sound state lives in renderer-side localStorage, not the main electron-store. Reading via webContents.executeJavaScript currently fails (Electron context-isolation) — expect rendererReadable=false with rendererError set. Phase 2 w…
get_translation_memory_statsReturn TM cache stats: totalEntries, topPairs (top 10 source→target language pairs by count), recentEntries (last 50 by updated_at).
get_versionReturn the running Windy Word version (app.getVersion()) plus the underlying Electron and Node versions. Mirrors the "Windy Word v1.6.2" display in Settings → About. Read-only and safe to call.
get_widget_stateReturn mini-widget (tornado) runtime state via the renderer bridge: whether the WidgetEngine is present, whether the widget is currently visible, and the localStorage tornadoSize value. Complements the catalog-driven set_setting path for tornadoX/tornadoY/tornadoSize/widgetSettings.
get_window_stateSnapshot the main window's current state: exists, maximized, minimized, focused, visible, fullScreen, simpleFullScreen, bounds {x,y,width,height}, fontSize, opacity, alwaysOnTop. Read-only. The cheapest call to find out "is the user actively using the app right now" — check focused + isRecording (via get_recording_state) before doing anything intrusive.
get_windytune_stateReturn WindyTune auto-tune state: whether it is enabled, the current model, the model ladder, switch thresholds, the recent transcription timing history, and the rolling average ratio (used to decide when to climb or descend the ladder).
install_dependencyInstall a missing system tool via the distro package manager wrapped in pkexec. WARNING: this triggers a graphical sudo (polkit) prompt that the user must approve interactively — do not call without telling the user a prompt will appear. The tool must be in Windy Word's whitelist: wtype, ydotool, wl-clipboard, xdotool. Linux only. After a successful install of wtype, re-check list_paste_strategies — wtype will flip to availableOnThisMachine=true and become first-pick in the resolved chain (paste becomes instant on Wayland-native targets). Use dryRun=true to see the command without executing it…
install_dependency_asyncFire-and-poll variant of install_dependency. Returns a jobId immediately and runs the install in the background. Use get_install_status to check progress. Useful when the install might take >10 minutes (e.g., compiling from source, large package downloads on slow networks) or when the agent wants to surface a "still installing…" UI without holding a connection open. The whitelist + platform constraints + polkit/sudo flow are identical to install_dependency.
list_archive_entriesList archived recording sessions (the user's historical transcripts + linked audio/video). Each entry has an opaque id (use it with read_archive or delete_archive_entry), date, full transcript text, wordCount, engine used, and hasAudio / hasVideo booleans. Newest first. Path information is NOT returned — agents work with the opaque id.
list_audio_devicesEnumerate audio input devices (microphones) available to Windy Word. Returns each device with { deviceId, label, groupId, isCurrent } plus the currently-selected micDeviceId and a hint when labels are hidden (the OS hides labels until mic permission has been granted at least once — the user must start a recording one time before labels become visible). To switch devices, call set_setting with path "engine.micDeviceId" and the desired deviceId.
list_clone_bundlesList training-bundle catalog — audio/video recordings the user has marked as candidates for voice-clone training. Each entry has bundle_id, name, device info, sync_status, training_ready flag, file size, created_at, and fileExists. Pairs with InstaBio voice-clone ingestion which reads from these bundles. See [[project_instabio_voice_clone_data]] memory for the broader voice-clone training-data contract.
list_clone_watchersList currently-active folder watchers from watch_folder_for_recordings. Returns each as { path, autoIngest, startedAt, ingestedCount }. Resets to empty on every app restart.
list_diagnostic_checksList the catalog of Windy Doctor diagnostic checks without running them. Returns each check's name, description, and whether it applies to this platform. Useful for agent introspection — understanding what the doctor knows how to look at before kicking off a diagnostic run.
list_hotkeysList all current keyboard shortcut bindings, the set of rebindable actions, and the list of accelerators that are reserved (cannot be assigned). Use this before set_hotkey.
list_install_jobsList all install jobs currently in memory — both running and recently completed. Useful for dashboards or when an agent forgot a jobId.
list_installable_dependenciesList the whitelisted system tools that Windy Word can install on this machine to expand its capabilities (e.g. wtype for instant Wayland paste). Returns supported platform check + distro detection + the resolved install command per tool. Always safe to call (no system mutation). v0 supports Linux only — returns supported=false with a friendly explanation on macOS/Windows.
list_modelsList available Whisper transcription models (tiny / base / small / medium / large-v3), their on-disk size and accuracy/speed tradeoff, the current selected model, and the WindyTune ladder.
list_paste_strategiesList all 12 paste strategies (macOS / Windows / Linux X11 / Linux Wayland) with full capability metadata, a per-strategy availableOnThisMachine flag, the resolved default fallback chain, and a hotkeyCollisionDetected flag indicating whether Mutter or another compositor is eating Windy Word's own paste keystroke (which silently breaks the Ctrl+Shift+V family on Wayland+GNOME).
list_recent_setting_changesList the catalog-validated setting changes made in this session, oldest first. The answer to "what did I just change", "what have I been changing", "show me my recent changes". Each entry: { path, previousValue, newValue, timestamp, source }. Bounded by a 50-entry ring buffer; oldest entries drop as new ones land. History resets on app restart.
list_settingsList every setting Windy Word exposes as an agent-discoverable, schema-validated path. Returns each setting's dotted path, type, description, allowed values (if enum / range), default, side effects of changing it, restartRequired flag, sensitivity (writable vs readonly), tags, and the current live value. The response also includes availableTags so agents can discover what tag filters exist. Use this as the entry point for any agent setting introspection. Paths outside the catalog are accessible only via the lower-level get_config / set_config tools. Optional `tag` parameter narrows results — e…
list_sound_effect_packsList the sound-effect packs the Windy Word EffectsEngine knows about (_silent, classic-beep, soft-chime, and other built-in synthesized packs). Pairs with the 6 hook stages (start/during/stop/process/warning/paste) to drive per-stage sound assignments. **Phase 1 limitation:** Same as get_sound_effect_state — the renderer EffectsEngine isn't globally exposed, so live pack-list queries return ok=false until Phase 2 (renderer-side IPC bridge). The endpoint shape is finalized for forward-compat.
list_tts_voicesList the system TTS voices installed on this machine. Returns platform-specific names (macOS: "Samantha", "Daniel", "Alex"; Windows: "Microsoft David Desktop"). Pass one of these as the `voice` argument to speak_text. Use this when the user asks "what voices do you have" or wants to switch the agent's voice.
list_voice_clonesList all voice clones the user has on this machine. Returns each clone's id, name, duration, created_at, status, plus a hasAudio boolean (no raw audio in the response — use preview_voice_clone to fetch base64 audio for a specific clone). Also returns activeId — which clone is the current TTS default. Use this to answer "what clones does the user have?" without paging through audio bytes.
logout_accountSign the user out of their Windy account. Use this for "sign me out", "log me out", "switch accounts". Best-effort upstream logout, then ALWAYS clears the local auth + cached license fields (auth.token, auth.storageToken, license.tier, license.email, license.purchasedAt, license.expiresAt, license.stripeSessionId). Safe to call when already signed out and safe to call offline.
lookup_translation_memoryLook up a (text, sourceLang, targetLang) tuple in the local translation-memory cache. Returns {ok, match: {translation, hits} | null}. No external API call — pure local SQLite query.
maximize_windowMaximize the main Windy Word window to fill the screen. Mirrors the title-bar maximize button. Different from fullscreen: keeps the title bar visible and stays in the current OS space. Use set_video_fullscreen for true fullscreen.
minimize_windowMinimize the main Windy Word window to the dock/taskbar. Mirrors the title-bar minimize button. Idempotent — calling on an already-minimized window is a no-op.
open_archive_folderPop the archive root directory in the user's OS file manager. Side-effect on the desktop (opens a Files / Finder / Explorer window). Use when the user asks "show me where my recordings are saved" or similar.
open_billing_portalOpen the Stripe Customer Portal in the user's default browser. Use this for "manage my subscription", "update my credit card", "cancel my plan", "view my invoices", "I want a refund". Returns { ok, url, opened }. Cancellation, plan changes, and card updates all happen in the portal — the user must complete those steps there. Requires sign-in AND a prior purchase (account-server returns 400 if the user has never bought anything).
open_upgrade_checkoutOpen a Stripe Checkout page in the user's default browser to upgrade to a paid tier. Use this for "upgrade me", "I want pro", "switch me to lifetime", "buy the yearly plan". Returns { ok, url, sessionId, opened } — `opened:true` means shell.openExternal launched the browser; tell the user to complete checkout there. tier must be one of {pro, translate, translate_pro}; billing_type must be one of {lifetime, monthly, yearly}. After checkout completes the user's tier updates via webhook — call get_my_plan to confirm. Requires sign-in.
open_urlOpen an http/https URL or one of the Windy ecosystem schemes (windypro://, windychat://, windyword://, windyfly://) in the user's default browser via Electron's shell.openExternal. Mirrors UI buttons like "View all history in Web Portal" and the Upgrade → checkout flow. Allowlisted: file://, javascript:, and other dangerous schemes are rejected with 403.
paste_transcriptDescription is built at runtime.
pause_other_audioPause any music or media playing in other apps (Spotify, Apple Music, browsers, VLC) so it doesn't bleed into a recording. Use this BEFORE start_recording when the user is listening to music, or whenever the user says "pause my music", "stop the music", or "mute Spotify". Returns per-app `attempts` so the agent can describe what was paused. Best-effort cross-platform: macOS uses AppleScript to Music + Spotify (guarded by "is running"); Windows sends VK_MEDIA_PLAY_PAUSE (toggle key — same key used for resume); Linux uses `playerctl pause` (covers any MPRIS-compatible player). On Linux the respo…
preview_voice_cloneReturn a voice clone's metadata, optionally with the base64-encoded audio sample. Pass metadataOnly=true to skip the audio (responses can be several MB otherwise). The mimeType field tells the agent how to interpret audioBase64 (typically audio/webm).
quick_translateDescription is built at runtime.
quit_appQuit Windy Word cleanly. app.quit(). Returns 200 immediately; exit fires ~250ms later. DESTRUCTIVE — app will not auto-restart. Get user confirmation before calling.
read_archive_entryReturn an archive entry's metadata + optionally the base64 audio or video media bytes. The mediaType parameter selects which stream ("audio" default, or "video"). Pass metadataOnly=true to skip the base64 payload (responses can be MBs otherwise). Returns { ok, present, mimeType, base64 } or { ok, present: false } if the requested media isn't attached to this entry.
reset_hotkeysRestore all global keyboard shortcuts to their catalog defaults and re-register them. Mirrors the "Reset All to Defaults" button in Settings → Keyboard Shortcuts. Returns the applied bindings so the agent can confirm. Idempotent — safe to call repeatedly.
restart_appRelaunch Windy Word. app.relaunch() + app.exit(0). Returns 200 immediately; the actual exit fires ~250ms later so this response lands. DESTRUCTIVE — closes the running app, losing any in-flight recording. Get user confirmation before calling.
resume_other_audioResume music or media that was paused with pause_other_audio. Use this AFTER stop_recording, or when the user says "play my music again", "unpause Spotify", or "resume the music". macOS resumes Music + Spotify by name; Windows toggles the media key (so calling this when nothing was previously paused will START playback — be mindful of that on Windows); Linux uses `playerctl play`.
run_diagnosticsRun the local Windy Doctor check battery and return a structured report: overall health (healthy / degraded / unhealthy), per-check status (ok / warning / error / not_applicable), severity, what was found, and (for non-ok findings) an actionable remediation step that often references the specific MCP tool to call next (e.g., "install_dependency({tool: \"wtype\"})"). Covers: paste-stack tooling presence, /dev/uinput permissions, ydotoold daemon health, polkit rule installation, Python transcription engine liveness, Mutter hotkey collision. No system mutation — pure read. Use this as the startin…
run_paste_injection_testReal end-to-end paste injection test. Spawns a focusable Tk scratchpad target, temporarily flips Mutter's focus-new-windows policy to "strict" so the target auto-grabs focus, fires the requested paste strategy, captures what landed in the target, and returns whether the captured text matches what was sent. SAFE TO RUN — the target is a spawned scratchpad, not the user's active window; the focus-policy flip is reverted after the test. Wayland+GNOME only in v0 (the gsettings focus-policy flip is GNOME-specific). Returns the paste-strategy attempt diagnostic too.
save_text_fileWrite text content to a file at a given path. Default: refuses to overwrite existing files (returns a 409-shaped error with the existing file size). Pass overwrite=true to replace. Creates parent directories as needed. Returns {ok, path, bytesWritten}.
save_translation_memoryStore a (source, target, sourceLang, targetLang) tuple in the TM cache. Useful when an agent has a known-good translation it wants future lookups to find without re-calling the LLM. Upserts on duplicate keys (increments the hits counter).
scan_folder_for_mediaScan a folder for audio + video files (recursive by default). Use this when the user says "find all my voice memos", "what recordings do I have in this folder", "look in my Music folder", or before bulk_ingest_to_clone so the agent knows what's there. Returns per-file { path, name, ext, sizeBytes, modifiedAt, kind, durationSec? } plus aggregates (audioCount, videoCount, totalSizeBytes, totalDurationSec). Audio durations are extracted via music-metadata. Capped at 500 results to prevent runaway responses (truncated:true in that case); recursion depth capped at 6 to prevent symlink loops. Permis…
search_archivesFull-text substring search across every archived transcript. Returns matches with a short snippet of surrounding context. Case-insensitive by default. Scales to thousands of entries (the scan is a single _agentArchiveScan pass + in-memory filter). Use this when the user asks "what did I say about X" or "when did I last talk to Y". For richer queries (regex, semantic, embedding) — defer; this is the fast substring path.
send_notificationShow an OS-native notification via Electron's Notification API. Returns ok:true if shown. Title is capped at 200 chars, body at 1000 chars. Pass silent:true to suppress sound. Returns 500 on platforms where notifications aren't supported.
set_active_sound_packSwitch the active sound pack. Pack ids come from list_sound_effect_packs — typical built-ins are "_silent", "classic-beep", "soft-chime". Affects all 6 hook stages unless individually overridden via custom-sound assignments. Persisted via EffectsEngine _saveSettings.
set_active_voice_cloneSet which voice clone is the active TTS default. Pass id=null to deactivate (no clone — falls back to built-in TTS). The id must match an existing clone (use list_voice_clones to discover ids).
set_always_on_topToggle whether the Windy Word window stays above other windows. Mirrors Settings → Appearance → Always on Top. Live update on the window + persist to appearance.alwaysOnTop. Idempotent.
set_analytics_enabledOpt in or out of anonymous usage analytics (engine, duration, mode, language — never transcript content). Mirrors Settings → Analytics → "Help improve Windy Word". Off by default. Live-applies to the renderer's localStorage flag.
set_autostartEnable or disable Windy Word's auto-launch on user login. Linux writes/removes a .desktop autostart entry; macOS/Windows toggle via Electron's setLoginItemSettings. Returns the resulting state (enabled boolean) so agents can verify the change took.
set_configRETIRED: raw config writes are refused (they skipped validation, history and Undo, and could change permission switches). Use set_setting, which validates the value and can be undone.
set_font_sizeSet the UI font-size zoom factor (70-150%). 100 is default. Mirrors the A- / A+ buttons in the Settings header. Persists to appearance.fontSize and broadcasts a font-size-changed event to the renderer so the live UI updates immediately.
set_hotkeyRebind a keyboard shortcut. Action keys: toggleRecording, pasteTranscript, pasteClipboard, showHide, quickTranslate. Accelerator format is Electron-style (e.g. "CommandOrControl+Shift+Space", "Alt+W"). Triggers an immediate re-registration.
set_languageSet the Whisper transcription language. ISO 639-1 code (e.g. "en", "es", "fr", "ja", "zh", "ar", "hi", "de", "pt", "ko", "ru", "it", "nl", "pl", "tr", "sv", "vi", "th") — or "auto" to let Whisper detect per-utterance. Mirrors Settings → Transcription → Language. Hot-swappable: the live Python engine reconfigures over WebSocket without app restart; the new language applies on the next recording.
set_master_sfx_volumeSet the master SFX volume (0-100). Affects every hook stage as a multiplier on per-stage volumes. Persists immediately to localStorage windy_sfxVolume and applies to the live EffectsEngine.sound master.
set_modelSwitch the active transcription model. Hot-reloads the running Python engine over WebSocket if it is currently active — no app restart needed. Model must be in the WindyTune ladder (see list_models).
set_opacitySet the Windy Word window opacity (0.1 = mostly transparent, 1.0 = fully opaque). Mirrors Settings → Appearance → Window Opacity. Live update on the window + persist to appearance.opacity. Values outside [0.1, 1.0] are rejected.
set_panel_visibilityConfigure how one of the bottom panel rows behaves in the main app: "always" pins it open, "hover" reveals it when the cursor is near the bottom edge, "hidden" never shows it. Mirrors Settings → Bottom Panel. "playback" and "export" default to "hover"; "control" defaults to "always".
set_paste_strategySelect a paste strategy. Pass "auto" to use the platform default chain, or a specific strategy name (e.g. "wtype", "ydotool_type", "osascript_cmdv"). Optionally override the fallback chain. Strategy names come from list_paste_strategies.
set_settingValidate and apply a setting change against the catalog. Rejects unknown paths, type mismatches, out-of-range numbers, invalid enum values, malformed accelerators, and attempts to write read-only settings (e.g. license.*). On success, returns the previous + new value, any side effects that fired (e.g. "global shortcuts re-registered", "python engine hot-reload sent"), and whether a restart is required for the change to take full effect. Use set_config to bypass the catalog (low-level, no validation — for paths outside the catalog).
set_sound_effect_modeSwitch the EffectsEngine mode: "silent" (no sounds), "classic" (built-in beeps), "surprise" (random selection from a category), "custom" (per-hook user-assigned sounds), "pack" (active pack drives everything). Persisted via _saveSettings.
set_sound_hookConfigure a single sound-effect hook stage. Hooks are the 6 lifecycle points where Windy Word plays sounds: start (🎬 begin recording), during (🎤 mid-recording chirps), stop (⏹️ end recording), process (⏳ Whisper transcribing), warning (⚠️ approaching session limit), paste (📋 transcript injected). Each hook has enabled (boolean) + volume (0-100 int). Pass any combo of those args — omitted ones are unchanged. Routes through the renderer EffectsEngine and persists via _saveSettings to localStorage.
set_themeSwitch the UI theme. "dark" / "light" force one mode; "auto" follows the OS appearance. Mirrors Settings → Appearance → Theme. Persists to electron-store and propagates to the renderer (light-theme body class + localStorage.windy_theme) live — no app restart.
set_video_fullscreenToggle the main window into native OS-level fullscreen. On macOS uses setSimpleFullScreen (works with the focusable:false main window — doesn't need key window); other platforms use standard setFullScreen. Used by the History video-expand button (PR #143). For UI font zoom use set_font_size; for in-window maximize use maximize_window.
set_window_geometrySet the main window's position and size in screen pixels. Updates the live window AND persists to window.{x,y,width,height} so it survives restart. Useful for arranging the app before a demo or moving it to a specific monitor.
setup_install_polkit_ruleInstall or remove the Linux polkit auto-approve rule that lets install_dependency run without prompts. CRITICAL ONE-TIME SETUP for the agent-native install flow on a fresh machine: triggers a single pkexec password prompt for THIS call (the user types their password once); thereafter every install_dependency call for a whitelisted tool (wtype/ydotool/wl-clipboard/xdotool/ffmpeg) runs prompt-free. Uses subject.active so the rule applies to any logged-in user on the machine (not hardcoded to a single account). Linux only — returns 501 on macOS/Windows. Recommended flow: 1. run_diagnostics — s…
show_hide_windowDescription is built at runtime.
speak_textSpeak text aloud through the OS's system TTS. Use this whenever the user can't see the screen — confirmations ("OK, I muted notifications"), read-backs ("here's your transcript: ..."), or eyes-free conversation. Returns 200 immediately after starting playback (does NOT block for audio duration). Default interrupt:true cancels any currently-playing TTS so a new utterance always wins; pass interrupt:false to queue. voice and rate are platform-specific — call list_tts_voices first if the user asks for a particular voice. Linux requires festival or espeak installed; failure returns a structured hi…
start_recordingBegin a voice recording (mode-aware: batch / streaming / API engine). The actual mic-capture + WebSocket setup completes asynchronously after the call returns — poll get_recording_state to confirm the live state. Idempotent: if already recording, returns { ok: true, alreadyRecording: true } without firing a second start.
stop_recordingEnd the current recording and trigger the transcription + paste pipeline against the window that had focus when recording started. Idempotent: returns { ok: true, alreadyStopped: true } if no recording is active.
stop_speakingSilence any in-flight TTS playback immediately. Use this when the user says "stop", "shut up", "be quiet", or interrupts to ask something new. Safe to call when nothing is playing.
submit_voice_clone_to_cloudSubmit a local voice clone to Windy Clone for ElevenLabs training. Idempotent on cloud_order_id: if the clone has already been submitted, returns { ok: false, error: "Already submitted...", cloud_order_id: <existing> } without firing a second submission. Requires the user to be signed in to their Windy account (auth.token in electron-store). On success returns { ok: true, order_id, status }; poll get_cloud_clone_order_status with the returned order_id for training progress. Get clone ids from list_voice_clones.
test_paste_strategyWARNING: injects test text ("wtest") into whatever window currently has focus. Use to verify a specific strategy works on this machine. Returns timing + success flag. Have the user focus a known-safe target (e.g. a text editor) before calling.
toggle_recordingDescription is built at runtime.
transcribe_audio_fileTranscribe an audio file at a given path. Accepts any format ffmpeg can read (wav, mp3, m4a, ogg, flac, webm, etc. — auto-detected). Routes through the same Python Whisper engine the Windy Word desktop app uses for live transcripts (no cold start when the engine is warm — WebSocket-routed for sub-second hand-off). Returns transcript text + timing diagnostics (transcribeMs, audioDurationSec, ratio = transcribe/audio, modelUsed). 500MB file cap; 60s ffmpeg ceiling; 120s WS ceiling. Designed for individual files — agents wanting bulk processing should iterate over a directory and call this per fi…
translate_textTranslate text to a target language. Tries the local translation-memory cache first (instant + free); on miss, calls Groq (preferred) or OpenAI via Windy Word's configured key. The TM cache auto-populates from successful calls so repeat translations are free. Source language defaults to "auto" (model detects); only concrete source-lang calls hit the TM. Returns {ok, translation, fromCache, sourceLang, targetLang, engine}.
undo_last_setting_changeRevert the most recent catalog-validated setting change in this session. Use this when the user says "undo", "undo that", "put it back", "I didn't mean to change that", or "that was too loud, go back". Pops the last entry from the change history and replays the previousValue through the same apply path as set_setting (so hotkey re-registration, renderer live-apply, and engine hot-reload all fire correctly). Returns 404 with a clean error when there's nothing to undo. Cannot undo a /config raw write — only catalog-validated changes (set_setting, set_theme, set_language, set_font_size, set_opaci…
unmaximize_windowRestore the main window from maximized to its previous size. No-op if not maximized.
watch_folder_for_recordingsStart (enabled:true) or stop (enabled:false) a folder watcher that auto-ingests new audio files as they land. Use this when the user says "watch my Voice Memos folder", "anytime I drop a file in ~/Recordings, add it to my clone", or "auto-import new recordings". Chokidar-backed: ignoreInitial:true so existing files don't trigger; awaitWriteFinish so in-progress writes complete before ingest. autoIngest defaults true (unsupported file types are silently skipped). Watchers are in-memory only — they do NOT survive an app restart, so a long-running watch needs re-registration after every launch. C…
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit
- Oct 21, 2026 (8 days ago)
- Last release
- May 20, 2026 (5 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Registry name
io.github.sneakyfree/windy-word-mcp- Version
- 1.3.0
- Auth
- No auth
- Packages
- npm windy-word-mcp
- License
- MIT
- Repository
- github.com/sneakyfree/windy-word-mcp
- Website
- windyword.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
Cite this page
Windy Word MCP server. Agent Mart. https://agentmart.dev/connectors/sneakyfree-windy-word-mcp (last updated 2026-10-24)