# Tutorializer Video Tutorials

> Write and update video tutorials, voiceovers and pronunciation rules across your projects.

- name: com.tutorializer/tutorializer
- version: 0.2.1
- connection class: R0 (autonomous)
- trust: 83/100 flags: no-repository
- quality: 76/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.tutorializer%2Ftutorializer
- tools: https://api.protogrid.dev/v1/servers/com.tutorializer%2Ftutorializer/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "tutorializer": {
      "type": "http",
      "url": "https://mcp.tutorializer.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 80
- liveness: 100
- freshness: 100
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% +updated-22d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 76/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 23 of 23 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 22 of 23 tools declare all four hints; missing: show_project_overview (idempotentHint)
- pass `tools.token_cost`: about 5,625 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 23 tool changes in 30 days
- fail `stability.rug_pull`: 23 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 23, about 5,625 tokens to load them all
- tool set hash: 6ee9a18a096157037ecfbe58593326c2
- tools last changed: 2026-09-28T03:30:47.294Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.tutorializer/tutorializer.svg)](https://protogrid.dev/servers/com.tutorializer/tutorializer)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-28 `show_project_overview` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Render a bounded tenant-scoped Tutorializer project snapshot with tutorial, video, and voiceover counts. Use this after listing projects or when the user provides an immutable project id or stable public vanity id.
  - after: Use this when someone wants a quick visual overview of one Tutorializer project. Returns a card with the project's name, domain and logo, how many tutorials, videos and voiceover lines it has (counted up to 100 each) and its 8 most recently edited tutorials. Not for missing languages or devices.
- 2026-09-28 `delete_video` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Permanently delete one Tutorializer rendered-video record and its primary S3 object. Idempotent, but the render must be uploaded or generated again to restore it.
  - after: Use this when someone wants one rendered tutorial video permanently deleted. Returns the deleted video id; the record and its video file in Tutorializer storage are erased, so restoring it means uploading or rendering again. Not for deleting the whole tutorial.
- 2026-09-28 `delete_speech` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Permanently delete one Tutorializer speech record plus its S3 audio and alignment files. Idempotent, but deleted audio cannot be recovered without synthesizing it again and spending credits.
  - after: Use this when someone wants one voiceover line permanently deleted with its audio. Returns the deleted line id; the audio and timing files are erased, so restoring it means synthesizing again, which spends credits. Deleting it again changes nothing. Not for changing its words.
- 2026-09-28 `delete_tutorial` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Permanently delete one Tutorializer tutorial definition. Idempotent, but the definition must be authored again to restore it. Rendered videos and voiceover segments are not deleted with it; remove those separately.
  - after: Use this when someone wants a tutorial permanently deleted. Returns the deleted tutorial id; its videos and voiceover lines stay and each needs its own delete. Deleting it again changes nothing. Not for removing one language or device version.
- 2026-09-28 `remove_pronunciation_rule` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Remove one project pronunciation rule and synchronize its ElevenLabs dictionary. Destructive but idempotent: a missing rule is a no-op. Existing speech audio is not regenerated automatically.
  - after: Use this when someone wants to drop a pronunciation rule so a word is spoken the default way again. Returns whether it was removed and the remaining rule count; a missing rule changes nothing, and existing audio is kept as it is. Not for changing a rule's phonemes.
- 2026-09-28 `set_pronunciation_rule` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Add or replace one project pronunciation rule and synchronize its ElevenLabs pronunciation dictionary. Repeating an identical rule is a no-op.
  - after: Use this when narration mispronounces a word, name or brand in a project's voiceovers. Returns the rule and the project's rule count after adding or replacing it (IPA or CMU phonemes, up to 500 rules) and syncing the pronunciation dictionary used for later synthesis. Not for re-voicing lines that already have audio.
- 2026-09-28 `update_speech` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Change the text, translation, language or voice of one Tutorializer voiceover segment. Every one of those fields determines the audio, so a real change re-synthesizes the segment with the project's speech provider, consumes synthesis credits and replaces the previous audio. Submitting the values it already has is a no-op that synthesizes nothing.
  - after: Use this when someone wants to change the words, translation, language or voice of one voiceover line. Returns the updated line. A real change re-synthesizes its audio with the project's voice provider, spending synthesis credits and replacing the old audio; identical values change nothing. Not for project-wide pronunciation fixes.
- 2026-09-28 `create_speech` changed (title, description, inputSchema, outputSchema, annotations) **meaning changed**
  - before: Create one Tutorializer voiceover segment for a project. Without a url it synthesizes narration audio from the text with the project's speech provider, which consumes the organization's synthesis credits and is billable. Pass url instead to register audio you already produced. State-changing and non-idempotent: repeating the call creates another segment and synthesizes again.
  - after: Use this when someone wants new narration or voiceover in a project. Returns the new line's id, language, voice and audio URL. Without url the audio is synthesized from the text with the project's voice provider, spending the organization's synthesis credits; with url it records audio you already have. Not for fixing an existing line.
- 2026-09-28 `update_video` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Correct the metadata of one registered Tutorializer rendered video, such as its locale, device, dimensions or media URLs. Reads the stored record first and rewrites the whole document, so unspecified fields keep their current values. Submitting the values it already has is a no-op.
  - after: Use this when someone wants to correct a tutorial video's language, device, dimensions, file link, subtitles, chapters or thumbnail. Returns the updated video record; fields left out keep their values and identical values change nothing. Not for re-rendering the video itself.
- 2026-09-28 `create_video` changed (title, description, inputSchema, annotations) **meaning changed**
  - before: Register one already-uploaded rendered tutorial video with Tutorializer, recording its locale, device, dimensions and media URLs. State-changing and non-idempotent: repeating the call registers a second output. This does not record, render or upload a file; host the file first and pass its public https URL.
  - after: Use this when someone has an already uploaded tutorial video file and wants it listed under a tutorial. Returns the new video record with its language, device, dimensions and URLs. Host the file first and pass its public https URL; each call adds another record. Not for recording, rendering or uploading a video.

Full history: https://api.protogrid.dev/v1/servers/com.tutorializer%2Ftutorializer/changes

## Remotes

- https://mcp.tutorializer.com/mcp (streamable-http, auth none, reachable true, uptime30d 1)

## Packages

_none_

## Tools (23)

- `create_project`: Use this when someone wants to start a new Tutorializer project for a product or app. Returns the new project's id, name, vanity id, domain and default locale. Each call creates another project. Not for changing an existing project.
- `create_speech`: Use this when someone wants new narration or voiceover in a project. Returns the new line's id, language, voice and audio URL. Without url the audio is synthesized from the text with the project's voice provider, spending the organization's synthesis credits; with url it records audio you already have. Not for fixing an existing line.
- `create_tutorial`: Use this when someone wants to add a new tutorial to a project. Returns the new tutorial's id, name, project and default voice. Each call creates another tutorial; it records the tutorial without recording or rendering a video. Not for adding a rendered video.
- `create_video`: Use this when someone has an already uploaded tutorial video file and wants it listed under a tutorial. Returns the new video record with its language, device, dimensions and URLs. Host the file first and pass its public https URL; each call adds another record. Not for recording, rendering or uploading a video.
- `delete_speech`: Use this when someone wants one voiceover line permanently deleted with its audio. Returns the deleted line id; the audio and timing files are erased, so restoring it means synthesizing again, which spends credits. Deleting it again changes nothing. Not for changing its words.
- `delete_tutorial`: Use this when someone wants a tutorial permanently deleted. Returns the deleted tutorial id; its videos and voiceover lines stay and each needs its own delete. Deleting it again changes nothing. Not for removing one language or device version.
- `delete_video`: Use this when someone wants one rendered tutorial video permanently deleted. Returns the deleted video id; the record and its video file in Tutorializer storage are erased, so restoring it means uploading or rendering again. Not for deleting the whole tutorial.
- `get_project`: Use this when someone asks about one project's languages, default voice, narration speed or pronunciation rules. Returns its name, domain, default and configured locales, voice settings and up to 50 pronunciation rules, looked up by project id or vanity id. Not for finding languages or devices that lack videos.
- `get_project_localization_summary`: Use this when someone asks which languages or devices a project still lacks tutorial videos or voiceovers for, or how complete its translations are. Returns video and voiceover counts per language and video counts per device, plus the missing ones, from the latest 100 of each. Not for one tutorial's videos.
- `get_speech`: Use this when someone needs the full wording or translation of one voiceover line, or its audio link. Returns its source text, translation, language, voice, duration, project and audio URL. Not for changing the words.
- `get_tutorial`: Use this when someone asks about one tutorial and the videos rendered from it. Returns the tutorial's name, project and default voice plus up to 8 of its most recently edited videos with language, device, format, size and media links. Not for every video in a project.
- `get_video`: Use this when someone asks about one tutorial video, such as its link, subtitles, chapters or thumbnail. Returns its tutorial, language, device, dimensions and its video, chapters, subtitles and thumbnail URLs. Not for changing those details.
- `list_projects`: Use this when someone asks which Tutorializer projects they have, or a project's id is needed. Returns each project's id, name, vanity id, domain and created and edited times, sorted by name, 25 per page by default. Not for a project's languages or voice settings.
- `list_speeches`: Use this when someone asks which voiceover or narration lines a project has, optionally in one language. Returns each line's id, a short text preview, language, project and audio URL, most recently edited first, 25 per page by default. Not for the full text of one line.
- `list_tutorials`: Use this when someone asks which tutorials a project has, or when another tool needs a tutorial id. Returns each tutorial's id, name, project, default voice and times, most recently edited first, 25 per page by default. Not for the rendered videos of each language or device.
- `list_videos`: Use this when someone asks which tutorial videos exist, optionally for one project, tutorial, language or device. Returns each video's id, tutorial, language, device, format, dimensions, file size and URL, most recently edited first, 25 per page by default. Not for checking missing languages.
- `remove_pronunciation_rule`: Use this when someone wants to drop a pronunciation rule so a word is spoken the default way again. Returns whether it was removed and the remaining rule count; a missing rule changes nothing, and existing audio is kept as it is. Not for changing a rule's phonemes.
- `set_pronunciation_rule`: Use this when narration mispronounces a word, name or brand in a project's voiceovers. Returns the rule and the project's rule count after adding or replacing it (IPA or CMU phonemes, up to 500 rules) and syncing the pronunciation dictionary used for later synthesis. Not for re-voicing lines that already have audio.
- `show_project_overview`: Use this when someone wants a quick visual overview of one Tutorializer project. Returns a card with the project's name, domain and logo, how many tutorials, videos and voiceover lines it has (counted up to 100 each) and its 8 most recently edited tutorials. Not for missing languages or devices.
- `update_project`: Use this when someone wants to rename a project or change its domain, languages, default voice or narration speed. Returns the updated settings; fields left out keep their values, and a new locales list replaces the whole set. Not for pronunciation fixes.
- `update_speech`: Use this when someone wants to change the words, translation, language or voice of one voiceover line. Returns the updated line. A real change re-synthesizes its audio with the project's voice provider, spending synthesis credits and replacing the old audio; identical values change nothing. Not for project-wide pronunciation fixes.
- `update_tutorial`: Use this when someone wants to rename a tutorial or change the default voice of its narration. Returns the updated tutorial; fields left out keep their values, and repeating the same values changes nothing. Not for editing narration text.
- `update_video`: Use this when someone wants to correct a tutorial video's language, device, dimensions, file link, subtitles, chapters or thumbnail. Returns the updated video record; fields left out keep their values and identical values change nothing. Not for re-rendering the video itself.
