In this article, we will review searchCode function in git-mcp codebase. We will look at:
searchRepositoryCode function
searchCode function
githubApiRequest function
searchRepositoryCode function
In git-mcp/src/api/tools/commonTools.ts, at line 578, you will find the following code:
export async function searchRepositoryCode({ repoData, query, page = 1, env, ctx, }: { repoData: RepoData; query: string; page?: number; env: Env; ctx: any; }): Promise<{ searchQuery: string; content: { type: "text"; text: string }[]; pagination?: { totalCount: number; currentPage: number; perPage: number; hasMorePages: boolean; }; }> { try { // Initialize owner and repo from the provided repoData const owner = repoData.owner; const repo = repoData.repo;
This is an mcp tool that uses Github search API to find code matching a query. It also supports pagination for retrieving more results.
At line 625, you will find the following code:
const data = await searchCode( query, owner, repo, env, currentPage, resultsPerPage, );
This is calling a function named searchCode that is imported as shown below:
import { searchCode } from "../utils/githubClient.js";
searchCode function
In git-mcp/src/api/utils/githubClient.ts , at line 245, you will find the following code:
export async function searchCode( query: string, owner: string, repo: string, env: Env, page: number = 1, perPage: number = 20, ): Promise<any> { // GitHub API has a max per_page of 100 const validPerPage = Math.min(Math.max(1, perPage), 100); const searchUrl = `https://api.github.com/search/code?q=${encodeURIComponent(query)}+repo:${owner}/${repo}&page=${page}&per_page=${validPerPage}`; const response = await githubApiRequest(searchUrl, {}, env); if (!response || !response.ok) { console.warn( `GitHub API code search failed: ${response?.status} ${response?.statusText}`, ); return null; }
This function uses Github search API to search for a code in a Github repository.
At line 258, you will find the below code:
const response = await githubApiRequest(searchUrl, {}, env);
githubApiRequest function is defined in the same file.
githubApiRequest function
At line 125 you will find the following code
/** * Make a GitHub API request with rate limit handling * @param url - API URL to fetch * @param options - Fetch options * @param env - Environment containing GitHub token if available * @param retryCount - Current retry attempt (used internally) * @param useAuth - Whether to include authorization header if token is available (default: true) * @returns The API response or null if failed */ export async function githubApiRequest( url: string, options: RequestInit = {}, env: CloudflareEnvironment, retryCount = 1, useAuth = true, ): Promise<Response | null> { try { // Extract repository context for metrics const repoContext = extractRepoContextFromUrl(url); // Track GitHub query count using Cloudflare analytics if (env?.CLOUDFLARE_ANALYTICS && retryCount === 0) { env.CLOUDFLARE_ANALYTICS.writeDataPoint({ blobs: [url, repoContext], doubles: [1], indexes: ["github_api_request"], }); } // Wait for rate limit if necessary await respectRateLimits(); ...
You can use this function to make a Github API request with rate limiting handled.
It has the following parameters
* @param url - API URL to fetch * @param options - Fetch options * @param env - Environment containing GitHub token if available * @param retryCount - Current retry attempt (used internally) * @param useAuth - Whether to include authorization header if token is available (default: true)
And it returns the following
* @returns The API response or null if failed
This is used in five places as shown below
About me:
Hey, my name is Ramu Narasinga. I study codebase architecture in large open-source projects.
Email: ramu.narasinga@gmail.com
Want to learn from open-source? Solve challenges inspired by open-source projects.
References:
https://github.com/idosal/git-mcp/blob/main/src/api/tools/commonTools.ts#L625
https://github.com/idosal/git-mcp/blob/main/src/api/utils/githubClient.ts#L258
https://github.com/idosal/git-mcp/blob/main/src/api/utils/githubClient.ts#L170
https://github.com/idosal/git-mcp/blob/main/src/api/utils/githubClient.ts#L245
Top comments (0)