Weblate MCP by usefulapi
by usefulapi.io · remote · no sign-in to list tools · v1.3.3 · published by io.usefulapi
Read Weblate projects, strings, stats and changes; translate, suggest, comment and autotranslate.
23 tools: 5 can delete or cancel things, 2 change things and 16 only read.
Scanned Oct 21, 2026
- Deletes or cancels5Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things2Claude Code: ask: see these tools
- Only reads16Claude Code: allow: see these tools
2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http weblate https://weblate.usefulapi.io/mcpFindings
Matches of fixed checks, with the text they matched.
The server marks "weblate_list_unit_comments" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "weblate_list_unit_comments" says "list": a word for reading.
The description mentions "credentials".
What this check looks forMatched text
description: "...mponents. Repository URLs have embedded credentials removed. GET /api/components/ or /api/p..."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
23 tools
Deletes or cancels 5Claude Code: deny
weblate_accept_suggestionWRITE: apply a suggestion to its string (replaces the current translation).No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: apply a suggestion to its string (replaces the current translation). `approve` also marks it approved (review workflow and permission needed). Weblate 2026.8+. POST /api/suggestions/{id}/accept/.
Annotations the server declares
- title: Accept a suggestion
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
weblate_add_suggestionWRITE: propose a translation for one string; normally a reviewer accepts it later, but the author's automatic upvote (or an existing identical suggestion) can reach the project's a…No findings
Why it is in this group
- The name "weblate_add_suggestion" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: propose a translation for one string; normally a reviewer accepts it later, but the author's automatic upvote (or an existing identical suggestion) can reach the project's auto-accept threshold and apply it at once. Needs the Add suggestion permission and suggestions enabled (Weblate 2026.8+). POST /api/units/{id}/suggestions/.
Annotations the server declares
- title: Add a suggestion
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
weblate_autotranslateWRITE: fill a translation automatically from other components (auto_source others, default) or from machine translation (mt, needs engines).No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: fill a translation automatically from other components (auto_source others, default) or from machine translation (mt, needs engines). `mode` suggest only adds suggestions (default), translate writes translations, fuzzy marks them needing edit. `q` limits it to strings matching a search (default state:<translated, the strings that are not translated yet); threshold is the minimum match score (default 80). Use background to schedule a task instead of waiting. POST /api/translations/{project}/{component}/{language}/autotranslate/.
Annotations the server declares
- title: Run automatic translation
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
weblate_repository_operationWRITE: commit (write pending translations into the local repository), pull (merge upstream changes) or push (publish committed changes to the remote repository) for a project or on…No findings
Why it is in this group
- The description's first verb is "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: commit (write pending translations into the local repository), pull (merge upstream changes) or push (publish committed changes to the remote repository) for a project or one component. Push changes the remote repository. reset and cleanup are not offered. POST /api/projects/{project}/repository/ or /api/components/{project}/{component}/repository/.
Annotations the server declares
- title: Run a repository operation
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
weblate_update_translationWRITE: set the translation of one string (replaces the current target).No findings
Why it is in this group
- The name "weblate_update_translation" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it WRITE: set the translation of one string (replaces the current target). `target` is the list of plural forms. `state` is required (Weblate rejects a partial update without both): 0 untranslated with an empty target, 10 needs editing, 20 translated or 30 approved (approval needs the review workflow and permission). The number of plural forms must match the language. Changes are committed to the repository by Weblate's normal schedule. PATCH /api/units/{id}/.
Annotations the server declares
- title: Update a translation
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 2Claude Code: ask
weblate_add_unit_commentWRITE: add a comment to one string (Markdown, @username mentions notify users).No findings
Why it is in this group
- The name "weblate_add_unit_comment" says "add": a word for a change.
Description, as the server wrote it WRITE: add a comment to one string (Markdown, @username mentions notify users). `scope` is global (all languages), translation (this language) or report (a source-string issue report; needs the review workflow). Weblate 5.12+. POST /api/units/{id}/comments/.
Annotations the server declares
- title: Add a string comment
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
weblate_list_unit_commentsComments on one string (Weblate 5.15+).1 finding
Why it is in this group
- The name "weblate_list_unit_comments" says "list": a word for reading.
- The description's first verb is "comment": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "weblate_list_unit_comments" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}; The name "weblate_list_unit_comments" says "list": a word for reading.
Description, as the server wrote it Comments on one string (Weblate 5.15+). GET /api/units/{id}/comments/.
Annotations the server declares
- title: List string comments
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
Only reads 16Claude Code: allow
weblate_get_componentOne component: repository, branch, file mask, template, source language, commit and merge settings, lock state.No findings
Why it is in this group
- The name "weblate_get_component" says "get": a word for reading.
Description, as the server wrote it One component: repository, branch, file mask, template, source language, commit and merge settings, lock state. GET /api/components/{project}/{component}/.
Annotations the server declares
- title: Get component
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_get_projectOne project by slug: name, website, settings, instructions and links.No findings
Why it is in this group
- The name "weblate_get_project" says "get": a word for reading.
Description, as the server wrote it One project by slug: name, website, settings, instructions and links. GET /api/projects/{project}/.
Annotations the server declares
- title: Get project
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_get_repository_statusVersion-control status: pending changes to commit, upstream changes to merge, changes to push, remote commit, merge failure.No findings
Why it is in this group
- The name "weblate_get_repository_status" says "get": a word for reading.
Description, as the server wrote it Version-control status: pending changes to commit, upstream changes to merge, changes to push, remote commit, merge failure. For a project (summary of all its repositories) or one component. GET /api/projects/{project}/repository/ or /api/components/{project}/{component}/repository/.
Annotations the server declares
- title: Get repository status
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_get_statisticsTranslation progress: strings and words total, translated, needing edit, with percentages and checks.No findings
Why it is in this group
- The name "weblate_get_statistics" says "get": a word for reading.
Description, as the server wrote it Translation progress: strings and words total, translated, needing edit, with percentages and checks. Scope by project; add a component for per-language statistics of a component, add a language too for one translation. GET /api/projects/{project}/statistics/, /api/components/{project}/{component}/statistics/ or /api/translations/{project}/{component}/{language}/statistics/.
Annotations the server declares
- title: Get statistics
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_get_translationOne translation (a component in one language): statistics, language, file name, revision and links.No findings
Why it is in this group
- The name "weblate_get_translation" says "get": a word for reading.
Description, as the server wrote it One translation (a component in one language): statistics, language, file name, revision and links. GET /api/translations/{project}/{component}/{language}/.
Annotations the server declares
- title: Get translation
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_get_unitOne string by id: source and target forms, state, context, location, flags, labels, explanation, suggestions/comments flags, web link.No findings
Why it is in this group
- The name "weblate_get_unit" says "get": a word for reading.
Description, as the server wrote it One string by id: source and target forms, state, context, location, flags, labels, explanation, suggestions/comments flags, web link. GET /api/units/{id}/.
Annotations the server declares
- title: Get string
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_changesThe activity log: who changed or translated what, when, with the action name and the changed text.No findings
Why it is in this group
- The name "weblate_list_changes" says "list": a word for reading.
Description, as the server wrote it The activity log: who changed or translated what, when, with the action name and the changed text. Scope by project, component or translation (language), or filter by user, action id and time range. GET /api/changes/ or the project/component/translation changes endpoint.
Annotations the server declares
- title: List changes
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_componentsList translation components (one translatable file set in a repository), with repository, file mask, source language and status flags.1 finding
Why it is in this group
- The name "weblate_list_components" says "list": a word for reading.
Findings
- Info
The description mentions "credentials".
What this check looks forMatched text
description: "...mponents. Repository URLs have embedded credentials removed. GET /api/components/ or /api/p..."
Description, as the server wrote it List translation components (one translatable file set in a repository), with repository, file mask, source language and status flags. Give a project to list only its components. Repository URLs have embedded credentials removed. GET /api/components/ or /api/projects/{project}/components/.
Annotations the server declares
- title: List components
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_languagesList the languages known to this Weblate instance: code, name, text direction, plural forms.No findings
Why it is in this group
- The name "weblate_list_languages" says "list": a word for reading.
Description, as the server wrote it List the languages known to this Weblate instance: code, name, text direction, plural forms. GET /api/languages/.
Annotations the server declares
- title: List languages
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_project_languagesPer-language translation statistics for a whole project (code, total, translated, percentages).No findings
Why it is in this group
- The name "weblate_list_project_languages" says "list": a word for reading.
Description, as the server wrote it Per-language translation statistics for a whole project (code, total, translated, percentages). GET /api/projects/{project}/languages/.
Annotations the server declares
- title: List project languages
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_projectsList the projects visible to this token: name, slug, website and settings (review workflow, access control).No findings
Why it is in this group
- The name "weblate_list_projects" says "list": a word for reading.
Description, as the server wrote it List the projects visible to this token: name, slug, website and settings (review workflow, access control). GET /api/projects/.
Annotations the server declares
- title: List projects
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_suggestionsList suggestions (proposed translations waiting for review), newest first (Weblate 2026.8+).No findings
Why it is in this group
- The name "weblate_list_suggestions" says "list": a word for reading.
Description, as the server wrote it List suggestions (proposed translations waiting for review), newest first (Weblate 2026.8+). Give a unit id for one string's suggestions. GET /api/suggestions/ or /api/units/{id}/suggestions/.
Annotations the server declares
- title: List suggestions
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_translationsList the translations (one language each) of a component with their statistics: total, translated, fuzzy, percent, last change.No findings
Why it is in this group
- The name "weblate_list_translations" says "list": a word for reading.
Description, as the server wrote it List the translations (one language each) of a component with their statistics: total, translated, fuzzy, percent, last change. GET /api/components/{project}/{component}/translations/.
Annotations the server declares
- title: List translations
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_list_unitsList or search translation strings (units): source, target, state (0 untranslated, 10 needs editing, 20 translated, 30 approved, 100 read-only), context, location, failing checks.No findings
Why it is in this group
- The name "weblate_list_units" says "list": a word for reading.
Description, as the server wrote it List or search translation strings (units): source, target, state (0 untranslated, 10 needs editing, 20 translated, 30 approved, 100 read-only), context, location, failing checks. Search with Weblate's query syntax, for example state:<translated or has:suggestion. Give project + component + language to read one translation; without them all visible strings are searched. GET /api/translations/{project}/{component}/{language}/units/ or /api/units/.
Annotations the server declares
- title: List strings
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_lookup_memoryFind translation memory matches (exact or fuzzy) for up to 20 source strings in one language pair.No findings
Why it is in this group
- The name "weblate_lookup_memory" says "lookup": a word for reading.
Description, as the server wrote it Find translation memory matches (exact or fuzzy) for up to 20 source strings in one language pair. Read-only: nothing is stored. POST /api/memory/lookup/.
Annotations the server declares
- title: Look up translation memory
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
weblate_search_memoryBrowse the translation memory entries visible to the token, filtered by source text (substring), languages or project.No findings
Why it is in this group
- The name "weblate_search_memory" says "search": a word for reading.
Description, as the server wrote it Browse the translation memory entries visible to the token, filtered by source text (substring), languages or project. GET /api/memory/.
Annotations the server declares
- title: Search translation memory
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 1.3.3. Values in angle brackets are yours to fill in.
claude mcp add --transport http weblate https://weblate.usefulapi.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__weblate__weblate_list_projects",
"mcp__weblate__weblate_get_project",
"mcp__weblate__weblate_list_components",
"mcp__weblate__weblate_get_component",
"mcp__weblate__weblate_list_translations",
"mcp__weblate__weblate_get_translation",
"mcp__weblate__weblate_get_statistics",
"mcp__weblate__weblate_list_project_languages",
"mcp__weblate__weblate_list_languages",
"mcp__weblate__weblate_list_units",
"mcp__weblate__weblate_get_unit",
"mcp__weblate__weblate_list_suggestions",
"mcp__weblate__weblate_list_changes",
"mcp__weblate__weblate_search_memory",
"mcp__weblate__weblate_lookup_memory",
"mcp__weblate__weblate_get_repository_status"
],
"ask": [
"mcp__weblate__weblate_list_unit_comments",
"mcp__weblate__weblate_add_unit_comment"
],
"deny": [
"mcp__weblate__weblate_update_translation",
"mcp__weblate__weblate_add_suggestion",
"mcp__weblate__weblate_accept_suggestion",
"mcp__weblate__weblate_repository_operation",
"mcp__weblate__weblate_autotranslate"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as weblate. Review it before you use it.