getRepoAllDirectories
Browse and retrieve a complete list of directories within a GitHub repository by providing its URL. Simplify repository exploration for AI assistants with this tool.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| repoUrl | Yes | The URL of the Github repo |
Implementation Reference
- index.ts:32-71 (handler)Handler function that parses the repo URL, fetches the root directory contents from GitHub using Octokit, formats the items as JSON, and returns them as text content or an error.
async ({ repoUrl }, 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: `Repository root contents for ${owner}/${repo}:\n\n${itemsDisplay}`, }, ], }; } catch (error) { console.error("Error fetching repo:", error); return { content: [ { type: "text", text: `Error fetching repo: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } } - index.ts:27-72 (registration)Registration of the 'getRepoAllDirectories' tool using server.tool(), including name, input schema, and inline handler.
server.tool( "getRepoAllDirectories", { repoUrl: z.string().url().describe("The URL of the Github repo"), }, async ({ repoUrl }, 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: `Repository root contents for ${owner}/${repo}:\n\n${itemsDisplay}`, }, ], }; } catch (error) { console.error("Error fetching repo:", error); return { content: [ { type: "text", text: `Error fetching repo: ${error instanceof Error ? error.message : String(error)}`, }, ], isError: true, }; } } ); - index.ts:29-31 (schema)Input schema using Zod: repoUrl as a required URL string.
{ repoUrl: z.string().url().describe("The URL of the Github repo"), }, - 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", "") }; }