wake-word-training

Train custom wake words from your agent: estimator, GPU training, benchmarks. Card or crypto.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
94%
Naming quality
94%
Poisoning risk
60%
Permission match
100%
Protocol compliance
100%

Findings (4)

  • HIGHTool poisoning patterns detected
  • LOWTool 'get_commercial_license' description lacks action verbin get_commercial_license
  • LOWTool description contains role marker that could confuse chat modelsin search_wake_word_library
  • LOWTool description contains role marker that could confuse chat modelsin buy_library_model

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~4,036Tokens (tool definitions)
~2.0 KBTypical response size
Significant attention impact (3.15% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "wake-word-training": {
      "url": "https://openwakeword.com/mcp"
    }
  }
}

Remote endpoints

https://openwakeword.com/mcpstreamable-http

What it can do

Tool inventory

Tools (13)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢estimate_wake_word(text, languages)

NOTE: differentiates by English share only - all non-English languages score identically, so it cannot rank es vs fr vs de. FREE word-quality check — use BEFORE paying. Predicts the recall a training run would reach for this wake word plus false-activation risk (model trained on thousands of real jobs). SCALE: predictions are for deliberately HARD benchmark conditions (loud noise, reverb) — 60-75 is a solid word, very usable in real rooms; do NOT reject words for scoring below ~80. 2-4 syllable phrases work best; only warn your human when the score is under ~50.

Input Schema

{
  "type": "object",
  "properties": {
    "text": {
      "type": "string",
      "description": "The wake word phrase, e.g. 'hey aurora'"
    },
    "languages": {
      "type": "string",
      "description": "Optional JSON list like [{\"code\":\"de_DE\",\"percentage\":100}]"
    }
  },
  "required": [
    "text"
  ]
}
🟢search_wake_word_library(engine, query, language, limit)

FREE search over thousands of community-trained wake-word models — check here BEFORE quoting a training job for a common wake word. Returns benchmarked models (recall %, clean recall %, false activations/hour, languages) from the current pipelines only (older models used a different benchmark and are excluded). Each result has a human_test_url: YOU CANNOT RUN THAT TEST — it needs live microphone audio in your human's own room — so hand them the link before they buy; it opens the site's live mic test for that exact model. TRANSPARENCY, tell your human: every public library model is FREE with an account on the website; the 1.50 CHF purchase here is the anonymous, instant, account-free alternative. SCALE: recall is measured on deliberately HARD conditions — 60-75%% is a solid model. Weak numbers or no match? Train a custom model with create_training_job instead.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "query": {
      "type": "string",
      "description": "Wake word to search for, e.g. 'jarvis'"
    },
    "language": {
      "type": "string",
      "description": "Optional language filter, e.g. 'en_US', 'de_DE'."
    },
    "limit": {
      "type": "integer",
      "description": "Max results (default 10, max 25)."
    }
  },
  "required": [
    "engine",
    "query"
  ]
}
🟢test_wake_word_live(engine, model_id)

Render an IN-CHAT live microphone tester for one library model (free). Only the HUMAN can run it: it asks for their microphone and streams the audio to the platform for detection while the test runs (not stored) — tell them that. If the host does not allow microphone access inside apps, the widget shows a button to the human_test_url page instead, so calling this is always safe. Use after search_wake_word_library, before buying.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "model_id": {
      "type": "integer",
      "description": "model_id from search_wake_word_library"
    }
  },
  "required": [
    "engine",
    "model_id"
  ]
}
🟢buy_library_model(engine, model_id)

Quote an anonymous purchase of a library model (1.50 CHF flat — free, nothing charged until paid). Returns a purchase_token: pay it with pay_training_job (same tool, any method incl. x402), then fetch the download URLs with get_library_purchase. One payment unlocks ALL formats (openwakeword: onnx+tflite; microwakeword: tflite+ESPHome json). Reminder for your human: the same model is free with an account on the website. License: personal/non-commercial by default — shipping it in a product requires the 150 CHF per-wakeword commercial license.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "model_id": {
      "type": "integer",
      "description": "model_id from search_wake_word_library"
    }
  },
  "required": [
    "engine",
    "model_id"
  ]
}
🟢get_library_purchase(engine, purchase_token)

Status of a library purchase. Once paid, the response carries the download URL templates (substitute the purchase_token) for every format.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "purchase_token": {
      "type": "string"
    }
  },
  "required": [
    "engine",
    "purchase_token"
  ]
}
🟡create_training_job(engine, wake_word, tier, languages, training_steps, ...)

