weekly-verify
위클리-검증 (weekly-verify-mcp)
作成された週次業務報告(.docx)を元データ(.xlsx)と突き合わせて、誤った値・欠落項目・データと食い違う記述を見つけ出して人に返す個人用MCPサーバー。
修正はしない。指摘のみする。 修正は人が行う。
全体設計は docs/검증프로세스.md を参照してください。
現在の状態 — P0〜P5完了・Codex登録済み
段階 | 内容 | 状態 |
P0 | 骨格 + 汚染データセット | ✅ |
P1 | 採点器 ( | ✅ |
P2 | 元パーサー + 判定5種エンジン + L3欠落 | ✅ |
P3 | 主張抽出 + 値突合(L1・L2) + 記述矛盾(L4) | ✅ |
P4 | MCPツール10個ラッピング + スモーク | ✅ |
P5 | Codex登録 + 起動確認 | ✅ |
Related MCP server: phionyx-pipeline-mcp
検証4階層
このツールの設計全体がこの表から生まれています。
階層 | 問うこと | 判定 | 深刻度 |
L1存在 | この値が元にあるか | コード |
|
L2整合 | 該当タスクの該当フィールドと一致するか | コード |
|
L3欠落 | 元から出るべき判定が抜けているか | コード |
|
L4解釈 | 値は正しいが記述が食い違うか | 人 |
|
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検出率 | C01〜C07 error級汚染を一つも見逃さない | ✅ |
G2誤検知 | 正常報告書(C10)にerrorを出さない | ✅ |
G3深刻度 | C08・C09にerrorを出さない | ✅ |
G4速度 | 報告書1件60秒以内 | ✅ |
G5根拠 | すべてのerrorが階層別必須座標を埋める | ✅ |
G6階層正確性 | 見つけた指摘を正しい階層に分類する | ⬜ 観察用 |
座標要求が階層ごとに異なる (G5)
階層 | 報告書位置 | 元位置 | 理由 |
L1 | ✅ | — | 元にない値なので指し示すセルがない |
L2 | ✅ | ✅ | 両方にある |
L3 | — | ✅ | 報告書にない項目なので指し示す位置がない |
L4 | ✅ | — |
埋められない座標を無理に埋めると、人が見当違いの場所を開いて確認したと思い込んでしまいます。
N/Aは合格ではない
「悪いことをするな」系ゲート(G2・G3・G5)はエンジンが何も出さなければ自動的に
満たされます。 それをPASSと書くと、機能が一つもないエンジンが6つのうち5つを通過したように
見えます。そこで評価する根拠がなければ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の汚染が2つの表のセルをそれぞれ 変えたためであり、両方直す必要があるので重複ではありません。
フォルダ
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とは無関係です。
1つのファイルにまとめると期待値が2か所に生まれてドリフトします。
汚染シナリオ10種
data/보고서/C01~C10.docx。各ファイルの期待検出はevals/fixtures_manifest.jsonにあります。
コード | タイプ | 仕込む内容 | 期待 |
C01 | 数値改ざん | L-01 今週進捗率 80 → 90 |
|
C02 | 日付誤り | L-08 計画完了日を1日ずらす |
|
C03 | 値の配置ミス | L-18の60をL-19行に (正解40) |
|
C04 | 存在しないタスク | L-31 行を追加 |
|
C05 | 遅延漏れ | 遅延 6→3件、要約件数も一緒に調整 |
|
C06 | 未提出隠蔽 | 未提出表を削除 + 前週値で埋める |
|
C07 | 逆行無視 | 逆行1件に言及しない |
|
C08 | 記述矛盾 | 64日遅延を「順調に進行中」 |
|
C09 | 四捨五入 | 62.2% → 62% |
|
C10 | 正常 | 汚染なし |
|
C05・C06・C07が核心だ
この3つは汚染された報告書の内部整合を維持します。 遅延3件を消しながら要約表の件数も
6→3に一緒に直しました。だから報告書だけ読んでも何の矛盾もなく、元と突き合わせて初めて
明らかになります。削除したL-02・L-08・L-19は、担当者が이슈리스크欄を空欄にしたまさにその3件です。
C09・C10もそれと同じくらい重要だ
誤検知防止テストです。正常な報告書にerrorを出す検査器は誰も使いません。
抑制ルール — 一度のミスを1件として報告する
汚染が1か所だけ変わっても派生値が連鎖で間違います。C02は계획완료일だけ1日ずらしたのに
경과일も一緒に間違い、C03は금주진척률だけ変えたのに증감も間違います。そのまま指摘すると
一度の書き間違いが指摘2件になり、人が2か所を探し回り、指摘件数で深刻度を
推し量ることもできなくなります。
# | ルール | 抑制されない場合 |
1 | タスクが元にない場合はその行の他の値は突合しない | — (L1指摘1件で終了) |
2 | 未提出タスクの今週値は突合しない | 前週値はそのまま突合する |
3 | 派生値は材料がすでに指摘されていればスキップする | 材料が正しければ派生値の誤りを指摘する |
4 | L3が扱った区分の集計件数指摘を抑止する | 項目は正しく件数だけ間違っていれば指摘する |
抑制は無条件ではありません。 各ルールごとに抑制される側と抑制されない側をペアで テストしました — 抑制ルールは「これも指摘してほしい」と思う瞬間に静かに崩れます。
検証しない列は宣言する
claims.미검증_열に5種を理由とともに書いてあります (상태は判定ラベルなのでL3所管、
逆行表のO (완료 2026-08-20)形式は自由書式なので突合が不安定、など)。静かに
スキップすると「すべて検証した」と読まれるのに、実際には見ていない列があります。
実行
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.pyMCPツール10個
# | ツール | 段階 | 書き込み |
1 |
| DISCOVER | |
2 |
| SOURCE | |
3 |
| BASELINE | |
4 |
| REPORT | |
5 |
| CLAIM | |
6 |
| VERIFY (L1·L2) | |
7 |
| COMPLETE (L3) | |
8 |
| NARRATE (L4) | |
9 |
| PREVIEW | |
10 |
| SAVED | ✅ |
高速パス: 9番だけで4階層すべてを実行します。中間ツールは「なぜそう判定したか」を 人に見せるときに使います。
リソース template://verification・report://{보고서}、プロンプト verify_weekly_report。
保存は「指摘記録」である — errorはブロックしない
設計草案には「errorが1つでもあれば保存を拒否する」と書いてありましたが、間違った
ルールでした。 保存するのは指摘記録であり、errorがあるときこそ記録が最も必要な
ときです。そこでブロックするとツールが役に立たなくなります。
ブロックすべきは別のものでした。
# | 拒否条件 | 理由 |
1 | 承認トークンが現在の指摘内容と不一致 | 人が確認していない内容がファイルに残るのを防ぐ |
2 |
| 記録ではなく嘘になる |
結論は통과・보류・반송のいずれかです。承認トークンは指摘内容から計算されるので、
指摘が1つでも変わるとトークンが食い違い保存が拒否されます。
この2条件は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から取得しました。
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