Skip to main content
Glama
mmntm

Weblate MCP Server

by mmntm

getComponentChanges

Retrieve recent changes for a translation component in Weblate by specifying project and component slugs to track modifications.

Instructions

Get recent changes for a specific component

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectSlugYesThe slug of the project
componentSlugYesThe slug of the component

Implementation Reference

  • The primary handler for the 'getComponentChanges' tool, decorated with @Tool decorator. Includes schema definition, execution logic to fetch changes from service, format results using helper methods, and error handling.
    @Tool({
      name: 'getComponentChanges',
      description: 'Get recent changes for a specific component',
      parameters: z.object({
        projectSlug: z.string().describe('The slug of the project'),
        componentSlug: z.string().describe('The slug of the component'),
      }),
    })
    async getComponentChanges({
      projectSlug,
      componentSlug,
    }: {
      projectSlug: string;
      componentSlug: string;
    }) {
      try {
        const result = await this.weblateApiService.getComponentChanges(
          projectSlug,
          componentSlug,
        );
    
        if (result.results.length === 0) {
          return {
            content: [
              {
                type: 'text',
                text: `No changes found for component "${componentSlug}" in project "${projectSlug}".`,
              },
            ],
          };
        }
    
        const changesList = result.results
          .slice(0, 20)
          .map(change => this.formatChangeResult(change))
          .join('\n\n---\n\n');
    
        return {
          content: [
            {
              type: 'text',
              text: `Recent changes in component "${componentSlug}" (${result.count} total):\n\n${changesList}`,
            },
          ],
        };
      } catch (error) {
        this.logger.error(
          `Failed to get changes for component ${componentSlug} in project ${projectSlug}`,
          error,
        );
        return {
          content: [
            {
              type: 'text',
              text: `Error getting changes for component "${componentSlug}": ${error.message}`,
            },
          ],
          isError: true,
        };
      }
    }
  • Helper service method that implements the core logic for retrieving component changes by calling the Weblate API's componentsChangesRetrieve endpoint.
    async getComponentChanges(
      projectSlug: string,
      componentSlug: string
    ): Promise<{ results: Change[]; count: number; next?: string; previous?: string }> {
      try {
        const client = this.weblateClientService.getClient();
        
        const response = await componentsChangesRetrieve({
          client,
          path: { 
            project__slug: projectSlug,
            slug: componentSlug 
          },
        });
        
        const changeList = response.data as any;
        
        // Handle different response formats
        if (Array.isArray(changeList)) {
          return {
            results: changeList,
            count: changeList.length,
          };
        }
        
        if (changeList && changeList.results) {
          return {
            results: changeList.results || [],
            count: changeList.count || 0,
            next: changeList.next || undefined,
            previous: changeList.previous || undefined,
          };
        }
        
        return { results: [], count: 0 };
      } catch (error) {
        this.logger.error(
          `Failed to get changes for component ${componentSlug} in project ${projectSlug}`,
          error,
        );
        throw new Error(`Failed to get component changes: ${error.message}`);
      }
    }
  • Proxy method in WeblateApiService that delegates getComponentChanges to the underlying changes service.
    async getComponentChanges(projectSlug: string, componentSlug: string) {
      return this.changesService.getComponentChanges(projectSlug, componentSlug);
  • Private helper method used by the handler to format individual change results into a readable string.
    private formatChangeResult(change: Change): string {
      const timestamp = change.timestamp ? new Date(change.timestamp).toLocaleString() : 'Unknown';
      const actionDescription = this.getActionDescription(change.action || 0);
      const user = change.user || 'Unknown user';
      const target = change.target || 'N/A';
      
      return `**${actionDescription}**\n**User:** ${user}\n**Time:** ${timestamp}\n**Target:** ${target}`;
    }
  • The WeblateChangesTool class (containing the getComponentChanges handler) is registered as a provider in the AppModule, enabling automatic tool registration via MCP-Nest.
    WeblateChangesTool,

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