Skip to main content
Glama

위클리-검증 (weekly-verify-mcp)

Написанный еженедельный отчёт о работе (.docx) сверяется с исходными данными (.xlsx), чтобы найти неверные значения · пропущенные пункты · противоречащие данным описания и вернуть их человеку — персональный MCP-сервер.

Не исправляет. Только указывает. Исправляет человек.

Полный проект см. в docs/검증프로세스.md.


Текущее состояние — P0~P5 завершено · зарегистрировано в Codex

Этап

Содержание

Статус

P0

Каркас + загрязнённый набор данных

P1

Оценщик (run_eval.py) — раньше движка проверки

P2

Парсер исходных данных + 5 типов движков проверки + L3 пропуски

P3

Извлечение утверждений + сверка значений (L1·L2) + противоречия в описаниях (L4)

P4

Обёртка 10 MCP-инструментов + смоук-тест

P5

Регистрация в Codex + проверка запуска


Related MCP server: phionyx-pipeline-mcp

4 уровня проверки

Весь проект этого инструмента исходит из этой таблицы.

Уровень

О чём спрашивает

Вердикт

Серьёзность

L1 наличие

Есть ли это значение в исходных данных

код

error

L2 согласованность

Совпадает ли с полем этой задачи

код

error

L3 пропуск

Не пропущен ли вердикт, который должен быть из исходных данных

код

error

L4 интерпретация

Значение верно, но описание противоречит

человек

warning фиксированно

  • Одного L1 недостаточно. Если значение L-18 перенести в строку L-19, оба значения существуют в исходных данных, поэтому L1 пройдёт. Только L2, который сверяет и код задачи, поймает это.

  • L3 — причина существования этого инструмента. Люди чаще ошибаются в еженедельных отчётах не в цифрах, а в незаписанных пунктах. Неверная цифра бросается в глаза, а отсутствующая строка — нет.

  • L4 структурно не может быть error. Это принудительно обеспечивает harness.Finding, а tests/test_harness.py это фиксирует. Если дать блокирующее право проверке, в которой мы не уверены, нормальные отчёты будут блокироваться, и человек выключит проверщик.


6 гейтов

evals/weekly-verify.yaml — то, что требуется от движка. Оценивается командой uv run python scripts/run_eval.py.

ID

Требование

Блокирует

G1 уровень обнаружения

Не пропустить ни одного загрязнения уровня error в C01~C07

G2 ложные срабатывания

Не выдавать error на нормальный отчёт (C10)

G3 серьёзность

Не выдавать error на C08·C09

G4 скорость

1 отчёт в течение 60 секунд

G5 обоснование

Все error заполняют обязательные координаты по уровням

G6 точность уровней

Классифицировать найденные замечания по правильному уровню

⬜ для наблюдения

Требования к координатам различаются по уровням (G5)

Уровень

Место в отчёте

Место в исходных данных

Причина

L1

Значения нет в исходных данных, поэтому нечего указать

L2

Есть с обеих сторон

L3

Пункта нет в отчёте, поэтому нечего указать

L4

Если принудительно заполнять координаты, которые невозможно заполнить, человек откроет не то место и поверит, что проверил.

N/A — это не прохождение

Гейты типа «не делай плохих вещей» (G2·G3·G5) удовлетворяются автоматически, если движок ничего не выдаёт. Если записать это как PASS, движок без единой функции выглядит так, будто прошёл 5 из 6. Поэтому, если нет оснований для оценки, записывается N/A, и N/A не считается прохождением.

Текущие результаты оценки (на момент P3 — всё пройдено)

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 проверил error 12 случаев, а ожидалось 11. Это потому, что загрязнение C01 изменило ячейки в двух таблицах по отдельности, и исправить нужно оба места, поэтому это не дубликат.


Папки

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     엔진에게 요구하는 정책

Причина разделения manifest и suite в том, что у них разные интересы — первое — это факт, созданный генератором, поэтому меняется вместе с docx, а второе — политика, установленная человеком, и не связано с docx. Если объединить в один файл, ожидаемые значения появятся в двух местах и будут дрейфовать.


10 сценариев загрязнения

data/보고서/C01~C10.docx. Ожидаемые обнаружения для каждого файла — в evals/fixtures_manifest.json.

Код

Тип

Что внедрено

Ожидание

C01

Манипуляция числами

L-01 прогресс за неделю 80 → 90

error L2

C02

Ошибка в дате

L-08 плановая дата завершения сдвинута на день

error L2

C03

Неверное размещение значения

60 из L-18 в строку L-19 (правильно 40)

error L2

C04

Несуществующая задача

Добавлена строка L-31

error L1

C05

Пропуск задержки

Задержки 6→3, количество в сводке тоже скорректировано

error L3 ×3

C06

Сокрытие непредставленного

Удалена таблица непредставленных + заполнено значениями прошлой недели

error L3 ×3

C07

Игнорирование регресса

Не упомянут 1 случай регресса

error L3

C08

Противоречие в описании

Задержка 64 дня — «идёт гладко»

warning L4

C09

Округление

62.2% → 62%

warning

C10

Нормальный

Без загрязнения

error 0 случаев

C05 · C06 · C07 — ключевые

