Skip to main content
Glama
ecosyste-ms

Ecosyste.ms Package Data

Official
by ecosyste-ms

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
NameRequiredDescriptionDefault
ecosystemYesPackage ecosystem
nameYesPackage name

Implementation Reference

  • 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)}`;
    }
  • 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"],
      },
    },
  • 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);
    }
  • 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 };
    });

Latest Blog Posts

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/ecosyste-ms/mcp'

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