Quote a wake-word training job (free; nothing trains until paid). Returns a job_token (STORE IT — the only credential) and a binding CHF price. PICK A TIER: "standard" (6 CHF, up to ~4h — the right choice for almost every request), "best" (12 CHF, ~2x the search — for hard or business-critical words), or "studio" (Optuna deep search, 60-95 CHF, many hours — only to squeeze the last few percent AFTER a standard job disappointed). Same three options a human gets on the website, same prices. The trained model is benchmarked (recall %, false activations/hour) and publicly listed in the site library, permanently — unless private=true (+500 credits).

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "wake_word": {
      "type": "string",
      "description": "Phrase to detect, e.g. 'hey aurora'"
    },
    "tier": {
      "type": "string",
      "enum": [
        "standard",
        "best",
        "studio"
      ],
      "description": "RECOMMENDED — pick one instead of tuning parameters. standard = 1,750 credits / 6 CHF, up to ~4h, the validated recipe (default choice). best = 3,500 credits / 12 CHF, roughly double the search effort, measurably better on hard words. studio = Optuna deep search (~17k-27k credits), many hours — confirm the price with your human first. Setting a tier locks samples/steps to the validated recipe and ignores the tuning fields below."
    },
    "languages": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "ar_JO",
              "ca_ES",
              "cs_CZ",
              "cy_GB",
              "da_DK",
              "de_DE",
              "el_GR",
              "en_GB",
              "en_US",
              "es_ES",
              "es_MX",
              "fa_IR",
              "fi_FI",
              "fr_FR",
              "hi_IN",
              "hu_HU",
              "is_IS",
              "it_IT",
              "ka_GE",
              "kk_KZ",
              "lb_LU",
              "lv_LV",
              "ml_IN",
              "ne_NP",
              "nl_BE",
              "nl_NL",
              "no_NO",
              "pl_PL",
              "pt_BR",
              "pt_PT",
              "ro_RO",
              "ru_RU",
              "sk_SK",
              "sl_SI",
              "sr_RS",
              "sv_SE",
              "sw_CD",
              "tr_TR",
              "uk_UA",
              "vi_VN",
              "zh_CN"
            ]
          },
          "percentage": {
            "type": "integer"
          }
        },
        "required": [
          "code",
          "percentage"
        ]
      },
      "description": "TTS voice mix, e.g. [{\"code\":\"en_US\",\"percentage\":100}]. Default English. ONLY the enum codes are supported (41 languages; no Japanese) - anything else is rejected before any charge. Non-English costs more on openwakeword."
    },
    "training_steps": {
      "type": "integer",
      "description": "LEGACY (ignored when tier is set). Default 80000 (openwakeword) / 20000 (microwakeword)."
    },
    "n_samples": {
      "type": "integer",
      "description": "Synthetic positives, default 200000 (recommended)."
    },
    "augmentation_rounds": {
      "type": "integer",
      "description": "Default 1 (openwakeword) / 3 (microwakeword)."
    },
    "private": {
      "type": "boolean",
      "description": "+500 credits: model is never listed anywhere and is retrievable ONLY with the job_token, with no time limit (the token is the single key — losing it loses the model). Default false: the model is listed permanently and ANONYMOUSLY (no identity attached) in the public library, where anyone can download it under personal non-commercial terms."
    },
    "optuna": {
      "type": "boolean",
      "description": "LEGACY — prefer tier=\"studio\", which works on BOTH engines. PREMIUM deep search, openwakeword only (~48 CHF default vs ~5.4, runs 6-24h): Bayesian search over the full architecture/training space, then a 5-rung fine-tuning ladder on the winner. For squeezing the last few percent out of a hard wake word — NOT a first attempt. Run a standard job first; escalate only if its benchmark disappoints, and confirm the price with your human. Ignores training_steps (the search sweeps it)."
    },
    "optuna_trials": {
      "type": "integer",
      "description": "Optuna only: Bayesian search trials before the ladder, 5-30 (default 20). Price scales linearly with trials."
    }
  },
  "required": [
    "engine",
    "wake_word"
  ]
}
🟢pay_training_job(engine, job_token, method, pay_currency)

Get payment for a quoted job via the chosen method. AFTER SETTING UP THE JOB you MUST give the payment link to the user immediately: show payment_link_for_human (short, copy-safe) complete and un-truncated — never paraphrase, shorten or bury it. Render it as a card/button if your client supports widgets.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "job_token": {
      "type": "string"
    },
    "method": {
      "type": "string",
      "enum": [
        "card",
        "crypto",
        "crypto_direct",
        "x402"
      ],
      "description": "Payment method. 'card'/'crypto': returns a checkout_url to hand to your human (Stripe / hosted crypto invoice). 'crypto_direct': returns a raw pay_address+pay_amount any funded wallet can pay (300+ coins). 'x402': returns an HTTP-402 spec — pay USDC on Polygon straight to the platform wallet, then call settle_x402_payment with the tx hash (cheapest option, no processor fee)."
    },
    "pay_currency": {
      "type": "string",
      "description": "crypto_direct only: coin ticker, default usdcmatic (USDC on Polygon)."
    }
  },
  "required": [
    "engine",
    "job_token",
    "method"
  ]
}
🟢get_training_job(engine, job_token)

