lab-notebook-mcp Phase 1 arc chat-Claude 「実験ノート MCP」 設計書 → independent MCP 実装 (Rei stack MCP 4 → 5 systems)

lab-notebook-mcp Phase 1 arc — 実験ノート MCP independent 実装 (benchtop v0.4 との 使い分け明示)

2026-08-17 chat-Claude 詳細設計書 (docs/design.md、 12 section) 由来 の 実装 arc。 benchtop v0.4.0 に 実験ノート features を 統合した 直後、 chat-Claude が 「independent MCP として 分離が clean」 と 別 提案 → 私 (Claude Code) 「lab-notebook-mcp 設計は 遥かに 構造化」 認識 → 藤本さん 「YES 進めて」 承認。 SQLite 10 table + ro/rw mode gating + append-only supersede + content-addressed artifact + prompt injection 対策の Phase 1 実装、 pytest 23/23 全 PASS。 藤本伸樹 × chat-Claude × Claude Code / 2026-08-17

1. Rei stack MCP architecture 更新 (4 → 5 systems)

Before 本 arc (4 systems):
  rei-aios (32 tools)             理論・自律学習
  benchtop v0.4.0 (11 tools)       測定器制御 + quick session notes
  mcp-lens                          上流 intercept
  rei-automator-mcp v0.1            自動化

After 本 arc (5 systems、 責務 clean separation):
  rei-aios (32 tools)             理論・自律学習
  benchtop v0.4.0 (11 tools)       測定器制御 + quick session-level notes
  lab-notebook-mcp v0.1.0 (21 tools rw / 9 tools ro)    ★ 新規
                                    structured multi-session records
                                    experiment × run × dut × condition ×
                                    measurement × artifact × note × link ×
                                    baseline × safety_limit の永続化
  mcp-lens                          上流 intercept
  rei-automator-mcp v0.1            自動化

chat-Claude 「+4 MCP → AI 選択劣化」 warning に 抵触するか?

今回の +1 (lab-notebook-mcp) は warning に 抵触しない設計:

  • 各 MCP の 責務が clean separation (I/O / 永続化 / 推論 の 三者分業)
  • 相互 HTTP/IPC 依存なし、 ID sharing のみ (mystery_id / benchtop_session_id / target_id)
  • ro モードで rei-aios 自律ループから 参照 = write 権限は Claude Code / Cowork Claude のみ
  • 5 systems は 前 turn 「+4 MCP → 8 systems」 warning の 半分以下

2. Phase 1 実装内容 (lab-notebook-mcp commit a2d7f64)

コードベース (12 file、 ~1,200 line、 pyproject.toml + CLAUDE.md + README.md 含む)

Module役割Line count 目安
config.pyenv vars parse (LAB_NOTEBOOK_MODE default 'ro' 安全側)~70
db.pySQLite 接続 + mode-aware URI (ro=file:...?mode=ro 二重防御)~90
schema.sql10 table (experiment/run/dut/condition/measurement/artifact/note/link/baseline/safety_limit)~140
hashing.pycondition_hash (int/float 正規化 6桁 SHA-256 先頭 16) + file_sha256~65
store.pycontent-addressed artifact storage (path 封じ込め + 0o444 read-only)~115
provenance.pyexternal note ラップ (<external-content> + prompt injection 警告付加)~65
tools_read.py9 read tools (stats/search_experiments/get_experiment/list_runs/get_run/list_artifacts/resolve_artifact/list_links/find_by_link)~200
tools_write.py12 write tools (create_experiment/update_status/upsert_dut/start_run/record_measurements/finish_run/supersede_run/add_note/add_link/set_baseline/set_safety_limit/attach_artifact)~300
server.pymode-based tool 登録 (ro で write tool 登録なし = §5.1 核心)~200
__main__.pystdio entry point~20

Tests (pytest 23/23 全 PASS)

Selftest 実測 (2026-08-17): 23/23 全 PASS (2.05 sec)
  • test_mode_gating.py (7) ★ 最重要 (§9): ro で write tool 一切なし / rw で 21 tools 全登録 / ro connection INSERT 拒否 / default 'ro' / invalid mode ValueError / execute_sql 系 存在なし (§5.4)
  • test_condition_hash.py (7): 順序独立 / int-float 正規化 (25==25.0==25.00) / 6桁丸め / 単位違い別hash / 空 conditions 決定論的 / 16 hex 桁
  • test_append_only.py (5): delete/drop/remove/purge/truncate 名 tool 存在なし / supersede 後 default 除外 + include_superseded 復元 / agent-provenance note 自動追記 / 自 supersede 拒否 / tools_write 全体 delete 経路なし
  • test_schema.py (4): end-to-end workflow (実験→DUT→run→measurements→finish→get で spec 自動判定 verdict 確認) / slug 重複 structured error / link add+find_by_link / external note source_ref 必須+ 読み取り時 wrap

3. Design 原則 実装状態 (§5 + §3.4 準拠)

