Weblate MCP by usefulapi

Read Weblate projects, strings, stats and changes; translate, suggest, comment and autotranslate.

使うべきか

品質と安全性

A
説明の品質
100%
スキーマの完全性
96%
命名の品質
80%
ポイズニングのリスク
100%
権限の一致
100%
プロトコルへの準拠
100%

ツール定義とプロトコルへの準拠に関する自動分析に基づいています。

コンテキストコスト

~5,605トークン数(ツール定義)
~1.7 KB一般的なレスポンスサイズ
注意への影響は大きい(128k コンテキストの 4.38%)

これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。

インストール

ワンクリックインストール

これを `claude_desktop_config.json` ファイルに追加してください:

{
  "mcpServers": {
    "weblate": {
      "url": "https://weblate.usefulapi.io/mcp"
    }
  }
}

リモートエンドポイント

https://weblate.usefulapi.io/mcpstreamable-http

できること

ツール一覧

ツール(23)

🟢 読み取り専用🟡 書き込み🔴 削除⚪ 不明
🟢weblate_list_projects(page, page_size)

List the projects visible to this token: name, slug, website and settings (review workflow, access control). GET /api/projects/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_project(project)

One project by slug: name, website, settings, instructions and links. GET /api/projects/{project}/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    }
  },
  "required": [
    "project"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_components(project, page, page_size)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "description": "Only this project's components.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_component(project, component)

One component: repository, branch, file mask, template, source language, commit and merge settings, lock state. GET /api/components/{project}/{component}/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    }
  },
  "required": [
    "project",
    "component"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_translations(project, component, page, page_size)

List the translations (one language each) of a component with their statistics: total, translated, fuzzy, percent, last change. GET /api/components/{project}/{component}/translations/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "project",
    "component"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_translation(project, component, language)

One translation (a component in one language): statistics, language, file name, revision and links. GET /api/translations/{project}/{component}/{language}/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Language code as Weblate names it (for example 'cs', 'pt_BR', 'zh_Hans')."
    }
  },
  "required": [
    "project",
    "component",
    "language"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_statistics(project, component, language, page, page_size)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Language code as Weblate names it (for example 'cs', 'pt_BR', 'zh_Hans')."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "project"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_project_languages(project, page, page_size)

Per-language translation statistics for a whole project (code, total, translated, percentages). GET /api/projects/{project}/languages/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "project"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_languages(page, page_size)

List the languages known to this Weblate instance: code, name, text direction, plural forms. GET /api/languages/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_units(project, component, language, q, page, ...)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Language code as Weblate names it (for example 'cs', 'pt_BR', 'zh_Hans')."
    },
    "q": {
      "description": "Weblate search query (https://docs.weblate.org/en/latest/user/search.html), for example 'state:<translated' or 'source:hello'.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_unit(unit_id)

One string by id: source and target forms, state, context, location, flags, labels, explanation, suggestions/comments flags, web link. GET /api/units/{id}/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    }
  },
  "required": [
    "unit_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_unit_comments(unit_id, page, page_size)

Comments on one string (Weblate 5.15+). GET /api/units/{id}/comments/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "required": [
    "unit_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_suggestions(unit_id, page, page_size)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_list_changes(project, component, language, user, action, ...)

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.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Language code as Weblate names it (for example 'cs', 'pt_BR', 'zh_Hans')."
    },
    "user": {
      "description": "Only changes by this username.",
      "type": "string",
      "minLength": 1,
      "maxLength": 150
    },
    "action": {
      "description": "Only these action ids (see Weblate's change actions).",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "integer",
        "minimum": 0,
        "maximum": 1000
      }
    },
    "timestamp_after": {
      "description": "Only changes after this ISO 8601 time.",
      "type": "string",
      "maxLength": 64
    },
    "timestamp_before": {
      "description": "Only changes before this ISO 8601 time.",
      "type": "string",
      "maxLength": 64
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_search_memory(source, source_language, target_language, project, page, ...)

Browse the translation memory entries visible to the token, filtered by source text (substring), languages or project. GET /api/memory/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "source": {
      "description": "Case-insensitive substring of the source text.",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "source_language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "target_language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60
    },
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "page": {
      "description": "Page number, from 1 (default 1). Pass the previous reply's next_page.",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100000
    },
    "page_size": {
      "description": "Results per page, 1-100 (default 25).",
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_lookup_memory(strings, source_language, target_language, project, exact)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "strings": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 5000
      },
      "description": "Source strings to look up."
    },
    "source_language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Source language code."
    },
    "target_language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Target language code."
    },
    "project": {
      "description": "Restrict to this project's memory.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "exact": {
      "description": "Return exact matches only, skipping fuzzy matching.",
      "type": "boolean"
    }
  },
  "required": [
    "strings",
    "source_language",
    "target_language"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢weblate_get_repository_status(project, component)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    }
  },
  "required": [
    "project"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴weblate_update_translation(unit_id, target, state)

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}/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    },
    "target": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 20000
      },
      "description": "The text as a list of plural forms; use a one-element list for a string without plurals."
    },
    "state": {
      "anyOf": [
        {
          "type": "number",
          "const": 0
        },
        {
          "type": "number",
          "const": 10
        },
        {
          "type": "number",
          "const": 20
        },
        {
          "type": "number",
          "const": 30
        }
      ],
      "description": "New state: 0 untranslated (target must be empty), 10 needs editing, 20 translated, 30 approved."
    }
  },
  "required": [
    "unit_id",
    "target",
    "state"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴weblate_add_suggestion(unit_id, target)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    },
    "target": {
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 20000
      },
      "description": "The text as a list of plural forms; use a one-element list for a string without plurals."
    }
  },
  "required": [
    "unit_id",
    "target"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴weblate_accept_suggestion(suggestion_id, approve)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "suggestion_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Suggestion id (from weblate_list_suggestions)."
    },
    "approve": {
      "description": "Also mark the translation approved.",
      "type": "boolean"
    }
  },
  "required": [
    "suggestion_id"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟡weblate_add_unit_comment(unit_id, comment, scope)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "unit_id": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "Weblate unit id (from weblate_list_units)."
    },
    "comment": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "description": "The comment text (max 1000 characters)."
    },
    "scope": {
      "description": "Comment scope (default global).",
      "type": "string",
      "enum": [
        "global",
        "translation",
        "report"
      ]
    }
  },
  "required": [
    "unit_id",
    "comment"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴weblate_repository_operation(project, component, operation)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "description": "Omit to run the operation on every component of the project.",
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "operation": {
      "type": "string",
      "enum": [
        "commit",
        "pull",
        "push"
      ]
    }
  },
  "required": [
    "project",
    "operation"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🔴weblate_autotranslate(project, component, language, mode, auto_source, ...)

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/.

入力スキーマ

{
  "type": "object",
  "properties": {
    "project": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Project slug (the URL name, for example 'hello')."
    },
    "component": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Component slug. A component inside a category is 'category/component'."
    },
    "language": {
      "type": "string",
      "minLength": 1,
      "maxLength": 60,
      "description": "Language code as Weblate names it (for example 'cs', 'pt_BR', 'zh_Hans')."
    },
    "mode": {
      "description": "suggest (default), translate, fuzzy or approved.",
      "type": "string",
      "enum": [
        "suggest",
        "translate",
        "fuzzy",
        "approved"
      ]
    },
    "auto_source": {
      "description": "others = other components (default), mt = machine translation engines (needs engines).",
      "type": "string",
      "enum": [
        "mt",
        "others"
      ]
    },
    "q": {
      "description": "Only strings matching this search (default 'state:<translated').",
      "type": "string",
      "minLength": 1,
      "maxLength": 500
    },
    "engines": {
      "description": "Machine translation engine ids; required when auto_source is mt.",
      "minItems": 1,
      "maxItems": 10,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      }
    },
    "threshold": {
      "description": "Minimum match score, 1-100 (default 80).",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "background": {
      "description": "Schedule as a background task and return a task url (Weblate 2026.10+).",
      "type": "boolean"
    }
  },
  "required": [
    "project",
    "component",
    "language"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

コミュニティ

このサーバーを評価する

エビデンス

最近の観測

検証済みバージョンは記録されていませんツール 23 件