weekly-verify
위클리-검증 (weekly-verify-mcp)
El informe de trabajo semanal redactado (.docx) se contrasta con los datos originales (.xlsx) para encontrar valores incorrectos · elementos faltantes · descripciones que contradicen los datos y devolverlos a la persona. Es un servidor MCP personal.
No corrige. Solo señala. La corrección la hace la persona.
El diseño completo está en docs/검증프로세스.md.
Estado actual — P0~P5 completados · registrado en Codex
Etapa | Contenido | Estado |
P0 | Esqueleto + conjunto de datos contaminados | ✅ |
P1 | Calificador ( | ✅ |
P2 | Parser de datos originales + motor de 5 tipos de juicio + omisión L3 | ✅ |
P3 | Extracción de afirmaciones + contraste de valores (L1·L2) + contradicción de descripción (L4) | ✅ |
P4 | Envoltorio de 10 herramientas MCP + smoke | ✅ |
P5 | Registro en Codex + verificación de arranque | ✅ |
Related MCP server: phionyx-pipeline-mcp
4 capas de verificación
Todo el diseño de esta herramienta surge de esta tabla.
Capa | Pregunta | Juicio | Severidad |
L1 Existencia | ¿Este valor existe en el original? | Código |
|
L2 Coherencia | ¿Coincide con ese campo de esa tarea? | Código |
|
L3 Omisión | ¿Falta un juicio que debería aparecer según el original? | Código |
|
L4 Interpretación | El valor es correcto pero la descripción contradice | Persona |
|
Solo con L1 no basta. Si se traslada el valor de
L-18a la fila deL-19, ambos valores existen en el original, por lo que L1 pasa. Solo L2, que verifica también el código de tarea, lo detecta.L3 es la razón de existir de esta herramienta. Lo que la gente suele equivocar en el informe semanal no son los números, sino los elementos que no escribió. Un número equivocado salta a la vista, pero una fila que falta no se ve.
L4 estructuralmente no puede ser
error.harness.Findinglo impone ytests/test_harness.pylo bloquea. Si se da poder de bloqueo a una comprobación de la que no se está seguro, los informes normales quedan bloqueados y la persona acaba apagando el verificador.
6 tipos de puerta
Lo que evals/weekly-verify.yaml exige al motor. Se califica con uv run python scripts/run_eval.py.
ID | Requisito | Bloqueo |
G1 Tasa de detección | No dejar pasar ni una contaminación de grado error de C01~C07 | ✅ |
G2 Falso positivo | No emitir error en el informe normal (C10) | ✅ |
G3 Severidad | No emitir error en C08·C09 | ✅ |
G4 Velocidad | Un informe en menos de 60 segundos | ✅ |
G5 Evidencia | Todo error completa las coordenadas obligatorias por capa | ✅ |
G6 Precisión de capa | Clasificar las observaciones encontradas en la capa correcta | ⬜ Solo observación |
El requisito de coordenadas difiere por capa (G5)
Capa | Ubicación en informe | Ubicación en original | Razón |
L1 | ✅ | — | Es un valor que no existe en el original, no hay celda que señalar |
L2 | ✅ | ✅ | Existe en ambos lados |
L3 | — | ✅ | Es un elemento que no está en el informe, no hay ubicación que señalar |
L4 | ✅ | — |
Si se rellenan a la fuerza coordenadas que no se pueden completar, la persona abrirá un lugar equivocado y creerá que lo ha verificado.
N/A no es un aprobado
Las puertas del tipo "no hagas cosas malas" (G2·G3·G5) se satisfacen solas si el motor no produce nada. Si se registran como PASS, un motor sin ninguna funcionalidad parecería haber aprobado 5 de 6. Por eso, cuando no hay base para evaluar, se registra N/A, y N/A no cuenta como aprobado.
Resultado de calificación actual (en el momento de P3 — todo aprobado)
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 examinó 12 casos de error, pero se esperaban 11. Es porque la contaminación de C01 cambió celdas de dos tablas respectivamente, y como hay que corregir ambos lugares, no es una duplicación.
Carpetas
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 엔진에게 요구하는 정책La razón de separar manifest y suite es que sus intereses son distintos — el primero es un hecho creado por el generador, así que cambia junto con el docx; el segundo es una política definida por la persona, independiente del docx. Si se fusionan en un solo archivo, los valores esperados aparecen en dos lugares y se produce deriva.
10 tipos de escenario de contaminación
data/보고서/C01~C10.docx. La detección esperada de cada archivo está en evals/fixtures_manifest.json.
Código | Tipo | Contenido sembrado | Esperado |
C01 | Manipulación numérica | L-01 progreso de esta semana 80 → 90 |
|
C02 | Fecha incorrecta | L-08 fecha de finalización planificada retrasada un día |
|
C03 | Valor mal ubicado | El 60 de L-18 en la fila de L-19 (respuesta correcta 40) |
|
C04 | Tarea inexistente | Fila L-31 añadida |
|
C05 | Omisión de retraso | Retrasos 6→3, recuento del resumen también ajustado |
|
C06 | Ocultación de no presentado | Tabla de no presentados eliminada + rellenada con valores de la semana anterior |
|
C07 | Regresión ignorada | 1 caso de regresión sin mencionar |
|
C08 | Contradicción de descripción | 64 días de retraso descritos como "avanzando sin problemas" |
|
C09 | Redondeo | 62.2% → 62% |
|
C10 | Normal | Sin contaminación |
|
C05 · C06 · C07 son el núcleo
Estos tres mantienen la coherencia interna del informe contaminado. Al eliminar los 3 retrasos, también ajustaron el recuento de la tabla resumen de 6→3. Por eso, leyendo solo el informe no hay ninguna contradicción; solo se revela al contrastar con el original. Los eliminados L-02 · L-08 · L-19 son precisamente los 3 casos en los que el responsable dejó vacía la casilla 이슈리스크.
C09 · C10 son igual de importantes
Son pruebas de prevención de falsos positivos. Nadie usa un verificador que emite error en informes normales.
Reglas de supresión — un solo error se reporta como un solo caso
Aunque la contaminación cambie solo un lugar, los valores derivados se equivocan en cadena. C02 solo retrasó un día la 계획완료일, pero también se equivocó el 경과일; C03 solo cambió el 금주진척률, pero también se equivocó el 증감. Si se señala todo tal cual, un solo error de escritura se convierte en dos observaciones, y la persona tiene que ir a buscar en dos lugares y no puede calibrar la gravedad por el número de observaciones.
# | Regla | Casos que no se suprimen |
1 | Si la tarea no existe en el original, no se contrastan los demás valores de esa fila | — (termina con 1 observación L1) |
2 | No se contrastan los valores de esta semana de tareas no presentadas | Los valores de la semana anterior sí se contrastan |
3 | Los valores derivados se omiten si el material ya fue señalado | Si el material es correcto, se señala el error del valor derivado |
4 | Se suprime la observación del recuento agregado de la categoría que ya cubrió L3 | Si el elemento es correcto y solo el recuento está mal, se señala |
La supresión no es incondicional. Cada regla se probó en pareja: el lado que se suprime y el lado que no se suprime — las reglas de supresión se derrumban silenciosamente justo en el momento en que uno piensa "esto también estaría bien que lo señalara".
Las columnas que no se verifican se declaran
En claims.미검증_열 se registraron 5 tipos con su razón (상태 es una etiqueta de juicio, así que es competencia de L3; la forma O (완료 2026-08-20) de la tabla de regresiones es formato libre, por lo que el contraste es inestable, etc.). Si se omiten en silencio, se lee como "todo verificado", pero hay columnas que en realidad no se miran.
Ejecución
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.py10 herramientas MCP
# | Herramienta | Etapa | Escritura |
1 |
| DISCOVER | |
2 |
| SOURCE | |
3 |
| BASELINE | |
4 |
| REPORT | |
5 |
| CLAIM | |
6 |
| VERIFY (L1·L2) | |
7 |
| COMPLETE (L3) | |
8 |
| NARRATE (L4) | |
9 |
| PREVIEW | |
10 |
| SAVED | ✅ |
Ruta rápida: con solo la 9 se ejecutan las cuatro capas. Las herramientas intermedias se usan para mostrar a la persona "por qué se juzgó así".
Recursos template://verification · report://{보고서}, prompt verify_weekly_report.
Guardar es un 'registro de observaciones' — el error no lo bloquea
En el borrador del diseño estaba escrito "si hay al menos un error, se rechaza el guardado", pero era una regla equivocada. Guardar es registrar las observaciones, y es precisamente cuando hay errores cuando más se necesita el registro. Si se bloquea en ese momento, la herramienta se vuelve inútil.
Lo que había que bloquear era otra cosa.
# | Condición de rechazo | Razón |
1 | El token de aprobación no coincide con el contenido actual de las observaciones | Evita que quede en el archivo contenido que la persona no ha verificado |
2 | Hay | No es un registro, es una falsedad |
La conclusión es una de 통과 · 보류 · 반송. Como el token de aprobación se calcula a partir del contenido de las observaciones, si cambia aunque sea una observación, el token deja de coincidir y se rechaza el guardado.
Estas dos condiciones están especificadas en la descripción de la herramienta save_approved_verification, y tests/test_server_contract.py contrasta la descripción con el código real y lo bloquea — el modelo no lee el código, así que una regla que no esté en la descripción no existe para el modelo.
Registro (P5)
Registro en Codex completado — en ~/.codex/config.toml está [mcp_servers.weekly-verify] (copia de seguridad: config.toml.bak-2026-08-26). Al reiniciar Codex, aparecen las herramientas.
Claude Desktop tiene %APPDATA%\Claude como ruta parcialmente bloqueada, por lo que la herramienta no puede escribirlo. Debe fusionar manualmente el contenido de config/claude_desktop_config.example.json — es un bloqueo intencionado y no se sortea.
command debe ser obligatoriamente una ruta absoluta. La aplicación de escritorio no hereda el PATH del shell de inicio de sesión, así que si solo se escribe uv, funciona en la terminal pero el servidor no arranca en la aplicación.
uv run python scripts/verify_registration.pySe verifican 3 configuraciones: los 2 ejemplos y la configuración en vivo realmente registrada. Aunque los ejemplos sean correctos, si el registro real está mal, no aparecerá en la aplicación.
Sobre los datos
Todos los datos de data/ son datos ficticios (inventados) para práctica. Los nombres de responsables son personajes de novelas clásicas, y las tareas son temas de automatización logística que no existen en la realidad. No se incluye ningún dato real de la empresa ni información personal, y no coloque archivos reales de la empresa en esta carpeta.
Los datos originales provienen de 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