The split is the thing to get right: sync_project can only create files, so pointing it at a repository that already has them changes nothing. sync_update is the one with SHA-based conflict resolution, change detection and a dry run, which makes it the tool for ongoing work.
An MCP server for self-hosted Gitea instances. It creates repositories and uploads files while preserving directory structure, across several Gitea instances at once.
- create_repository — a new repository on any configured instance, private and auto-initialized by default
- upload_files — many files in one commit, directory structure preserved, in configurable batches
- sync_project — discover and push a whole project directory, respecting .gitignore, with a dry-run option
- sync_update — add, modify or delete files with SHA-based conflict resolution and change detection
- Conflict handling you choose: fail, overwrite or skip
- Several Gitea instances side by side, each with its own token and rate limit
Node.js 18.0.0 or higher and a personal access token per instance. Instances are configured as JSON in GITEA_INSTANCES, each with an id, base URL, token, timeout and rate limit. Clone, npm install, npm run build, then npm run start:mcp.
Build from source — clone the repository and build it, then point your client at the binary