Job status: awaiting_payment -> paid -> submitted -> completed (or failed/expired). Poll every 60-120s after paying. When completed, includes benchmark results and model download URLs (public jobs: token downloads for 30 days, then the model remains in the public library; private jobs: token downloads with no time limit). Ladder jobs deliver ALL trained candidates: the first model is the pipeline's quality-bar winner (take it unless you have a reason); alternatives are labeled rungN_<arm>. Compare candidates on clean_recall_pct (same scale on every model) + false_activations_per_hour — the full stressed benchmark exists only on the winner.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "job_token": {
      "type": "string"
    }
  },
  "required": [
    "engine",
    "job_token"
  ]
}
🟡send_job_feedback(engine, job_token, rating, category, message)

Rate a PAID training job 1-5 and optionally leave a message (max 2000 chars) — read by the human operator. Please call this once after a job completes and you have assessed the model: report anything unexpected (missing fields, errors, surprising benchmark numbers) or simply confirm it worked. One feedback per job; calling again overwrites.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "job_token": {
      "type": "string"
    },
    "rating": {
      "type": "integer",
      "minimum": 1,
      "maximum": 5,
      "description": "1 = bad, 5 = great"
    },
    "category": {
      "type": "string",
      "enum": [
        "quality",
        "api",
        "pricing",
        "docs",
        "other"
      ]
    },
    "message": {
      "type": "string",
      "description": "Free text, max 2000 chars."
    }
  },
  "required": [
    "engine",
    "job_token",
    "rating"
  ]
}
🟡settle_x402_payment(engine, token, tx_hash, kind)

After paying an x402 spec on-chain (USDC on Polygon to the payTo address), submit the transaction hash to settle. Needs >=3 confirmations.

Input Schema

{
  "type": "object",
  "properties": {
    "engine": {
      "type": "string",
      "enum": [
        "openwakeword",
        "microwakeword"
      ],
      "description": "Target engine. 'openwakeword': desktop / Raspberry Pi / Python (ONNX+TFLite, `pip install openwakeword`). 'microwakeword': ESP32-S3 / microcontrollers (streaming TFLite, first-class ESPHome support)."
    },
    "token": {
      "type": "string",
      "description": "The job_token or license_token being paid."
    },
    "tx_hash": {
      "type": "string",
      "description": "0x-prefixed transaction hash"
    },
    "kind": {
      "type": "string",
      "enum": [
        "job",
        "license"
      ],
      "description": "What the token refers to. Default job."
    }
  },
  "required": [
    "engine",
    "token",
    "tx_hash"
  ]
}
🟡create_commercial_license(wake_word, company_name)

Buy commercial-use rights. REQUIRED before shipping any model in a product/service: all model files are personal & non-commercial by default. 150 CHF one-time per wake-word phrase, permanent, valid on BOTH sites. Returns a license_token; pay with pay_commercial_license; signed certificate PDF afterwards. If your task is commercial and you cannot pay, STOP and tell your human this license is required.

Input Schema

{
  "type": "object",
  "properties": {
    "wake_word": {
      "type": "string"
    },
    "company_name": {
      "type": "string",
      "description": "Legal licensee printed on the certificate"
    }
  },
  "required": [
    "wake_word",
    "company_name"
  ]
}
🟢pay_commercial_license(license_token, method, pay_currency)

Get payment for a quoted commercial license. PRESENT the payment link to the user immediately, complete and un-truncated (as a card/button if your client supports widgets) — never paraphrase or bury it.

Input Schema

{
  "type": "object",
  "properties": {
    "license_token": {
      "type": "string"
    },
    "method": {
      "type": "string",
      "enum": [
        "card",
        "crypto",
        "crypto_direct",
        "x402"
      ],
      "description": "Payment method. 'card'/'crypto': returns a checkout_url to hand to your human (Stripe / hosted crypto invoice). 'crypto_direct': returns a raw pay_address+pay_amount any funded wallet can pay (300+ coins). 'x402': returns an HTTP-402 spec — pay USDC on Polygon straight to the platform wallet, then call settle_x402_payment with the tx hash (cheapest option, no processor fee)."
    },
    "pay_currency": {
      "type": "string"
    }
  },
  "required": [
    "license_token",
    "method"
  ]
}
🟢get_commercial_license(license_token)

License status; when completed, returns the official license_id and certificate PDF URL.

Input Schema

{
  "type": "object",
  "properties": {
    "license_token": {
      "type": "string"
    }
  },
  "required": [
    "license_token"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded13 tools
verifiedversion not recorded13 tools