Pakiet usług dla klientów: mcp-skills jako serwis SaaS, sterowany przez własnego LLM-agenta poprzez git2mcp, dostępny dla użytkowników końcowych przez OpenWebUI.
Praktyczne use-case i gotowe prompty (refactor/migration/integration): docs/USE_CASES.md.
Integracja z IDE (Cursor, VS Code, Devin) i agentami A2A: docs/IDE_AND_AGENT_INTEGRATION.md.
[ user ]
|
v
+-----------------+ +----------------+ +---------------+
| OpenWebUI | -----> | mcp-gateway | -----> | mcp-skills |
| (chat frontend) | HTTP | (OpenAI-compat | HTTP | (analiza, |
| | Auth | + auth + | | metryki) |
| | SSE | multi-tenant) | +---------------+
+-----------------+ +-------+--------+
|
v
+----------------+
| gh2mcp-agent |
| (gh token sync |
| to .env) |
+----------------+
|
v
+----------------+
| mcp-git-proxy |
| (Git operations |
| via HTTP API) |
+----------------+
^
|
+----------------+
| llm-agent |
| (git2mcp + |
| OpenRouter) |
+----------------+
[ developer / QA ] -> mcp-webui (8092) -> mcp-gateway
-> mcp-docs (8093) -> statyczna dokumentacja + playbooki
mcp-internal— wewnętrzna, bez publicznych portów (proxy, skills, agent)mcp-public— publiczne usługi: gateway (9000), webui (8092), mcp-docs (8093), openwebui (3000), dashboard (8085)
Plik YAML w mcp-gateway/tenants/, np. acme.yaml:
tenant_id: acme
api_keys:
- "sk-mcp-acme-prod-..."
quotas:
max_repos: 50
max_iterations_per_task: 10
monthly_llm_usd: 200
features:
refactor: true
analyze: true
push: true
audit:
enabled: trueWystarczy dodać plik i restart mcp-gateway.
GET /healthGET /v1/models— modele = skille MCPPOST /v1/chat/completions— OpenAI-compatible (Bearer auth, SSE supported)GET /jobs/{job_id}— status zadaniaGET /audit/tail?limit=N— JSONL audit log
Repo:
GET /healthGET /repos— lista lokalnych repoPOST /repos/sync— klonuj lub sync repo (z URL lub source_path)POST /repos/{id}/sync-pull— pull z remotePOST /repos/{id}/commit— commit zmianPOST /repos/{id}/push— push do remotePOST /repos/{id}/run-tests— uruchom testyPOST /repos/{id}/worktree/read|write— odczyt/zapis plikuPOST /repos/{id}/worktree/diff— diff roboczyPOST /repos/{id}/branch/draft— stwórz draft branchPOST /repos/{id}/checkpoint— snapshot worktreePOST /repos/{id}/checkpoint/restore— przywróć snapshotPOST /repos/{id}/patch/apply— aplikuj patchPOST /repos/{id}/stage— staging plikówPOST /repos/{id}/stash/save|pop— stash
GitHub API (przez mcp-git-proxy):
-
POST /github/create-repo— stwórz nowe repo na GitHubie + opcjonalne klonowanie lokalne{ "name": "nowe-repo", "description": "opis", "private": true, "auto_clone": true, "branch": "main", "github_token": "ghp_..." }Token można przekazać w body lub ustawić
GITHUB_PATw env kontenera.
GET /— dashboardGET /repos— lista + sync formGET /github— konfiguracja GitHub (token, create-repo, clone, sync)POST /github/fetch-token-from-cli— pobierz token zgh auth tokeni zapisz do.envPOST /github/configure— zapisz/usuń token ręczniePOST /github/create-repo— utwórz nowe repo (przez mcp-git-proxy)POST /github/clone— sklonuj repoPOST /github/sync— pull updatesGET /skills— invoke modeli przez gatewayGET /playground— free-form promptGET /diff— worktree diff
GET /health— healthcheckGET /— strona główna dokumentacji i playbooki chat
GET /health— status usługiGET /status— status tokenu (configured,user,token_hint)POST /sync/token— wymuś synchronizację tokenu do.envPOST /org/set— ustaw domyślną organizację GitHub ({"org": "semcod"})POST /org/list— lista organizacji i ich repo ({"repos_limit": 30})POST /repo/last-pushed— znajdź ostatnio pushowane repo ({"owner": "...", "limit": 100})
Gateway parsuje z promptu (lub z extra_body) pola:
Repo(lub template:{{pokaż ostatnie repo z github}})Repo URL(opcjonalnie, shorthandowner/repo)GitHub Token(opcjonalnie, zapisywany do.envprzezenv2mcp)Source(opcjonalnie)BranchExecute(true/false)Push(true/false)Draft(true/false)Draft name(opcjonalnie)PR(true/false)PR title/PR body/PR base(opcjonalnie)TestRemoteZadanie
Przy Execute: true gateway tworzy commit artefaktów planu (.mcp/refactor-plan.json, .mcp/refactor-summary.md) i uruchamia test command.
Przy Push: true wykonuje push tylko gdy:
- tenant ma
features.push: true, - testy zwrócą
ok: true.
Przy Draft: true (domyślnie dla Push: true) gateway tworzy branch draft/* przed commitem.
Przy PR: true gateway próbuje utworzyć draft PR przez GitHub API (wymaga GITHUB_TOKEN lub GITHUB_PAT i repo URL wskazującego na GitHub).
Przy podaniu GitHub Token: ... gateway zapisuje token do .env i używa go przy kolejnych synchronizacjach GitHub.
Repo URL wspiera również skrót owner/repo (mapowany do https://github.com/owner/repo.git).
Gateway rozpoznaje intencje tekstowe i routuje je do odpowiednich akcji systemowych zamiast workflow refactor/analyze:
| Komenda (przykład) | Akcja |
|---|---|
Pobierz token GitHub z gh CLI |
gh2mcp /sync/token → sync tokenu do .env |
Zapisz token github do .env: ghp_xxx |
env2mcp.EnvConfig → zapis GITHUB_PAT |
Ustaw organizację: semcod |
gh2mcp /org/set |
Pokaż listę repo organizacji |
gh2mcp /org/list |
Repo: {{pokaż ostatnie repo z github}} |
gh2mcp /repo/last-pushed → auto-resolve repo_id |
Automatyzuje najczęstszy przepływ: wybór ostatnio pushowanego repo z GitHub → analiza → refactor.
bash scripts/refactor-last-repo.sh # analyze-only
bash scripts/refactor-last-repo.sh --execute --push --pr # pełny cykl
bash scripts/refactor-last-repo.sh --repo owner/repo --execute --task "Etap 2"Wyniki zapisywane do output/refactor-last-repo-<timestamp>/.
Konfiguracja środowiskowa kontenera:
OPENAI_API_BASE_URL=http://mcp-gateway:9000/v1OPENAI_API_KEY=<tenant api key>
Po starcie dostępny pod http://localhost:3000.
Dev:
docker-compose --profile openwebui up -dProd:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d- Wewnętrzne usługi (
mcp-git-proxy,mcp-skills,llm-agent) nie mają portów na hoście w trybie produkcyjnym (overlaydocker-compose.prod.yml). - Wszystkie wywołania API gateway wymagają
Authorization: Bearer <key>. - Audit log w wolumenie
audit-storage(JSONL). - Walidacja patchy w
mcp-git-proxy(path traversal blokowany wworktree/write).
- Wywołanie
mcp-skills/refactorimcp-skills/analyzeprzez OpenAI-compatible API. - Sync repo (
Repo URLlubSource) domcp-git-proxy. - Analiza repo przez
mcp-skills(metrics/patterns/recommendations). - Opcjonalny commit + test + push + draft branch + draft PR przez prompt (
Execute/Push/Draft/PR). - Multi-tenant auth + audit.
- Generowanie i testowanie repo demo przez system (
make generate-demo-repos) pod scenariusze produktu. - Skrypt
refactor-last-repo.shdo automatycznego workflow: ostatnie repo → analiza → refactor → push → PR. - Komendy systemowe w czacie: sync/zapis tokenu, zarządzanie organizacjami, auto-resolve repo.
- Serwis
mcp-docs(port 8093) z dokumentacją i playbookami chat.
- Konfiguracja GitHub tokenu — 3 metody: gh CLI jednym kliknięciem, PAT ręcznie, lub
.env. - Pobieranie tokenu z gh CLI —
POST /github/fetch-token-from-cliodczytujegh auth tokeni zapisuje do.env. - Tworzenie nowego repo na GitHubie — formularz +
POST /github/create-repoprzezmcp-git-proxy. - Klonowanie repo —
owner/repolub pełny URL z automatycznym wstrzyknięciem tokenu. - Sync/pull istniejących lokalnych repo.
- Test integracji GitHub —
make ansible-github-test(weryfikacja tokenu + create-repo + cleanup).
- Automatyczna modyfikacja kodu źródłowego (obecnie commitowane są artefakty planu
.mcp/*). - Iteracyjny loop patchowania z rollbackiem checkpointów i polityką retry.
- Rozszerzenie PR workflow (reviewers/labels/assignees, polityki merge i approval gates).
- Dodatkowe guard-raile produkcyjne (approval gates, repo allowlist, limits na zakres zmian).
- Trwała kolejka i storage jobów (
Redis/Postgres) zamiast in-memoryJOBS.