原則実装test
Append-only削除ツール 実装せず、 supersede pattern + supersede_by columntest_append_only 5/5 PASS
モード gatingro で write tool 登録なし + SQLite ro URI 二重防御test_mode_gating 7/7 PASS
任意 SQL 禁止execute_sql 系 意図的 未実装、 型付き専用 tools のみtest_no_arbitrary_sql_tool_registered PASS
外部由来テキスト ラップ<external-content source="..." trust="untrusted"> + top-level _external_warningtest_note_external_wrapped_on_read PASS
測定器 未 touchbenchtop 依存なし、 SQLite/artifact のみschema/deps に 測定 code なし
アーティファクト 中身返さないlist_artifacts + resolve_artifact は path/sha256/bytes のみtools_read 実装で 中身 read なし
パス封じ込めPath.resolve() + LAB_NOTEBOOK_INGEST_DIRS 配下確認 (symlink 脱出も 拒否)Phase 2 test_artifact_store で 追加 verify 予定
個人情報 構造的持たないschema に 氏名/email/住所 列なし、 operator 16 char 警告 (拒否せず)schema.sql 全 column 確認

4. benchtop v0.4.0 との responsibility overlap + 使い分け明示

Overlap の 事実: 前 turn で 実装した benchtop v0.4.0 の 実験ノート features (Session extension + find_similar_sessions + regression_check + mystery_id) は、 lab-notebook-mcp の 中核機能と 部分的 overlap。 chat-Claude が 「独立 MCP として 分離」 提案 した経緯 = 私 前 turn 推奨 (benchtop 内 拡張) と 別解、 両方 実装 完了。
用途benchtop v0.4.0lab-notebook-mcp v0.1.0
粒度単発 session に メタデータ付ける (subject, environment, instrument_config, mystery_id)experiment × run × dut × condition × measurement × artifact × note × link × baseline × safety_limit の 10 layer structured
SchemaSession dataclass 4 optional fieldSQLite 10 table + condition_hash + verdict + provenance + append-only
Mode常時 rw (単一 client 想定)ro/rw 二重防御 (rei-aios 自律ループ ro 参照可能)
Integrityv0.3.0 audit log hash chain (tool 呼び出し 全記録)SQLite WAL + append-only + supersede + agent-provenance audit note
Artifactなし (session_id.json のみ)content-addressed sha256/2-level dir + 0o444 read-only + dedup
Prompt injectionなし<external-content> ラップ + top-level warning
用途 targetquick session-level notes (簡単な 1 実験の 単発記録)structured multi-session records (professional lab notebook、 校正証明書、 監査対応)

推奨 usage 指針:

  • 個人 hobby 実験 / 単発 debug / 探索: benchtop v0.4.0 のみ で 十分
  • professional lab / 校正記録 / 監査対応 / 長期 experiment × 多 run: lab-notebook-mcp 使用 (benchtop で measure → benchtop_session_id を lab_start_run に 渡す 併用 workflow)
  • rei-aios 側 自律ループ から 参照: lab-notebook-mcp を LAB_NOTEBOOK_MODE=ro で 参照、 benchtop の session store は 別途

5. 動作確認手順 (藤本さん実施用)

Step 1: 依存インストール + テスト実行

# lab-notebook-mcp repo に入って dev deps install
cd C:\Users\user\lab-notebook-mcp
python -m pip install -e ".[dev]"

# 全 test 実行 (23/23 全 PASS 期待)
python -m pytest -v

Step 2: rw モード で サーバー 起動 (手動 stdio、 一度 DB 初期化)

# Windows PowerShell
$env:LAB_NOTEBOOK_MODE = "rw"
$env:LAB_NOTEBOOK_ROOT = "$env:USERPROFILE\lab-notebook"
python -m lab_notebook
# → stdio で サーバー 起動、 Ctrl+C で 停止
# 初回起動時 に notebook.db 作成 (~/lab-notebook/notebook.db)

Step 3: Claude Desktop に 登録 (rw モード)

// %APPDATA%\Claude\claude_desktop_config.json に 追記
{
  "mcpServers": {
    "lab-notebook": {
      "command": "python",
      "args": ["-m", "lab_notebook"],
      "env": {
        "LAB_NOTEBOOK_MODE": "rw",
        "LAB_NOTEBOOK_ROOT": "C:\\Users\\user\\lab-notebook",
        "LAB_NOTEBOOK_INGEST_DIRS": "C:\\Users\\user\\lab-notebook\\inbox"
      }
    }
  }
}
// Claude Desktop 再起動

Step 4: Claude Desktop 上で 動作確認

「使える tool を全部挙げて」
→ lab_stats, lab_search_experiments, lab_get_experiment, lab_list_runs,
   lab_get_run, lab_list_artifacts, lab_resolve_artifact, lab_list_links,
   lab_find_by_link, lab_create_experiment, lab_update_experiment_status,
   lab_upsert_dut, lab_start_run, lab_record_measurements, lab_finish_run,
   lab_supersede_run, lab_add_note, lab_add_link, lab_set_baseline,
   lab_set_safety_limit, lab_attach_artifact (21 tools 全 見える)

