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.
- 🔧 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
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"
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
- Node.js 18+
- pnpm package manager
- Weblate instance with API access
# 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.
WEBLATE_API_URL=https://your-weblate-instance.com
WEBLATE_API_TOKEN=your-api-token-here
PORT=3001
NODE_ENV=production
LOG_LEVEL=info
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"
}
}
}
}
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"
}
}
}
}
{
"transport": "http",
"url": "http://localhost:3001/mcp"
}
Tool | Description |
---|---|
list_projects |
List all projects in your Weblate instance |
get_project |
Get detailed information about a specific project |
create_project |
Create a new translation project |
Tool | Description |
---|---|
list_components |
List all components in a project |
get_component |
Get detailed information about a component |
create_component |
Create a new translation component |
Tool | Description |
---|---|
list_translations |
List all translations for a component |
get_translation |
Get detailed information about a translation |
update_translation |
Update translation strings |
Tool | Description |
---|---|
list_languages |
List all available languages |
get_language |
Get detailed information about a language |
// 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"
});
// 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"
}
});
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 |
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ 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
# 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
- Create tool file in
src/tools/
- Implement MCP tool interface
- Add to service providers
- Write tests
- Update documentation
See Development Guide for detailed instructions.
- Project oversight: Monitor translation progress across projects
- Content updates: Update translations programmatically
- Quality assurance: Review and approve translations
- Team coordination: Manage translation workflows
- 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
- 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
- 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
We welcome contributions! Please see our Contributing Guidelines:
- Fork the repository
- Create a feature branch from main
- Implement changes with tests
- Update documentation
- Submit a pull request
- Use TypeScript for type safety
- Follow NestJS conventions
- Add comprehensive tests
- Update documentation
MIT License - see LICENSE file for details.
- 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 documentation or create an issue!