GitHub MCP Server

Analisis repositori, isu, permintaan tarik, dan eksplorasi struktur kode

Dokumentasi

GitHub Repo Analytics MCP — Stars, Languages & Compare, No PAT (nexgendata/github-mcp-server) Actor

MCP server giving AI agents (Claude, Cursor, custom) read-only analytics on any public GitHub repo with no personal access token. Four tools: get_repo_stats (stars/forks/issues), search_repos by topic, get_repo_languages, and compare_repos. Runs on Apify's proxy pool, no rate-limit juggling.

Pricing

from $10.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases. In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours, and optionally produces a well-defined JSON output, datasets with results, or files in key-value store. In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server. Actors are written with capital "A".

How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects. You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready. The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official JavaScript/TypeScript client:

npm install apify-client

In Python projects, use official Python client library:

pip install apify-client

In shell scripts, use Apify CLI:

# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## GitHub Repo Analytics MCP — Stars, Commits & Languages, No PAT

Give an AI agent read-only analytics on any public GitHub repo **without minting a personal access token**. This Model Context Protocol server runs on Apify's proxy pool, so Claude, Cursor, or any MCP client can pull repository stats, search repos by topic, break down language composition, and compare repos side by side as structured JSON — no PAT to manage, no rate-limit juggling. It is a complement to GitHub's official MCP (which requires auth), aimed at no-auth public-repo intelligence and trend tracking.

### What this MCP server does

GitHub's own MCP server requires a personal access token and inherits its 5,000-request/hour rate cap. This server is built for the opposite use case: **read-only analytics on public repositories with zero auth setup**. An agent discovers the tools, calls them with structured parameters, and gets clean JSON back — ready to reason over in a multi-step chain.

### Tools exposed via MCP

This server exposes **four** tools:

- `get_repo_stats` — detailed stats for one repository (`owner`, `repo`): stars, forks, open issues, and activity.
- `search_repos` — search repositories by `query`, with optional `sort` (`stars`, `forks`, or `updated`) and `max_results`. Returns names, descriptions, stars, and forks.
- `get_repo_languages` — language composition breakdown for a repository (`owner`, `repo`).
- `compare_repos` — compare a list of repositories (`repos`: list of `owner/repo` strings) head to head.

Each tool returns clean structured JSON the agent can parse and chain across calls.

### Why this beats building your own Octokit wrapper

| Feature | NexGenData GitHub Analytics MCP | GitHub Official MCP | Octokit / GraphQL custom | Generic LLM (no tools) |
|---|---|---|---|---|
| MCP-native | Yes | Yes | No | No tools |
| No GitHub PAT required for public data | Yes — Apify proxy pool | No — PAT required | PAT required | N/A |
| Repo stats: stars, forks, issues | Yes | Yes | Build it yourself | Hallucinated |
| Repo search by topic | Yes | Yes | Build it yourself | None |
| Language composition breakdown | Yes | Limited | Build it yourself | None |
| Cross-repo comparison | Yes | Limited | Build it yourself | None |
| Auth | Apify token (no GitHub PAT) | GitHub PAT required | GitHub PAT | None |

This is read-only public-repo analytics. It does **not** create issues or PRs — for write operations use GitHub's official MCP.

### Use cases

- **OSS trend tracking** — star and fork velocity across a watchlist of repos.
- **Due-diligence agent** — assess a project's activity and contributor health before adopting it.
- **Competitive OSS intel** — `compare_repos` to benchmark rivals on stars, forks, and activity.
- **Dev-tool market research** — `search_repos` to surface trending projects in a topic without a PAT.
- **Newsletter / report automation** — auto-summarize weekly repo activity for a digest.

### Connect to Claude Desktop

```json
{
  "mcpServers": {
    "nexgendata-github": {
      "url": "https://nexgendata--github-mcp-server.apify.actor/mcp",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}

Sample call and response

Get stats for a repository:

{
  "name": "get_repo_stats",
  "arguments": { "owner": "facebook", "repo": "react" }
}
{
  "text": "Retrieved stats for facebook/react",
  "structuredContent": {
    "repo": "facebook/react",
    "data": [
      {
        "fullName": "facebook/react",
        "stars": 228000,
        "forks": 46500,
        "openIssues": 950,
        "defaultBranch": "main",
        "lastPushed": "2026-06-28"
      }
    ]
  }
}

FAQ

Do I need a GitHub personal access token? No — for public repository data this server uses Apify's proxy pool, so no PAT is required.

How is this different from GitHub's official MCP server? GitHub's official server requires authentication and supports read/write. This is no-auth, read-only analytics on public repos, hosted on Apify — aimed at trend tracking and due diligence rather than repo management.

Which MCP clients work? Any MCP-compatible client — Claude Desktop, Cursor, Cline, and custom agents using the official MCP SDKs.

Can it create issues or PRs? No — it is read-only analytics by design. Use GitHub's official MCP for write operations.

Do I need separate API keys? No — only your Apify API token to connect.

Related NexGenData MCP servers & developer-tools actors

Use caseActor
Developer tools MCP (NPM, PyPI, Stack Overflow)developer-tools-mcp-server
Web-scraping MCP (any URL, AI agents)web-scraping-mcp-server
SEO & web analysis MCPseo-web-analysis-mcp-server
Domain intelligence MCPdomain-intelligence-mcp-server
News MCP (Hacker News + tech press)news-mcp-server
Reddit MCP (r/programming, r/MachineLearning)reddit-mcp-server
YouTube / media MCP (DevRel videos)youtube-media-mcp-server
Academic research MCP (arxiv + papers)academic-research-mcp-server
26-server gateway (GitHub + 25 more)enterprise-mcp-gateway

Built and maintained by NexGenData. Home: thenextgennexus.com

Actor input Schema

Actor input object example

{}

API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

JavaScript example

import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/github-mcp-server").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

Python example

from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/github-mcp-server").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

CLI example

echo '{}' |
apify call nexgendata/github-mcp-server --silent --output-dataset

MCP server setup

{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=nexgendata/github-mcp-server",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

OpenAPI specification

{
    "openapi": "3.0.1",
    "info": {
        "title": "GitHub Repo Analytics MCP — Stars, Languages & Compare, No PAT",
        "description": "MCP server giving AI agents (Claude, Cursor, custom) read-only analytics on any public GitHub repo with no personal access token. Four tools: get_repo_stats (stars/forks/issues), search_repos by topic, get_repo_languages, and compare_repos. Runs on Apify's proxy pool, no rate-limit juggling.",
        "version": "0.0",
        "x-build-id": "bdmElRYnIFyVP5ih4"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~github-mcp-server/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-github-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/nexgendata~github-mcp-server/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-github-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/nexgendata~github-mcp-server/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-github-mcp-server",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {}
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}