get_package_repository
Retrieve GitHub repository statistics for software packages to assess popularity, maintenance status, and development activity across multiple ecosystems.
Instructions
Get GitHub stats: stars, forks, language, open issues. Use when asked about popularity, maintenance, or source repo.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ecosystem | Yes | Package ecosystem | |
| name | Yes | Package name |
Implementation Reference
- index.js:130-139 (handler)Main handler for the 'get_package_repository' tool. Retrieves package from local DB or API, fetches repository metadata, and formats the output with repo stats like stars, forks, issues.
case "get_package_repository": { const pkg = getPackageFromDb(args.ecosystem, args.name); if (pkg) { const repo = getRepoMetadataFromDb(pkg.id); return `Repository for ${args.ecosystem}/${args.name}:\n${formatRepo(repo, pkg.repository_url)}`; } const pkgData = await getPackage(args.ecosystem, args.name); return `Repository for ${args.ecosystem}/${args.name}:\n${formatRepo(pkgData.data?.repo_metadata, pkgData.data?.repository_url)}`; } - lib/tools.js:64-76 (schema)Input schema definition for the 'get_package_repository' tool, specifying required ecosystem and name parameters.
{ name: "get_package_repository", description: "Get GitHub stats: stars, forks, language, open issues. Use when asked about popularity, maintenance, or source repo.", inputSchema: { type: "object", properties: { ecosystem: { type: "string", description: "Package ecosystem" }, name: { type: "string", description: "Package name" }, }, required: ["ecosystem", "name"], }, }, - lib/db.js:81-88 (helper)Helper function to query and retrieve GitHub repository metadata from the local SQLite database for a specific package ID.
export function getRepoMetadataFromDb(packageId) { if (!db) return null; return db .prepare(`SELECT owner, repo_name, full_name, host, language, stargazers_count, forks_count, open_issues_count, archived, fork FROM repo_metadata WHERE package_id = ?`) .get(packageId); } - lib/formatters.js:57-71 (helper)Helper function to format repository metadata into a human-readable string, including stars, forks, language, issues, and status.
export function formatRepo(repo, repoUrl) { if (!repo) return repoUrl ? `Repository: ${repoUrl}` : "No repository metadata available."; const host = typeof repo.host === 'object' ? repo.host?.name : repo.host; const lines = [ repo.full_name ? `${repo.full_name}` : null, host ? ` Host: ${host}` : null, repo.language ? ` Language: ${repo.language}` : null, repo.stargazers_count ? ` Stars: ${formatNumber(repo.stargazers_count)}` : null, repo.forks_count ? ` Forks: ${formatNumber(repo.forks_count)}` : null, repo.open_issues_count ? ` Open Issues: ${repo.open_issues_count}` : null, repo.archived ? ` Status: Archived` : null, repo.fork ? ` (Fork)` : null, ]; return lines.filter(Boolean).join("\n"); } - index.js:239-241 (registration)Registers all tools, including 'get_package_repository', by handling ListToolsRequestSchema and returning the tools list from lib/tools.js.
server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools }; });