Gitea MCP Server
Gitea MCP 서버
자체 호스팅 Gitea 플랫폼과의 원활한 통합을 위한 프로덕션급 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버는 디렉터리 구조를 유지하면서 저장소를 생성하고 파일을 업로드하는 도구를 제공합니다.
설치 및 설정 가이드
이 가이드는 일반적인 문제 해결을 포함하여 Gitea MCP 서버를 설치하고 구성하는 단계별 지침을 제공합니다.
Related MCP server: Gitea MCP Tool
기능
저장소 생성: 구성된 모든 Gitea 인스턴스에 새 저장소 생성
파일 업로드: 디렉터리 구조를 유지하면서 파일 및 폴더 업로드
프로젝트 동기화: 초기 커밋을 위해 전체 프로젝트 자동 동기화 (새 파일만)
고급 파일 업데이트: 기존 파일 수정을 위한 충돌 해결 기능이 포함된 스마트 업데이트 도구
다중 인스턴스 지원: 여러 Gitea 인스턴스에 동시에 연결
속도 제한: 인스턴스별 API 속도 제한 준수
일괄 처리: 구성 가능한 일괄 처리 크기로 효율적인 파일 업로드
포괄적인 로깅: 보안이 확보된 출력과 함께 구조화된 로깅
오류 처리: 재시도 로직을 포함한 강력한 오류 처리
TypeScript: 완전한 타입 안전성 및 최신 JavaScript 기능
빠른 시작
사전 요구 사항
Node.js 18.0.0 이상
하나 이상의 Gitea 인스턴스에 대한 액세스 권한
인증을 위한 개인 액세스 토큰
설치
저장소 복제:
git clone <repository-url>
cd gitea-mcp종속성 설치:
npm install환경 변수 구성:
cp .env.example .env
# Edit .env with your Gitea instance details프로젝트 빌드:
npm run build서버 시작:
npm run start:mcp일반적인 문제 해결
Windows 호환성
Windows에서 실행 중인 경우 빌드 스크립트와 관련된 문제가 발생할 수 있습니다. 기본 빌드 스크립트는 Windows에서 사용할 수 없는 chmod 명령을 사용합니다. package.json은 Windows 호환 빌드 스크립트를 사용하도록 업데이트되었습니다.
로깅 구성
로깅 구성에 문제가 발생하는 경우 pino-pretty 패키지가 설치되어 있는지 확인하십시오:
npm install --save-dev pino-pretty환경 변수
.env 파일에는 다음 구성이 포함되어야 합니다:
# 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=3"https://your-gitea-instance.com"을 실제 Gitea 인스턴스 URL로, "your-personal-access-token"을 Gitea 개인 액세스 토큰으로 바꾸십시오.
디버그 로깅으로 실행
디버그 로깅을 활성화하여 서버를 실행하려면 start:mcp 스크립트를 사용하십시오:
npm run start:mcp이 스크립트는 서버를 시작하기 전에 NODE_ENV를 development로, LOG_LEVEL을 debug로 설정합니다.
개발 설정
핫 리로딩을 포함한 개발 환경:
npm run dev구성
환경 변수
.env.example을 기반으로 .env 파일을 만듭니다:
# 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 인스턴스 구성
각 Gitea 인스턴스에는 다음이 필요합니다:
id: 인스턴스에 대한 고유 식별자
name: 로깅을 위한 사람이 읽을 수 있는 이름
baseUrl: Gitea 인스턴스의 기본 URL
token: 적절한 권한이 있는 개인 액세스 토큰
timeout: 요청 시간 제한(밀리초 단위, 선택 사항)
rateLimit: 속도 제한 구성(선택 사항)
개인 액세스 토큰 설정
Gitea 인스턴스에 로그인
설정(Settings) → 애플리케이션(Applications) → 개인 액세스 토큰(Personal Access Tokens)으로 이동
다음 권한으로 새 토큰 생성:
repo: 전체 저장소 액세스write:repository: 저장소 생성read:user: 사용자 정보 읽기
MCP 클라이언트 구성
Claude Desktop
Claude Desktop 구성에 추가:
{
"mcpServers": {
"gitea-mcp": {
"command": "node",
"args": ["./build/index.js"],
"cwd": "/path/to/gitea-mcp",
"env": {
"NODE_ENV": "production",
"LOG_LEVEL": "info"
}
}
}
}기타 MCP 클라이언트
서버는 stdio를 통해 통신하며 MCP 프로토콜 사양을 따릅니다. 구성 세부 정보는 클라이언트 설명서를 참조하십시오.
사용 가능한 도구
create_repository
지정된 Gitea 인스턴스에 새 저장소를 생성합니다.
매개변수:
instanceId(문자열, 필수): Gitea 인스턴스 식별자name(문자열, 필수): 저장소 이름description(문자열, 선택 사항): 저장소 설명private(불리언, 기본값: true): 저장소를 비공개로 설정autoInit(불리언, 기본값: true): README로 초기화defaultBranch(문자열, 기본값: "main"): 기본 브랜치 이름
예시:
{
"instanceId": "main",
"name": "my-new-repo",
"description": "A test repository",
"private": true,
"autoInit": true,
"defaultBranch": "main"
}upload_files
디렉터리 구조를 유지하면서 저장소에 여러 파일을 업로드합니다.
매개변수:
instanceId(문자열, 필수): Gitea 인스턴스 식별자owner(문자열, 필수): 저장소 소유자 사용자 이름repository(문자열, 필수): 저장소 이름files(배열, 필수):path와content를 포함하는 파일 객체 배열message(문자열, 필수): 커밋 메시지branch(문자열, 기본값: "main"): 대상 브랜치batchSize(숫자, 기본값: 10): 배치당 파일 수
예시:
{
"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 ⚠️ 초기 커밋 전용
.gitignore 규칙을 준수하면서 전체 프로젝트 디렉터리를 Gitea 저장소에 자동으로 검색하고 동기화합니다.
중요: 이 도구는 초기 프로젝트 업로드를 위해 설계되었으며 새 파일만 생성할 수 있습니다. 저장소에 이미 존재하는 파일은 업데이트할 수 없습니다. 기존 파일을 업데이트하려면
sync_update도구를 대신 사용하십시오.
매개변수:
instanceId(문자열, 필수): Gitea 인스턴스 식별자owner(문자열, 필수): 저장소 소유자 사용자 이름repository(문자열, 필수): 저장소 이름message(문자열, 필수): 동기화를 위한 커밋 메시지branch(문자열, 기본값: "main"): 대상 브랜치projectPath(문자열, 기본값: "."): 동기화할 프로젝트 디렉터리 경로dryRun(불리언, 기본값: false): 실제로 업로드하지 않고 업로드될 내용을 미리 보기includeHidden(불리언, 기본값: false): 숨김 파일 포함 ( . 으로 시작하는 파일)maxFileSize(숫자, 기본값: 1048576): 최대 파일 크기(바이트 단위, 1MB)textOnly(불리언, 기본값: true): 텍스트 파일만 업로드 (바이너리 파일 건너뛰기)
기능:
.gitignore규칙을 자동으로 읽고 적용일반적인 무시 패턴(node_modules/, .git/ 등)에 대한 합리적인 기본값 포함
프로젝트 디렉터리를 재귀적으로 스캔하여 적격 파일 찾기
바이너리 파일을 감지하고 선택적으로 건너뛰는 간단한 휴리스틱
대용량 파일에 대한 크기 필터링
변경 사항 미리 보기를 위한 드라이 런(Dry run) 모드
발견, 필터링, 업로드 및 실패한 파일에 대한 상세 보고
사용 사례:
초기 프로젝트 설정 및 첫 커밋
빈 저장소에 새 프로젝트 업로드
새 저장소에 대량 파일 업로드
예시:
{
"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 ✨ 고급 파일 업데이트
지능적인 충돌 해결 및 변경 사항 감지 기능을 갖춘 Gitea 저장소의 기존 파일 업데이트를 위한 고급 도구입니다.
매개변수:
instanceId(문자열, 필수): Gitea 인스턴스 식별자owner(문자열, 필수): 저장소 소유자 사용자 이름repository(문자열, 필수): 저장소 이름files(배열, 필수): 파일 작업 객체 배열files[].path(문자열, 필수): 저장소 내 파일 경로 (슬래시 사용)files[].content(문자열, 조건부): 파일 내용 (추가/수정 작업에 필수)files[].operation(문자열, 필수): 작업 유형: 'add', 'modify', 또는 'delete'files[].sha(문자열, 선택 사항): 현재 파일 SHA (제공되지 않으면 자동 감지)message(문자열, 필수): 모든 작업에 대한 커밋 메시지branch(문자열, 기본값: "main"): 대상 브랜치strategy(문자열, 기본값: "auto"): 업데이트 전략: 'auto', 'batch', 또는 'individual'conflictResolution(문자열, 기본값: "fail"): 충돌 처리: 'fail', 'overwrite', 또는 'skip'detectChanges(불리언, 기본값: true): 불필요한 업데이트를 방지하기 위해 원격 파일과 비교dryRun(불리언, 기본값: false): 변경 사항을 적용하지 않고 작업 미리 보기
주요 기능:
스마트 API 사용: 업데이트에는 PUT, 생성에는 POST, 삭제에는 DELETE 사용
변경 사항 감지: 로컬과 원격 콘텐츠를 비교하여 불필요한 업데이트 건너뛰기
자동 SHA 확인: 업데이트 작업에 필요한 SHA 값을 자동으로 가져오기
다중 전략: 자동, 일괄(단일 커밋), 또는 개별(별도 커밋)
충돌 해결: 마지막 동기화 이후 원격 파일이 변경된 경우 처리
혼합 작업: 단일 호출로 생성, 업데이트 및 삭제 작업 처리 가능
드라이 런 모드: 변경 사항을 적용하지 않고 수행될 작업 미리 보기
작업 유형:
add: 새 파일 생성 (POST API와 동일)modify: 기존 파일 업데이트 (충돌 해결을 위해 SHA와 함께 PUT API 사용)delete: 기존 파일 제거 (SHA와 함께 DELETE API 사용)
전략 옵션:
auto: 파일 수와 작업 유형에 따라 최적의 접근 방식을 지능적으로 선택batch: Gitea의 배치 API를 사용하여 단일 커밋으로 모든 작업 수행individual: 각 작업을 별도의 커밋으로 수행
사용 사례:
기존 프로젝트 파일 업데이트
선택적 파일 수정
대량 파일 작업 (생성, 업데이트, 삭제)
점진적 프로젝트 업데이트
자동화된 파일 유지 관리
예시:
{
"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
}드라이 런 예시 응답:
{
"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
}
]
}도구 선택 가이드
각 도구 사용 시기:
create_repository: 새 저장소 생성sync_project: 빈/새 저장소에 초기 프로젝트 업로드upload_files: 프로세스를 완전히 제어하면서 특정 파일 업로드sync_update: 기존 저장소에서 기존 파일 업데이트, 새 파일 생성 또는 파일 삭제
워크플로우 예시:
# 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 files개발
스크립트
npm run build- 프로덕션용 빌드npm run dev- 핫 리로딩을 포함한 개발npm start- 프로덕션 서버 시작npm test- 테스트 실행npm run lint- 코드 린트npm run format- 코드 포맷팅npm run type-check- TypeScript 타입 검사
프로젝트 구조
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.json새 도구 추가
src/tools/에 도구 구현 생성src/tools/schemas.ts에 스키마 유효성 검사 추가src/tools/index.ts에 도구 등록tests/unit/tools/에 테스트 추가
배포
Docker
Docker로 빌드 및 실행:
# Build image
docker build -t gitea-mcp .
# Run container
docker run -d \
--name gitea-mcp \
--env-file .env \
gitea-mcp프로덕션 고려 사항
토큰에는 환경 변수 또는 비밀 관리 사용
적절한 로그 수준 구성
모니터링 및 상태 확인 설정
Node.js 애플리케이션에는 PM2와 같은 프로세스 관리자 사용
오케스트레이션을 위해 Docker 또는 Kubernetes 사용 고려
보안
모범 사례
환경 변수 또는 비밀 관리를 사용하여 토큰을 안전하게 저장
액세스 토큰에 필요한 최소한의 권한만 사용
모든 입력 매개변수 유효성 검사
민감한 데이터를 노출하지 않고 보안 이벤트 로깅
모든 Gitea API 통신에 HTTPS 사용
정기적으로 액세스 토큰 교체
속도 제한
서버는 API 제한을 준수하기 위해 Gitea 인스턴스별로 속도 제한을 구현합니다:
기본값: 인스턴스당 분당 100회 요청
인스턴스 구성에서
rateLimit을 통해 구성 가능지수 백오프를 통한 자동 재시도
문제 해결
일반적인 문제
인증 실패
액세스 토큰이 올바르고 필요한 권한이 있는지 확인
토큰이 만료되지 않았는지 확인
기본 URL이 올바른지 확인
속도 제한 초과
파일 업로드 배치 크기 줄이기
속도 제한 구성 조정
요청 재시도 전 대기
파일 업로드 실패
파일 내용이 유효한지 확인
파일 경로에 잘못된 문자가 포함되어 있지 않은지 확인
저장소가 존재하고 쓰기 권한이 있는지 확인
로깅
문제 해결을 위해 디버그 로깅 활성화:
LOG_LEVEL=debug npm start상태 확인
서버 상태 확인:
curl -f http://localhost:8080/health || exit 1기여
저장소 포크
기능 브랜치 생성
테스트와 함께 변경 사항 적용
린트 및 타입 검사 실행
풀 리퀘스트 제출
라이선스
MIT 라이선스 - 자세한 내용은 LICENSE 파일을 참조하십시오.
지원
GitHub Issues: 버그 및 기능 요청 보고
문서: docs/ 디렉터리 확인
예시: examples/ 디렉터리 확인
Gitea 및 MCP 커뮤니티를 위해 ❤️로 제작되었습니다.
참고 항목
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