feat: add MCP server with resources, tools, auth, and Traefik routing

- Add backend/app/mcp_server.py with FastMCP server (hms-cms)
- Resources: design-rules, page-structure, sync-status
- Tools: trigger_sync, get_sync_log, set_rentman_token, read_file,
  write_file, create_page, deploy, git_commit, git_status
- Bearer token auth via MCP_AUTH_TOKEN env var
- Mount MCP at /mcp with streamable HTTP transport
- Integrate session manager in FastAPI lifespan
- Add Traefik labels for external /mcp route on hms.media-on.de
- Add git, docker.io, curl to backend Dockerfile
- Mount repo root + docker socket in backend container
- Add mcp>=1.0.0 to requirements.txt
This commit is contained in:
Agent Zero
2026-07-12 15:58:22 +02:00
parent 00c23bc066
commit cd465e0564
124 changed files with 3309 additions and 225 deletions
+102
View File
@@ -0,0 +1,102 @@
# Test Report 1:1 Prototype Port
**Date:** 2026-07-10
**Task:** 1:1 Prototyp-Portierung zu Nuxt 3
**Commit:** fix: 1:1 prototype port exact hms-* CSS, real logo, all components from app.js
## Build Verification
```
npm run build
```
**Result:** ✅ Build complete
**Output size:** 2.47 MB (607 kB gzip)
**Server:** .output/server/index.mjs generated successfully
## Unit Tests
```
npx vitest run --reporter verbose
```
**Result:** ✅ 10 test files, 168 tests passed, 0 failed
### Test Files:
1. `tests/unit/CartStore.test.ts` Cart store interface and actions ✅
2. `tests/unit/DesignTokens.test.ts` CSS tokens, hms-* classes, Tailwind/Nuxt config ✅
3. `tests/unit/HomePage.test.ts` Hero, services, speaker grid, CTA ✅
4. `tests/unit/ReferenzenPage.test.ts` Gallery, filter chips, loading states ✅
5. `tests/unit/KontaktPage.test.ts` Contact form, validation, addresses ✅
6. `tests/unit/MietkatalogPage.test.ts` Search, filter, equipment cards ✅
7. `tests/unit/EquipmentDetailPage.test.ts` Detail view, specs, related items ✅
8. `tests/unit/WarenkorbPage.test.ts` Cart items, request form, validation ✅
9. `tests/unit/Layout.test.ts` Header, footer, error page, logo, robots.txt ✅
10. `tests/unit/useEquipment.test.ts` API composable, equipment composable ✅
## Smoke Test (Dev Server)
```
npx nuxt dev (port 3004)
curl -s http://localhost:3004/
```
**Result:** ✅ All checks passed
| Check | Expected | Actual |
|-------|----------|--------|
| `Veranstaltungstechnik` text | ≥1 | 2 ✅ |
| `hms-hero` class | ≥1 | 1 ✅ |
| `hms-card` class | ≥1 | 1 ✅ |
| `hms-btn-primary` class | ≥1 | 1 ✅ |
| `hms-header` class | ≥1 | 1 ✅ |
| `hms-speaker-grid` class | ≥1 | 1 ✅ |
| `hms-logo-svg` class | ≥1 | 1 ✅ |
| `EC6925` (accent color) | ≥1 | 1 ✅ |
## Files Changed
### CSS
- `assets/css/main.css` Replaced with prototype-style.css content + Tailwind directives
### Components (9 ported from app.js)
- `components/HmsLogo.vue` SVG logo with #EC6925 border
- `components/SpeakerIcon.vue` 6 speaker type SVG icons
- `components/AppHeader.vue` hms-header, nav, mobile menu
- `components/AppFooter.vue` hms-footer, 4-column grid
- `components/ServiceCard.vue` hms-card with icon circle
- `components/EquipmentCard.vue` hms-eq-card with badge
- `components/LoadingSkeleton.vue` hms-skeleton shimmer
- `components/EmptyState.vue` Empty state with action
- `components/ErrorState.vue` Error state with retry
### Pages (8 ported from app.js)
- `pages/index.vue` HomePage with hero, speakers, services, CTA
- `pages/referenzen.vue` ReferenzenPage with gallery and filters
- `pages/kontakt.vue` KontaktPage with form and contact info
- `pages/mietkatalog.vue` MietkatalogPage with 18 equipment items
- `pages/mietkatalog/[id].vue` EquipmentDetailPage with specs and related
- `pages/warenkorb.vue` WarenkorbPage with cart and request form
- `pages/admin.vue` AdminPage with login form
- `error.vue` NotFoundPage (404)
### Layout
- `layouts/default.vue` Updated to match prototype App structure
### Tests (10 files updated)
- All unit tests rewritten to match prototype structure
- Removed MietanfragePage.test.ts (page not in prototype)
- Tests check for hms-* classes, prototype templates, exact content
### Removed
- `components/CartDrawer.vue` Not in prototype
- `components/Lightbox.vue` Not in prototype
- `pages/mietanfrage.vue` Not in prototype (functionality in warenkorb)
### Kept (unchanged)
- `composables/useApi.ts`, `composables/useEquipment.ts`, `composables/useCart.ts`
- `stores/cart.ts`
- `plugins/pinia-persist.client.ts`
- `components/LegalContentPage.vue` (used by legal pages)
- `pages/impressum.vue`, `pages/datenschutz.vue`, `pages/agb-vermietung.vue`
- `nuxt.config.ts`, `tailwind.config.ts`