get_file_contents
Retrieve file or directory contents from a GitLab project by specifying project ID, file path, and optional branch/tag reference.
Instructions
Get the contents of a file or directory from a GitLab project
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID or URL-encoded path | |
| file_path | Yes | Path to the file or directory | |
| ref | No | Branch/tag/commit to get contents from |
Implementation Reference
- src/api/files.ts:5-26 (handler)The `getFileContents` function retrieves file/directory contents from a GitLab project using the GitLab API, parses the response with a Zod schema, and decodes base64 content if necessary.
export async function getFileContents(projectId: string, filePath: string, ref?: string): Promise<GitLabContent> { if (!projectId?.trim()) { throw new Error("Project ID is required"); } if (!filePath?.trim()) { throw new Error("File path is required"); } const encodedPath = encodeFilePath(filePath); const endpoint = `/projects/${encodeProjectId(projectId)}/repository/files/${encodedPath}`; const refParam = ref || "HEAD"; const data = await gitlabGet<GitLabContent>(`${endpoint}?ref=${encodeURIComponent(refParam)}`); const parsedData = GitLabContentSchema.parse(data); // Decode base64 content if it's a file if (!Array.isArray(parsedData) && parsedData.content) { parsedData.content = Buffer.from(parsedData.content, "base64").toString("utf8"); } return parsedData; } - src/schemas.ts:245-248 (schema)Defines `GetFileContentsSchema` for validating input arguments (project_id, file_path, and optional ref).
export const GetFileContentsSchema = ProjectParamsSchema.extend({ file_path: z.string().describe("Path to the file or directory"), ref: z.string().optional().describe("Branch/tag/commit to get contents from") }); - src/server.ts:80-83 (registration)Registers the `get_file_contents` tool in the list of available tools.
name: "get_file_contents", description: "Get the contents of a file or directory from a GitLab project", inputSchema: zodToJsonSchema(GetFileContentsSchema) }, - src/server.ts:255-259 (handler)Handles the `get_file_contents` request by parsing arguments and calling the `api.getFileContents` function.
case "get_file_contents": { const args = GetFileContentsSchema.parse(request.params.arguments); const contents = await api.getFileContents(args.project_id, args.file_path, args.ref); return { content: [{ type: "text", text: JSON.stringify(contents, null, 2) }] }; }