Skip to main content
Glama

GitHub MCP Server

graphql.ts2.7 kB
import { GitHubError, GitHubValidationError, GitHubResourceNotFoundError, GitHubAuthenticationError, GitHubPermissionError, GitHubRateLimitError } from './errors.js'; /** * Thực hiện truy vấn GraphQL đến GitHub API * @param query - Chuỗi GraphQL query * @param variables - Các biến cho query (optional) * @returns Kết quả từ GraphQL API của GitHub */ export async function graphqlRequest(query: string, variables?: Record<string, any>) { const url = 'https://api.github.com/graphql'; const token = process.env.GITHUB_PERSONAL_ACCESS_TOKEN; if (!token) { throw new GitHubAuthenticationError('Missing GitHub personal access token. Set the GITHUB_PERSONAL_ACCESS_TOKEN environment variable.'); } try { const response = await fetch(url, { method: 'POST', headers: { 'Authorization': `Bearer ${token}`, 'Content-Type': 'application/json', 'Accept': 'application/vnd.github+json', 'X-GitHub-Api-Version': '2022-11-28' }, body: JSON.stringify({ query, variables }), }); const data = await response.json(); // Kiểm tra lỗi GraphQL API if (data.errors && data.errors.length > 0) { const error = data.errors[0]; // Xử lý các loại lỗi phổ biến if (error.type === 'NOT_FOUND') { throw new GitHubResourceNotFoundError(error.message); } else if (error.type === 'FORBIDDEN') { throw new GitHubPermissionError(error.message); } else if (error.type === 'UNPROCESSABLE') { throw new GitHubValidationError( `GraphQL Error: ${error.message}`, 422, { errors: data.errors } ); } else { throw new GitHubError( `GraphQL Error: ${error.message}`, 500, { errors: data.errors } ); } } return data; } catch (error) { if (error instanceof GitHubError) { throw error; } throw new GitHubError( `Failed to execute GraphQL query: ${(error as Error).message}`, 500, { error: (error as Error).message } ); } } /** * Tạo fragment cho pagination trong GraphQL query * @returns Chuỗi fragment GraphQL cho pagination */ export function createPaginationFragment() { return ` pageInfo { hasNextPage endCursor hasPreviousPage startCursor } totalCount `; }

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/tuanle96/mcp-github'

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