Skip to main content
Glama

gitlab_get_user_activities

Fetch GitLab user activities by username to monitor contributions, optionally filtered by date for tracking recent work.

Instructions

Fetches activities for a given GitLab user by their username, optionally filtered by date.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
usernameYesThe username of the GitLab user.
sinceDateNoOptional: Activities since this date (YYYY-MM-DD). Defaults to 1 day ago if not provided.

Implementation Reference

  • Core handler function that executes the GitLab API call to retrieve user activities/events for a given user ID, optionally filtered by a 'since' date.
    async getUserActivities(userId: number, sinceDate?: Date): Promise<any[]> { let endpoint = `users/${userId}/events`; if (sinceDate) { // GitLab API expects ISO 8601 format for `after` parameter endpoint += `?after=${sinceDate.toISOString().split('T')[0]}`; } return this.callGitLabApi<any[]>(endpoint); }
  • src/index.ts:286-305 (registration)
    Tool registration including name, description, and input schema definition in the MCP tools list.
    name: 'gitlab_get_user_activities', description: 'Fetches activities for a given GitLab user by their username, optionally filtered by date.', inputSchema: { type: 'object', properties: { username: { type: 'string', description: 'The username of the GitLab user.', }, sinceDate: { type: 'string', format: 'date', description: 'Optional: Activities since this date (YYYY-MM-DD). Defaults to 1 day ago if not provided.', }, }, required: ['username'], }, },
  • MCP tool call handler that resolves username to user ID, determines the 'since' date (default 1 day ago), calls the service handler, and formats the response.
    case 'gitlab_get_user_activities': { if (!gitlabService) { throw new Error('GitLab service is not initialized.'); } const { username, sinceDate } = args as { username: string; sinceDate?: string; }; const userId = await gitlabService.getUserIdByUsername(username); let activities; if (sinceDate) { activities = await gitlabService.getUserActivities( userId, new Date(sinceDate), ); } else { const oneDayAgo = new Date(); oneDayAgo.setDate(oneDayAgo.getDate() - 1); activities = await gitlabService.getUserActivities( userId, oneDayAgo, ); } return { content: [ { type: 'text', text: JSON.stringify(activities, null, 2), }, ], }; }
  • Helper function to resolve GitLab username to user ID, used by the tool handler. Supports exact match and fuzzy partial matching.
    async getUserIdByUsername(username: string): Promise<number> { // First try exact username match const exactUsers = await this.callGitLabApi<GitLabUser[]>( `users?username=${username}`, ); if (exactUsers.length > 0) { return exactUsers[0].id; } // Fallback: search all users and filter by partial username (case-insensitive) const allUsers = await this.callGitLabApi<GitLabUser[]>(`users?per_page=100`); const lowerCaseUsername = username.toLowerCase(); const matchingUsers = allUsers.filter( (user) => user.username.toLowerCase().includes(lowerCaseUsername) || user.name.toLowerCase().includes(lowerCaseUsername), ); if (matchingUsers.length === 0) { throw new Error(`User with username containing '${username}' not found.`); } if (matchingUsers.length > 1) { const userList = matchingUsers .map((user) => `${user.username} (${user.name})`) .join(', '); throw new Error( `Multiple users found matching '${username}': ${userList}. Please be more specific.`, ); } return matchingUsers[0].id; }

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/HainanZhao/mcp-gitlab-jira'

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