UNPKG

github-repos-manager-mcp

Version:

Model Context Protocol (MCP) server that enables your MCP client (e.g., Claude Desktop, Cline, Roo Code, Cursor, Windsurf, etc.) to interact with GitHub repositories using your GitHub personal access token.

104 lines (97 loc) 2.2 kB
// src/services/file-service.cjs const githubApi = require("./github-api.cjs"); const fs = require("fs").promises; const path = require("path"); // Helper function to encode file content to base64 async function encodeFileToBase64(filePath) { const content = await fs.readFile(filePath); return Buffer.from(content).toString("base64"); } async function createFile(owner, repo, filePath, content, message, branch) { // For text files, content is a string. For binary, it should be base64 encoded. // This service assumes content is already appropriately formatted. return githubApi.createOrUpdateFile( owner, repo, filePath, message, content, null, branch ); } async function updateFile( owner, repo, filePath, content, message, sha, branch ) { // For text files, content is a string. For binary, it should be base64 encoded. // This service assumes content is already appropriately formatted. return githubApi.createOrUpdateFile( owner, repo, filePath, message, content, sha, branch ); } async function uploadBinaryFile( owner, repo, filePathInRepo, localFilePath, message, branch ) { const content = await encodeFileToBase64(localFilePath); // Check if file exists to get SHA for update, otherwise create let sha = null; try { const existingFile = await githubApi.getRepoContents( owner, repo, filePathInRepo, branch ); if (existingFile && existingFile.sha) { sha = existingFile.sha; } } catch (error) { // If file not found, it's a new file, SHA remains null if (error.status !== 404) { throw error; // Re-throw other errors } } return githubApi.createOrUpdateFile( owner, repo, filePathInRepo, message, content, sha, branch ); } async function deleteFile(owner, repo, filePath, message, sha, branch) { return githubApi.deleteFileFromRepo( owner, repo, filePath, message, sha, branch ); } module.exports = { createFile, updateFile, uploadBinaryFile, deleteFile, encodeFileToBase64, // Exporting for potential direct use in handlers if needed };