getRepoDirectories
Fetch specific directory structures from any GitHub repository by providing the repo URL and directory path.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | The directory path to fetch | |
| repoUrl | Yes | The URL of the Github repo |
Implementation Reference
- index.ts:74-120 (registration)Registration of the 'getRepoDirectories' tool using server.tool(), including schema and handler.server.tool( "getRepoDirectories", { repoUrl: z.string().url().describe("The URL of the Github repo"), path: z.string().describe("The directory path to fetch"), }, async ({ repoUrl, path }, extra) => { try { const { owner, repo } = parseGitHubUrl(repoUrl); const { data } = await octokit.rest.repos.getContent({ owner, repo, path, }); // Format the response const items = Array.isArray(data) ? data.map(item => ({ name: item.name, type: item.type, path: item.path, })) : []; const itemsDisplay = JSON.stringify(items, null, 2); return { content: [ { type: "text", text: `Contents for ${path} in ${owner}/${repo}:\n\n${itemsDisplay}`, }, ], }; } catch (error) { console.error("Error fetching directory:", error); return { content: [ { type: "text", text: `Error fetching directory: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } } );
- index.ts:80-119 (handler)The handler function that fetches the contents of a directory in a GitHub repository using the Octokit API, formats the response as JSON, and returns it as text content.async ({ repoUrl, path }, extra) => { try { const { owner, repo } = parseGitHubUrl(repoUrl); const { data } = await octokit.rest.repos.getContent({ owner, repo, path, }); // Format the response const items = Array.isArray(data) ? data.map(item => ({ name: item.name, type: item.type, path: item.path, })) : []; const itemsDisplay = JSON.stringify(items, null, 2); return { content: [ { type: "text", text: `Contents for ${path} in ${owner}/${repo}:\n\n${itemsDisplay}`, }, ], }; } catch (error) { console.error("Error fetching directory:", error); return { content: [ { type: "text", text: `Error fetching directory: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } }
- index.ts:76-79 (schema)Zod schema for input parameters: repoUrl (string URL) and path (string).{ repoUrl: z.string().url().describe("The URL of the Github repo"), path: z.string().describe("The directory path to fetch"), },
- index.ts:12-20 (helper)Helper function to parse GitHub repository URL into owner and repo name.function parseGitHubUrl(url: string) { const regex = /github\.com\/([^\/]+)\/([^\/]+)/; const match = url.match(regex); if (!match) { throw new Error("Invalid GitHub repository URL"); } const [, owner, repo] = match; return { owner, repo: repo.replace(".git", "") }; }