Crowdin MCP by usefulapi
MCP server for Crowdin — projects, files, strings, translation progress, tasks, and members.
Should I use this
Quality & Safety
Findings (1)
- LOWin crowdin_list_supported_languages
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"crowdin": {
"url": "https://crowdin.usefulapi.io/mcp"
}
}
}Remote endpoints
https://crowdin.usefulapi.io/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
🟢crowdin_list_projects(limit, offset, groupId, hasManagerAccess)
List projects the token can access (id, name, sourceLanguageId, targetLanguageIds). Good first call to discover project ids. Crowdin API: GET /projects.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"groupId": {
"description": "Filter by group id (Enterprise).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"hasManagerAccess": {
"description": "1 = only projects where you are a manager.",
"anyOf": [
{
"type": "number",
"const": 0
},
{
"type": "number",
"const": 1
}
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_get_project(projectId)
Get a single project's details by id (settings, languages, counts). Crowdin API: GET /projects/{projectId}.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id (from crowdin_list_projects)."
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_files(projectId, limit, offset, branchId, directoryId, ...)
List source files in a project (id, name, path, type, status). Crowdin API: GET /projects/{projectId}/files.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"branchId": {
"description": "Filter by branch id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"directoryId": {
"description": "Filter by directory id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"filter": {
"description": "Filter files by name substring.",
"type": "string"
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_branches(projectId, limit, offset, name)
List version branches in a project (id, name, title). Crowdin API: GET /projects/{projectId}/branches.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"name": {
"description": "Filter by branch name.",
"type": "string"
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_directories(projectId, limit, offset, branchId, directoryId)
List directories (folders) in a project (id, name, path). Crowdin API: GET /projects/{projectId}/directories.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"branchId": {
"description": "Filter by branch id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"directoryId": {
"description": "Filter by parent directory id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_strings(projectId, limit, offset, fileId, branchId, ...)
List source strings in a project (id, text, identifier, context). Crowdin API: GET /projects/{projectId}/strings.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"fileId": {
"description": "Filter by source file id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"branchId": {
"description": "Filter by branch id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"croql": {
"description": "Crowdin Query Language filter, e.g. count of words <= 5.",
"type": "string"
},
"filter": {
"description": "Filter strings by text or identifier substring.",
"type": "string"
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_get_language_progress(projectId, limit, offset)
Per-target-language translation & approval completion percentages for a project — the headline localization status. Crowdin API: GET /projects/{projectId}/languages/progress.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_tasks(projectId, limit, offset, status, assigneeId)
List translation/proofreading tasks in a project (id, title, status, assignees). Crowdin API: GET /projects/{projectId}/tasks.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"status": {
"description": "Filter by task status.",
"type": "string",
"enum": [
"todo",
"in_progress",
"done",
"closed"
]
},
"assigneeId": {
"description": "Filter by assignee user id.",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_members(projectId, limit, offset, search)
List members of a project (id, username, role, permissions). Crowdin API: GET /projects/{projectId}/members.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id."
},
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"search": {
"description": "Search members by name/username/email.",
"type": "string"
}
},
"required": [
"projectId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🟢crowdin_list_supported_languages(limit, offset)
Crowdin's catalog of supported languages (id, name, locale, twoLettersCode). Crowdin API: GET /languages.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "Max rows (max 500, default 25).",
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 500
},
"offset": {
"description": "Rows to skip (default 0).",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴crowdin_add_string(projectId, text, fileId, identifier, context, ...)
Adds a source string to a file in a Crowdin project (additive). Crowdin API: POST /projects/{projectId}/strings.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id (path)."
},
"text": {
"type": "string",
"description": "The source string text."
},
"fileId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Id of the source file to add the string to."
},
"identifier": {
"description": "Optional unique string identifier / key.",
"type": "string"
},
"context": {
"description": "Optional context shown to translators.",
"type": "string"
},
"isHidden": {
"description": "Hide the string from translators.",
"type": "boolean"
},
"maxLength": {
"description": "Max allowed translation length.",
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"projectId",
"text",
"fileId"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}🔴crowdin_add_translation(projectId, stringId, languageId, text, pluralCategoryName)
Adds a translation for a source string in a target language (additive). Crowdin API: POST /projects/{projectId}/translations.
Input Schema
{
"type": "object",
"properties": {
"projectId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Numeric project id (path)."
},
"stringId": {
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991,
"description": "Id of the source string to translate."
},
"languageId": {
"type": "string",
"description": "Target language id, e.g. \"fr\", \"de\", \"uk\"."
},
"text": {
"type": "string",
"description": "The translation text."
},
"pluralCategoryName": {
"description": "Plural form, e.g. \"one\", \"few\", \"many\", \"other\".",
"type": "string"
}
},
"required": [
"projectId",
"stringId",
"languageId",
"text"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}Community
Evidence