mcpmark / docs /mcp /github.md
haochengsama's picture
Add files using upload-large-folder tool
a2ec7b6 verified
|
Raw
History Blame Contribute Delete
5.94 kB
# GitHub
This guide walks you through preparing your GitHub environment for MCPMark and authenticating the CLI tools with support for **token pooling** to mitigate rate limits.
## 1 · Prepare An Evaluation Organization in Github
1. **Create a free GitHub Organization**
- In GitHub, click your avatar → **Your organizations****New organization**.
- We recommend a name like `mcpmark-eval-xxx`. (Check if there is a conflict with other organization names.)
- This keeps all benchmark repositories isolated from your personal and work code.
- [![Create Org](https://i.postimg.cc/CxqJkRnj/github-create-org.png)](https://postimg.cc/k27xdXc4)
2. **Create Multiple GitHub Accounts (Recommended for Rate Limit Relief)**
To effectively distribute API load and avoid rate limiting, we recommend creating **2-4 additional GitHub accounts**:
- Create new GitHub accounts (e.g., `your-name-eval-1`, `your-name-eval-2`, etc.)
- **Important**: Add all these accounts as **Owners** to your evaluation organization
- This allows the token pooling system to distribute requests across multiple accounts
3. **Generate Fine-Grained Personal Access Tokens (PATs) for Each Account**
**Repeat the following process for each GitHub account (including your main account):**
- Navigate to *Settings → Developer settings → Personal access tokens → Fine-grained tokens*
- Click **Generate new token**, select the evaluation organization you created
- [![Create Token](https://i.postimg.cc/Z5SjPT82/github-create-token.png)](https://postimg.cc/Mv9yqJrm)
- Give the token a descriptive name (e.g., *MCPMark Eval Token - Account 1*)
- Under **Repository permissions** and **Organization permissions**, enable **All permissions** (read and write if applicable)
- [![Token Permissions](https://i.postimg.cc/nc81ZHPr/github-token-permissions.png)](https://postimg.cc/14HFrZP1)
- Copy the generated token and save it safely — you'll need all tokens for the next step
4. **Configure Token Pooling in `.mcp_env`**
In your project root, edit (or create) the `.mcp_env` file and add your tokens:
**For single token (Basic setup):**
```env
## GitHub - Single Token Configuration
GITHUB_TOKENS="your-single-token-here"
GITHUB_EVAL_ORG="your-eval-org-name"
```
**For multiple tokens (Recommended for handling rate limits):**
```env
## GitHub - Token Pooling Configuration
GITHUB_TOKENS="token1,token2,token3,token4"
GITHUB_EVAL_ORG="your-eval-org-name"
```
**Important Notes:**
- Replace `token1,token2,token3,token4` with your actual tokens (comma-separated, no spaces)
- **2-4 tokens** is recommended for optimal rate limit distribution
- All tokens must have **the same permissions** on the evaluation organization
- The system automatically rotates between tokens to distribute API load
---
## 2 · Download the Sample Repository State
We have pre-exported several popular open-source repositories along with curated Issues and PRs.
1. Download the archive from [Google Drive](https://drive.google.com/drive/folders/16bFDjdtqJYzYJlqKcjKBGomo8DwOhWcN?usp=drive_link).
2. Extract it so that the directory `./github_state/` appears in the project root:
```bash
mkdir -p github_state
unzip github_state.zip -d ./github_state
```
---
## 3 · Add New Repositories (Optional)
If you want to benchmark additional repositories:
1. Export the desired repository state:
```bash
python -m src.mcp_services.github.repo_exporter --source_repo_url owner/name --max-issues 20 --max-pulls 5
```
2. Open `src/mcp_services/github/state_manager.py` and add a new entry to `self.initial_state_mapping` pointing to the exported folder.
---
## 4 · GitHub Rate Limits & Token Pooling Benefits
### Understanding Rate Limits
Fine-grained tokens are subject to GitHub API rate limits:
- **Read operations**: 5,000 requests per hour per token
- **General write operations**: 80 writes per minute and 500 writes per hour per token
- **Content creation (Issues, PRs, Comments)**: **500 requests per hour per token** (Secondary Rate Limit)
### How Token Pooling Helps
With **token pooling**, MCPMark automatically:
- **Distributes requests** across multiple tokens to multiply your rate limits
- **Rotates tokens** for each task execution to balance load
- **Handles rate limit failures** by trying the next available token
- **Ensures consistency** between agent execution and verification
### Example: Rate Limit Multiplication
**Read Operations:**
- **Single token**: 5,000 requests/hour
- **4 tokens**: ~20,000 requests/hour total capacity
**Content Creation (Critical for MCPMark):**
- **Single token**: 500 content creation requests/hour
- **4 tokens**: ~2,000 content creation requests/hour total capacity
- **Automatic failover**: If one token hits limits, others continue working
This dramatically improves evaluation performance, especially for large task batches or frequent testing cycles. **The content creation limit is often the bottleneck**, making token pooling essential for efficient evaluations.
### Repository Limits
MCPMark places a cap on the number of PRs and issues (≤ 50 in total) per repository to ensure reasonable evaluation times and to stay within rate limits.
## 2. Running Github Tasks
1. Configure environment variables: make sure `GITHUB_TOKENS` and `GITHUB_EVAL_ORG` are properly set in `.mcp_env`.
2. For single task or task group, run
```bash
python -m pipeline --exp-name EXPNAME --mcp github --tasks GITHUBTASK --models MODEL --k K
```
Here *EXPNAME* refers to customized experiment name, *GITHUBTASK* refers to the github task or task group selected (see [Task Page](../datasets/task.md) for specific task information), *MODEL* refers to the selected model (see [Introduction Page](../introduction.md) for model supported), *K* refers to the time of independent experiments.