Skip to main content
Glama

Weblate MCP Server

by mmntm

Weblate MCP Server

A Model Context Protocol (MCP) server that provides seamless integration with Weblate translation management platform. This server enables AI assistants to interact directly with your Weblate instance for comprehensive translation management.

🌟 Features

  • πŸ”§ Complete Weblate API Access: Full integration with Weblate's REST API

  • πŸ€– AI-Powered Workflow: Natural language interaction with your translation projects

  • πŸ“Š Project Management: Create, list, and manage translation projects

  • πŸ” Component Operations: Handle translation components and configurations

  • ✏️ Translation Management: Update, search, and manage translations

  • 🌐 Language Support: Work with all supported languages in your Weblate instance

  • πŸš€ Multiple Transports: HTTP/SSE, Streamable HTTP, and STDIO support

  • πŸ›‘οΈ Type Safety: Full TypeScript implementation with comprehensive error handling

  • ⚑ LLM-Optimized: Tools designed to guide AI models toward efficient usage patterns

Related MCP server: MCP Server Fetch Python

🎯 What is This?

This MCP server acts as a bridge between AI assistants (like Claude Desktop) and your Weblate translation management platform. Instead of manually navigating the Weblate web interface, you can use natural language to:

  • "List all projects in my Weblate instance"

  • "Show me the French translations for the frontend component"

  • "Update the welcome message translation"

  • "Create a new translation project"

πŸš€ Quick Start

Option 1: Use with npx (Recommended)

The easiest way to use this MCP server is with npx - no installation required!

For Claude Desktop or other MCP clients:

{ "mcpServers": { "weblate": { "command": "npx", "args": ["-y", "@mmntm/weblate-mcp"], "env": { "WEBLATE_API_URL": "https://your-weblate-instance.com/api", "WEBLATE_API_TOKEN": "your-weblate-api-token" } } } }

Manual testing:

# Test the server directly npx @mmntm/weblate-mcp

Option 2: Development Setup

Prerequisites

  • Node.js 18+

  • pnpm package manager

  • Weblate instance with API access

Installation

# Clone and install git clone <this-repo> cd weblate-mcp pnpm install # Configure environment cp .env.example .env # Edit .env with your Weblate API URL and token # Build and start pnpm build pnpm start

Server runs on http://localhost:3001 by default.

Environment Configuration

WEBLATE_API_URL=https://your-weblate-instance.com WEBLATE_API_TOKEN=your-api-token-here PORT=3001 NODE_ENV=production LOG_LEVEL=info

πŸ”— MCP Client Configuration

Claude Desktop (npx method - Recommended)

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{ "mcpServers": { "weblate": { "command": "npx", "args": ["-y", "@mmntm/weblate-mcp"], "env": { "WEBLATE_API_URL": "https://your-weblate-instance.com/api", "WEBLATE_API_TOKEN": "your-weblate-api-token" } } } }

Claude Desktop (Development/Local)

For development or local builds:

{ "mcpServers": { "weblate": { "command": "node", "args": ["/path/to/weblate-mcp/dist/main.js"], "env": { "WEBLATE_API_URL": "https://your-weblate-instance.com/api", "WEBLATE_API_TOKEN": "your-api-token" } } } }

HTTP Clients (Cursor, VS Code, Web Apps)

{ "transport": "http", "url": "http://localhost:3001/mcp" }

πŸ› οΈ Available Tools

πŸ“Š Project Management

Tool

Description

listProjects

List all available Weblate projects with URLs and metadata

πŸ”§ Component Management

Tool

Description

listComponents

List components in a specific project with source language details

✏️ Translation Management

Tool

Description

searchUnitsWithFilters

⭐

Efficient search using Weblate's native filtering syntax

searchStringInProject

Search for translations containing specific text in a project

getTranslationForKey

Get translation value for a specific key

writeTranslation

Update or write translation values with approval support

bulkWriteTranslations

⚑

Batch update multiple translations efficiently with error handling

findTranslationsForKey

Find all translations for a specific key across languages

πŸš€ Why searchUnitsWithFilters is Recommended

The searchUnitsWithFilters tool uses Weblate's native filtering syntax, making it the most efficient way to find translations:

  • ❌ Inefficient: Getting all keys then checking each one individually (can make thousands of API calls)

  • βœ… Efficient: Single filtered search using Weblate's query syntax

Example efficient queries:

  • state:=0 - Find untranslated strings

  • state:=10 - Find strings that need editing

  • source:"login" - Find strings containing "login"

  • component:common AND state:=0 - Complex filters

🌐 Language Management

Tool

Description

listLanguages

List languages available in a specific project

πŸ“Š Translation Statistics Dashboard

Tool

Description

getProjectStatistics

