Skip to main content
Glama
Alosies
by Alosies

list_merge_request_diffs

Retrieve merge request diffs with pagination support. Provide project ID and either merge request ID or source branch to view code changes.

Instructions

List merge request diffs with pagination support. Either merge_request_iid or source_branch must be provided.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
project_idYesProject ID or path
merge_request_iidNoMerge request internal ID
source_branchNoSource branch name (alternative to merge_request_iid)
pageNoPage number for pagination (default: 1)
per_pageNoNumber of items per page (max: 100, default: 20)
unidiffNoPresent diffs in unified diff format (GitLab 16.5+)

Implementation Reference

  • Main handler function that executes the list_merge_request_diffs tool. Resolves merge request IID if source_branch provided, constructs GitLab API endpoint /merge_requests/{iid}/diffs with pagination and unidiff parameters, fetches data using GitLabClient, and returns JSON response.
    async listMergeRequestDiffs(args: ListMergeRequestDiffsParams) { const mergeRequestIid = await this.resolveMergeRequestIid( args.project_id, args.merge_request_iid, args.source_branch ); const params = new URLSearchParams(); if (args.page) params.append("page", String(args.page)); if (args.per_page) params.append("per_page", String(args.per_page)); if (args.unidiff !== undefined) params.append("unidiff", String(args.unidiff)); const queryString = params.toString(); const url = `/projects/${encodeURIComponent( args.project_id )}/merge_requests/${mergeRequestIid}/diffs${ queryString ? `?${queryString}` : "" }`; const data = await this.client.get(url); return { content: [ { type: "text", text: JSON.stringify(data, null, 2), }, ], }; }
  • MCP tool schema definition for list_merge_request_diffs, including input schema with properties for project_id, merge_request_iid/source_branch, pagination, and unidiff.
    { name: 'list_merge_request_diffs', description: 'List merge request diffs with pagination support. Either merge_request_iid or source_branch must be provided.', inputSchema: { type: 'object', properties: { project_id: { type: 'string', description: 'Project ID or path', }, merge_request_iid: { type: 'number', description: 'Merge request internal ID', }, source_branch: { type: 'string', description: 'Source branch name (alternative to merge_request_iid)', }, page: { type: 'number', description: 'Page number for pagination (default: 1)', }, per_page: { type: 'number', description: 'Number of items per page (max: 100, default: 20)', maximum: 100, }, unidiff: { type: 'boolean', description: 'Present diffs in unified diff format (GitLab 16.5+)', }, }, required: ['project_id'], }, },
  • src/server.ts:197-200 (registration)
    Tool dispatch registration in the MCP server request handler switch statement, calling the mergeRequestHandlers.listMergeRequestDiffs method.
    case "list_merge_request_diffs": return await this.mergeRequestHandlers.listMergeRequestDiffs( args as unknown as ListMergeRequestDiffsParams );
  • TypeScript interface defining the input parameters for the listMergeRequestDiffs handler.
    export interface ListMergeRequestDiffsParams { project_id: string; merge_request_iid?: number; source_branch?: string; page?: number; per_page?: number; unidiff?: boolean; }
  • Helper method to resolve merge request IID from project and source_branch if merge_request_iid not provided directly. Used by the handler.
    private async resolveMergeRequestIid( projectId: string, mergeRequestIid?: number, sourceBranch?: string ): Promise<number> { if (mergeRequestIid) { return mergeRequestIid; } if (!sourceBranch) { throw new Error( "Either merge_request_iid or source_branch must be provided" ); } // Find MR by source branch const mrs = (await this.client.get( `/projects/${encodeURIComponent( projectId )}/merge_requests?source_branch=${encodeURIComponent( sourceBranch )}&state=opened&per_page=1` )) as GitLabMergeRequest[]; if (!mrs || mrs.length === 0) { // Try all states if no open MR found const allMrs = (await this.client.get( `/projects/${encodeURIComponent( projectId )}/merge_requests?source_branch=${encodeURIComponent( sourceBranch )}&per_page=1` )) as GitLabMergeRequest[]; if (!allMrs || allMrs.length === 0) { throw new Error( `No merge request found for source branch: ${sourceBranch}` ); } return allMrs[0].iid; } return mrs[0].iid; }

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/Alosies/gitlab-mcp-server'

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