Эти три сохраняют внутреннюю согласованность загрязнённого отчёта. Удаляя 3 задержки, одновременно исправили количество в сводной таблице с 6 на 3. Поэтому при чтении только отчёта нет никаких противоречий, и это выявляется только при сверке с исходными данными. Удалённые L-02 · L-08 · L-19 — это ровно те 3 случая, где ответственный оставил поле 이슈리스크 пустым.

C09 · C10 не менее важны

Это тест на предотвращение ложных срабатываний. Проверщик, который выдаёт error на нормальный отчёт, никто не будет использовать.


Правила подавления — одна ошибка сообщается как один случай

Даже если загрязнение изменило только одно место, производные значения ошибочны по цепочке. В C02 сдвинули только 계획완료일 на день, но 경과일 тоже стал неверным, а в C03 изменили только 금주진척률, но 증감 тоже неверен. Если указывать на всё это, одна ошибка превратится в два замечания, человек будет искать в двух местах и не сможет оценить серьёзность по количеству замечаний.

#

Правило

Случаи, не подавляемые

1

Если задачи нет в исходных данных, другие значения этой строки не сверяются

— (заканчивается 1 замечанием L1)

2

Значения текущей недели непредставленной задачи не сверяются

Значения прошлой недели сверяются как есть

3

Производные значения пропускаются, если материал уже был отмечен

Если материал верен, указывается ошибка производного значения

4

Подавляется замечание о количестве в сводке для категории, обработанной L3

Если пункты верны, а неверно только количество, указывается

Подавление не безусловно. Для каждого правила протестированы пары: подавляемая сторона и неподавляемая — правила подавления тихо рушатся в тот момент, когда хочется сказать «вот это тоже хорошо бы отметить».

Столбцы, которые не проверяются, объявляются

В claims.미검증_열 записаны 5 типов с причинами (상태 — это метка вердикта, поэтому относится к L3, форма O (완료 2026-08-20) в таблице регрессов — свободный формат, поэтому сверка нестабильна, и т.д.). Если тихо пропускать, это читается как «всё проверено», но на самом деле есть столбцы, которые не просматривались.


Запуск

uv sync --extra dev
uv run python scripts/make_fixtures.py
uv run python scripts/check_fixtures.py
uv run python scripts/run_eval.py
uv run python -m pytest -q
uv run python scripts/smoke_stdio.py
uv run python scripts/verify_registration.py

10 MCP-инструментов

#

Инструмент

Этап

Запись

1

list_verification_targets

DISCOVER

2

read_source_data

SOURCE

3

compute_baseline_findings

BASELINE

4

read_report

REPORT

5

extract_report_claims

CLAIM

6

verify_claims

VERIFY (L1·L2)

7

check_completeness

COMPLETE (L3)

8

flag_narrative_risks

NARRATE (L4)

9

preview_verification_report

PREVIEW

10

save_approved_verification

SAVED

Быстрый путь: один инструмент №9 запускает все четыре уровня. Промежуточные инструменты используются, чтобы показать человеку, «почему вынесен такой вердикт».

Ресурсы template://verification · report://{보고서}, промпт verify_weekly_report.

Сохранение — это «запись замечаний» — error не блокирует

В черновике проекта было написано «отказать в сохранении, если есть хотя бы один error», но это было неверное правило. Сохранение — это запись замечаний, и именно когда есть error, запись нужна больше всего. Если блокировать в этот момент, инструмент становится бесполезным.

Блокировать нужно было другое.

#

Условие отказа

Причина

1

Токен одобрения не совпадает с текущими замечаниями

Предотвращает попадание в файл содержимого, которое человек не проверил

2

Есть error, но заключение — «пройдено»

Это не запись, а ложь

Заключение — одно из 통과 · 보류 · 반송. Токен одобрения вычисляется из содержимого замечаний, поэтому если изменится хотя бы одно замечание, токен не совпадёт и сохранение будет отклонено.

Эти два условия явно указаны в описании инструмента save_approved_verification, а tests/test_server_contract.py сверяет описание с фактическим кодом и фиксирует это — модель не читает код, поэтому правил, которых нет в описании, для модели не существует.


Регистрация (P5)

Регистрация в Codex завершена — в ~/.codex/config.toml есть [mcp_servers.weekly-verify] (резервная копия: config.toml.bak-2026-08-26). После перезапуска Codex инструменты появятся.

Claude Desktop — %APPDATA%\Claude — частично заблокированный путь, поэтому инструмент не может туда записать. Объедините содержимое config/claude_desktop_config.example.json вручную — это намеренная блокировка, и мы её не обходим.

command обязательно должен быть абсолютным путём. Десктопное приложение не наследует PATH из логин-шелла, поэтому если написать просто uv, в терминале работает, а в приложении сервер не запускается.

uv run python scripts/verify_registration.py

Проверяются 2 примера конфигурации и фактически зарегистрированная живая конфигурация — всего 3. Даже если примеры верны, но фактическая регистрация неверна, в приложении не запустится.


О данных

Все данные в data/учебные виртуальные (вымышленные) данные. Имена ответственных — персонажи классических романов, задачи — несуществующие темы автоматизации логистики. Никаких реальных корпоративных данных или личной информации нет, и не кладите реальные корпоративные файлы в эту папку.

Исходные данные взяты из mx-agentic-ai-day1-prd.

F
license - not found
A
quality
C
maintenance

Maintenance

0Releases (12mo)
Commit activity

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

Related MCP Servers

View all related MCP servers

Latest Blog Posts

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