# GitHub REST API Integration Scraper (BYOC) (`viralanalyzer/mcp-github-integration`) Actor

Scrape public/private repositories, issues, PRs, and trending charts from GitHub via official REST API (BYOC).

- **URL**: https://apify.com/viralanalyzer/mcp-github-integration.md
- **Developed by:** [viralanalyzer](https://apify.com/viralanalyzer) (community)
- **Categories:** Developer tools, Integrations
- **Stats:** 3 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# 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 Integration — Repo Info, Issues, PRs, Trending & Org Repos via Official REST API

> 🔗 [View on Apify Store](https://apify.com/viralanalyzer/mcp-github-integration) | 🇺🇸 English | [🇧🇷 Português](#português)

Fetch **GitHub data via the official GitHub REST API** (`api.github.com`, version `2022-11-28`) — single-repo metadata, open issues, open pull requests, trending repos from the last 7 days, and all public repos of an organization. Five focused modes, one actor. No browser. An optional Personal Access Token lifts the rate limit from 60 to 5000 req/h and unlocks private repos.

### ✨ Features

- 📊 **Repo Info** — Full metadata for one repo: stars, forks, open issues, watchers, topics, license, language, default branch, homepage, fork flag, timestamps
- 🐛 **Repo Issues** — Open issues with title, author, labels, comment count, body excerpt, timestamps
- 🔀 **Repo PRs** — Open pull requests with the same rich fields as issues
- 🔥 **Trending Repos** — Repos created in the last 7 days, sorted by stars, optionally filtered by language
- 🏢 **Org Repos** — All public repos of an organization, sorted by last update
- 🔑 **Optional PAT** — Provide a GitHub Personal Access Token to raise the limit 60 → 5000 req/h and reach private data (stored as a secret)
- ⚡ **Pure REST** — Direct calls to the official GitHub API, no scraping, no browser
- 🛡️ **Diagnostic Setup Guide** — On recoverable conditions (bad input, rate limit, missing token, not found, zero results) it returns a clearly-labeled diagnostic record and never charges you

### 📥 Input

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `mode` | string | ✅ | `repo-info` | `repo-info` \| `repo-issues` \| `repo-prs` \| `trending` \| `org-repos` |
| `repoFullName` | string | ⚠️ | `microsoft/vscode` | `owner/repo` format. Required for `repo-info`, `repo-issues`, `repo-prs` |
| `orgName` | string | ⚠️ | `apify` | Organization slug. Required for `org-repos` |
| `language` | string | ❌ | `python` | Language filter for `trending` (e.g. `python`, `javascript`). Empty = all |
| `maxItems` | integer | ❌ | `30` | Max items for issues, PRs, org repos. Range 1–500 |
| `githubToken` | string (secret) | ❌ | `""` | Optional GitHub PAT. Raises limit 60 → 5000 req/h and grants private-repo access |

⚠️ = required only for the modes noted above.

#### Input Examples

```json
{ "mode": "repo-info", "repoFullName": "microsoft/vscode" }
{ "mode": "repo-issues", "repoFullName": "apify/crawlee", "maxItems": 50 }
{ "mode": "trending", "language": "python" }
{ "mode": "org-repos", "orgName": "apify", "maxItems": 50 }
````

### 📤 Output

The fields returned depend on the selected `mode`. Every record carries a `scrapedAt` ISO 8601 timestamp.

**`repo-info`** (1 record): `fullName`, `description`, `language`, `stars`, `forks`, `openIssues`, `watchers`, `topics[]`, `license`, `defaultBranch`, `homepage`, `isForked`, `createdAt`, `updatedAt`, `htmlUrl`.

**`repo-issues` / `repo-prs`** (up to `maxItems`): `id` (issue/PR number), `title`, `state`, `author`, `labels[]`, `createdAt`, `updatedAt`, `commentsCount`, `htmlUrl`, `body` (truncated to 500 chars), `repo`.

**`trending`** (up to 30): `fullName`, `description`, `language`, `stars`, `forks`, `topics[]`, `htmlUrl`, `createdAt`.

**`org-repos`** (up to `maxItems`): `fullName`, `description`, `language`, `stars`, `forks`, `htmlUrl`, `updatedAt`, `org`.

Notes: `description`, `language`, `license`, `homepage`, `author` and `body` can be `null`. `openIssues` includes PRs (per GitHub's count).

#### Output Example (`repo-info`)

```json
{
  "fullName": "microsoft/vscode",
  "description": "Visual Studio Code",
  "language": "TypeScript",
  "stars": 162000,
  "forks": 28500,
  "openIssues": 9100,
  "watchers": 162000,
  "topics": ["editor", "electron", "typescript"],
  "license": "MIT License",
  "defaultBranch": "main",
  "homepage": "https://code.visualstudio.com",
  "isForked": false,
  "createdAt": "2015-09-03T20:23:38Z",
  "updatedAt": "2026-06-05T08:14:00Z",
  "htmlUrl": "https://github.com/microsoft/vscode",
  "scrapedAt": "2026-06-05T12:00:00.000Z"
}
```

### 📋 Use Cases

- **Dependency Monitoring** — Track stars, forks, open issues, license of repos your stack depends on
- **Competitive Intelligence** — Watch an organization's full public repo footprint with `org-repos`
- **Trend Discovery** — Surface fast-rising repos from the last 7 days by language with `trending`
- **Triage Dashboards** — Pull open issues or PRs into your board with author, labels, comment counts
- **OSS Health Reports** — Aggregate repo metadata across many projects into scorecards
- **LLM / Agent Context** — Provide structured, real-time GitHub data to RAG and agentic workflows

### ❓ FAQ

**Q: Do I need a GitHub token?**
A: No. It works without one, but unauthenticated GitHub requests are capped at 60 req/h per IP (shared datacenter IPs exhaust fast). Provide a PAT in `githubToken` to raise the limit to 5000 req/h and access private repos. The token is stored as a secret.

**Q: Which modes need which inputs?**
A: `repo-info`, `repo-issues` and `repo-prs` require `repoFullName` (`owner/repo`). `org-repos` requires `orgName`. `trending` uses the optional `language` filter and needs neither.

**Q: How many issues / PRs / repos can I fetch?**
A: Up to `maxItems` (1–500, default 30) for `repo-issues`, `repo-prs` and `org-repos`. The actor paginates the GitHub API at 100 per page until the limit is reached. `trending` returns up to 30 repos.

**Q: What counts as "trending"?**
A: Repos created in the last 7 days, returned by GitHub search sorted by stars (descending), optionally filtered to a single `language`.

**Q: Why did my run return a diagnostic record instead of data?**
A: For recoverable conditions — missing/invalid input, rate limit, missing/invalid token, repo or org not found, or zero results — the actor saves a clearly-labeled diagnostic record (`setup_status: "DIAGNOSTIC_GUIDE"`) with causes and remediations, finishes successfully, and **does not charge you**. Add a token or fix the input and re-run.

**Q: Does it return closed issues / PRs?**
A: No. Both `repo-issues` and `repo-prs` query open items only (`state=open`).

### 💰 Pricing

This actor uses **Pay Per Event (PPE)** pricing with a single event:

| Event | When it fires |
|---|---|
| `item-fetched` | Once per item written to the dataset (the number of returned records) |

You are charged only for real items returned. Runs that hit a recoverable condition (bad input, rate limit, not found, zero results) emit a diagnostic record and are **not** charged. See current per-event rates on the Apify Store page: https://apify.com/viralanalyzer/mcp-github-integration

### 🔗 Related Actors

- [GitHub Trending Scraper](https://apify.com/viralanalyzer/github-trending-scraper) — Curated trending repositories feed
- [arXiv Paper Intelligence](https://apify.com/viralanalyzer/arxiv-paper-intelligence) — Academic paper metadata & search
- [Reddit Scraper](https://apify.com/viralanalyzer/reddit-scraper) — Developer community discussions
- [TradingView Screener](https://apify.com/viralanalyzer/tradingview-screener) — Market & technical screening

### 📝 Changelog

#### v1.0 (Current)

- ✅ Five modes: `repo-info`, `repo-issues`, `repo-prs`, `trending`, `org-repos`
- ✅ Official GitHub REST API (`api.github.com`, version `2022-11-28`)
- ✅ Optional Personal Access Token (60 → 5000 req/h, private-repo access)
- ✅ Pagination up to `maxItems` (1–500) for issues, PRs, org repos
- ✅ Trending = repos created in the last 7 days, sorted by stars
- ✅ Diagnostic Setup Guide on recoverable conditions — never charges PPE
- ✅ PPE billing via `item-fetched` with owner-skip

***

<a name="português"></a>

## 🐙 GitHub Integration — Info de Repo, Issues, PRs, Trending & Repos de Org via API REST Oficial

> [🇺🇸 English](#-github-integration--repo-info-issues-prs-trending--org-repos-via-official-rest-api) | 🇧🇷 Português

Busque **dados do GitHub via API REST oficial** (`api.github.com`, versão `2022-11-28`) — metadados de um repositório, issues abertas, pull requests abertos, repositórios em alta dos últimos 7 dias e todos os repositórios públicos de uma organização. Cinco modos focados, um actor. Sem navegador. Um Personal Access Token opcional eleva o limite de 60 para 5000 req/h e libera repositórios privados.

### ✨ Funcionalidades

- 📊 **Info de Repo** — Metadados completos de um repo: estrelas, forks, issues abertas, watchers, tópicos, licença, linguagem, branch padrão, homepage, flag de fork, timestamps
- 🐛 **Issues do Repo** — Issues abertas com título, autor, labels, contagem de comentários, trecho do corpo, timestamps
- 🔀 **PRs do Repo** — Pull requests abertos com os mesmos campos ricos das issues
- 🔥 **Repos em Alta** — Repos criados nos últimos 7 dias, ordenados por estrelas, opcionalmente filtrados por linguagem
- 🏢 **Repos de Org** — Todos os repos públicos de uma organização, ordenados por última atualização
- 🔑 **PAT Opcional** — Forneça um GitHub Personal Access Token para elevar o limite 60 → 5000 req/h e acessar dados privados (armazenado como secret)
- ⚡ **REST Puro** — Chamadas diretas à API oficial do GitHub, sem scraping, sem navegador
- 🛡️ **Guia de Diagnóstico** — Em condições recuperáveis (input inválido, limite de taxa, token ausente, não encontrado, zero resultados) retorna um registro de diagnóstico claramente identificado e nunca cobra

### 📥 Entrada

| Parâmetro | Tipo | Obrigatório | Padrão | Descrição |
|---|---|---|---|---|
| `mode` | string | ✅ | `repo-info` | `repo-info` | `repo-issues` | `repo-prs` | `trending` | `org-repos` |
| `repoFullName` | string | ⚠️ | `microsoft/vscode` | Formato `owner/repo`. Obrigatório para `repo-info`, `repo-issues`, `repo-prs` |
| `orgName` | string | ⚠️ | `apify` | Slug da organização. Obrigatório para `org-repos` |
| `language` | string | ❌ | `python` | Filtro de linguagem para `trending` (ex: `python`, `javascript`). Vazio = todas |
| `maxItems` | inteiro | ❌ | `30` | Máx. de itens para issues, PRs, repos de org. Faixa 1–500 |
| `githubToken` | string (secret) | ❌ | `""` | GitHub PAT opcional. Eleva o limite 60 → 5000 req/h e dá acesso a repos privados |

⚠️ = obrigatório apenas para os modos indicados acima.

#### Exemplos de Entrada

```json
{ "mode": "repo-info", "repoFullName": "microsoft/vscode" }
{ "mode": "repo-issues", "repoFullName": "apify/crawlee", "maxItems": 50 }
{ "mode": "trending", "language": "python" }
{ "mode": "org-repos", "orgName": "apify", "maxItems": 50 }
```

### 📤 Saída

Os campos retornados dependem do `mode` selecionado. Todo registro carrega um timestamp `scrapedAt` em ISO 8601.

**`repo-info`** (1 registro): `fullName`, `description`, `language`, `stars`, `forks`, `openIssues`, `watchers`, `topics[]`, `license`, `defaultBranch`, `homepage`, `isForked`, `createdAt`, `updatedAt`, `htmlUrl`.

**`repo-issues` / `repo-prs`** (até `maxItems`): `id` (número da issue/PR), `title`, `state`, `author`, `labels[]`, `createdAt`, `updatedAt`, `commentsCount`, `htmlUrl`, `body` (truncado em 500 caracteres), `repo`.

**`trending`** (até 30): `fullName`, `description`, `language`, `stars`, `forks`, `topics[]`, `htmlUrl`, `createdAt`.

**`org-repos`** (até `maxItems`): `fullName`, `description`, `language`, `stars`, `forks`, `htmlUrl`, `updatedAt`, `org`.

Observações: `description`, `language`, `license`, `homepage`, `author` e `body` podem ser `null`. `openIssues` inclui PRs (conforme a contagem do GitHub).

#### Exemplo de Saída (`repo-info`)

```json
{
  "fullName": "microsoft/vscode",
  "description": "Visual Studio Code",
  "language": "TypeScript",
  "stars": 162000,
  "forks": 28500,
  "openIssues": 9100,
  "watchers": 162000,
  "topics": ["editor", "electron", "typescript"],
  "license": "MIT License",
  "defaultBranch": "main",
  "homepage": "https://code.visualstudio.com",
  "isForked": false,
  "createdAt": "2015-09-03T20:23:38Z",
  "updatedAt": "2026-06-05T08:14:00Z",
  "htmlUrl": "https://github.com/microsoft/vscode",
  "scrapedAt": "2026-06-05T12:00:00.000Z"
}
```

### 📋 Casos de Uso

- **Monitoramento de Dependências** — Acompanhe estrelas, forks, issues abertas e licença dos repos que sua stack usa
- **Inteligência Competitiva** — Observe toda a presença pública de repos de uma organização com `org-repos`
- **Descoberta de Tendências** — Revele repos em ascensão dos últimos 7 dias por linguagem com `trending`
- **Dashboards de Triagem** — Traga issues ou PRs abertos para seu board com autor, labels, contagem de comentários
- **Relatórios de Saúde OSS** — Agregue metadados de repositórios de vários projetos em scorecards
- **Contexto para LLM / Agentes** — Forneça dados estruturados e em tempo real do GitHub a workflows RAG e agênticos

### ❓ Perguntas Frequentes

**P: Preciso de um token do GitHub?**
R: Não. Funciona sem token, mas requisições não autenticadas são limitadas a 60 req/h por IP (IPs de datacenter compartilhados se esgotam rápido). Forneça um PAT em `githubToken` para elevar o limite a 5000 req/h e acessar repos privados. O token é armazenado como secret.

**P: Quais modos precisam de quais entradas?**
R: `repo-info`, `repo-issues` e `repo-prs` exigem `repoFullName` (`owner/repo`). `org-repos` exige `orgName`. `trending` usa o filtro opcional `language` e não precisa de nenhum.

**P: Quantas issues / PRs / repos posso buscar?**
R: Até `maxItems` (1–500, padrão 30) para `repo-issues`, `repo-prs` e `org-repos`. O actor pagina a API do GitHub em 100 por página até atingir o limite. `trending` retorna até 30 repos.

**P: O que conta como "em alta" (trending)?**
R: Repos criados nos últimos 7 dias, retornados pela busca do GitHub ordenados por estrelas (decrescente), opcionalmente filtrados por uma única `language`.

**P: Por que minha execução retornou um registro de diagnóstico em vez de dados?**
R: Em condições recuperáveis — entrada ausente/inválida, limite de taxa, token ausente/inválido, repo ou org não encontrado, ou zero resultados — o actor salva um registro de diagnóstico claramente identificado (`setup_status: "DIAGNOSTIC_GUIDE"`) com causas e remediações, encerra com sucesso e **não cobra**. Adicione um token ou corrija a entrada e rode de novo.

**P: Retorna issues / PRs fechados?**
R: Não. Tanto `repo-issues` quanto `repo-prs` consultam apenas itens abertos (`state=open`).

### 💰 Preços

Este actor usa precificação **Pay Per Event (PPE)** com um único evento:

| Evento | Quando dispara |
|---|---|
| `item-fetched` | Uma vez por item gravado no dataset (o número de registros retornados) |

Você é cobrado apenas pelos itens reais retornados. Execuções que caem em condição recuperável (entrada inválida, limite de taxa, não encontrado, zero resultados) emitem um registro de diagnóstico e **não** são cobradas. Veja as taxas por evento atuais na página do Apify Store: https://apify.com/viralanalyzer/mcp-github-integration

### 🔗 Actors Relacionados

- [GitHub Trending Scraper](https://apify.com/viralanalyzer/github-trending-scraper) — Feed de repositórios em alta
- [arXiv Paper Intelligence](https://apify.com/viralanalyzer/arxiv-paper-intelligence) — Metadados e busca de artigos acadêmicos
- [Reddit Scraper](https://apify.com/viralanalyzer/reddit-scraper) — Discussões de comunidades de desenvolvedores
- [TradingView Screener](https://apify.com/viralanalyzer/tradingview-screener) — Screening de mercado & técnico

### 📝 Changelog

#### v1.0 (Atual)

- ✅ Cinco modos: `repo-info`, `repo-issues`, `repo-prs`, `trending`, `org-repos`
- ✅ API REST oficial do GitHub (`api.github.com`, versão `2022-11-28`)
- ✅ Personal Access Token opcional (60 → 5000 req/h, acesso a repos privados)
- ✅ Paginação até `maxItems` (1–500) para issues, PRs, repos de org
- ✅ Trending = repos criados nos últimos 7 dias, ordenados por estrelas
- ✅ Guia de Diagnóstico em condições recuperáveis — nunca cobra PPE
- ✅ Cobrança PPE via `item-fetched` com owner-skip

# Actor input Schema

## `mode` (type: `string`):

What to extract: repo-info (single repo metadata), repo-issues (open issues), repo-prs (pull requests), trending (trending repos by language), or org-repos (all repos of an org).

## `repoFullName` (type: `string`):

Repository in owner/repo format. Required for repo-info, repo-issues, repo-prs modes. Example: microsoft/vscode.

## `orgName` (type: `string`):

GitHub organization slug. Required for org-repos mode. Example: apify.

## `language` (type: `string`):

Programming language filter for trending mode. Examples: python, javascript, typescript. Leave empty for all languages.

## `maxItems` (type: `integer`):

Maximum number of items to return (issues, PRs, repos). Range: 1 to 500.

## `githubToken` (type: `string`):

Optional GitHub PAT to increase rate limit from 60 to 5000 requests/hour and access private repos. Store as secret.

## Actor input object example

```json
{
  "mode": "repo-info",
  "repoFullName": "microsoft/vscode",
  "orgName": "apify",
  "language": "python",
  "maxItems": 30
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset of all results; each item follows the dataset schema.

# 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

```javascript
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 = {
    "mode": "repo-info",
    "repoFullName": "microsoft/vscode",
    "orgName": "apify",
    "language": "python",
    "maxItems": 30,
    "githubToken": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/mcp-github-integration").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

```python
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 = {
    "mode": "repo-info",
    "repoFullName": "microsoft/vscode",
    "orgName": "apify",
    "language": "python",
    "maxItems": 30,
    "githubToken": "",
}

# Run the Actor and wait for it to finish
run = client.actor("viralanalyzer/mcp-github-integration").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

```bash
echo '{
  "mode": "repo-info",
  "repoFullName": "microsoft/vscode",
  "orgName": "apify",
  "language": "python",
  "maxItems": 30,
  "githubToken": ""
}' |
apify call viralanalyzer/mcp-github-integration --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "GitHub REST API Integration Scraper (BYOC)",
        "description": "Scrape public/private repositories, issues, PRs, and trending charts from GitHub via official REST API (BYOC).",
        "version": "1.0",
        "x-build-id": "gVsNYPMllinuxoIpo"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/viralanalyzer~mcp-github-integration/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-viralanalyzer-mcp-github-integration",
                "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/viralanalyzer~mcp-github-integration/runs": {
            "post": {
                "operationId": "runs-sync-viralanalyzer-mcp-github-integration",
                "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/viralanalyzer~mcp-github-integration/run-sync": {
            "post": {
                "operationId": "run-sync-viralanalyzer-mcp-github-integration",
                "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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "repo-info",
                            "repo-issues",
                            "repo-prs",
                            "trending",
                            "org-repos"
                        ],
                        "type": "string",
                        "description": "What to extract: repo-info (single repo metadata), repo-issues (open issues), repo-prs (pull requests), trending (trending repos by language), or org-repos (all repos of an org).",
                        "default": "repo-info"
                    },
                    "repoFullName": {
                        "title": "Repository Full Name",
                        "type": "string",
                        "description": "Repository in owner/repo format. Required for repo-info, repo-issues, repo-prs modes. Example: microsoft/vscode."
                    },
                    "orgName": {
                        "title": "Organization Name",
                        "type": "string",
                        "description": "GitHub organization slug. Required for org-repos mode. Example: apify."
                    },
                    "language": {
                        "title": "Language (for trending)",
                        "type": "string",
                        "description": "Programming language filter for trending mode. Examples: python, javascript, typescript. Leave empty for all languages."
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of items to return (issues, PRs, repos). Range: 1 to 500.",
                        "default": 30
                    },
                    "githubToken": {
                        "title": "GitHub Personal Access Token (optional)",
                        "type": "string",
                        "description": "Optional GitHub PAT to increase rate limit from 60 to 5000 requests/hour and access private repos. Store as secret."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
