Instance Configuration
Complete reference for configuring multiple GitLab instances.
Configuration Methods
1. Configuration File (Recommended)
Set GITLAB_INSTANCES_FILE to point to a YAML or JSON config file:
bash
GITLAB_INSTANCES_FILE=~/.config/gitlab-mcp/instances.yaml2. Environment Variable
Use GITLAB_INSTANCES for simpler setups:
bash
# Single URL
GITLAB_INSTANCES=https://gitlab.com
# Multiple URLs (space-separated)
GITLAB_INSTANCES="https://gitlab.com https://git.company.io"
# With OAuth credentials (url:clientId:clientSecret)
GITLAB_INSTANCES="https://gitlab.com:app_id https://git.company.io:app_id:secret"3. Legacy Single Instance
For backwards compatibility:
bash
GITLAB_API_URL=https://gitlab.com
GITLAB_TOKEN=glpat-your-tokenYAML Configuration
Full-featured YAML format:
yaml
# GitLab MCP Instances Configuration
# ~/.config/gitlab-mcp/instances.yaml
instances:
# Minimal configuration
- url: https://gitlab.com
label: "GitLab.com"
# Full configuration with OAuth
- url: https://git.company.io
label: "Corporate GitLab"
oauth:
clientId: "your_app_id"
clientSecret: "your_secret" # Optional for public apps
scopes: "api read_user" # Optional, default: api read_user
rateLimit:
maxConcurrent: 50 # Max parallel requests
queueSize: 200 # Max queued requests
queueTimeout: 30000 # Queue wait timeout (ms)
# Self-hosted with TLS skip (development only!)
- url: https://gitlab.dev.local
label: "Dev Instance"
insecureSkipVerify: true
rateLimit:
maxConcurrent: 20
# Global defaults (applied to all instances unless overridden)
defaults:
rateLimit:
maxConcurrent: 100
queueSize: 500
queueTimeout: 60000
oauth:
scopes: "api read_user"JSON Configuration
Equivalent JSON format:
json
{
"instances": [
{
"url": "https://gitlab.com",
"label": "GitLab.com"
},
{
"url": "https://git.company.io",
"label": "Corporate GitLab",
"oauth": {
"clientId": "your_app_id",
"clientSecret": "your_secret",
"scopes": "api read_user"
},
"rateLimit": {
"maxConcurrent": 50,
"queueSize": 200,
"queueTimeout": 30000
}
}
],
"defaults": {
"rateLimit": {
"maxConcurrent": 100,
"queueSize": 500,
"queueTimeout": 60000
}
}
}Configuration Schema
Instance Object
| Field | Type | Required | Description |
|---|---|---|---|
url | string | Yes | GitLab instance URL (e.g., https://gitlab.com) |
label | string | No | Human-readable name for UI |
oauth | object | No | OAuth configuration |
rateLimit | object | No | Rate limiting configuration |
insecureSkipVerify | boolean | No | Skip TLS verification (dev only!) |
OAuth Object
| Field | Type | Required | Description |
|---|---|---|---|
clientId | string | Yes | GitLab OAuth Application ID |
clientSecret | string | No | Client secret (for confidential apps) |
scopes | string | No | OAuth scopes (default: api read_user) |
RateLimit Object
| Field | Type | Default | Description |
|---|---|---|---|
maxConcurrent | number | 100 | Maximum parallel requests |
queueSize | number | 500 | Maximum queued requests |
queueTimeout | number | 60000 | Queue wait timeout in ms |
Defaults Object
| Field | Type | Description |
|---|---|---|
rateLimit | object | Default rate limit for all instances |
oauth | object | Default OAuth settings |
Environment Variable Formats
Simple URL
bash
GITLAB_INSTANCES=https://gitlab.comMultiple URLs
bash
# Space-separated
GITLAB_INSTANCES="https://gitlab.com https://git.company.io"
# Bash array syntax
GITLAB_INSTANCES=(
https://gitlab.com
https://git.company.io
)With OAuth Credentials
bash
# URL:clientId
GITLAB_INSTANCES="https://gitlab.com:app_123"
# URL:clientId:clientSecret
GITLAB_INSTANCES="https://git.company.io:app_456:secret_789"
# Mixed
GITLAB_INSTANCES="https://gitlab.com:app_123 https://git.company.io:app_456:secret_789"Configuration Priority
Configuration is loaded in this order:
GITLAB_INSTANCES_FILE- File path takes highest priorityGITLAB_INSTANCES- Environment variableGITLAB_API_URL- Legacy single-instance mode- Default (
https://gitlab.com) - If nothing else configured
Generating Sample Config
Generate a sample configuration file:
bash
# YAML format (default)
npx @structured-world/gitlab-mcp instances sample-config yaml
# JSON format
npx @structured-world/gitlab-mcp instances sample-config jsonValidation
Configuration is validated on startup using Zod schemas. Invalid configurations will produce clear error messages:
Error: Invalid instance configuration:
- instances[1].url: Invalid URL format
- instances[1].rateLimit.maxConcurrent: Expected number, received stringSecurity Considerations
Secrets in Config Files
WARNING
Never commit configuration files with secrets to version control!
Options for managing secrets:
- Environment variable substitution (if supported by your setup)
- Separate secrets file with restricted permissions
- Secret manager integration (HashiCorp Vault, AWS Secrets Manager, etc.)
File Permissions
Restrict access to configuration files:
bash
chmod 600 ~/.config/gitlab-mcp/instances.yamlTLS Verification
Only use insecureSkipVerify: true for development. In production, always use valid TLS certificates.
Related Documentation
- Multi-Instance Setup - Getting started guide
- Rate Limiting - Rate limiting details
- OAuth Setup - OAuth configuration guide
