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.

129 lines (121 loc) 5.04 kB
const { logError, logInfo } = require("../utils/shared-utils.cjs"); /** * @typedef {import('../services/github-api.cjs').GitHubAuthenticatedOctokit} GitHubAuthenticatedOctokit * @typedef {import('../services/github-api.cjs').GitHubRepoInfo} GitHubRepoInfo */ /** * Handler for searching issues. * @param {GitHubAuthenticatedOctokit} octokit - The authenticated Octokit instance. * @param {GitHubRepoInfo} defaultRepo - Default repository information. * @param {object} args - Tool arguments. * @param {string} args.query - The search query. * @param {string} [args.sort] - Sort field (e.g., 'comments', 'created', 'updated'). * @param {string} [args.order] - Sort order ('asc' or 'desc'). * @param {number} [args.per_page=30] - Results per page. * @param {number} [args.page=1] - Page number. * @returns {Promise<object>} The search results. */ async function search_issues(octokit, defaultRepo, args, apiService) { try { const results = await apiService.searchIssues(octokit, args); return results; } catch (error) { logError(`Error in search_issues: ${error.message}`, error); throw error; } } /** * Handler for searching commits. * @param {GitHubAuthenticatedOctokit} octokit - The authenticated Octokit instance. * @param {GitHubRepoInfo} defaultRepo - Default repository information. * @param {object} args - Tool arguments. * @param {string} args.query - The search query. * @param {string} [args.sort] - Sort field (e.g., 'author-date', 'committer-date'). * @param {string} [args.order] - Sort order ('asc' or 'desc'). * @param {number} [args.per_page=30] - Results per page. * @param {number} [args.page=1] - Page number. * @returns {Promise<object>} The search results. */ async function search_commits(octokit, defaultRepo, args, apiService) { try { const results = await apiService.searchCommits(octokit, args); return results; } catch (error) { logError(`Error in search_commits: ${error.message}`, error); throw error; } } /** * Handler for searching code. * @param {GitHubAuthenticatedOctokit} octokit - The authenticated Octokit instance. * @param {GitHubRepoInfo} defaultRepo - Default repository information. * @param {object} args - Tool arguments. * @param {string} args.query - The search query. * @param {string} [args.sort] - Sort field (e.g., 'indexed'). * @param {string} [args.order] - Sort order ('asc' or 'desc'). * @param {number} [args.per_page=30] - Results per page. * @param {number} [args.page=1] - Page number. * @returns {Promise<object>} The search results. */ async function search_code(octokit, defaultRepo, args, apiService) { try { const results = await apiService.searchCode(octokit, args); return results; } catch (error) { logError(`Error in search_code: ${error.message}`, error); throw error; } } /** * Handler for searching users. * @param {GitHubAuthenticatedOctokit} octokit - The authenticated Octokit instance. * @param {GitHubRepoInfo} defaultRepo - Default repository information. * @param {object} args - Tool arguments. * @param {string} args.query - The search query. * @param {string} [args.sort] - Sort field (e.g., 'followers', 'repositories', 'joined'). * @param {string} [args.order] - Sort order ('asc' or 'desc'). * @param {number} [args.per_page=30] - Results per page. * @param {number} [args.page=1] - Page number. * @returns {Promise<object>} The search results. */ async function search_users(octokit, defaultRepo, args, apiService) { try { const results = await apiService.searchUsers(octokit, args); return results; } catch (error) { logError(`Error in search_users: ${error.message}`, error); throw error; } } /** * Handler for searching topics. * @param {GitHubAuthenticatedOctokit} octokit - The authenticated Octokit instance. * @param {GitHubRepoInfo} defaultRepo - Default repository information. * @param {object} args - Tool arguments. * @param {string} args.query - The search query. * @param {string} [args.sort] - Sort field (e.g., 'stars', 'forks', 'updated'). * @param {string} [args.order] - Sort order ('asc' or 'desc'). * @param {number} [args.per_page=30] - Results per page. * @param {number} [args.page=1] - Page number. * @returns {Promise<object>} The search results. */ async function search_topics(octokit, defaultRepo, args, apiService) { try { // Note: GitHub API for topics search is actually a search for repositories by topic. // The endpoint is search/repositories with a q parameter like "topic:your-topic" // We will adapt the searchRepositories function or create a specific one if needed. // For now, assuming a direct apiService.searchTopics exists or will be created. const results = await apiService.searchTopics(octokit, args); return results; } catch (error) { logError(`Error in search_topics: ${error.message}`, error); throw error; } } module.exports = { search_issues, search_commits, search_code, search_users, search_topics, };