docs: rewrite contributor contract for the full-access model

This commit is contained in:
Latte committed 2026-10-14 15:40:37 +02:00
1 parent b82e2866cb
commit c246f5c267
3 files changed
+217 -308

No files matched your search

+57 -97
View File
@@ -1,100 +1,60 @@
# This example targets the public HTTP/OAuth server. For the LOCAL stdio server
# (`uvx aegis-gitea-mcp`) you only need GITEA_URL and GITEA_TOKEN; OAuth and the
# API-key gate are off automatically. See docs/local-quickstart.md.
# AegisGitea MCP configuration. Copy to .env and fill in. All names are
# case-insensitive. Never commit a real .env.
# Runtime environment
ENVIRONMENT=production
# Gitea OAuth/OIDC resource server
GITEA_URL=https://git.hiddenden.cafe
# OAuth mode (recommended and required for per-user repository isolation)
OAUTH_MODE=true
GITEA_OAUTH_CLIENT_ID=your-gitea-oauth-client-id
GITEA_OAUTH_CLIENT_SECRET=your-gitea-oauth-client-secret
# Server secret used to HMAC-sign the OAuth proxy state parameter.
# Required when OAUTH_MODE=true; must be at least 32 characters.
# Generate with: openssl rand -hex 32
OAUTH_STATE_SECRET=
# Optional explicit audience override; defaults to GITEA_OAUTH_CLIENT_ID
OAUTH_EXPECTED_AUDIENCE=
# OIDC discovery and JWKS cache TTL
OAUTH_CACHE_TTL_SECONDS=300
# Where dynamically registered OAuth clients (RFC 7591 /register) are stored.
# This file MUST live on a writable, persistent volume. The default below is
# mounted as the `aegis-mcp-data` volume in docker-compose; if you run the
# container read-only without that volume the OAuth flow returns 500 because the
# directory is not writable. Point this at any writable path if you deploy
# differently.
DCR_STORAGE_PATH=/var/lib/aegis-mcp/dcr_clients.json
# MCP server configuration
MCP_HOST=127.0.0.1
MCP_PORT=8080
# Public, externally-reachable base URL of THIS MCP server (no trailing slash).
# Used to build OAuth metadata and the /oauth/callback URL behind a reverse proxy.
# This is the host you give to Claude (its MCP URL is PUBLIC_BASE_URL + /mcp).
PUBLIC_BASE_URL=https://gitea-mcp.hiddenden.cafe
ALLOW_INSECURE_BIND=false
# Logging / observability
LOG_LEVEL=INFO
AUDIT_LOG_PATH=/var/log/aegis-mcp/audit.log
METRICS_ENABLED=true
EXPOSE_ERROR_DETAILS=false
STARTUP_VALIDATE_GITEA=true
# Authentication failure controls
MAX_AUTH_FAILURES=5
AUTH_FAILURE_WINDOW=300
# Request rate limiting
RATE_LIMIT_PER_MINUTE=60
TOKEN_RATE_LIMIT_PER_MINUTE=120
# Tool output limits
MAX_FILE_SIZE_BYTES=1048576
MAX_TOOL_RESPONSE_ITEMS=200
MAX_TOOL_RESPONSE_CHARS=20000
REQUEST_TIMEOUT_SECONDS=30
# Security controls
SECRET_DETECTION_MODE=mask # off|mask|block
POLICY_FILE_PATH=policy.yaml
# Write mode (disabled by default)
WRITE_MODE=false
WRITE_REPOSITORY_WHITELIST=
WRITE_ALLOW_ALL_TOKEN_REPOS=false
# Raw API dispatch (gitea_request escape hatch). See docs/raw-api.md.
# gitea_request can call any Gitea REST endpoint (method + path). It is still
# subject to policy.yaml, WRITE_MODE + the write whitelist, and a built-in
# admin/credential denylist. Set RAW_API_ENABLED=false to remove the tool's
# ability to dispatch entirely.
RAW_API_ENABLED=true
# Allow gitea_request to reach admin/credential surfaces (/admin, *tokens*,
# *secrets*, *hooks*, *keys*, applications/oauth2, runner registration tokens).
# Even with this enabled, admin endpoints additionally require the signed-in user
# to be a verified Gitea site administrator. Leave false unless you fully
# understand the exposure.
RAW_API_ALLOW_SENSITIVE=false
# Automation mode (disabled by default)
AUTOMATION_ENABLED=false
AUTOMATION_SCHEDULER_ENABLED=false
AUTOMATION_STALE_DAYS=30
# Service PAT for Gitea REST execution (recommended in OAuth mode).
# Gitea's OIDC access tokens carry only openid/profile/email and CANNOT call the
# repository REST API, so without this most tools fail. Set GITEA_TOKEN to a
# Personal Access Token from a DEDICATED bot account with least privilege:
# - scope: read:repository (add write:repository only if WRITE_MODE=true)
# The user's OAuth identity is still authoritative: before every repository call
# the server checks that the signed-in user has permission on the target repo and
# denies it otherwise — the PAT only performs the API call after that check.
# --- Gitea -------------------------------------------------------------------
# Base URL of your Gitea instance. A trailing /api/v1 is accepted and removed.
GITEA_URL=https://gitea.example.com
# Token used for stdio and for admin-token mode on HTTP. Create it in Gitea under
# Settings > Applications. Its scopes bound what this server can do.
GITEA_TOKEN=
# API-key mode only (used when OAUTH_MODE=false). Leave unset in OAuth mode.
# MCP_API_KEYS=
# AUTH_ENABLED=true
# --- Transport ---------------------------------------------------------------
# stdio (default) or http
MCP_TRANSPORT=stdio
MCP_HOST=127.0.0.1
MCP_PORT=8080
MCP_PATH=/mcp
# Static bearer token for the HTTP endpoint (admin identity). At least 32
# characters. Generate with: openssl rand -hex 32
MCP_BEARER_TOKEN=
# Public base URL of this server behind a reverse proxy (https unless loopback).
PUBLIC_BASE_URL=
# Extra Host header values accepted behind a reverse proxy (comma separated).
ALLOWED_HOSTS=
# --- Per-user OAuth (HTTP only) -----------------------------------------------
OAUTH_ENABLED=false
GITEA_OAUTH_CLIENT_ID=
GITEA_OAUTH_CLIENT_SECRET=
# Encrypts stored user tokens. At least 32 characters. Generate with:
# openssl rand -hex 32
TOKEN_ENCRYPTION_KEY=
# Granular Gitea scopes only (read:/write: activitypub, admin, issue, misc,
# notification, organization, package, repository, user). Unknown values are rejected.
OAUTH_SCOPES=write:activitypub,write:admin,write:issue,write:misc,write:notification,write:organization,write:package,write:repository,write:user
# --- State --------------------------------------------------------------------
# Token store and audit log live here.
DATA_DIR=~/.local/state/aegis-gitea-mcp
# Defaults to DATA_DIR/audit.log
AUDIT_LOG_PATH=
# --- Tool exposure (everything is enabled by default) ---------------------------
# Expose only GET operations.
READ_ONLY=false
# Comma separated domains: admin, repo, issue, pull, release, wiki, org, team,
# user, actions, hook, package, notification, misc, or all.
TOOLSETS=all
# Comma separated tool names to hide, e.g. gitea_repo_delete
DISABLED_TOOLS=
# --- Limits and safety ----------------------------------------------------------
REQUEST_TIMEOUT_SECONDS=30
MAX_TOOL_RESPONSE_ITEMS=200
MAX_TOOL_RESPONSE_CHARS=60000
MAX_BINARY_BYTES=5242880
# off, mask or block
SECRET_DETECTION_MODE=mask
LOG_LEVEL=INFO
EXPOSE_ERROR_DETAILS=false
RATE_LIMIT_PER_MINUTE=120