Gitea MCP Server
Servidor MCP de Gitea
Un servidor del Protocolo de Contexto de Modelo (MCP) listo para producción para una integración fluida con plataformas Gitea autohospedadas. Este servidor proporciona herramientas para crear repositorios y subir archivos preservando la estructura de directorios.
Guía de instalación y configuración
Esta guía proporciona instrucciones paso a paso para instalar y configurar el servidor MCP de Gitea, incluyendo la resolución de problemas comunes.
Related MCP server: Gitea MCP Tool
Características
Creación de repositorios: Crea nuevos repositorios en cualquier instancia de Gitea configurada
Subida de archivos: Sube archivos y carpetas preservando la estructura de directorios
Sincronización de proyectos: Sincroniza automáticamente proyectos completos para confirmaciones iniciales (solo archivos nuevos)
Actualizaciones avanzadas de archivos: Herramienta de actualización inteligente con resolución de conflictos para modificar archivos existentes
Soporte multi-instancia: Conéctate a múltiples instancias de Gitea simultáneamente
Limitación de tasa: Respeta los límites de tasa de la API por instancia
Procesamiento por lotes: Subida eficiente de archivos con tamaños de lote configurables
Registro completo: Registro estructurado con salida segura para la seguridad
Manejo de errores: Manejo robusto de errores con lógica de reintento
TypeScript: Seguridad de tipos completa y características modernas de JavaScript
Inicio rápido
Requisitos previos
Node.js 18.0.0 o superior
Acceso a una o más instancias de Gitea
Tokens de acceso personal para la autenticación
Instalación
Clona el repositorio:
git clone <repository-url>
cd gitea-mcpInstala las dependencias:
npm installConfigura las variables de entorno:
cp .env.example .env
# Edit .env with your Gitea instance detailsConstruye el proyecto:
npm run buildInicia el servidor:
npm run start:mcpResolución de problemas comunes
Compatibilidad con Windows
Si estás ejecutando en Windows, podrías encontrar problemas con el script de construcción. El script de construcción predeterminado utiliza el comando chmod, que no está disponible en Windows. El archivo package.json ha sido actualizado para usar un script de construcción compatible con Windows.
Configuración de registro
Si encuentras problemas con la configuración de registro, asegúrate de tener instalado el paquete pino-pretty:
npm install --save-dev pino-prettyVariables de entorno
El archivo .env debe contener la siguiente configuración:
# 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=3Asegúrate de reemplazar "https://your-gitea-instance.com" con la URL real de tu instancia de Gitea y "your-personal-access-token" con tu token de acceso personal de Gitea.
Ejecución con registro de depuración
Para ejecutar el servidor con el registro de depuración habilitado, utiliza el script start:mcp:
npm run start:mcpEste script establece NODE_ENV en development y LOG_LEVEL en debug antes de iniciar el servidor.
Configuración de desarrollo
Para el desarrollo con recarga en caliente:
npm run devConfiguración
Variables de entorno
Crea un archivo .env basado en .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=3Configuración de la instancia de Gitea
Cada instancia de Gitea requiere:
id: Identificador único para la instancia
name: Nombre legible por humanos para el registro
baseUrl: URL base de tu instancia de Gitea
token: Token de acceso personal con los permisos adecuados
timeout: Tiempo de espera de la solicitud en milisegundos (opcional)
rateLimit: Configuración de limitación de tasa (opcional)
Configuración del token de acceso personal
Inicia sesión en tu instancia de Gitea
Ve a Configuración → Aplicaciones → Tokens de acceso personal
Crea un nuevo token con estos permisos:
repo: Acceso completo al repositoriowrite:repository: Crear repositoriosread:user: Leer información del usuario
Configuración del cliente MCP
Claude Desktop
Añade a tu configuración de Claude Desktop:
{
"mcpServers": {
"gitea-mcp": {
"command": "node",
"args": ["./build/index.js"],
"cwd": "/path/to/gitea-mcp",
"env": {
"NODE_ENV": "production",
"LOG_LEVEL": "info"
}
}
}
}Otros clientes MCP
El servidor se comunica a través de stdio y sigue la especificación del protocolo MCP. Consulta la documentación de tu cliente para obtener detalles de configuración.
Herramientas disponibles
create_repository
Crea un nuevo repositorio en una instancia de Gitea especificada.
Parámetros:
instanceId(cadena, requerido): Identificador de la instancia de Giteaname(cadena, requerido): Nombre del repositoriodescription(cadena, opcional): Descripción del repositorioprivate(booleano, predeterminado: true): Hacer que el repositorio sea privadoautoInit(booleano, predeterminado: true): Inicializar con READMEdefaultBranch(cadena, predeterminado: "main"): Nombre de la rama predeterminada
Ejemplo:
{
"instanceId": "main",
"name": "my-new-repo",
"description": "A test repository",
"private": true,
"autoInit": true,
"defaultBranch": "main"
}upload_files
Sube múltiples archivos a un repositorio preservando la estructura de directorios.
Parámetros:
instanceId(cadena, requerido): Identificador de la instancia de Giteaowner(cadena, requerido): Nombre de usuario del propietario del repositoriorepository(cadena, requerido): Nombre del repositoriofiles(matriz, requerido): Matriz de objetos de archivo conpathycontentmessage(cadena, requerido): Mensaje de confirmaciónbranch(cadena, predeterminado: "main"): Rama de destinobatchSize(número, predeterminado: 10): Archivos por lote
Ejemplo:
{
"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 ⚠️ Solo confirmaciones iniciales
Descubre y sincroniza automáticamente un directorio de proyecto completo con un repositorio de Gitea respetando las reglas de .gitignore.
Importante: Esta herramienta está diseñada para subidas iniciales de proyectos y solo puede crear archivos nuevos. No puede actualizar archivos que ya existen en el repositorio. Para actualizar archivos existentes, utiliza la herramienta
sync_updateen su lugar.
Parámetros:
instanceId(cadena, requerido): Identificador de la instancia de Giteaowner(cadena, requerido): Nombre de usuario del propietario del repositoriorepository(cadena, requerido): Nombre del repositoriomessage(cadena, requerido): Mensaje de confirmación para la sincronizaciónbranch(cadena, predeterminado: "main"): Rama de destinoprojectPath(cadena, predeterminado: "."): Ruta al directorio del proyecto a sincronizardryRun(booleano, predeterminado: false): Previsualiza lo que se subiría sin subirlo realmenteincludeHidden(booleano, predeterminado: false): Incluir archivos ocultos (que comienzan con .)maxFileSize(número, predeterminado: 1048576): Tamaño máximo de archivo en bytes (1MB)textOnly(booleano, predeterminado: true): Solo subir archivos de texto (omitir archivos binarios)
Características:
Lee y aplica automáticamente las reglas de
.gitignoreIncluye valores predeterminados sensatos para patrones de ignorar comunes (node_modules/, .git/, etc.)
Escanea recursivamente el directorio del proyecto en busca de archivos elegibles
Heurística simple para detectar y opcionalmente omitir archivos binarios
Filtrado de tamaño para archivos grandes
Modo de prueba (dry run) para previsualizar cambios
Informes detallados de archivos descubiertos, filtrados, subidos y fallidos
Casos de uso:
Configuración inicial del proyecto y primera confirmación
Subir nuevos proyectos a repositorios vacíos
Subida masiva de archivos a nuevos repositorios
Ejemplo:
{
"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 ✨ Actualizaciones avanzadas de archivos
Herramienta avanzada para actualizar archivos existentes en un repositorio de Gitea con resolución inteligente de conflictos y detección de cambios.
Parámetros:
instanceId(cadena, requerido): Identificador de la instancia de Giteaowner(cadena, requerido): Nombre de usuario del propietario del repositoriorepository(cadena, requerido): Nombre del repositoriofiles(matriz, requerido): Matriz de objetos de operación de archivofiles[].path(cadena, requerido): Ruta del archivo en el repositorio (barras inclinadas hacia adelante)files[].content(cadena, condicional): Contenido del archivo (requerido para operaciones de agregar/modificar)files[].operation(cadena, requerido): Tipo de operación: 'add', 'modify' o 'delete'files[].sha(cadena, opcional): SHA actual del archivo (detectado automáticamente si no se proporciona)message(cadena, requerido): Mensaje de confirmación para todas las operacionesbranch(cadena, predeterminado: "main"): Rama de destinostrategy(cadena, predeterminado: "auto"): Estrategia de actualización: 'auto', 'batch' o 'individual'conflictResolution(cadena, predeterminado: "fail"): Manejo de conflictos: 'fail', 'overwrite' o 'skip'detectChanges(booleano, predeterminado: true): Comparar con archivos remotos para evitar actualizaciones innecesariasdryRun(booleano, predeterminado: false): Previsualizar operaciones sin realizar cambios
Características clave:
Uso inteligente de la API: Utiliza PUT para actualizaciones, POST para creaciones, DELETE para eliminaciones
Detección de cambios: Compara el contenido local frente al remoto para omitir actualizaciones innecesarias
Resolución automática de SHA: Obtiene automáticamente los valores SHA requeridos para las operaciones de actualización
Múltiples estrategias: Auto, lote (confirmación única) o individual (confirmaciones separadas)
Resolución de conflictos: Maneja casos donde los archivos remotos han cambiado desde la última sincronización
Operaciones mixtas: Puede manejar operaciones de creación, actualización y eliminación en una sola llamada
Modo de prueba (dry run): Previsualiza qué operaciones se realizarían sin hacer cambios
Tipos de operación:
add: Crear nuevos archivos (equivalente a la API POST)modify: Actualizar archivos existentes (utiliza la API PUT con SHA para la resolución de conflictos)delete: Eliminar archivos existentes (utiliza la API DELETE con SHA)
Opciones de estrategia:
auto: Elige inteligentemente el mejor enfoque basado en el recuento de archivos y los tipos de operaciónbatch: Realiza todas las operaciones en una sola confirmación utilizando la API de lotes de Giteaindividual: Realiza cada operación como una confirmación separada
Casos de uso:
Actualizar archivos de proyecto existentes
Modificaciones selectivas de archivos
Operaciones masivas de archivos (crear, actualizar, eliminar)
Actualizaciones incrementales del proyecto
Mantenimiento automatizado de archivos
Ejemplo:
{
"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
}Ejemplo de respuesta de prueba (dry run):
{
"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
}
]
}Guía de selección de herramientas
Cuándo usar cada herramienta:
create_repository: Crear nuevos repositoriossync_project: Subida inicial del proyecto a repositorios vacíos/nuevosupload_files: Subir archivos específicos con control total sobre el procesosync_update: Actualizar archivos existentes, crear archivos nuevos o eliminar archivos en repositorios existentes
Ejemplo de flujo de trabajo:
# 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 filesDesarrollo
Scripts
npm run build- Construir para producciónnpm run dev- Desarrollo con recarga en calientenpm start- Iniciar servidor de producciónnpm test- Ejecutar pruebasnpm run lint- Analizar código (lint)npm run format- Formatear códigonpm run type-check- Verificación de tipos de TypeScript
Estructura del proyecto
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.jsonAñadir nuevas herramientas
Crea la implementación de la herramienta en
src/tools/Añade la validación de esquema en
src/tools/schemas.tsRegistra la herramienta en
src/tools/index.tsAñade pruebas en
tests/unit/tools/
Despliegue
Docker
Construye y ejecuta con Docker:
# Build image
docker build -t gitea-mcp .
# Run container
docker run -d \
--name gitea-mcp \
--env-file .env \
gitea-mcpConsideraciones de producción
Utiliza variables de entorno o gestión de secretos para los tokens
Configura niveles de registro adecuados
Configura monitoreo y comprobaciones de salud
Utiliza gestores de procesos como PM2 para aplicaciones Node.js
Considera usar Docker o Kubernetes para la orquestación
Seguridad
Mejores prácticas
Almacena los tokens de forma segura utilizando variables de entorno o gestión de secretos
Utiliza los permisos mínimos requeridos para los tokens de acceso
Valida todos los parámetros de entrada
Registra eventos de seguridad sin exponer datos confidenciales
Utiliza HTTPS para todas las comunicaciones de la API de Gitea
Rota regularmente los tokens de acceso
Limitación de tasa
El servidor implementa la limitación de tasa por instancia de Gitea para respetar los límites de la API:
Predeterminado: 100 solicitudes por minuto por instancia
Configurable mediante
rateLimiten la configuración de la instanciaReintento automático con retroceso exponencial
Resolución de problemas
Problemas comunes
Autenticación fallida
Verifica que el token de acceso sea correcto y tenga los permisos requeridos
Comprueba que el token no haya caducado
Asegúrate de que la URL base sea correcta
Límite de tasa alcanzado
Reduce el tamaño del lote para las subidas de archivos
Ajusta la configuración de límite de tasa
Espera antes de reintentar las solicitudes
Fallos en la subida de archivos
Comprueba que el contenido del archivo sea válido
Verifica que las rutas de los archivos no contengan caracteres ilegales
Asegúrate de que el repositorio exista y tengas permisos de escritura
Registro
Habilita el registro de depuración para la resolución de problemas:
LOG_LEVEL=debug npm startComprobaciones de salud
Comprueba el estado del servidor:
curl -f http://localhost:8080/health || exit 1Contribución
Haz un fork del repositorio
Crea una rama de características
Realiza cambios con pruebas
Ejecuta linting y verificación de tipos
Envía una solicitud de extracción (pull request)
Licencia
Licencia MIT - consulta el archivo LICENSE para más detalles.
Soporte
Problemas de GitHub: Informa de errores y solicitudes de características
Documentación: Consulta el directorio docs/
Ejemplos: Consulta el directorio examples/
Construido con ❤️ para las comunidades de Gitea y MCP.
Ver también
[TranscriptionTools
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