「experiment 作って、 run 1 つ 記録して、 後で 読み出して」
→ create_experiment → start_run → record_measurements → finish_run → get_run
   の 一連 workflow が 動く

Step 5: ro モード verify (rei-aios 自律ループ 用途)

# rw で 一度 DB 初期化した 後、 ro で 別 process 起動
$env:LAB_NOTEBOOK_MODE = "ro"
$env:LAB_NOTEBOOK_ROOT = "$env:USERPROFILE\lab-notebook"
python -m lab_notebook
# ro で 起動、 write tool は tool 一覧に 存在しない
# rei-aios 側 config に ro で 登録すれば 自律ループから 参照専用可能

6. Phase 2-4 remaining (未着手、 Phase 1 完了後 pause)

Phase内容完了条件
P1 ✅config / db / schema / hashing / 読み書き基本 + mode gatingmode gating + append-only tests 全通過 ← 本日 完了
P2store.py アーティファクト保管 (✅ 部分実装済) + パス封じ込め test 完全網羅path 封じ込め + provenance test 全通過
P3analysis.py (compare / history / regression) + baseline回帰検出 test 全通過
P4link 系 tool + rei-aios / benchtop / git 相互参照 + README 整備実機測定 1 件 record → 再現 verify

Phase 2-4 は 藤本さん判断で 別 session 継続 or 保留。 Phase 1 で 「実験を作り、 run を記録し、 後から 読み出せる」 = 実運用 開始可能 粒度 (§10 準拠)。

7. Cross-pollination pattern (Rei stack Type 1 移送 拡張)

2026-08-17 累計 cross-pollination 4 段階:

  1. Rei-Automator STEP 1340 audit-log.ts (TypeScript、 hash chain origin) → primitive 実装
  2. benchtop v0.3.0 audit_log.py (Python) → 同 primitive の Python port (直接 移送)
  3. benchtop v0.4.0 experiment notebook (Python) → 実験ノート features を benchtop 内 拡張 (深化)
  4. lab-notebook-mcp v0.1.0 (Python) → 実験ノート features を independent MCP として 分離 (別 architectural approach、 SQLite + append-only + mode gating = 別方式 integrity)

chat-Claude new-idea §I 5 手 の Type 1 移送 の 更に強い evidence: 同 concept (「証跡が価値になる領域」 の primitive) が 3 別 substrate (Rei-Automator hash chain / benchtop v0.4 session extension / lab-notebook SQLite append-only) で 独立実装、 architectural choice の diversity が Rei stack cross-pollination 力の 上限を 定量化。

8. Honest scope

Novelty ゼロ: SQLite + append-only + sha256 artifact CAS は 既知 primitive の 集約 (ELN 系 商用 多数存在)、 Rei stack は 命名 + design.md §5 セキュリティ設計 の 統合 layer + Rei stack との ID linking 契約 のみ。 数学的発見ではない。
実 ISO/IEC 17025 認定 未達: primitive + workflow 骨格 は Phase 1 で 揃った、 実 監査人 verify や 認定機関 review は 未実施。 GMP 21 CFR Part 11 も 同様、 電子署名 / access control / long-term storage 要件 は Phase 2-4 candidate。
Phase 1 の 完了条件 のみ 満たす: §10 「P1 が 動けば もう 実運用を 開始できる 粒度」 = 「実験を作り、 run を記録し、 後から 読み出せる」 まで、 analysis.py 回帰検出 (Phase 3) と link 系 (Phase 4) は 未着手。
benchtop v0.4.0 との overlap は 意図的 に 併存: 前 turn 私 推奨 (benchtop 内 拡張) と chat-Claude 別提案 (independent MCP) の 両方 実装、 使い分け 明示で 破壊回避 = discipline 準拠、 但し 「どちら 使えば 良い?」 の 判断 は 藤本さん judgment に 委ねる。
MCP count 4 → 5 は chat-Claude 前 turn warning に 部分 抵触: 「+4 → 8 systems → AI 選択劣化」 warning に 対して +1 (5 systems) は 半分以下 だが、 warning の 型 (「MCP 数 増加 = AI 選択劣化」) に 該当 する 事実 は 変わらない。 責務 clean separation で 影響 minimize したが、 実 AI 選択劣化 の 定量測定 は 未実施。

9. commit history (2026-08-17 全 arc)

RepoCommit内容
rei-aios10 commitsaudit log + cost atlas + Galois + 6 item 束 + Z+Y + D 推奨 + arc extension + benchtop v0.3 arc + D approval + benchtop v0.4 arc
benchtop-mcp2 commitsv0.3.0 audit log + v0.4.0 experiment notebook
lab-notebook-mcpa2d7f64v0.1.0 Phase 1 initial (本日 新 repo、 local commit のみ)
rei-aios(本 site page commit)lab-notebook-mcp Phase 1 arc site 反映

10. 関連 memory