Plan — Phase 2: MCP-SSF v0.1 + /mcp-audit Skill + Public Repo + Dashboard
Overview
Phase 2 des Projekts public-mcp-audits baut die drei Artefakte, die einen Public-Audit-Track ueberhaupt erst tragen: (a) den Standard (MCP-SSF v0.1), (b) das Tool das den Standard auf einen MCP anwendet (/mcp-audit-Skill), (c) die oeffentliche Buehne (Repo + Dashboard + Methodology-Page). Strategisch nicht „eigener Scanner” sondern „eigener Massstab + Orchestrator existierender Tools” — siehe Origin (Research-Synthese R4): der Scanner-Markt ist gesattigt (Snyk hat invariantlabs/mcp-scan akquiriert, AWS hat Sample-Repo, Cisco hat einen), aber niemand published vergleichbare Score-Cards mit publicer Methodologie. Aufwand-Budget ~10-12 halbtage, gestreckt auf 4 Wochen bis 2026-06-15 — passt zwischen av-voice Phase 2 und Welle 4 Open-WebUI-VF.
Problem Frame
Wir wollen Public-MCP-Audits als Vertriebs-Tueroeffner fuer DSGVO-affine KMU bauen (Origin: project-Index). Pilot-Audit mcp-papierkram hat gezeigt, dass unsere eigenen MCPs sauber gebaut sind (0 CRIT, 3 MED — Daily 8/10), aber:
- Ohne Standard ist die Aussage „X ist sicher” nicht vergleichbar und nicht zitierbar.
- Mehrere Public-MCP-Scanner existieren bereits, ein eigener waere Late-Mover ohne Differenzierung.
- OWASP MCP Top 10 existiert (Phase-3-Beta) — eigene Risiko-Liste waere Brand-Konkurrenz.
- Long-Term-Wert (siehe Marvin-Antwort): A-Grade-Reports gewinnen das EU-AI-Act-Argument im Sales-Call ohne weitere Diskussion; SEO-Authority-Anker fuer spaetere Stufe-3-Produkte (av-audit) ueberhaupt erst verkaufbar; Risiko ist „Marketing-Stunt ohne Adoption”, daher Community-Standard-Pfad statt AV-only.
Loesung: ein vendor-neutrales Scoring-Framework (CC-BY-4.0 Spec, Apache-2.0 Skill), das auf OWASP MCP Top 10 aufsetzt und durch ein lauffaehiges Tooling-Pipeline (mcp-scan + gitleaks + semgrep + trivy + uv audit + custom checks) operationalisiert wird.
Requirements Trace
- R1. MCP-SSF v0.1 Spec ist publishable: englisch, vendor-neutral, CC-BY-4.0-lizenziert, ~60-80 Controls in 8 Kategorien, mit Profile-Modell P0-P3 (stdio → hosted-multi-tenant). [origin: Research-Synthese R1]
- R2. Jede SSF-Control ist auf OWASP MCP Top 10 gemappt (kein paralleles Konkurrieren). [origin: R2]
- R3.
/mcp-audit-Skill produziert eine MCP-SSF-Score-Card (Grade A-F + Number 0-100 + Sub-Scores pro Kategorie) durch Orchestrierung von 7 existierenden Tools + 4-5 Custom-Checks. [origin: R4] - R4. Skill liefert Markdown-Report im Cure53/ToB-Hybrid-Format mit Findings-ID
MCP-SSF-<jahr>-<target-slug>-NN. [origin: R3] - R5. Public-Repo
agentic-ventures/mcp-security-auditsist Discovery-fahig: README mit Mission, framework/, audits/, dashboard/, security.txt, Contribution-Guidelines, klare Lizenzen. - R6. Dashboard auf
audits.agenticventures.dezeigt Score-Card pro auditiertem MCP mit History und Last-Audit-Date — automatisch befuelbar ausaudits/*.md-Frontmatter. - R7. Methodology-Page auf agenticventures.de erklaert das Framework public, mit Beispiel-Report und Re-Audit-Cadence. Ohne diese Seite ist das Dashboard wertlos (Origin R3: Methodik-Public ist Trust-Anker).
- R8. Pilot-Re-Audit von mcp-papierkram im neuen Framework validiert Kalibrierung — F1-F3 aus Daily-8/10-Audit muessen sinnvoll in der MCP-SSF-Skala landen.
Scope Boundaries
Explicit Out-of-Scope:
- Re-Audit von
mcp-whatsapp+mcp-vf-hosted— Phase 3, nach Pilot-Kalibrierung. - Public-Launch + Marketing-Push (Twitter/LinkedIn/Pitch-Deck-Update, Submit zu OWASP-Project-List, Snyk-Advisor, OpenSSF-Scorecard-Integration) — Phase 4, Ziel EU-AI-Act-Stichtag 2026-08-02.
- Skalierung auf die restlichen ~10 aktiven MCPs — Phase 5, Q3-Q4 2026 mit Quartals-Cadence.
- Automatisierte CI-Integration des
/mcp-audit-Skills in GitHub-Actions fuer jeden Repo — Nice-to-have, nicht in Phase 2. - Eigener Scanner-Code fuer Tool-Poisoning oder Rug-Pull-Detection — wir wrappen
mcp-scan(jetzt Snyk-owned). - Eigene CVE-Database fuer MCP-Schwachstellen — wir nutzen OSV.dev via
uv audit+ GHSA. - Live-Hosted-Audit-Service („as a Service”) — bleibt
av-audit(separate Stufe-3-Roadmap).
Implicit Out-of-Scope (zur Klarstellung):
- Keine neuen Hosting-Setups: Skill laeuft lokal auf Marvins Maschine, Public-Repo auf GitHub (kostenlos), Dashboard als Static-Site (gehostet auf existierender av-website-Pipeline).
- Keine neuen MCPs anlegen — wir auditieren nur was schon da ist.
Context & Research
Origin Documents
- Research-Synthese mit allen Quellen + Tooling-Build-vs-Buy-Matrix: report
- Pilot-Audit-Output (Kalibrierungs-Baseline): 2026-05-papierkram-audit-raw.md
- Projekt-Index mit Roadmap-Phasen: _index
- Existing security-audit-Skill (Anker-Punkt fuer wie
/mcp-auditandockt): SKILL - MCP Best Practices als Quelle fuer Custom-Semgrep-Rules: mcp-best-practices
Relevant Code and Patterns (Vault-intern)
intern/capabilities/skills/*/SKILL.md— alle Skills folgen dem gleichen Frontmatter-Schema (id, type=skill, name, description, purpose, required_mcps, required_tools, inputs, outputs, status). Neue Skills bauen darauf auf.intern/capabilities/skills/security-audit/SKILL.md— 13-Phasen-Audit-Pattern./mcp-auditist eine engere, automatisierte Variante dessen, nicht ein Ersatz. Beide existieren parallel:security-auditist das Audit-Skill fuer beliebige Repos/Deploys (Daily 8/10),/mcp-auditist die orchestrierte, MCP-spezifische Variante mit fixem Output (SSF-Score-Card).assets/customers/+assets/firma/— Vault-Konvention fuer statische Assets.extern/outbound/— wo Public-Facing-Material ausserhalb von Marvins Hand landet. Public-Reports gehen formal hier durch.
Institutional Learnings (intern/wissen)
- mcp-best-practices — direkter Input fuer das
mcp-eigenbau.ymlSemgrep-Ruleset. - mcp-hosting-fargate-tunnel — Hosting-Pattern, gibt Profile-P2/P3-Definition Substanz.
- agent-system-audit-rubric — vergleichbarer Pattern (Audit-Rubric mit gewichtetem Aggregat) — Source of Inspiration fuer Scoring-Algorithmus.
External References (verifiziert in Research-Synthese)
- OWASP MCP Top 10 (Phase-3-Beta): https://owasp.org/www-project-mcp-top-10/
- invariantlabs/mcp-scan (jetzt Snyk Agent-Scan): https://github.com/invariantlabs-ai/mcp-scan
- CIS Item-Format als Vorbild: https://www.cisecurity.org/cis-benchmarks
- MASVS Profile-Logik: https://mas.owasp.org/MASVS/
- Mozilla Observatory Grade-A-F-Pattern: https://observatory.mozilla.org
- Cure53 + Trail of Bits Report-Stil: siehe Research-Synthese R3
Konventions-Hinweise aus CLAUDE.md
- Rule 15: Framework + Public-Reports + Dashboard + Methodology englisch. Vault + Code-Kommentare + Plan deutsch.
- Rule 18: alle persistenten Notizen in den Vault, nicht in
~/.claude/projects/.../memory/. - Rule 22: keine Kunden-Namen in Public-Repo, generisch („SaaS finance MCP”) — Pilot-Re-Audit darf
mcp-papierkramals eigenes MCP zeigen. - Rule 8: Secret-Pruefung vor jedem Commit — beim Public-Repo besonders kritisch.
Key Technical Decisions
- Spec-Lizenz CC-BY-4.0, Code-Lizenz Apache-2.0. Rationale: CC-BY erlaubt freies Zitieren + Mappen + Forken der Spec (Adoption-Hebel); Apache-2.0 ist Standard fuer Sec-Tools, hat Patent-Grant. Beide kompatibel mit OWASP-Project-Submission falls wir spaeter gehen.
- Vendor-neutraler Brand-Name. Spec heisst „MCP Security Scoring Framework (MCP-SSF)” — kein „Agentic Ventures” im Titel. Im README + Frontmatter steht „maintained by Agentic Ventures, contributions welcome”. Begruendung: Adoption durch andere Sec-Firmen ist Brand-Aversiv wenn das Framework wie Marketing-Material aussieht.
- Alignment mit OWASP MCP Top 10 via Mapping-File, nicht durch Subset/Erweiterung. Jede SSF-Control hat
owasp_mcp_ref: MCP01..MCP10(odernonewenn ueber OWASP hinaus). Mapping-File istframework/mappings/owasp-mcp-top-10-v3.mdmit Versionierung — wenn OWASP v4 publisht, kommt ein neues Mapping-File daneben. - Profile-Modell P0-P3 statt strikter Level. P0=local-stdio, P1=local-HTTP, P2=hosted-OAuth, P3=hosted-multi-tenant. Jeder MCP deklariert sein Profil, daran richten sich Anforderungen aus. Begruendung: ein lokaler stdio-MCP braucht andere Sicherheits-Anforderungen als ein Public-OAuth-Endpoint mit Multi-Tenant.
- Scoring-Algorithmus: gewichtete Sub-Scores → Aggregate (0-100) → Grade (A+/A/B/C/D/F) → Tier (Bronze/Silver/Gold/Platinum). Sub-Scores pro Kategorie, damit Schwaechen sichtbar. Tier-Label nur fuer Marketing („MCP-SSF Gold”), Grade+Number fuer Technical Review.
- Skill wrappt 7 Tools + 4-5 Custom-Checks, kein eigener Scanner:
gitleaks,trufflehog,uv audit(Fallbackpip-audit),semgrep(mitmcp-eigenbau.ymlCustom-Ruleset),trivy fs,mcp-scan(Snyk-owned),promptfoo(optional, slow). Custom-Checks: Tool-Surface-Inventory, Raw-Tool-Detection, Bind-Address-Sanity, DSGVO-Klassifikation. Begruendung: Pflege-Aufwand bleibt beim Custom-Ruleset und 4-5 Custom-Checks — alles andere ist Subprocess + SARIF. - SARIF als Common-Output-Format. Alle Tools schreiben SARIF in
/tmp/mcp-audit-<ts>/, Skill merged viasarif-multitooloder Python-Libsarif-om. SARIF macht GitHub-Code-Scanning-Upload trivial. - Dashboard als Static-Site mit Hugo, gehostet auf existierender av-website-Pipeline unter Subdomain
audits.agenticventures.de. Begruendung: keine neue Hosting-Komplexitaet, History via git-Snapshots, Score-Cards ausaudits/*.md-Frontmatter automatisch generierbar. - Findings-ID-Schema fest:
MCP-SSF-<jahr>-<target-slug>-NN. Beispiel:MCP-SSF-2026-papierkram-01. Stabil ueber Re-Audits, zitierbar in Disclosure. - Custom-Semgrep-Rules in eigenem Repo-Pfad
skills/mcp-audit/rules/mcp-eigenbau.yml(im Vault), per Sync-Skript auch in Public-Repo gespiegelt. Begruendung: Vault ist Source of Truth, Public-Spiegelung ist Read-Only-Distribution. - Pilot-Re-Audit als Phase-2-Validation-Gate. Wenn mcp-papierkram’s F1-F3 nach neuem Framework NICHT als die richtigen Punktabzuege auftauchen, ist die Spec nicht kalibriert — Spec wird angepasst, dann Re-Audit nochmal. Iteration bis Kalibrierung sitzt.
- security.txt nach RFC 9116 im Public-Repo Pflicht, mit
mailto:security@agenticventures.de. Begruendung: Vulnerability-Disclosure-Channel fuer Externe ist Trust-Signal und Audit-Item zugleich.
Open Questions
Resolved During Planning
- Sprache: Englisch fuer alles Public, deutsch im Vault. [resolved: CLAUDE.md Rule 15, Brief]
- AV-Standard vs Community-Standard: Community-Standard mit AV als Hauptautor + Maintainer. CC-BY-4.0 / Apache-2.0. [resolved: Marvins Bestaetigung vor
/plan] - Tier-Naming: Bronze/Silver/Gold/Platinum (statt Passing/Silver/Gold) — 4 Stufen mit Platinum als Enterprise-Marker. [resolved: Research-Synthese R1]
- Severity-Skala: 4-Stufen Critical/High/Medium/Low + separate Hardening-Section. Nicht „Informational” (wird ignoriert, siehe R3). [resolved: Brief]
- Findings-ID-Schema:
MCP-SSF-<jahr>-<target-slug>-NN. [resolved: Brief] - Plan-Datei-Pfad:
intern/projekte/public-mcp-audits/plan.md(Vault-Konvention), nichtdocs/plans/...(Codebase-Default). [resolved: Brief] - Mapping-Strategie OWASP MCP Top 10: Crossref-File
framework/mappings/owasp-mcp-top-10-vN.md, versioniert. [resolved: Brief + R4]
Deferred to Implementation
- Exakte Control-Liste der 60-80 SSF-Items. Wird beim Schreiben der Spec festgelegt — 8 Kategorien stehen (Auth, Transport, Tool-Surface, Supply-Chain, Secrets, Observability, Privacy, Operational), Detail-Aufteilung beim Schreiben.
- Genaue Scoring-Gewichte pro Kategorie. Erste Annaeherung: Auth 15%, Transport 8%, Tool-Surface 15%, Supply-Chain 12%, Secrets 10%, Observability 8%, Privacy 10%, Operational 6%, LLM-Specific 8%, Compliance 8% (Summe 100). Wird beim Pilot-Re-Audit kalibriert.
- Hugo-Theme fuer das Dashboard. Existierendes av-website-Theme als Basis oder eigenes Sub-Theme? Entscheidung beim Schritt 2.5/2.6 — abhaengig davon ob
audits.agenticventures.deals Subpath von av-website oder als getrennte Hugo-Site laeuft. - SARIF-Merge-Tool:
sarif-multitool(Microsoft, npm) vs custom Python (sarif-om-Lib). Entscheidung beim Skill-Bau —sarif-multitoolist mature aber bringt Node-Dependency,sarif-omist pure Python. Wahrscheinlichsarif-omweil Skill bereits Python-only ist. - Custom-Semgrep-Rules-Anzahl initial. Schaetzung 10-15 Rules zum Start, basiert auf MCP-Best-Practices-Doc. Genaue Liste beim Bau.
- Wo laeuft
/mcp-auditautomatisiert. Initial nur manuell von Marvin. CI-Integration (in jedemmcp-*-Repo) ist Phase 3+. - Public-Repo-Hosting: Standard-GitHub-Org
agentic-venturesoder neue Orgmcp-security? Wahrscheinlichagentic-ventures/mcp-security-auditszum Start, mit Option spaeter aufmcp-security/auditszu uebersiedeln wenn Adoption groesser wird. Repo-Move via GH-Redirect ist verlustfrei. - Wann wird das
audits/Verzeichnis im Public-Repo befuellt. Nach Pilot-Re-Audit liegt der erste Report drin. Phase 3 fuellt nach.
High-Level Technical Design
Diese Skizze illustriert den intendierten Aufbau und ist Directional Guidance fuer Review, nicht Implementierungs-Spec. Der implementierende Agent behandelt das als Kontext.
Komponenten-Beziehung
graph TB Spec["MCP-SSF Spec v0.1<br/>(English, CC-BY-4.0)<br/>framework/mcp-ssf-v0.1.md"] Mapping["OWASP-MCP-Top-10 Mapping<br/>framework/mappings/owasp-mcp-top-10-v3.md"] Skill["/mcp-audit Skill<br/>(Python, Apache-2.0)<br/>intern/capabilities/skills/mcp-audit/"] SemgrepRules["mcp-eigenbau.yml<br/>Custom Semgrep Ruleset"] PilotV2["Pilot Re-Audit mcp-papierkram<br/>audits/2026-05-papierkram-v2.md"] PublicRepo["Public Repo<br/>agentic-ventures/mcp-security-audits<br/>(GitHub)"] Dashboard["Dashboard<br/>audits.agenticventures.de<br/>(Hugo, statisch)"] Methodology["Methodology-Page<br/>agenticventures.de/security-audits/methodology"] Spec --> Mapping Spec --> Skill Skill --> SemgrepRules Skill --> PilotV2 Spec --> PublicRepo Mapping --> PublicRepo PilotV2 --> PublicRepo PublicRepo --> Dashboard Spec --> Methodology
Skill-Pipeline (Datenfluss /mcp-audit <target-path>)
graph LR Input["Target-Repo-Pfad<br/>+ Profil P0-P3<br/>+ Modus schnell/tief"] Discovery["Discovery<br/>Tool-Surface-Inventory<br/>+ Stack-Detect"] Parallel["Parallel-Spawn<br/>7 Tools + 4-5 Custom-Checks"] SARIF["SARIF-Merge<br/>+ Severity-Mapping<br/>+ Dedup"] Scoring["Scoring<br/>Sub-Scores → Aggregate<br/>→ Grade → Tier"] Output["Outputs<br/>raw.md + draft.md<br/>+ score.json + baseline.json"] Input --> Discovery Discovery --> Parallel Parallel --> SARIF SARIF --> Scoring Scoring --> Output
Datei-Layout (was entsteht wo)
agentic-ventures/ (Vault, intern, deutsch)
├── intern/projekte/public-mcp-audits/
│ ├── _index.md # Phase-Tracking
│ ├── plan.md # diese Datei
│ ├── session-prompt-01.md # Pilot (done)
│ └── audits/
│ ├── 2026-05-papierkram-audit-raw.md # Daily 8/10 (done)
│ ├── 2026-05-papierkram-audit-draft.md # interner Draft (done)
│ └── 2026-06-papierkram-v2-raw.md # Pilot-Re-Audit Phase 2
├── intern/capabilities/skills/mcp-audit/ # NEU
│ ├── SKILL.md # Skill-Definition (deutsch)
│ ├── pyproject.toml # Python-Package
│ ├── src/mcp_audit/
│ │ ├── __init__.py
│ │ ├── orchestrator.py # main, parallel-spawn
│ │ ├── discovery.py # Stack-Detect, Profil-Wahl
│ │ ├── wrappers/ # Subprocess-Wrapper pro Tool
│ │ │ ├── gitleaks.py
│ │ │ ├── trufflehog.py
│ │ │ ├── uv_audit.py
│ │ │ ├── semgrep.py
│ │ │ ├── trivy.py
│ │ │ ├── mcp_scan.py
│ │ │ └── promptfoo.py
│ │ ├── checks/ # eigene Custom-Checks
│ │ │ ├── tool_surface_inventory.py
│ │ │ ├── raw_tool_detection.py
│ │ │ ├── bind_address_sanity.py
│ │ │ └── dsgvo_classification.py
│ │ ├── sarif_merge.py # via sarif-om
│ │ ├── scoring.py # Sub-Scores → Aggregate → Grade
│ │ └── report.py # Markdown-Generation
│ ├── rules/mcp-eigenbau.yml # Custom Semgrep Ruleset
│ ├── templates/ # Report-Templates
│ │ ├── raw-report.md.j2
│ │ ├── public-draft.md.j2
│ │ └── score-card.json.j2
│ └── tests/
│ ├── test_orchestrator.py
│ ├── test_scoring.py
│ ├── test_sarif_merge.py
│ └── fixtures/ # Mini-MCP-Repos als Test-Targets
├── intern/runs/
│ └── 2026-06-08-mcp-audit-papierkram-v2/ # Pilot-Re-Audit-Lauf (Datum-Platzhalter)
│ ├── report.md
│ └── baseline.json
└── intern/wissen/prozesse/
└── public-mcp-audit-pattern.md # NEU (Cadence, Embargo, Repo-Struktur)
~/source/mcp-security-audits/ (Public Repo, English) — NEU
├── README.md # Mission, Quick-Start, Lizenzen
├── LICENSE-spec # CC-BY-4.0
├── LICENSE-code # Apache-2.0
├── .well-known/security.txt # RFC 9116
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
├── framework/
│ ├── mcp-ssf-v0.1.md # die Spec (~30 Seiten)
│ ├── controls/
│ │ ├── 01-auth.md # Domain 1, je Control eine Section
│ │ ├── 02-transport.md
│ │ ├── 03-tool-surface.md
│ │ ├── 04-supply-chain.md
│ │ ├── 05-secrets.md
│ │ ├── 06-observability.md
│ │ ├── 07-privacy.md
│ │ ├── 08-llm-specific.md
│ │ ├── 09-operational.md
│ │ └── 10-compliance.md
│ ├── mappings/
│ │ └── owasp-mcp-top-10-v3.md # Crossref SSF-Control → OWASP-MCP-ID
│ ├── profiles.md # P0-P3 Definition
│ └── scoring.md # Algorithmus + Grade-Mapping
├── audits/
│ └── 2026-06-mcp-papierkram-v1.md # erster Public-Audit-Report
├── dashboard/ # Hugo-Source (oder Submodule auf av-website)
│ ├── content/
│ │ ├── _index.md # Landing
│ │ └── audits/papierkram.md # Score-Card pro MCP
│ ├── data/scores.csv # ein Row pro MCP × Audit
│ └── layouts/ # Score-Card-Template
└── tools/
├── score-to-dashboard.py # CSV-Update aus audits/
└── sync-rules.sh # Spiegel mcp-eigenbau.yml aus Vault
agenticventures.de (av-website Hugo, English Subdir) — Schritt 2.7
└── content/en/security-audits/
├── _index.md
└── methodology.md # Public-Methodology-Page
Scoring-Algorithmus (Skizze)
Per Kategorie K:
raw_score_K = Σ (control_pass * weight_within_K) / Σ (weight_within_K)
sub_score_K = round(raw_score_K * 100)
Aggregate:
total = Σ (sub_score_K * category_weight_K)
Grade:
total ≥ 95 → A+
total ≥ 85 → A
total ≥ 75 → B
total ≥ 65 → C
total ≥ 50 → D
else → F
Tier:
Grade A+/A → Platinum (wenn 0 Critical-Findings, 0 High-Findings) sonst Gold
Grade B → Silver
Grade C → Bronze
Grade D/F → kein Tier (Score wird trotzdem published)
Critical-Floor:
Jedes Critical-Finding cappt Grade bei C, egal wie hoch der Score sonst.
Jedes High-Finding cappt Grade bei B.Implementation Units
Unit 1: MCP-SSF v0.1 Spec schreiben
- Unit 1
Goal: Standard-Dokument schreiben, das publishable und zitierbar ist.
Requirements: R1, R2 (Mapping ist Unit 2)
Dependencies: Keine. Erstes Unit, alles andere baut darauf.
Files (Public-Repo, English):
- Create:
framework/mcp-ssf-v0.1.md— Spec-Hauptdokument (~30 Seiten Markdown, Executive Summary, Profile-Modell, 10 Kategorien-Index, Scoring-Algorithmus, Glossary) - Create:
framework/profiles.md— P0-P3 Definition mit Anwendungs-Matrix (welche Anforderungen pro Profil verbindlich) - Create:
framework/scoring.md— Algorithmus-Detail mit Grade-Mapping + Critical/High-Floor-Regeln - Create:
framework/controls/01-auth.mdbisframework/controls/10-compliance.md— 10 Files, je Kategorie eine Datei mit ~6-8 Controls im CIS-Item-Format
Approach:
- Pro Control das CIS-Item-Format:
id(z.B.SSF-AUTH-01),title,applies_to_profile(P0..P3),rationale,audit_steps,remediation,references,automatable(true/false),owasp_mcp_ref(MCP01..MCP10 oder none) - 10 Kategorien aus Research-Synthese (urspruenglich 8 + LLM-Specific + Compliance fuer DSGVO-Trennung)
- 60-80 Controls insgesamt (Schaetzung: ~7 pro Kategorie)
- Spec-Header mit Version, Datum, Lizenz CC-BY-4.0, Maintainer-Kontakt
- Cross-Refs auf konkrete Forschungs-Quellen aus Research-Synthese (z.B. Tool-Poisoning → Invariant Labs, Lethal Trifecta → Willison, Cost-Bombs → arxiv 2601.10955)
Patterns to follow:
- CIS-Benchmark-Item-Layout (Description/Rationale/Audit-Command/Remediation/References) — siehe research-mcp-ssf R1
- Markdown-Struktur wie Cure53-Public-Reports (klare Section-Hierarchie, keine HTML-Inlines)
Test scenarios:
- Test expectation: none — Markdown-Spec ohne ausfuehrbares Verhalten, Validierung erfolgt durch (a) Lint via
markdownlint, (b) Cross-Ref-Check (jederSSF-XXX-NN-Control referenziert inmappings/owasp-mcp-top-10-v3.md), (c) Pilot-Re-Audit Unit 4
Verification:
markdownlint framework/**/*.mdpasst ohne Errors- Jeder Control hat alle Pflichtfelder (validierbar via simple Python-Script)
- Spec-Hauptdokument enthaelt Lizenz-Header CC-BY-4.0
- Profile-Definitionen P0-P3 sind disjunkt und decken die realistischen MCP-Deployment-Pattern ab (lokaler stdio, lokaler HTTP, hosted-oauth-single-tenant, hosted-multi-tenant)
Aufwand: 2-3 halbtage
Unit 2: OWASP-MCP-Top-10-Mapping
- Unit 2
Goal: Crossref-Tabelle die jede SSF-Control auf eine OWASP-MCP-Top-10-Risk mappt, oder explizit als none markiert (Beyond-OWASP).
Requirements: R2
Dependencies: Unit 1 (Spec muss stehen, Controls muessen IDs haben)
Files:
- Create:
framework/mappings/owasp-mcp-top-10-v3.md— Mapping-Tabelle + Erklaerungs-Text
Approach:
- Header: OWASP-MCP-Top-10-Version (3-Beta-Stand 2026-05-18), URL, Datum
- Tabelle: pro OWASP-MCP-ID (MCP01..MCP10) eine Section, darin Liste der SSF-Controls die diese Risk adressieren
- Beyond-OWASP-Section: SSF-Controls die OWASP nicht abdeckt (
owasp_mcp_ref: none) — z.B. Lethal-Trifecta-Audit, Cost-Bomb-Gate, Cache-Sharing-Disclosure, Tool-Description-Diff-Tracking - Reverse-Index ergaenzen: pro SSF-Control die zugeordnete OWASP-MCP-ID (steht eh schon im Frontmatter jeder Control aus Unit 1)
- Versionierungs-Hinweis: bei OWASP-Update wird
owasp-mcp-top-10-v4.mddaneben gelegt, alte Mapping bleibt fuer Audit-Reproduzierbarkeit
Patterns to follow:
- ASVS-Mapping-Style: Tabellen-basiert, Source-of-Truth-Verweis
- ATT&CK-zu-CIS-Mapping als Inspiration (NIST hat das gemacht — siehe csrc.nist.gov)
Test scenarios:
- Test expectation: low — Mapping ist statische Tabelle, Validation erfolgt via Cross-Ref-Check-Skript:
- Happy path: jede SSF-Control-ID kommt entweder in der OWASP-MCP-NN-Section oder in der Beyond-OWASP-Section vor (kein Doppel-Mapping, keine Leerstellen)
- Edge case: SSF-Control mit
owasp_mcp_ref: nonemuss in Beyond-OWASP-Section auftauchen
Verification:
- Python-Cross-Ref-Skript: jede
SSF-XXX-NNausframework/controls/*.mdist in Mapping-File abgedeckt; jede OWASP-MCP-ID hat mindestens eine zugeordnete Control - Beyond-OWASP-Section liefert das Differential-Argument: „MCP-SSF deckt N Items ab, die OWASP nicht hat — siehe …”
Aufwand: 0.5 halbtag
Unit 3: /mcp-audit Skill bauen (Orchestrator + Wrappers + Custom-Checks)
- Unit 3
Goal: Lauffaehiger Skill, der /mcp-audit <target-repo> nimmt, 7 Tools + 4-5 Custom-Checks parallel spawnt, SARIF merged, MCP-SSF-Score-Card produziert.
Requirements: R3, R4
Dependencies: Unit 1 (Spec definiert Scoring-Algorithmus und Control-IDs)
Execution note: Test-first fuer scoring.py (Algorithmus muss exakt sein, gut testbar mit Fixtures). Custom-Checks ebenfalls test-first wo Logik nicht-trivial ist. Wrapper sind Subprocess-Glue, da reicht Smoke-Test.
Files (Vault, deutsch fuer Kommentare):
- Create:
intern/capabilities/skills/mcp-audit/SKILL.md— Skill-Definition Frontmatter + Trigger + Inputs/Outputs - Create:
intern/capabilities/skills/mcp-audit/pyproject.toml— Python-Package mit Deps (sarif-om, click, jinja2) - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/orchestrator.py— main, parallel-spawn, Modus-Handling (schnell/tief) - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/discovery.py— Stack-Detect (Python/Node/…), Profil-Auto-Detect (stdio/HTTP/oauth basierend auf_index.md) - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/gitleaks.py— Subprocess-Wrapper, schreibt SARIF nach/tmp/mcp-audit-<ts>/gitleaks.sarif - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/trufflehog.py - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/uv_audit.py—uv audit --output-format json, mappt auf SARIF - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/semgrep.py— semgrep--config=auto --config=rules/mcp-eigenbau.yml --sarif - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/trivy.py—trivy fs --format sarif - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/mcp_scan.py—uvx mcp-scan@latest --json, JSON→SARIF-Transform - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/wrappers/promptfoo.py— optional, nur im tief-Modus, langsam - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/checks/tool_surface_inventory.py— AST-Scan auf@mcp.tool+ Hash-Snapshot fuer Rug-Pull-Diff - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/checks/raw_tool_detection.py— Pattern-Match aufraw_*Tool-Namen +dict-Input ohne Pydantic - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/checks/bind_address_sanity.py— grep aufhost="0.0.0.0"+ Auth-Provider-Check - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/checks/dsgvo_classification.py— Frontmatter-Scan + Custom-Semgrep-Rules fuer PII-Logging - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/sarif_merge.py—sarif-omLib, dedup ueber (rule_id, location-uri, message-hash) - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/scoring.py— Sub-Score → Aggregate → Grade → Tier nach Spec - Create:
intern/capabilities/skills/mcp-audit/src/mcp_audit/report.py— Jinja2-Templates, generiert raw.md + draft.md + score.json + baseline.json - Create:
intern/capabilities/skills/mcp-audit/rules/mcp-eigenbau.yml— Custom Semgrep Ruleset (Initial ~10-15 Rules aus MCP-Best-Practices) - Create:
intern/capabilities/skills/mcp-audit/templates/raw-report.md.j2 - Create:
intern/capabilities/skills/mcp-audit/templates/public-draft.md.j2 - Create:
intern/capabilities/skills/mcp-audit/templates/score-card.json.j2 - Create:
intern/capabilities/skills/mcp-audit/tests/test_scoring.py - Create:
intern/capabilities/skills/mcp-audit/tests/test_sarif_merge.py - Create:
intern/capabilities/skills/mcp-audit/tests/test_orchestrator.py - Create:
intern/capabilities/skills/mcp-audit/tests/test_raw_tool_detection.py - Create:
intern/capabilities/skills/mcp-audit/tests/fixtures/mini-mcp-clean/— minimaler FastMCP-Test-Target, Score sollte hoch sein - Create:
intern/capabilities/skills/mcp-audit/tests/fixtures/mini-mcp-broken/— bewusst kaputter Test-Target mit bekannten Findings (Raw-Tools, Bind 0.0.0.0, hardcoded Secret), Score sollte niedrig sein
Approach:
- Architektur entspricht Skizze in Research-Synthese R4
- Sub-Process-Wrappers sind dumm: Tool-Aufruf, SARIF-File einlesen, an Merger weitergeben. Fehler → Tool wird als „nicht-ausgefuehrt” markiert im Report, kein Crash
- Custom-Checks sind Python-Module mit einheitlichem Interface:
run(target_path: Path, profile: str) -> list[SarifResult] - Discovery autodetected: Profil aus
_index.md-Frontmatter (hosting-Feld), oder per CLI-Flag--profile P2overridebar - Modus
schnell(default): nur Tools 1-6 (skip promptfoo) + Custom-Checks, Konfidenz-Gate 8/10. Modustief: alle 7 Tools + promptfoo, Gate 2/10 - Output: gleicher Pattern wie security-audit-Skill —
raw.md,public-draft.md,baseline.json. Plus neu:score-card.jsonmit Grade/Number/Sub-Scores - Skill registriert sich in
intern/capabilities/skills/_index.mdmit Trigger-Phrasen
Patterns to follow:
- SKILL — Frontmatter-Layout, Modus-Handling, Run-Log-Konvention
mcp-papierkram/src/mcp_papierkram/server.py— Python-Code-Stil im Vault- mcp-best-practices — Quelle fuer Semgrep-Rules
Test scenarios:
- Happy path (scoring.py):
- Eingabe: leere Findings-Liste fuer P2-MCP → Score 100, Grade A+, Tier Platinum
- Eingabe: 3 Medium-Findings ueber 2 Kategorien fuer P2-MCP → Score ~75-85, Grade B, Tier Silver
- Eingabe: 1 Critical-Finding → Grade max C trotz Rest-Score 95+, Tier nicht zugeteilt
- Eingabe: 1 High-Finding (kein Critical) → Grade max B
- Edge case (scoring.py):
- Eingabe: Findings ueber alle 10 Kategorien gleichverteilt → Aggregate gewichtet korrekt
- Eingabe: 0 Findings → Score 100 nur wenn alle automatable Controls dieser Profile bestanden, sonst niedriger
- Eingabe: Profil P0 (stdio-lokal) → Controls die nur fuer P2/P3 verbindlich sind, werden ignoriert
- Error path (scoring.py):
- Eingabe: SARIF mit unbekannter Severity → Mapping-Fehler, Skill bricht ab mit klarem Hinweis
- Eingabe: SARIF ohne
ruleId→ Skill skippt das Item, loggt Warning
- Integration (orchestrator):
- Lauf gegen
fixtures/mini-mcp-clean→ Score ≥ 85, Grade A oder besser, keine Critical/High - Lauf gegen
fixtures/mini-mcp-broken→ Score < 50, mindestens 2 High-Findings (Raw-Tools, 0.0.0.0-Bind), mindestens 1 Critical (hardcoded Secret) - Lauf mit
--profile P0gegenfixtures/mini-mcp-broken→ Score hoeher als mit--profile P2(weil weniger Controls anwendbar) - Lauf bricht ab und gibt Exit-Code 1 wenn
gitleaksnicht im PATH ist und Modusschnell(Pflicht-Tool im schnellen Modus)
- Lauf gegen
- SARIF-Merge:
- Eingabe: gleicher Finding (gleicher rule_id, gleiche Location) von zwei Tools → wird einmal im Output gemerged
- Eingabe: SARIF mit verschiedenen
runs[]→ korrekt zusammengefuehrt - Eingabe: SARIF-Schema-Verletzung → klare Error-Message, Skill failt sauber
Verification:
pytest intern/capabilities/skills/mcp-audit/tests/gruenuv run mcp-audit ./intern/capabilities/skills/mcp-audit/tests/fixtures/mini-mcp-cleanliefert Score-Card mit Grade A+ und schreibt 4 Output-Files (raw.md, public-draft.md, score.json, baseline.json)uv run mcp-audit ./intern/capabilities/skills/mcp-audit/tests/fixtures/mini-mcp-brokenliefert Score-Card mit Grade D oder schlechter und mindestens 3 Findings ueber 2+ Severities- Skill ist in
intern/capabilities/skills/_index.mdregistriert mit Trigger-Phrasen
Aufwand: 3-4 halbtage
Unit 4: Pilot-Re-Audit mcp-papierkram mit MCP-SSF (Kalibrierungs-Gate)
- Unit 4
Goal: Den Pilot-Audit von mcp-papierkram mit dem fertigen /mcp-audit-Skill nochmal laufen lassen, das Ergebnis gegen den Daily-8/10-Lauf vom 2026-05-18 vergleichen. Validiert Spec + Skill in einem Rutsch. Wenn F1-F3 nicht sinnvoll in der MCP-SSF-Skala landen → Spec/Skill anpassen.
Requirements: R8
Dependencies: Unit 1 (Spec), Unit 3 (Skill)
Files:
- Create:
intern/runs/2026-06-08-mcp-audit-papierkram-v2/report.md— Lauf-Log (Datum Platzhalter, beim Anlegen auf Ist-Tag setzen) - Create:
intern/runs/2026-06-08-mcp-audit-papierkram-v2/baseline.json— Score-Card-Output - Create:
intern/projekte/public-mcp-audits/audits/2026-06-papierkram-v2-raw.md— neuer Raw-Report - Modify:
intern/projekte/public-mcp-audits/_index.md— Status-Update auf Phase-2-Kalibrierung-done
Approach:
- Skill-Lauf:
mcp-audit ~/source/mcps/mcp-papierkram --profile P0 --mode tief. Profile P0 weil mcp-papierkram primaer stdio/lokal-HTTP ist (kein Multi-Tenant Hosted-Pfad direkt — gehostet wird es nur via mcp-vf-hosted). - Vergleich gegen Daily-8/10-Lauf:
- F1 (uv.lock fehlt) → soll in MCP-SSF unter Supply-Chain-Kategorie als SSF-Control-Treffer auftauchen, Severity MED, automatable=true
- F2 (Raw-Tools default on) → soll unter Tool-Surface als Control-Treffer, Severity MED, automatable=true
- F3 (HTTP-Bind ohne Auth-Sanity) → soll unter Transport oder Tool-Surface, Severity MED, automatable=true
- Kalibrierungs-Check: wenn F1-F3 nicht auftauchen oder mit falscher Severity → entweder Spec-Control fehlt (Spec anpassen) oder Custom-Check fehlt (Skill anpassen). Iterieren bis sitzt.
- Erwarteter Grade-Range fuer mcp-papierkram nach v2: B oder besser (3 MED, 0 CRIT, 0 HIGH, eigentlich saubere Codebase). Wenn deutlich schlechter, Spec ist zu hart kalibriert.
Patterns to follow:
- report als Vergleichs-Baseline
- Run-Log-Schema aus
_meta/schemas
Test scenarios:
- Test expectation: integration — der Lauf IST der Test
- Happy path: F1, F2, F3 tauchen alle mit korrekter Severity und Kategorie in v2-Report auf, Grade ist B oder besser, Re-Audit-Baseline ist mit Daily-8/10-Baseline kompatibel (gleiche IDs lassen sich nachverfolgen)
- Edge case: TENTATIVE-Findings aus Daily-Lauf (T1 data:dict ohne Pydantic, T2 PDF-Size-Cap) tauchen im tief-Modus als zusaetzliche Findings auf, im schnell-Modus nicht
- Error path: wenn ein Pflicht-Tool fehlt, Skill bricht sauber ab und sagt was zu installieren ist
Verification:
- v2-Raw-Report ist generiert, MCP-SSF-Score-Card im Frontmatter
- F1-F3 sind im Report mit korrekten SSF-Control-IDs verlinkt
- Grade im erwarteten Range (B oder besser fuer Profil P0)
intern/projekte/public-mcp-audits/_index.mdStatus auf „Phase 2 Kalibrierung done” gesetzt
Aufwand: 1 halbtag (Lauf 1-2h, Anpassungs-Iterationen evtl. 1-2 Runden)
Unit 5: Public-Repo agentic-ventures/mcp-security-audits anlegen
- Unit 5
Goal: GitHub-Repo angelegt, Struktur steht, erste Files committed, Lizenzen + security.txt + Contribution-Guidelines vorhanden.
Requirements: R5
Dependencies: Unit 1 (Spec muss da sein), Unit 2 (Mapping), Unit 4 (erster Pilot-Report)
Files (alles im neuen Public-Repo ~/source/mcp-security-audits/):
- Create:
README.md— Mission („vendor-neutral security scoring framework for MCP servers, maintained by Agentic Ventures”), Quick-Start, Badge-Anleitung, Lizenz-Hinweise, Roadmap-Link - Create:
LICENSE-spec— CC-BY-4.0 - Create:
LICENSE-code— Apache-2.0 - Create:
.well-known/security.txt— RFC 9116 (Contact: mailto:security@agenticventures.de, Expires: +12 Monate, Preferred-Languages: en,de, Canonical: https://github.com/agentic-ventures/mcp-security-audits/.well-known/security.txt) - Create:
CONTRIBUTING.md— wie Beitragen, Stil-Regeln, PR-Prozess - Create:
CODE_OF_CONDUCT.md— Contributor Covenant v2.1 (Standard) - Create:
framework/— Files aus Unit 1 + 2 (Spec, Profile, Scoring, Controls, Mapping) - Create:
audits/2026-06-mcp-papierkram-v1.md— erster Public-Audit-Report (aus Unit 4, redacted/cleaned) - Create:
tools/sync-rules.sh— Bash-Script, dasmcp-eigenbau.ymlaus dem Vault hierhin spiegelt - Create:
.github/workflows/markdown-lint.yml— CI fuer Markdown-Konsistenz - Create:
.github/workflows/cross-ref-check.yml— CI fuer Spec/Mapping-Konsistenz (Python-Skript aus Unit 1/2) - Create:
.github/ISSUE_TEMPLATE/audit-report.md— Template fuer extern eingereichte Audits - Create:
.github/ISSUE_TEMPLATE/control-feedback.md— Template fuer Feedback auf einzelne Controls - Modify:
intern/firma/web-properties.md— neue Propertyaudits.agenticventures.deeintragen
Approach:
- Repo neu anlegen unter
agentic-ventures-Org auf GitHub, public, Apache-2.0/CC-BY-4.0-Dual-License - Standard-Repo-Hygiene: branch-protection auf main (require-pr-review), Dependabot enabled fuer den
tools/-Pfad - Bevor erster Push: gitleaks lokal laufen lassen (Behavior Rule 8 — Secret-Pruefung)
- Kundennamen-Check (Rule 22):
grep -ri "vibefactory\|vibe.factory\|becker\|wohrle\|erlei"ueber Public-Repo-Inhalt → muss 0 Treffer liefern - README mit klarem „Why this exists”-Block, der den Standard-Slot-Argument macht (siehe Origin Bottom-Line)
- security.txt mit Expires-Datum 2027-05-18
Patterns to follow:
- Public-OSS-Repo-Hygiene wie OWASP-Projekte (CONTRIBUTING + CODE_OF_CONDUCT + ISSUE_TEMPLATE + SECURITY-Section in README)
- OpenSSF-Best-Practices-Badge-Kriterien als Checkliste (https://www.bestpractices.dev/de/criteria/0)
Test scenarios:
- Happy path: Repo clonebar,
markdownlintdurch CI gruen, Cross-Ref-Check durch CI gruen - Edge case: Kein Datei mit
visibility: internalist im Public-Repo (grep -r "visibility: internal" .liefert 0) - Error path: Pre-Push-Gitleaks findet keine Secrets (Exit-Code 0)
- Integration: ein extern eingereichtes Issue mit dem
audit-report-Template ist parsebar und kategorisierbar
Verification:
- Repo public auf https://github.com/agentic-ventures/mcp-security-audits
- README rendert mit Mission-Statement, Quick-Start, Lizenz-Hinweise
.well-known/security.txtist viacurl https://raw.githubusercontent.com/agentic-ventures/mcp-security-audits/main/.well-known/security.txtabrufbar- CI passes (markdownlint + cross-ref-check)
- Lokal:
gitleaks detect --source ~/source/mcp-security-auditsliefert keine Findings
Aufwand: 2 halbtage
Unit 6: Dashboard-Skelett audits.agenticventures.de
- Unit 6
Goal: Statische Dashboard-Site mit Score-Card-Page-Template, History-View, automatischer Befuellung aus audits/*.md-Frontmatter.
Requirements: R6
Dependencies: Unit 5 (Public-Repo + Pilot-Audit-Report im audits/-Ordner)
Files:
- Create:
~/source/mcp-security-audits/dashboard/config.toml— Hugo-Config (oder Submodul-Ref auf av-website wenn als Subpath gehostet) - Create:
~/source/mcp-security-audits/dashboard/content/_index.md— Landing („MCP Security Audits — Public Score-Cards”) - Create:
~/source/mcp-security-audits/dashboard/content/methodology.md— Kurzform-Methodology (Detail-Link auf agenticventures.de/security-audits/methodology aus Unit 7) - Create:
~/source/mcp-security-audits/dashboard/content/audits/mcp-papierkram.md— Score-Card-Page fuer das erste auditierte MCP - Create:
~/source/mcp-security-audits/dashboard/data/scores.csv— ein Row pro MCP × Audit-Date (mcp,audit_date,profile,score,grade,tier,crit,high,med,low,report_path) - Create:
~/source/mcp-security-audits/dashboard/layouts/_default/single.html— Score-Card-Template (Grade-Badge gross, Number-Score, Sub-Scores pro Kategorie als kleine Bars, History-Tabelle, Last-Audit-Date prominent, Methodology-Link) - Create:
~/source/mcp-security-audits/dashboard/layouts/_default/list.html— Uebersichts-Tabelle aller auditierten MCPs sortiert nach letztem Audit-Datum - Create:
~/source/mcp-security-audits/dashboard/assets/css/main.css— minimal, Brand-Farben analog av-website - Create:
~/source/mcp-security-audits/tools/score-to-dashboard.py— liestaudits/*.md-Frontmatter, schreibtdashboard/data/scores.csv, erzeugtdashboard/content/audits/<mcp>.mdfalls fehlt - Create:
~/source/mcp-security-audits/.github/workflows/dashboard-build.yml— Hugo-Build + Deploy auf Cloudflare Pages oder GH-Pages (Entscheidung beim Bau, default Cloudflare Pages weil av-website auch dort) - Modify:
intern/capabilities/aws/_index.mdoderintern/firma/web-properties.md— DNS-Eintrag fueraudits.agenticventures.dedokumentieren
Approach:
- Hugo wegen av-website-Konvention (siehe web-properties)
- Theme: minimal eigenes, keine Newsletter-Floskeln, Anlehnung an Mozilla-Observatory-Look (Grade-Badge gross, Number daneben, Sub-Scores als horizontale Bars, klare Typografie)
- Score-Card-Page rendert aus Markdown-Frontmatter:
--- mcp: mcp-papierkram audit_date: 2026-06-XX audit_id: MCP-SSF-2026-papierkram-01 profile: P0 framework_version: v0.1 score: 87 grade: A tier: Gold sub_scores: auth: 90 transport: 85 tool_surface: 80 supply_chain: 75 secrets: 100 observability: 90 privacy: 95 llm_specific: 85 operational: 80 compliance: 90 findings: critical: 0 high: 0 medium: 3 low: 0 history: - {date: 2026-06-XX, score: 87, grade: A} next_audit_due: 2027-06-XX --- tools/score-to-dashboard.pyliest die Audit-Reports und generiert/aktualisiert die Score-Card-Pages — Idempotent- DNS:
audits.agenticventures.deals CNAME auf Cloudflare Pages oder als Subpfad in av-website (default Subdomain weil saubere Trennung)
Patterns to follow:
- Mozilla Observatory Score-Card-Layout
- av-website Hugo-Konvention fuer URL-Struktur + CSS-Custom-Properties
- securityheaders.com Pattern fuer „Re-Test Button” → bei uns „Re-Audit Schedule” Link
Test scenarios:
- Happy path:
hugo --minifybaut ohne Errors,score-to-dashboard.pygeneriert validescores.csvausaudits/2026-06-mcp-papierkram-v1.md - Edge case: Score-Card-Page ohne
history-Feld (erster Audit) rendert ohne Tabelle, mit „first audit” Hint - Edge case: Score-Card-Page mit gleichem Datum-Eintrag in History dedupliziert
- Error path: Audit-Report mit fehlendem Score im Frontmatter →
score-to-dashboard.pyfailt mit klarer Error-Message, deployed nichts - Integration: lokal
hugo server, Score-Card-Page fuer mcp-papierkram zeigt Grade A + Number 87 + 10 Sub-Score-Bars + Last-Audit-Date + Methodology-Link
Verification:
- Site rendert lokal via
hugo serverohne Errors - Score-Card-Page fuer mcp-papierkram zeigt alle Frontmatter-Felder
- GitHub-Workflow
dashboard-build.ymldeployed auf Cloudflare Pages bei Push auf main audits.agenticventures.deaufrufbar nach DNS-Setup- Visuelle Pruefung: Grade-Badge erkennbar, Methodology-Link funktioniert (auch wenn Ziel Unit 7 noch nicht da ist — dann 404 ist akzeptabel)
Aufwand: 2 halbtage
Unit 7: Methodology-Page auf av-website
- Unit 7
Goal: Vollstaendige Public-Erklaerung des Frameworks auf agenticventures.de/security-audits/methodology — Trust-Anker fuer das Dashboard.
Requirements: R7
Dependencies: Unit 1 (Spec), Unit 5 (Public-Repo fuer Cross-Links)
Files:
- Create:
~/source/av-website/content/en/security-audits/_index.md— Section-Index („Security Audits”) - Create:
~/source/av-website/content/en/security-audits/methodology.md— die Hauptseite - Create:
~/source/av-website/content/en/security-audits/example-report.md— annotierter Beispiel-Report (basierend auf Pilot-Re-Audit) - Create:
~/source/av-website/content/en/security-audits/faq.md— FAQ („Why MCP-SSF and not OWASP MCP Top 10?” → wir alignen, MCP-SSF operationalisiert. „How often is an MCP re-audited?” → 12 Monate. „What does the Tier mean?” → Tabelle. „Can I submit my MCP for audit?” → Issue-Template-Link) - Modify:
~/source/av-website/config.toml— Menu-Eintrag „Security Audits” hinzufuegen - Modify:
intern/firma/web-properties.md— Propertyagenticventures.de/security-audits/methodologyeintragen
Approach:
- Methodology-Page enthaelt:
- Was ist MCP-SSF (3-4 Saetze, kein Marketing-Sprech)
- Profile P0-P3 als Tabelle
- 10 Kategorien als kurze Beschreibung
- Scoring-Algorithmus (kurz + Link auf Public-Repo fuer Detail)
- Grade-Mapping + Tier-Mapping als Tabelle
- Re-Audit-Cadence (12 Monate, oder event-driven nach Major-Release)
- Wie reichst Du Deinen MCP ein (Issue-Template-Link)
- Lizenz-Statement (CC-BY-4.0 Spec, Apache-2.0 Tooling)
- Maintainer-Kontakt (security@agenticventures.de)
- Example-Report-Page zeigt einen anonymisierten Beispiel-Audit-Report mit Annotationen („Hier sehen Sie die Sub-Score-Aufschluesselung”, „So liest sich ein Hardening-Recommendation”, …)
- FAQ adressiert die haeufigsten Sales-Einwaende vorab
Patterns to follow:
- av-website Hugo-Theme + Brand-Voice (siehe positioning)
- Mozilla-Observatory-Methodology-Page als Strukturvorbild (https://infosec.mozilla.org/guidelines/web_security)
Test scenarios:
- Test expectation: none — statische Markdown-Seite, Validation via Build + Visual Review
- Happy path:
hugo --minifydurch av-website baut ohne Errors, Menu zeigt neuen Eintrag - Edge case: Cross-Links auf Public-Repo (
github.com/agentic-ventures/mcp-security-audits) sind klickbar - Integration: Dashboard-Methodology-Link aus Unit 6 zeigt auf diese Page → resolved 200
Verification:
agenticventures.de/security-audits/methodology(nach Deploy) zeigt Content- FAQ enthaelt mindestens 6 Fragen + Antworten
- Example-Report-Page hat mindestens 5 Annotation-Sektionen
- Methodology-Page enthaelt klaren Re-Audit-Cadence-Statement + Maintainer-Kontakt
Aufwand: 1 halbtag
System-Wide Impact
- Interaction graph:
/mcp-auditorchestriert 7 externe Tools — Tool-Versionen muessen gepinnt sein, sonst SARIF-Format-Drift bricht Merge.- Dashboard liest aus Public-Repo, Public-Repo liest (via Sync) aus Vault — Sync-Pfad muss klar dokumentiert sein, sonst Vault-Edits gehen ins Public verloren.
- Skill registriert sich im
_index.mdund in CLAUDE.md-Skill-Routing (Rule 20).
- Error propagation:
- Wenn ein Tool nicht im PATH ist, soll Skill warnen (schnell-Modus optionale Tools) oder failen (Pflicht-Tools).
- Wenn SARIF-Format ungueltig ist, Skill skippt das Tool und annotiert im Report (kein Crash).
- Wenn
score-to-dashboard.pyeinen Audit-Report ohne Score findet, failt der Build und blockiert Deploy.
- State lifecycle risks:
- Baseline-Files zwischen Audits muessen kompatibel bleiben — Format-Change ist Breaking-Change und braucht Version-Bump in MCP-SSF Spec.
- History-Eintraege im Dashboard werden append-only behandelt; bei Spec-Version-Wechsel wird neue History-Spur gestartet (kein retroactive-rescore).
- API surface parity:
- Public-Repo ist read-only-Spiegel des Vaults fuer
framework/,mcp-eigenbau.yml. Vault ist Source of Truth. audits/*.mdkoennen direkt im Public-Repo entstehen (Pilot-Re-Audit-Output landet erst im Vault, dann redacted im Public-Repo).
- Public-Repo ist read-only-Spiegel des Vaults fuer
- Integration coverage:
- Pilot-Re-Audit Unit 4 ist der Integrations-Test fuer Unit 1+3 zusammen.
- Dashboard-Build via Unit 6 ist der Integrations-Test fuer Unit 5 (Public-Repo-Struktur).
- Unchanged invariants:
security-audit-Skill bleibt unangetastet —/mcp-auditist eine engere, automatisierte Variante daneben, kein Ersatz.- Bestehende Mcp-Server-Code (mcp-papierkram etc.) wird im Rahmen dieses Plans NICHT geaendert. F1-F3-Fixes sind separater Quickwin (~1.5h, parallel zum Plan oder davor).
- CLAUDE.md Behavior Rules bleiben unangetastet — der neue Skill folgt allen Konventionen.
Risks & Dependencies
| Risk | Likelihood | Impact | Mitigation |
|---|---|---|---|
| R1 Niemand zitiert MCP-SSF (Sunk Cost) | Medium | High | Community-Standard-Pfad: CC-BY-4.0/Apache-2.0, vendor-neutraler Name, Submission an OWASP-MCP-WG (cosai-oasis/ws4) als Mapping-Beitrag, Discovery via OpenSSF-Best-Practices-Badge-Listing fuer den Public-Repo, Pitch-Deck-Update erst nach 2 Public-Audits damit Reports vorzeigbar sind |
| R2 OWASP MCP Top 10 ändert sich (v4 publisht) | High | Medium | Mapping-File ist versioniert (owasp-mcp-top-10-v3.md → -v4.md). Bestehende SSF-Controls bleiben stabil, Crossref wird ergaenzt. CI prueft Konsistenz, sodass v4-Mapping nicht alte SSF-Controls bricht. |
| R3 mcp-scan/Snyk-Akquise → Lizenz-Wechsel | Low | High | Wrappen-Layer trennt Skill-Logik von mcp-scan-spezifischer Aufruf-Syntax. Eigene wrappers/mcp_scan.py ist 50-100 Zeilen — bei Lizenz-Wechsel zu proprietary innerhalb 1-2 halbtage umstellbar auf Cisco mcp-scanner oder AWS-Sample. Letzte freie mcp-scan-Version (pre-Snyk-Akquise-Tag) wird im Skill-pyproject.toml als Fallback gepinnt. |
| R4 EU-AI-Act-Stichtag 2026-08-02 setzt Druck | High | Medium | Phase 2 schliesst bis 2026-06-15 (~4 Wochen ab heute). Phase 3 (3 MCPs re-auditieren) hat dann 6 Wochen Puffer bis Stichtag. Wenn Phase 2 sich verzoegert, wird Phase 3 verkleinert auf nur mcp-vf-hosted (das wichtigste hosted MCP), Rest verschoben. Phase 4 Launch ist nicht hart an den Stichtag gebunden. |
| R5 Tooling-CVE-Drift im Wrap-Set | Medium | Medium | uv-lock im Skill-Repo, monatlicher Re-Check via uv audit (passt zur quarterly Audit-Cadence des Plans selbst). Reife OSS (gitleaks, trivy) haben hohe Vertrauens-Baseline. Wenn ein Tool einen Critical-CVE hat, wrapper laesst sich in 30 min auf alternative Tool umstellen. |
| R6 Public-Audit deckt eigenes Critical-Finding auf | Medium | High | Pilot-Re-Audit Unit 4 ist Pre-Public-Gate. Wenn Critical/High in mcp-papierkram auftaucht → STOP, Fix-Sprint zuerst, dann Public-Push. Embargo-Policy fuer Critical/High wird im pattern-File public-mcp-audit-pattern (separates kleines Doc, entsteht zwischen Phase 2 und Phase 4) festgeschrieben. |
| R7 4 parallele Workstreams (av-voice, Welle 4, Kunden, MCP-SSF) | High | Medium | Halbtags-Slots fix planen (ein Tag pro Woche dediziert MCP-SSF), Phase 2 nicht eskalieren wenn Kunden-Arbeit reinkommt. Plan ist auf 4 Wochen gestreckt nicht 5 halbtage am Stueck. ADHS-Pattern: Aversive Spec-Schreib-Sessions in 90-min-Bloecke zerlegen, Skill-Bau (kreativer) als Reward dahinter. |
| R8 Custom-Semgrep-Rules erzeugen False Positives die Score verzerren | Medium | Low | Initial-Ruleset bewusst klein (10-15 Rules), jede Rule wird im Pilot-Re-Audit auf FPs ueberprueft. Konfidenz-Gate im schnell-Modus (8/10) filtert noisy Rules raus. Rules sind versioniert, einzeln deaktivierbar via Skill-Flag. |
| R9 Dashboard rendert visuell schwach | Medium | Medium | Mozilla-Observatory-Look als Vorlage, simple CSS ohne Framework-Abhaengigkeit. Wenn nach Unit 6 die Optik schwach ist, Iteration im Phase-4-Vorlauf, kein Blocker fuer Phase 3. |
Documentation / Operational Notes
- Skill in Vault-Index registrieren:
intern/capabilities/skills/_index.mdbekommtmcp-audit-Eintrag mit Trigger-Phrasen („audit X gegen MCP-SSF”, „score den MCP”, „SSF-Lauf”). - CLAUDE.md Routing-Tabelle aktualisieren: Eintrag fuer „Public MCP Audits Framework” mit Pointer auf Plan + Spec.
- Re-Audit-Cadence-Datei:
intern/wissen/prozesse/public-mcp-audit-pattern.md(entsteht zwischen Phase 2 und 3) enthaelt: Severity-Policy, Embargo-Regeln, Cadence (12 Monate), Disclosure-Channel. - Schedule-Trigger: Marvin-
/schedulefuer Quartals-Re-Audit-Erinnerung — kommt mit Phase 5, nicht Phase 2. - Marketing-Asset-Quartalsplan: Logo-Variante „MCP-SSF Gold/Silver” als PNG-Set fuer Pitch-Decks. Phase 4.
- DSGVO-Footprint: Public-Repo + Dashboard hosten keine personenbezogenen Daten. security.txt-Inbox
security@agenticventures.dewird Marvin manuell pruefen — keine automatisierte Triage.
Sources & References
- Origin Research-Synthese: report
- Pilot-Audit-Baseline: report, 2026-05-papierkram-audit-raw.md
- Bestehender Skill als Pattern-Anker: SKILL
- MCP Best Practices als Custom-Rules-Quelle: mcp-best-practices
- OWASP MCP Top 10: https://owasp.org/www-project-mcp-top-10/
- invariantlabs/mcp-scan (Snyk Agent-Scan): https://github.com/invariantlabs-ai/mcp-scan
- CIS Item-Format: https://www.cisecurity.org/cis-benchmarks
- MASVS Profile-Logik: https://mas.owasp.org/MASVS/
- OpenSSF Best Practices Badge Criteria: https://www.bestpractices.dev/en/criteria/0
- Cure53 Report-Beispiele: https://cure53.de/#publications
- Trail of Bits Publications: https://github.com/trailofbits/publications
- Mozilla Observatory: https://observatory.mozilla.org
- CycloneDX (SBOM-Default): https://cyclonedx.org/
- RFC 9116 security.txt: https://www.rfc-editor.org/rfc/rfc9116
- CoSAI/OASIS MCP Security WG: https://github.com/cosai-oasis/ws4-secure-design-agentic-systems
Naechster Schritt nach Plan-Approval
Eine Aktion: Unit 1 starten — framework/mcp-ssf-v0.1.md Skelett + erste 2 Kategorien (Auth + Tool-Surface, weil das die zwei mit der meisten MCP-spezifischen Substanz sind). Wenn die zwei Kategorien sitzen, ist das Item-Format kalibriert und die restlichen 8 Kategorien folgen schneller.
Optional davor: F1-F3-Quickwin in mcp-papierkram fixen (~1.5h, parallel-laufbar, macht Unit 4 sauberer weil Re-Audit dann nicht 3 alte Findings nochmal listet).
Bei Plan-Approval per go: ich starte Unit 1 direkt. Bei Aenderungswuenschen am Plan: erst Iteration.