Gitea MCP Server
Gitea MCP-Server
Ein produktionsbereiter Model Context Protocol (MCP)-Server für die nahtlose Integration mit selbst gehosteten Gitea-Plattformen. Dieser Server bietet Werkzeuge zum Erstellen von Repositories und zum Hochladen von Dateien unter Beibehaltung der Verzeichnisstruktur.
Installations- und Einrichtungsanleitung
Diese Anleitung bietet Schritt-für-Schritt-Anweisungen zur Installation und Konfiguration des Gitea MCP-Servers, einschließlich der Fehlerbehebung bei häufigen Problemen.
Related MCP server: Gitea MCP Tool
Funktionen
Repository-Erstellung: Erstellen Sie neue Repositories auf jeder konfigurierten Gitea-Instanz
Datei-Upload: Laden Sie Dateien und Ordner hoch, während die Verzeichnisstruktur erhalten bleibt
Projekt-Synchronisierung: Synchronisieren Sie automatisch ganze Projekte für initiale Commits (nur neue Dateien)
Erweiterte Dateiaktualisierungen: Intelligentes Update-Tool mit Konfliktlösung zum Ändern bestehender Dateien
Multi-Instanz-Unterstützung: Verbinden Sie sich gleichzeitig mit mehreren Gitea-Instanzen
Ratenbegrenzung: Respektiert API-Ratenbegrenzungen pro Instanz
Stapelverarbeitung: Effizienter Datei-Upload mit konfigurierbaren Stapelgrößen
Umfassende Protokollierung: Strukturierte Protokollierung mit sicherheitsrelevanter Ausgabe
Fehlerbehandlung: Robuste Fehlerbehandlung mit Wiederholungslogik
TypeScript: Volle Typsicherheit und moderne JavaScript-Funktionen
Schnellstart
Voraussetzungen
Node.js 18.0.0 oder höher
Zugriff auf eine oder mehrere Gitea-Instanzen
Persönliche Zugriffstoken für die Authentifizierung
Installation
Klonen Sie das Repository:
git clone <repository-url>
cd gitea-mcpInstallieren Sie die Abhängigkeiten:
npm installKonfigurieren Sie die Umgebungsvariablen:
cp .env.example .env
# Edit .env with your Gitea instance detailsErstellen Sie das Projekt:
npm run buildStarten Sie den Server:
npm run start:mcpFehlerbehebung bei häufigen Problemen
Windows-Kompatibilität
Wenn Sie Windows verwenden, könnten Probleme mit dem Build-Skript auftreten. Das Standard-Build-Skript verwendet den chmod-Befehl, der unter Windows nicht verfügbar ist. Die package.json wurde aktualisiert, um ein Windows-kompatibles Build-Skript zu verwenden.
Protokollierungskonfiguration
Wenn Sie Probleme mit der Protokollierungskonfiguration haben, stellen Sie sicher, dass das Paket pino-pretty installiert ist:
npm install --save-dev pino-prettyUmgebungsvariablen
Die .env-Datei sollte die folgende Konfiguration enthalten:
# Server Configuration
NODE_ENV=development
LOG_LEVEL=debug
# Gitea Configuration
# Replace with your Gitea instance URL and token
GITEA_INSTANCES=[{"id":"main","name":"Main Gitea Instance","baseUrl":"https://your-gitea-instance.com","token":"your-personal-access-token","timeout":30000,"rateLimit":{"requests":100,"windowMs":60000}}]
# Upload Configuration
MAX_FILE_SIZE=10485760
MAX_FILES=100
BATCH_SIZE=10
# Gitea API Configuration
GITEA_TIMEOUT=30000
GITEA_MAX_RETRIES=3Ersetzen Sie "https://your-gitea-instance.com" durch Ihre tatsächliche Gitea-Instanz-URL und "your-personal-access-token" durch Ihr persönliches Gitea-Zugriffstoken.
Ausführen mit Debug-Protokollierung
Um den Server mit aktivierter Debug-Protokollierung auszuführen, verwenden Sie das start:mcp-Skript:
npm run start:mcpDieses Skript setzt NODE_ENV auf development und LOG_LEVEL auf debug, bevor der Server gestartet wird.
Entwicklungseinrichtung
Für die Entwicklung mit Hot-Reloading:
npm run devKonfiguration
Umgebungsvariablen
Erstellen Sie eine .env-Datei basierend auf .env.example:
# Server Configuration
NODE_ENV=development
LOG_LEVEL=info
# Gitea Configuration
GITEA_INSTANCES='[
{
"id": "main",
"name": "Main Gitea Instance",
"baseUrl": "https://gitea.example.com",
"token": "your-personal-access-token",
"timeout": 30000,
"rateLimit": {
"requests": 100,
"windowMs": 60000
}
}
]'
# Upload Configuration
MAX_FILE_SIZE=10485760 # 10MB
MAX_FILES=100
BATCH_SIZE=10
# API Configuration
GITEA_TIMEOUT=30000
GITEA_MAX_RETRIES=3Gitea-Instanzkonfiguration
Jede Gitea-Instanz erfordert:
id: Eindeutige Kennung für die Instanz
name: Menschenlesbarer Name für die Protokollierung
baseUrl: Basis-URL Ihrer Gitea-Instanz
token: Persönliches Zugriffstoken mit entsprechenden Berechtigungen
timeout: Anforderungs-Timeout in Millisekunden (optional)
rateLimit: Konfiguration der Ratenbegrenzung (optional)
Einrichtung des persönlichen Zugriffstokens
Melden Sie sich bei Ihrer Gitea-Instanz an
Gehen Sie zu Einstellungen → Anwendungen → Persönliche Zugriffstoken
Erstellen Sie ein neues Token mit diesen Berechtigungen:
repo: Voller Repository-Zugriffwrite:repository: Repositories erstellenread:user: Benutzerinformationen lesen
MCP-Client-Konfiguration
Claude Desktop
Fügen Sie dies zu Ihrer Claude Desktop-Konfiguration hinzu:
{
"mcpServers": {
"gitea-mcp": {
"command": "node",
"args": ["./build/index.js"],
"cwd": "/path/to/gitea-mcp",
"env": {
"NODE_ENV": "production",
"LOG_LEVEL": "info"
}
}
}
}Andere MCP-Clients
Der Server kommuniziert über stdio und folgt der MCP-Protokollspezifikation. Informationen zur Konfiguration finden Sie in der Dokumentation Ihres Clients.
Verfügbare Werkzeuge
create_repository
Erstellen Sie ein neues Repository auf einer angegebenen Gitea-Instanz.
Parameter:
instanceId(Zeichenfolge, erforderlich): Gitea-Instanzkennungname(Zeichenfolge, erforderlich): Repository-Namedescription(Zeichenfolge, optional): Repository-Beschreibungprivate(Boolesch, Standard: true): Repository privat machenautoInit(Boolesch, Standard: true): Mit README initialisierendefaultBranch(Zeichenfolge, Standard: "main"): Standard-Branch-Name
Beispiel:
{
"instanceId": "main",
"name": "my-new-repo",
"description": "A test repository",
"private": true,
"autoInit": true,
"defaultBranch": "main"
}upload_files
Laden Sie mehrere Dateien in ein Repository hoch, während die Verzeichnisstruktur erhalten bleibt.
Parameter:
instanceId(Zeichenfolge, erforderlich): Gitea-Instanzkennungowner(Zeichenfolge, erforderlich): Benutzername des Repository-Besitzersrepository(Zeichenfolge, erforderlich): Repository-Namefiles(Array, erforderlich): Array von Datei-Objekten mitpathundcontentmessage(Zeichenfolge, erforderlich): Commit-Nachrichtbranch(Zeichenfolge, Standard: "main"): Ziel-BranchbatchSize(Zahl, Standard: 10): Dateien pro Stapel
Beispiel:
{
"instanceId": "main",
"owner": "username",
"repository": "my-repo",
"files": [
{
"path": "README.md",
"content": "# My Project\n\nProject description here."
},
{
"path": "src/index.js",
"content": "console.log('Hello, World!');"
}
],
"message": "Initial commit",
"branch": "main",
"batchSize": 5
}sync_project ⚠️ Nur initiale Commits
Entdecken und synchronisieren Sie automatisch ein gesamtes Projektverzeichnis mit einem Gitea-Repository unter Einhaltung der .gitignore-Regeln.
Wichtig: Dieses Werkzeug ist für initiale Projekt-Uploads konzipiert und kann nur neue Dateien erstellen. Es kann keine Dateien aktualisieren, die bereits im Repository vorhanden sind. Verwenden Sie zum Aktualisieren bestehender Dateien stattdessen das
sync_update-Werkzeug.
Parameter:
instanceId(Zeichenfolge, erforderlich): Gitea-Instanzkennungowner(Zeichenfolge, erforderlich): Benutzername des Repository-Besitzersrepository(Zeichenfolge, erforderlich): Repository-Namemessage(Zeichenfolge, erforderlich): Commit-Nachricht für die Synchronisierungbranch(Zeichenfolge, Standard: "main"): Ziel-BranchprojectPath(Zeichenfolge, Standard: "."): Pfad zum zu synchronisierenden ProjektverzeichnisdryRun(Boolesch, Standard: false): Vorschau dessen, was hochgeladen würde, ohne tatsächlich hochzuladenincludeHidden(Boolesch, Standard: false): Versteckte Dateien einbeziehen (beginnend mit .)maxFileSize(Zahl, Standard: 1048576): Maximale Dateigröße in Bytes (1MB)textOnly(Boolesch, Standard: true): Nur Textdateien hochladen (Binärdateien überspringen)
Funktionen:
Liest und wendet automatisch
.gitignore-Regeln anEnthält sinnvolle Standardwerte für gängige Ignorier-Muster (node_modules/, .git/, etc.)
Scannt rekursiv das Projektverzeichnis nach geeigneten Dateien
Einfache Heuristik zum Erkennen und optionalen Überspringen von Binärdateien
Größenfilterung für große Dateien
Dry-Run-Modus zur Vorschau von Änderungen
Detaillierte Berichterstattung über gefundene, gefilterte, hochgeladene und fehlgeschlagene Dateien
Anwendungsfälle:
Initiale Projekteinrichtung und erster Commit
Hochladen neuer Projekte in leere Repositories
Massen-Upload von Dateien in neue Repositories
Beispiel:
{
"instanceId": "main",
"owner": "username",
"repository": "my-project",
"message": "Initial project sync",
"branch": "main",
"projectPath": "./my-app",
"dryRun": false,
"includeHidden": false,
"maxFileSize": 2097152,
"textOnly": true
}sync_update ✨ Erweiterte Dateiaktualisierungen
Erweitertes Werkzeug zum Aktualisieren bestehender Dateien in einem Gitea-Repository mit intelligenter Konfliktlösung und Änderungserkennung.
Parameter:
instanceId(Zeichenfolge, erforderlich): Gitea-Instanzkennungowner(Zeichenfolge, erforderlich): Benutzername des Repository-Besitzersrepository(Zeichenfolge, erforderlich): Repository-Namefiles(Array, erforderlich): Array von Dateioperations-Objektenfiles[].path(Zeichenfolge, erforderlich): Dateipfad im Repository (Schrägstriche)files[].content(Zeichenfolge, bedingt): Dateiinhalt (erforderlich für Hinzufügen/Ändern-Operationen)files[].operation(Zeichenfolge, erforderlich): Operationstyp: 'add', 'modify' oder 'delete'files[].sha(Zeichenfolge, optional): Aktueller Datei-SHA (wird automatisch erkannt, falls nicht angegeben)message(Zeichenfolge, erforderlich): Commit-Nachricht für alle Operationenbranch(Zeichenfolge, Standard: "main"): Ziel-Branchstrategy(Zeichenfolge, Standard: "auto"): Update-Strategie: 'auto', 'batch' oder 'individual'conflictResolution(Zeichenfolge, Standard: "fail"): Konfliktbehandlung: 'fail', 'overwrite' oder 'skip'detectChanges(Boolesch, Standard: true): Vergleich mit Remote-Dateien, um unnötige Updates zu vermeidendryRun(Boolesch, Standard: false): Vorschau der Operationen ohne Änderungen vorzunehmen
Hauptfunktionen:
Intelligente API-Nutzung: Verwendet PUT für Updates, POST für Erstellungen, DELETE für Entfernungen
Änderungserkennung: Vergleicht lokale mit Remote-Inhalten, um unnötige Updates zu überspringen
Automatische SHA-Auflösung: Ruft automatisch erforderliche SHA-Werte für Update-Operationen ab
Mehrere Strategien: Auto, Batch (einzelner Commit) oder individuell (separate Commits)
Konfliktlösung: Behandelt Fälle, in denen sich Remote-Dateien seit der letzten Synchronisierung geändert haben
Gemischte Operationen: Kann Erstellungs-, Update- und Löschvorgänge in einem einzigen Aufruf verarbeiten
Dry-Run-Modus: Vorschau der Operationen, die durchgeführt würden, ohne Änderungen vorzunehmen
Operationstypen:
add: Neue Dateien erstellen (entspricht POST-API)modify: Bestehende Dateien aktualisieren (verwendet PUT-API mit SHA zur Konfliktlösung)delete: Bestehende Dateien entfernen (verwendet DELETE-API mit SHA)
Strategieoptionen:
auto: Wählt intelligent den besten Ansatz basierend auf Dateianzahl und Operationstypenbatch: Führt alle Operationen in einem einzigen Commit unter Verwendung der Gitea-Batch-API ausindividual: Führt jede Operation als separaten Commit aus
Anwendungsfälle:
Aktualisieren bestehender Projektdateien
Selektive Dateiänderungen
Massen-Dateioperationen (Erstellen, Aktualisieren, Löschen)
Inkrementelle Projektaktualisierungen
Automatisierte Dateiwartung
Beispiel:
{
"instanceId": "main",
"owner": "username",
"repository": "my-project",
"files": [
{
"path": "README.md",
"content": "# Updated Project\n\nThis is an updated version of the project.",
"operation": "modify"
},
{
"path": "src/new-feature.js",
"content": "// New feature implementation\nfunction newFeature() {\n return 'Hello, World!';\n}",
"operation": "add"
},
{
"path": "old-file.txt",
"operation": "delete"
}
],
"message": "Update documentation and add new feature",
"branch": "main",
"strategy": "auto",
"detectChanges": true,
"dryRun": false
}Dry-Run-Beispielantwort:
{
"dryRun": true,
"strategy": "individual",
"summary": {
"discovered": 3,
"analyzed": 3,
"needsUpdate": 2,
"processed": 0,
"succeeded": 0,
"failed": 0,
"skipped": 0
},
"filesNeedingUpdate": [
{
"path": "README.md",
"operation": "modify",
"hasRemoteSha": true
},
{
"path": "src/new-feature.js",
"operation": "add",
"hasRemoteSha": false
}
]
}Leitfaden zur Werkzeugauswahl
Wann welches Werkzeug zu verwenden ist:
create_repository: Neue Repositories erstellensync_project: Initialer Projekt-Upload in leere/neue Repositoriesupload_files: Spezifische Dateien mit voller Kontrolle über den Prozess hochladensync_update: Bestehende Dateien aktualisieren, neue Dateien erstellen oder Dateien in bestehenden Repositories löschen
Workflow-Beispiel:
# 1. Create a new repository
create_repository → "my-new-project"
# 2. Initial upload of all project files
sync_project → Upload entire project structure
# 3. Later updates to specific files
sync_update → Modify README.md, add new features, delete old filesEntwicklung
Skripte
npm run build- Für Produktion bauennpm run dev- Entwicklung mit Hot-Reloadingnpm start- Produktionsserver startennpm test- Tests ausführennpm run lint- Code lintennpm run format- Code formatierennpm run type-check- TypeScript-Typüberprüfung
Projektstruktur
gitea-mcp/
├── src/
│ ├── index.ts # Main server entry point
│ ├── config/ # Configuration management
│ ├── gitea/ # Gitea API client
│ ├── tools/ # MCP tool implementations
│ ├── services/ # Business logic services
│ ├── utils/ # Utilities (logging, errors, etc.)
│ └── types/ # TypeScript type definitions
├── build/ # Compiled JavaScript
├── docs/ # Documentation
└── package.jsonHinzufügen neuer Werkzeuge
Werkzeugimplementierung in
src/tools/erstellenSchema-Validierung in
src/tools/schemas.tshinzufügenWerkzeug in
src/tools/index.tsregistrierenTests in
tests/unit/tools/hinzufügen
Bereitstellung
Docker
Bauen und ausführen mit Docker:
# Build image
docker build -t gitea-mcp .
# Run container
docker run -d \
--name gitea-mcp \
--env-file .env \
gitea-mcpÜberlegungen zur Produktion
Verwenden Sie Umgebungsvariablen oder Secrets-Management für Token
Konfigurieren Sie geeignete Protokollierungsebenen
Richten Sie Überwachung und Gesundheitsprüfungen ein
Verwenden Sie Prozessmanager wie PM2 für Node.js-Anwendungen
Erwägen Sie die Verwendung von Docker oder Kubernetes für die Orchestrierung
Sicherheit
Best Practices
Speichern Sie Token sicher mithilfe von Umgebungsvariablen oder Secrets-Management
Verwenden Sie minimal erforderliche Berechtigungen für Zugriffstoken
Validieren Sie alle Eingabeparameter
Protokollieren Sie Sicherheitsereignisse, ohne sensible Daten preiszugeben
Verwenden Sie HTTPS für alle Gitea-API-Kommunikationen
Rotieren Sie regelmäßig Zugriffstoken
Ratenbegrenzung
Der Server implementiert eine Ratenbegrenzung pro Gitea-Instanz, um API-Limits zu respektieren:
Standard: 100 Anfragen pro Minute pro Instanz
Konfigurierbar über
rateLimitin der InstanzkonfigurationAutomatischer Wiederholungsversuch mit exponentiellem Backoff
Fehlerbehebung
Häufige Probleme
Authentifizierung fehlgeschlagen
Überprüfen Sie, ob das Zugriffstoken korrekt ist und die erforderlichen Berechtigungen besitzt
Prüfen Sie, ob das Token abgelaufen ist
Stellen Sie sicher, dass die Basis-URL korrekt ist
Ratenbegrenzung erreicht
Reduzieren Sie die Stapelgröße für Datei-Uploads
Passen Sie die Konfiguration der Ratenbegrenzung an
Warten Sie, bevor Sie Anfragen wiederholen
Datei-Upload fehlgeschlagen
Überprüfen Sie, ob der Dateiinhalt gültig ist
Stellen Sie sicher, dass Dateipfade keine illegalen Zeichen enthalten
Stellen Sie sicher, dass das Repository existiert und Sie Schreibberechtigungen
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- -licenseBqualityNot gradedmaintenanceEnables comprehensive Git and GitHub operations through 30 DevOps tools including repository management, file operations, workflows, and advanced Git features. Provides complete Git functionality without external dependencies for seamless integration with Gitea and GitHub platforms.18819
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with Gitea repositories through intelligent tools for issue/PR management, workflow analysis, compliance checking, and content generation, plus 200+ CLI commands for complete CRUD operations.221586MIT
- AlicenseNot gradedqualityDmaintenanceEnables project management and repository operations on GitLab through the GitLab API, including file operations, branch management, issue creation, merge requests, and repository forking with support for both GitLab.com and self-hosted instances.5,525Apache 2.0
- AlicenseAqualityAmaintenanceAn MCP server providing comprehensive Gitea API coverage with 186 tools for managing repositories, issues, pull requests, and CI/CD workflows. It enables autonomous AI agents to perform complex development and administrative tasks directly through a Gitea instance.7MIT
Related MCP Connectors
Connect AI assistants to your GitHub-hosted Obsidian vault to seamlessly access, search, and analy…
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Edit your Overleaf LaTeX projects from Claude and ChatGPT; every change is a real Git commit.
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MushroomFleet/gitea-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server