Comprehensive project statistics with completion rates and string counts

getComponentStatistics

Detailed statistics for a specific component

getProjectDashboard

Complete dashboard overview with all component statistics

getTranslationStatistics

Statistics for specific translation (project/component/language)

getComponentLanguageProgress

Translation progress for all languages in a component with progress bars

getLanguageStatistics

Statistics for a language across all projects

getUserStatistics

User contribution statistics and activity metrics

πŸ“ˆ Change Tracking & History

Tool

Description

listRecentChanges

Recent changes across all projects with user and timestamp filtering

getProjectChanges

Recent changes for a specific project

getComponentChanges

Recent changes for a specific component

getChangesByUser

Recent changes by a specific user

πŸ’‘ Usage Examples

Project Operations

// List all projects await list_projects(); // Get specific project details await get_project({ slug: "my-project" }); // Create a new project await create_project({ name: "New Project", slug: "new-project", web: "https://example.com" });

Translation Operations

// List translations for a component await list_translations({ project_slug: "my-project", component_slug: "frontend" }); // Get specific translation await get_translation({ project_slug: "my-project", component_slug: "frontend", language_code: "fr" }); // Update translations await update_translation({ project_slug: "my-project", component_slug: "frontend", language_code: "fr", translations: { "welcome": "Bienvenue", "goodbye": "Au revoir" } });

πŸ“š Documentation

Document

Description

πŸ“– Documentation Hub

Complete documentation overview and quick start

πŸš€ Installation & Setup

Installation, configuration, and Claude Desktop setup

πŸ“‹ API Reference

Complete API documentation with examples

πŸ› οΈ Development Guide

Contributing, development setup, and testing

πŸ—οΈ Architecture

Codebase structure, patterns, and design decisions

πŸ“¦ Release Process

Release management and publishing workflow

πŸ”„ Changesets Guide

Version management with changesets

πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MCP Client │───▢│ Weblate MCP │───▢│ Weblate API β”‚ β”‚ (IDE/Editor) β”‚ β”‚ Server β”‚ β”‚ (REST API) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ MCP Tools β”‚ β”‚ β€’ Projects β”‚ β”‚ β€’ Components β”‚ β”‚ β€’ Translations β”‚ β”‚ β€’ Languages β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Technology Stack:

  • NestJS: Modern Node.js framework with dependency injection

  • TypeScript: Full type safety and IntelliSense support

  • Weblate REST API: Comprehensive API wrapper with interfaces

  • MCP Protocol: Standard Model Context Protocol implementation

  • Axios: HTTP client for API communication

πŸ§ͺ Development

Development Setup

# Start development server with hot reload pnpm run dev # Run tests pnpm test # Run end-to-end tests pnpm run test:e2e # Generate test coverage pnpm run test:cov # Build for production pnpm build

Adding New Tools

  1. Create tool file in src/tools/

  2. Implement MCP tool interface

  3. Add to service providers

  4. Write tests

  5. Update documentation

See Development Guide for detailed instructions.

🎯 Use Cases

Translation Management

  • Project oversight: Monitor translation progress across projects

  • Content updates: Update translations programmatically

  • Quality assurance: Review and approve translations

  • Team coordination: Manage translation workflows

Development Integration

  • CI/CD pipelines: Automate translation updates in deployment

  • Content management: Sync translations with content systems

  • Localization testing: Validate translations in different contexts

  • Documentation: Generate translation reports and statistics

AI-Assisted Workflows

  • Natural language queries: Ask about translation status in plain English

  • Contextual operations: AI understands your translation needs

  • Batch operations: Perform bulk updates with AI assistance

  • Smart suggestions: Get AI-powered translation recommendations

πŸ”’ Security & Production

  • API Token Security: Store tokens securely, use environment variables

  • Rate Limiting: Built-in request throttling and retry logic

  • Error Handling: Comprehensive error responses with debugging info

  • Input Validation: All inputs validated with Zod schemas

  • HTTPS Support: Secure communication with Weblate instances

🀝 Contributing

We welcome contributions! Please see our Contributing Guidelines:

  1. Fork the repository

  2. Create a feature branch from main

  3. Implement changes with tests

  4. Update documentation

  5. Submit a pull request

Code Style

  • Use TypeScript for type safety

  • Follow NestJS conventions

  • Add comprehensive tests

  • Update documentation

πŸ“„ License

MIT License - see LICENSE file for details.

πŸ™ Acknowledgments

  • Weblate: For providing an excellent translation management platform

  • Model Context Protocol: For the standardized protocol specification

  • NestJS: For the robust application framework

  • Contributors: Everyone who helps improve this project


Built with ❀️ for the translation community

Need help? Check our

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mmntm/weblate-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server