weekly-verify
wöchentlich-verifizieren (weekly-verify-mcp)
Vergleicht den erstellten Wochenarbeitsbericht (.docx) mit den Quelldaten (.xlsx) und meldet der Person falsche Werte · fehlende Einträge · von den Daten abweichende Beschreibungen zurück – ein persönlicher MCP-Server.
Es korrigiert nicht. Es weist nur hin. Die Korrektur übernimmt der Mensch.
Das Gesamtdesign finden Sie in docs/검증프로세스.md.
Aktueller Stand — P0~P5 abgeschlossen · bei Codex registriert
Phase | Inhalt | Status |
P0 | Grundgerüst + kontaminierter Datensatz | ✅ |
P1 | Bewertungsprogramm ( | ✅ |
P2 | Quellparser + 5 Bewertungs-Engines + L3-Fehler | ✅ |
P3 | Behauptungsextraktion + Wertabgleich (L1·L2) + Beschreibungskonflikt (L4) | ✅ |
P4 | 10 MCP-Tools verpackt + Smoke-Test | ✅ |
P5 | Codex-Registrierung + Startprüfung | ✅ |
Related MCP server: phionyx-pipeline-mcp
Die 4 Verifikationsebenen
Das gesamte Design dieses Tools leitet sich aus dieser Tabelle ab.
Ebene | Frage | Bewertung | Schweregrad |
L1 Existenz | Ist dieser Wert in der Quelle vorhanden? | Code |
|
L2 Konsistenz | Stimmt er mit dem entsprechenden Feld der entsprechenden Aufgabe überein? | Code |
|
L3 Fehlen | Fehlt eine Bewertung, die aus der Quelle hätte kommen müssen? | Code |
|
L4 Interpretation | Der Wert stimmt, aber die Beschreibung weicht ab. | Mensch |
|
L1 allein reicht nicht aus. Wenn man den Wert von
L-18in die Zeile vonL-19überträgt, sind beide Werte in der Quelle vorhanden, also besteht L1. Nur L2, das auch die Aufgabenkennung prüft, fängt das ab.L3 ist der Existenzgrund dieses Tools. Menschen machen bei Wochenberichten meist keine Zahlenfehler, sondern vergessene Einträge. Falsche Zahlen fallen auf, fehlende Zeilen nicht.
L4 kann strukturell kein
errorsein.harness.Findingerzwingt dies undtests/test_harness.pyverankert es. Wenn man einer unsicheren Prüfung Blockierbefugnis gibt, werden normale Berichte blockiert und der Mensch schaltet den Prüfer ab.
Die 6 Gates
evals/weekly-verify.yaml fordert dies von der Engine. Bewertung mit uv run python scripts/run_eval.py.
ID | Anforderung | Blockiert |
G1 Erkennungsrate | Kein einziges error-Level-Kontaminat von C01~C07 wird übersehen | ✅ |
G2 Fehlalarm | Kein error bei normalen Berichten (C10) | ✅ |
G3 Schweregrad | Kein error bei C08·C09 | ✅ |
G4 Geschwindigkeit | Ein Bericht in 60 Sekunden | ✅ |
G5 Begründung | Jeder error füllt die Pflichtkoordinaten der jeweiligen Ebene | ✅ |
G6 Ebenengenauigkeit | Klassifiziert gefundene Hinweise in die richtige Ebene | ⬜ nur Beobachtung |
Die Koordinatenanforderungen unterscheiden sich je Ebene (G5)
Ebene | Berichtsposition | Quellposition | Grund |
L1 | ✅ | — | Der Wert ist in der Quelle nicht vorhanden, es gibt also keine Zelle, auf die man verweisen kann |
L2 | ✅ | ✅ | Auf beiden Seiten vorhanden |
L3 | — | ✅ | Der Eintrag ist im Bericht nicht vorhanden, es gibt also keine Position, auf die man verweisen kann |
L4 | ✅ | — |
Wenn man nicht füllbare Koordinaten gewaltsam füllt, öffnet der Mensch die falsche Stelle und glaubt trotzdem, geprüft zu haben.
N/A ist kein Bestehen
Gates der Art „Tue nichts Schlechtes" (G2·G3·G5) sind automatisch erfüllt, wenn die Engine nichts liefert. Wenn man das als PASS einträgt, sieht es so aus, als hätte eine Engine ohne jede Funktion 5 von 6 bestanden. Deshalb wird N/A eingetragen, wenn es keine Grundlage zur Bewertung gibt, und N/A zählt nicht als Bestehen.
Aktuelles Bewertungsergebnis (Stand P3 — alles bestanden)
C01 수치 조작 [OK] 1/1 C05 지연 누락 [OK] 3/3 C09 반올림 [OK] 0/0
C02 날짜 오기 [OK] 1/1 C06 미제출 은폐 [OK] 3/3 C10 정상 [OK] 오탐 0
C03 값 오배치 [OK] 1/1 C07 역행 무시 [OK] 1/1
C04 없는 과제 [OK] 1/1 C08 서술 상충 [OK] 0/0
[PASS] G1_검출률 11/11 (100%) [PASS] G4_속도 최장 0.1초 / 제한 60초
[PASS] G2_오탐 error 0건 [PASS] G5_근거 좌표 누락 0건 / error 12건
[PASS] G3_심각도 위반 0건 [PASS] G6_계층정확성 11/11 (100%)G5 hat 12 errors geprüft, erwartet waren 11. Das liegt daran, dass die Kontamination von C01 jeweils eine Zelle in zwei Tabellen verändert hat. Beide Stellen müssen korrigiert werden, es handelt sich also nicht um eine Dublette.
Ordner
weekly-verify-mcp/
├─ docs/검증프로세스.md 설계 문서 (13개 절)
├─ src/weekly_verify/
│ ├─ harness.py 도구 응답 규약 · Finding · 두 좌표계
│ ├─ sources.py 원본 xlsx 파서 + DATA_ROOT 가드
│ ├─ findings.py 판정 5종 (원본만 보고 계산)
│ ├─ report.py 보고서 docx 파서
│ ├─ claims.py 주장 추출 (규칙 기반, LLM 미사용)
│ ├─ values.py L1 존재 · L2 정합 + 억제 규칙 3종
│ ├─ completeness.py L3 누락 검사
│ ├─ narrative.py L4 서술 상충 (warning 고정)
│ ├─ verify.py 진입점 — 네 계층 조립 + 계층 간 중복 제거
│ ├─ record.py 검증 결과 문서 생성·저장 + 승인 토큰
│ └─ server.py MCP 도구 10개 · 리소스 2 · 프롬프트 1
├─ scripts/
│ ├─ make_fixtures.py 오염 시나리오 10종 생성
│ ├─ check_fixtures.py 픽스처 자기검증 (30개 검사)
│ ├─ run_eval.py 채점기 (게이트 6종)
│ ├─ smoke_stdio.py stdio 기동 + 하네스 검사 15종
│ └─ verify_registration.py 설정 파일의 절대경로로 기동 확인
├─ tests/
│ ├─ test_harness.py 하네스 규약 잠금 (16개)
│ ├─ test_eval_contract.py 채점기 검증 — 가짜 엔진 7종 (20개)
│ ├─ test_findings.py 판정 엔진 ↔ 정답지 1건씩 대조 (27개)
│ ├─ test_completeness.py L3 누락 검사 (31개)
│ ├─ test_values.py L1·L2 + 억제 규칙 (53개)
│ ├─ test_narrative.py L4 서술 상충 (43개)
│ └─ test_server_contract.py docstring ↔ 실제 규칙 잠금 (63개)
├─ data/
│ ├─ 원본/ ← 서버가 읽는 유일한 곳
│ │ ├─ 마스터_주간보고_누적.xlsx
│ │ └─ 제출_2026-W35/ (담당자 6명)
│ ├─ 보고서/ C01~C10.docx 검증 대상
│ └─ 출력/ 검증 결과 기록 (저장 산출물)
├─ config/ 등록 설정 + README
├─ templates/ 검증 결과 문서 템플릿
└─ evals/ 🚫 서버 접근 금지 — evals/README.md 참조
├─ 정답지_2026-W35.xlsx
├─ fixtures_manifest.json 픽스처가 담고 있는 사실
└─ weekly-verify.yaml 엔진에게 요구하는 정책Der Grund für die Trennung von manifest und suite sind unterschiedliche Zuständigkeiten – ersteres sind vom Generator erzeugte Fakten, die sich mit dem docx ändern, letzteres ist eine von Menschen festgelegte Richtlinie, die unabhängig vom docx ist. Fasst man sie in einer Datei zusammen, entstehen Erwartungswerte an zwei Stellen und es kommt zu Drift.
Die 10 Kontaminationsszenarien
data/보고서/C01~C10.docx. Die erwartete Erkennung für jede Datei steht in evals/fixtures_manifest.json.
Code | Typ | Eingepflanzter Inhalt | Erwartung |
C01 | Zahlenmanipulation | L-01 Wochenfortschritt 80 → 90 |
|
C02 | Falsches Datum | L-08 geplantes Abschlussdatum um einen Tag verschoben |
|
C03 | Wert falsch platziert | 60 von L-18 in Zeile L-19 (richtig: 40) |
|
C04 | Nicht existierende Aufgabe | Zeile L-31 hinzugefügt |
|
C05 | Verzögerung verschwiegen | Verzögerungen 6→3, Anzahl in der Zusammenfassung ebenfalls angepasst |
|
C06 | Nichtabgabe verheimlicht | Tabelle der Nichtabgaben gelöscht + mit Vorwochenwerten gefüllt |
|
C07 | Rückschritt ignoriert | 1 Rückschritt nicht erwähnt |
|
C08 | Beschreibungskonflikt | 64 Tage Verzögerung als „läuft reibungslos" |
|
C09 | Rundung | 62,2 % → 62 % |
|
C10 | Normal | Keine Kontamination |
|
C05 · C06 · C07 sind der Kern
Diese drei halten die interne Konsistenz des kontaminierten Berichts aufrecht. Beim Löschen der 3 Verzögerungen wurde auch die Anzahl in der Übersichtstabelle von 6 auf 3 korrigiert. Beim bloßen Lesen des Berichts gibt es also keinen Widerspruch – es wird erst im Abgleich mit der Quelle sichtbar. Die gelöschten L-02 · L-08 · L-19 sind genau die 3 Einträge, bei denen der Verantwortliche das Feld 이슈리스크 leer gelassen hat.
C09 · C10 sind genauso wichtig
Das sind Fehlalarm-Tests. Einen Prüfer, der bei normalen Berichten error ausgibt, benutzt niemand.
Unterdrückungsregeln — ein Fehler wird als ein Fall gemeldet
Selbst wenn nur eine Stelle kontaminiert ist, werden abgeleitete Werte in einer Kette falsch. Bei C02 wurde nur das 계획완료일 um einen Tag verschoben, aber auch 경과일 wird falsch; bei C03 wurde nur 금주진척률 geändert, aber auch 증감 wird falsch. Wenn man das so meldet, wird ein einmaliger Schreibfehler zu zwei Hinweisen, der Mensch muss zwei Stellen suchen und kann die Schwere nicht mehr an der Anzahl der Hinweise ablesen.
# | Regel | Nicht unterdrückter Fall |
1 | Wenn die Aufgabe nicht in der Quelle ist, werden die anderen Werte dieser Zeile nicht abgeglichen | — (endet mit 1 L1-Hinweis) |
2 | Wochenwerte nicht abgegebener Aufgaben werden nicht abgeglichen | Vorwochenwerte werden weiterhin abgeglichen |
3 | Abgeleitete Werte werden übersprungen, wenn die Grundlage bereits beanstandet wurde | Wenn die Grundlage stimmt, wird der Fehler im abgeleiteten Wert beanstandet |
4 | Aggregat-Anzahlhinweise für Kategorien, die L3 behandelt, werden unterdrückt | Wenn die Einträge stimmen und nur die Anzahl falsch ist, wird beanstandet |
Unterdrückung ist nicht bedingungslos. Für jede Regel wurde das Paar aus unterdrückter und nicht unterdrückter Seite getestet – Unterdrückungsregeln brechen genau in dem Moment still zusammen, in dem man denkt „das wäre auch noch ein netter Hinweis".
Nicht geprüfte Spalten werden deklariert
In claims.미검증_열 sind 5 Arten mit Begründung festgehalten (상태 ist ein Bewertungslabel und damit Sache von L3, die Form O (완료 2026-08-20) in der Rückschritt-Tabelle ist Freitext und daher im Abgleich instabil, usw.). Wenn man still überspringt, liest es sich als „alles geprüft", obwohl es tatsächlich Spalten gibt, die nicht angesehen wurden.
Ausführung
uv sync --extra devuv run python scripts/make_fixtures.pyuv run python scripts/check_fixtures.pyuv run python scripts/run_eval.pyuv run python -m pytest -quv run python scripts/smoke_stdio.pyuv run python scripts/verify_registration.pyDie 10 MCP-Tools
# | Tool | Phase | Schreibend |
1 |
| DISCOVER | |
2 |
| SOURCE | |
3 |
| BASELINE | |
4 |
| REPORT | |
5 |
| CLAIM | |
6 |
| VERIFY (L1·L2) | |
7 |
| COMPLETE (L3) | |
8 |
| NARRATE (L4) | |
9 |
| PREVIEW | |
10 |
| SAVED | ✅ |
Schnellweg: Mit Nummer 9 allein laufen alle vier Ebenen. Die Zwischentools dienen dazu, dem Menschen zu zeigen, „warum so bewertet wurde".
Ressourcen template://verification · report://{보고서}, Prompt verify_weekly_report.
Speichern ist ein 'Hinweisprotokoll' — error blockiert nicht
Im Designentwurf stand „Speichern wird verweigert, wenn auch nur ein error vorliegt" – das war eine falsche Regel. Das Speichern ist das Protokollieren von Hinweisen, und gerade bei einem error ist das Protokoll am nötigsten. Wenn man dann blockiert, wird das Tool nutzlos.
Was blockiert werden muss, war etwas anderes.
# | Ablehnungsbedingung | Grund |
1 | Genehmigungstoken stimmt nicht mit dem aktuellen Hinweisinhalt überein | Verhindert, dass nicht vom Menschen geprüfte Inhalte in der Datei landen |
2 |
| Es wird kein Protokoll, sondern eine Lüge |
Die Schlussfolgerung ist eine von 통과 · 보류 · 반송. Da das Genehmigungstoken aus dem Hinweisinhalt berechnet wird, weicht das Token ab, sobald sich auch nur ein Hinweis ändert, und das Speichern wird verweigert.
Diese beiden Bedingungen sind in der Toolbeschreibung von save_approved_verification explizit angegeben, und tests/test_server_contract.py verankert den Abgleich zwischen Beschreibung und tatsächlichem Code – das Modell liest keinen Code, also existieren Regeln, die nicht in der Beschreibung stehen, für das Modell nicht.
Registrierung (P5)
Codex-Registrierung abgeschlossen — in ~/.codex/config.toml ist [mcp_servers.weekly-verify] enthalten (Backup: config.toml.bak-2026-08-26). Nach einem Neustart von Codex erscheint das Tool.
Bei Claude Desktop ist %APPDATA%\Claude ein teilweise blockierter Pfad, das Tool kann dort nicht hineinschreiben. Bitte den Inhalt von config/claude_desktop_config.example.json manuell zusammenführen – das ist eine beabsichtigte Blockierung und wird nicht umgangen.
command muss zwingend ein absoluter Pfad sein. Desktop-Apps erben die PATH-Variable der Login-Shell nicht; wenn man nur uv schreibt, funktioniert es im Terminal, aber in der App startet der Server nicht.
uv run python scripts/verify_registration.pyEs werden 3 Konfigurationen geprüft: 2 Beispielkonfigurationen und die tatsächlich registrierte Live-Konfiguration. Selbst wenn die Beispiele stimmen, startet die App nicht, wenn die tatsächliche Registrierung falsch ist.
Zu den Daten
Alle Daten in data/ sind Übungsdaten (fiktiv). Die Verantwortlichennamen stammen aus klassischen Romanfiguren, die Aufgaben sind nicht existierende Logistikautomatisierungsthemen. Es sind keinerlei interne Echt- oder Personendaten enthalten, und bitte legen Sie keine echten internen Dateien in diesen Ordner.
Die Quelldaten stammen aus mx-agentic-ai-day1-prd.
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 Connectors
Verifies AI agent work end to end: real artifacts and outcomes checked, not self-reported success.
PDF, photo, email, and file comparison evidence checks with plain-language reports.
Messy spreadsheets in, clean checkable tables out. Every result carries its arithmetic proof.
Fact-checks generated content against your sources of truth showing what to trust, change, & verify.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceThis MCP server verifies that an agent’s claimed tool output matches the actual response returned by a tool to prevent invented or distorted results. It flags mismatches, omissions, and invented fields to ensure downstream logic only processes verified tool data.
- AlicenseAqualityAmaintenanceEnables verification of AI coding agent self-reports against git diff truth and a deterministic gate, producing pass/regenerate/reject directives to ensure claimed work matches actual changes.6AGPL 3.0
- AlicenseAqualityBmaintenanceCompare design and implementation screenshots using pixel-by-pixel analysis, generating visual diff images and metrics.119MIT
- FlicenseNot gradedqualityBmaintenanceEnables to extract project handover evidence and check material completeness against requirements without making approval decisions.
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/asuramama-hue/weekly-verify-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server