lokalise-mcp
Version:
The Lokalise MCP Server brings Lokalise's localization power to Claude and AI assistants—manage projects, keys, and translations by chat.
711 lines (677 loc) • 21.6 kB
text/typescript
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { Logger } from "../shared/utils/logger.util.js";
import * as schemas from "./prompts.types.js";
const logger = Logger.forContext("prompts/prompts.ts");
/**
* Register all MCP prompts with the server
* These prompts provide pre-built workflows for common Lokalise operations
*/
export function registerPrompts(server: McpServer): void {
const methodLogger = logger.forMethod("registerPrompts");
methodLogger.info("Registering MCP prompts");
// Project Management Prompts
server.registerPrompt(
"project_portfolio_overview",
{
title: "Project Portfolio Overview",
description: "Get a comprehensive overview of all your Lokalise projects",
},
() => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: "Show me all my Lokalise projects with their current status, team information, and key statistics. Highlight any projects that need immediate attention or have been inactive recently. Present this as a management dashboard summary.",
},
},
],
}),
);
server.registerPrompt(
"project_deep_dive",
{
title: "Project Deep Dive Analysis",
description:
"Analyze a specific project in detail with languages and key statistics",
argsSchema: schemas.ProjectDeepDiveArgs.shape,
},
({ projectId }: schemas.ProjectDeepDiveArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Give me a comprehensive analysis of project '${projectId}'. Include: project details, all configured languages with progress percentages, key statistics, and recent activity. Identify any potential issues or optimization opportunities.`,
},
},
],
}),
);
server.registerPrompt(
"new_project_setup",
{
title: "New Project Setup",
description: "Create and configure a new localization project",
argsSchema: schemas.NewProjectSetupArgs.shape,
},
({
projectName,
description,
targetLanguages,
}: schemas.NewProjectSetupArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Create a new Lokalise project named '${projectName}' with description '${description}'. Then add support for these languages: ${targetLanguages}. Show me the created project details and confirm all languages are properly configured.`,
},
},
],
}),
);
server.registerPrompt(
"project_cleanup",
{
title: "Project Cleanup",
description: "Clean up unused or deprecated content from a project",
argsSchema: schemas.ProjectCleanupArgs.shape,
},
({ projectId, cleanupScope }: schemas.ProjectCleanupArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Help me clean up project '${projectId}' by ${cleanupScope}. Show me what will be removed, get my confirmation, then execute the cleanup. Provide a detailed summary of what was cleaned up and the current project state.`,
},
},
],
}),
);
// Language & Localization Prompts
server.registerPrompt(
"language_expansion",
{
title: "Language Expansion",
description: "Add new languages to an existing project",
argsSchema: schemas.LanguageExpansionArgs.shape,
},
({ projectId, newLanguages }: schemas.LanguageExpansionArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Add these languages to project '${projectId}': ${newLanguages}. After adding them, show me the updated language list with current statistics and confirm everything is set up correctly for translation work to begin.`,
},
},
],
}),
);
server.registerPrompt(
"translation_progress_check",
{
title: "Translation Progress Check",
description: "Monitor translation status across languages",
argsSchema: schemas.TranslationProgressCheckArgs.shape,
},
({ projectId, threshold }: schemas.TranslationProgressCheckArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Show me the translation progress for all languages in project '${projectId}'.${threshold ? ` Highlight any languages below ${threshold}% completion.` : ""} Include word counts, completion percentages, and reviewer approval status. Suggest priorities for completing translations.`,
},
},
],
}),
);
server.registerPrompt(
"multi_language_setup",
{
title: "Multi-Language Setup",
description: "Set up multiple language groups at once",
argsSchema: schemas.MultiLanguageSetupArgs.shape,
},
({ projectId, languageGroups }: schemas.MultiLanguageSetupArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Set up language groups for project '${projectId}' as follows: ${languageGroups}. Add all languages in their respective groups, show me the complete language configuration, and suggest any additional languages commonly used in these regions.`,
},
},
],
}),
);
// Key Management Prompts
server.registerPrompt(
"key_inventory_analysis",
{
title: "Key Inventory Analysis",
description:
"Analyze translation keys in a project with filtering and insights",
argsSchema: schemas.KeyInventoryAnalysisArgs.shape,
},
({ projectId, platformFilter }: schemas.KeyInventoryAnalysisArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Analyze all translation keys in project '${projectId}'${platformFilter ? ` filtered for platform: ${platformFilter}` : ""}. Show me: total key count, platform distribution, keys with missing descriptions, and any organizational patterns. Suggest improvements for key management.`,
},
},
],
}),
);
server.registerPrompt(
"bulk_key_creation",
{
title: "Bulk Key Creation",
description:
"Create multiple translation keys for a new feature or screen",
argsSchema: schemas.BulkKeyCreationArgs.shape,
},
({ projectId, featureName, keyList }: schemas.BulkKeyCreationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Create a set of translation keys for the '${featureName}' feature in project '${projectId}'. Use this key list: ${keyList}. Set appropriate descriptions and platform assignments for each key, then confirm all keys were created successfully.`,
},
},
],
}),
);
server.registerPrompt(
"key_maintenance_workflow",
{
title: "Key Maintenance Workflow",
description: "Update or clean up existing translation keys",
argsSchema: schemas.KeyMaintenanceWorkflowArgs.shape,
},
({
projectId,
maintenanceType,
criteria,
}: schemas.KeyMaintenanceWorkflowArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Perform ${maintenanceType} maintenance on keys in project '${projectId}' that match: ${criteria}. First, show me which keys will be affected, then ask for confirmation before making any changes. Provide a summary of all changes made.`,
},
},
],
}),
);
server.registerPrompt(
"platform_key_management",
{
title: "Platform-Specific Key Management",
description: "Manage keys for specific platforms",
argsSchema: schemas.PlatformKeyManagementArgs.shape,
},
({
projectId,
platform,
action,
}: schemas.PlatformKeyManagementArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `${action} platform '${platform}' for keys in project '${projectId}'. Show me the affected keys and confirm the platform assignments have been updated correctly. Provide statistics on platform coverage.`,
},
},
],
}),
);
// Task & Workflow Prompts
server.registerPrompt(
"create_translation_task",
{
title: "Create Translation Task",
description: "Create tasks with language assignments",
argsSchema: schemas.CreateTranslationTaskArgs.shape,
},
({
projectId,
taskTitle,
languages,
dueDate,
}: schemas.CreateTranslationTaskArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Create a translation task titled '${taskTitle}' in project '${projectId}' for languages: ${languages}.${dueDate ? ` Set the due date to ${dueDate}.` : ""} Assign to appropriate team members based on language expertise. Show me the created task details.`,
},
},
],
}),
);
server.registerPrompt(
"overdue_task_management",
{
title: "Overdue Task Management",
description: "Handle overdue tasks across projects",
argsSchema: schemas.OverdueTaskManagementArgs.shape,
},
({ projectId, action }: schemas.OverdueTaskManagementArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `${action} overdue tasks${projectId ? ` in project '${projectId}'` : " across all projects"}. Show me task details including assignees, languages, and days overdue. ${action === "reassign" ? "Suggest new assignees based on workload." : ""} ${action === "extend" ? "Recommend realistic new deadlines." : ""}`,
},
},
],
}),
);
server.registerPrompt(
"review_task_automation",
{
title: "Review Task Automation",
description: "Set up review workflows",
argsSchema: schemas.ReviewTaskAutomationArgs.shape,
},
({
projectId,
reviewType,
assignees,
}: schemas.ReviewTaskAutomationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Create a ${reviewType} review task in project '${projectId}'. Assign to: ${assignees}. Set up the workflow with appropriate permissions and notifications. Show me the task configuration and estimated completion time.`,
},
},
],
}),
);
server.registerPrompt(
"task_status_report",
{
title: "Task Status Report",
description: "Get comprehensive task status",
argsSchema: schemas.TaskStatusReportArgs.shape,
},
({ projectId, groupBy }: schemas.TaskStatusReportArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Generate a task status report${projectId ? ` for project '${projectId}'` : " for all projects"}${groupBy ? ` grouped by ${groupBy}` : ""}. Include task counts, completion rates, average time to completion, and highlight any bottlenecks or delays.`,
},
},
],
}),
);
// E-commerce & Content Prompts
server.registerPrompt(
"product_catalog_update",
{
title: "Product Catalog Update",
description: "Process seasonal catalog updates",
argsSchema: schemas.ProductCatalogUpdateArgs.shape,
},
({
projectId,
catalogSource,
targetMarkets,
}: schemas.ProductCatalogUpdateArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Process this seasonal product catalog update: extract all product descriptions, titles, and marketing copy from ${catalogSource}, create translation keys organized by product category in project '${projectId}', set up automated workflows for markets: ${targetMarkets}, and generate a timeline showing when each market will be ready.`,
},
},
],
}),
);
server.registerPrompt(
"campaign_launch_setup",
{
title: "Campaign Launch Setup",
description: "Set up marketing campaign localization",
argsSchema: schemas.CampaignLaunchSetupArgs.shape,
},
({
campaignName,
contentSources,
targetRegions,
}: schemas.CampaignLaunchSetupArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Launch '${campaignName}' campaign: extract content from ${contentSources}, create a new project with appropriate structure, translate for ${targetRegions} regions, ensure brand voice consistency, coordinate with regional teams, and set up publishing workflows.`,
},
},
],
}),
);
server.registerPrompt(
"content_extraction_workflow",
{
title: "Content Extraction Workflow",
description: "Extract and localize content from documents",
argsSchema: schemas.ContentExtractionWorkflowArgs.shape,
},
({
projectId,
contentSource,
contentType,
}: schemas.ContentExtractionWorkflowArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Extract ${contentType} content from ${contentSource} and import into project '${projectId}'. Organize by sections, apply appropriate metadata and tags, detect any existing translations, and create tasks for missing translations.`,
},
},
],
}),
);
// Developer Integration Prompts
server.registerPrompt(
"feature_branch_sync",
{
title: "Feature Branch Sync",
description: "Sync feature branch with Lokalise",
argsSchema: schemas.FeatureBranchSyncArgs.shape,
},
({
projectId,
branchName,
syncDirection,
}: schemas.FeatureBranchSyncArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Sync the '${branchName}' feature branch with project '${projectId}'${syncDirection ? ` (direction: ${syncDirection})` : ""}. Detect new or modified keys, create appropriate translation tasks, and provide a summary of what was synced.`,
},
},
],
}),
);
server.registerPrompt(
"ci_cd_integration",
{
title: "CI/CD Integration",
description: "Automate CI/CD localization workflow",
argsSchema: schemas.CiCdIntegrationArgs.shape,
},
({
projectId,
pipelineType,
triggerEvent,
}: schemas.CiCdIntegrationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Set up ${pipelineType} CI/CD integration for project '${projectId}' triggered on ${triggerEvent}. Configure automatic key sync, translation status checks, and build generation. Show me the workflow configuration.`,
},
},
],
}),
);
server.registerPrompt(
"build_generation",
{
title: "Build Generation",
description: "Generate translation bundles on demand",
argsSchema: schemas.BuildGenerationArgs.shape,
},
({
projectId,
platform,
format,
environment,
}: schemas.BuildGenerationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Generate a ${format} translation bundle for ${platform} platform from project '${projectId}'${environment ? ` for ${environment} environment` : ""}. Include only reviewed translations, apply platform-specific formatting, and provide download link.`,
},
},
],
}),
);
// Enterprise & Compliance Prompts
server.registerPrompt(
"regulatory_doc_processing",
{
title: "Regulatory Document Processing",
description: "Process compliance documents",
argsSchema: schemas.RegulatoryDocProcessingArgs.shape,
},
({
projectId,
documentType,
complianceRegions,
previousVersion,
}: schemas.RegulatoryDocProcessingArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Process ${documentType} for ${complianceRegions} compliance in project '${projectId}'.${previousVersion ? ` Compare with version '${previousVersion}' to identify changes.` : ""} Create structured translation tasks, ensure terminology compliance, set up multi-stage review workflow, and generate audit trail.`,
},
},
],
}),
);
server.registerPrompt(
"audit_trail_generation",
{
title: "Audit Trail Generation",
description: "Generate compliance audit trails",
argsSchema: schemas.AuditTrailGenerationArgs.shape,
},
({
projectId,
auditPeriod,
auditScope,
}: schemas.AuditTrailGenerationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Generate a comprehensive audit trail for project '${projectId}' covering ${auditPeriod}. Include ${auditScope} with timestamps, user details, and change history. Format for regulatory submission and highlight any compliance concerns.`,
},
},
],
}),
);
server.registerPrompt(
"quality_assurance_check",
{
title: "Quality Assurance Check",
description: "Run comprehensive QA checks",
argsSchema: schemas.QualityAssuranceCheckArgs.shape,
},
({
projectId,
qaType,
languages,
}: schemas.QualityAssuranceCheckArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Run ${qaType} QA checks on project '${projectId}'${languages ? ` for languages: ${languages}` : " for all languages"}. Identify issues, generate detailed report with severity levels, create tasks for critical issues, and suggest corrective actions.`,
},
},
],
}),
);
// Team Collaboration Prompts
server.registerPrompt(
"contributor_assignment",
{
title: "Contributor Assignment",
description: "Manage team assignments",
argsSchema: schemas.ContributorAssignmentArgs.shape,
},
({
projectId,
contributorEmail,
role,
languages,
}: schemas.ContributorAssignmentArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Add '${contributorEmail}' to project '${projectId}' as ${role}${languages ? ` for languages: ${languages}` : ""}. Set appropriate permissions, notify about assigned tasks, and show current team structure.`,
},
},
],
}),
);
server.registerPrompt(
"glossary_management",
{
title: "Glossary Management",
description: "Check and update glossary terms",
argsSchema: schemas.GlossaryManagementArgs.shape,
},
({ projectId, action, terms }: schemas.GlossaryManagementArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `${action} glossary${terms ? ` for terms: ${terms}` : ""} in project '${projectId}'. ${action === "check" ? "Identify missing or conflicting terms." : ""} ${action === "add" ? "Ensure consistency across languages." : ""} ${action === "export" ? "Format for external use." : ""} Show results and any recommendations.`,
},
},
],
}),
);
server.registerPrompt(
"comment_collaboration",
{
title: "Comment Collaboration",
description: "Facilitate team discussions on keys",
argsSchema: schemas.CommentCollaborationArgs.shape,
},
({
projectId,
keyPattern,
action,
}: schemas.CommentCollaborationArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `${action} comments in project '${projectId}'${keyPattern ? ` for keys matching '${keyPattern}'` : ""}. ${action === "list" ? "Show recent discussions." : ""} ${action === "summarize" ? "Group by topic and urgency." : ""} ${action === "resolve" ? "Mark as addressed and notify participants." : ""}`,
},
},
],
}),
);
// Advanced Workflow Prompts
server.registerPrompt(
"international_app_launch",
{
title: "International App Launch",
description: "Complete setup for launching app internationally",
argsSchema: schemas.InternationalAppLaunchArgs.shape,
},
({
appName,
appDescription,
targetMarkets,
featureSets,
}: schemas.InternationalAppLaunchArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `I'm launching a ${appDescription} app called '${appName}' across these markets: ${targetMarkets}. Set up complete localization: create project with optimal settings, add all target languages, create keys for ${featureSets}, configure review workflows, and provide launch readiness report with timeline.`,
},
},
],
}),
);
server.registerPrompt(
"seasonal_campaign_cloning",
{
title: "Seasonal Campaign Cloning",
description: "Clone and adapt seasonal campaigns",
argsSchema: schemas.SeasonalCampaignCloningArgs.shape,
},
({
sourceProjectId,
newCampaignName,
modifications,
targetDate,
}: schemas.SeasonalCampaignCloningArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `Clone project '${sourceProjectId}' to create '${newCampaignName}'. Apply these modifications: ${modifications}. Clear existing translations but keep structure, set up new tasks with ${targetDate} deadline, and show launch timeline.`,
},
},
],
}),
);
server.registerPrompt(
"emergency_hotfix",
{
title: "Emergency Hotfix",
description: "Handle urgent translation fixes",
argsSchema: schemas.EmergencyHotfixArgs.shape,
},
({
projectId,
issueDescription,
affectedKeys,
priority,
}: schemas.EmergencyHotfixArgsType) => ({
messages: [
{
role: "user" as const,
content: {
type: "text" as const,
text: `URGENT: ${issueDescription} in project '${projectId}' affecting keys: ${affectedKeys}. Priority: ${priority || "critical"}. Create emergency fix tasks, notify relevant team members immediately, fast-track review process, and prepare hotfix bundle.`,
},
},
],
}),
);
methodLogger.info("Successfully registered all prompts");
}