STEP 1378 — MCP tool count auto-count (finding #32 systemic 対策)

STEP 1378 systemic drift 対策
2026-08-23 · rei-aios · banner tool count init-time 自動生成、hardcoded drift 構造的排除

1. 契機 (finding #30/#31/#32 pattern の 系譜)

rei-aios MCP server banner の tool 数は STEP 1349 以降 hardcode 保守で drift 3 回発生:

「開通した計器が 最初に映したもの」 pattern 4 例目 (STEP 1334 KA wiring + STEP 1336 Rei-Automator revival + STEP 1349 D8 connectors 系譜)。 各回 spot fix で 訂正済だが、 tool 追加ごと banner update を 手動維持 = drift 再発の temporal certainty。 systemic 対策として init-time auto-count に切替。

2. 実装 (最小 diff、 tools 配列 refactor 不要)

2.1 追加 code

function autoCountToolsFromSource(): {
  count: number;
  source: 'auto-count' | 'read-failed';
  detail?: string;
} {
  try {
    const src = readFileSync(__filename, "utf-8");
    const matches = src.match(/^\s*name:\s*"/gm) || [];
    return { count: matches.length, source: "auto-count" };
  } catch (e) {
    return {
      count: -1,
      source: "read-failed",
      detail: e instanceof Error ? e.message : String(e),
    };
  }
}

2.2 Banner 変更

const auto = autoCountToolsFromSource();
const countPart = auto.source === "auto-count"
  ? `${auto.count}ツール (auto-count、 finding #32 systemic 対策 STEP 1378)`
  : `ツール数 auto-count 失敗 (${auto.detail ?? "unknown"}、 static banner に fallback)`;
console.error(`Rei MCP Server v2.8.4 起動済み(stdio モード・${countPart}・起動時インデックス構築)`);

2.3 Design 選択理由

3. Verify 実測

MCP stdio smoke test:
$ (printf 'init json' ; sleep 2) | tsx src/mcp/rei-mcp-server.ts

出力 line 1:
Rei MCP Server v2.8.4 起動済み(stdio モード・41ツール (auto-count、
finding #32 systemic 対策 STEP 1378)・起動時インデックス構築)

出力 line 2:
{"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{}},
"serverInfo":{"name":"rei-aios","version":"2.0.0"}},"jsonrpc":"2.0","id":1}

Auto-count = 41 = 実 tool 数 (`grep -cE '^\s*name:\s*"' src/mcp/rei-mcp-server.ts` と 一致)。 drift 構造的発生不能を confirm。

4. Drift 予防 mechanism

5. Honest scope

  1. 「世界初」 主張ゼロ、self-source counting は 30+ 年前既知 pattern、 novelty は 「finding #32 pattern の 再発防止 に 適用した Rei stack 内 初 arc」 のみ
  2. Tools 配列 refactor は 意図的に scope 外 (semantics-preserving move で risk vs value 不釣り合い、 大 diff は STEP 1382+ candidate)
  3. Regex pattern ^\s*name:\s*" は 現 tool 定義 style に依存、 別 style (e.g., `name: 'toolname'` 単引用符) が 混入すると 誤 count → v0.2 で pattern 精緻化 candidate
  4. Fallback path (readFileSync 失敗) は banner 警告のみ、 runtime tool 数は correct、 「count 表示不能」 状態を honest 明示
  5. 他 MCP server (benchtop-mcp / mcp-lens / rei-automator-mcp / lab-notebook-mcp / rei-verify / rei-memory-mcp / rei-meta-mcp / rei-checker-mcp) にも 同 pattern 適用 candidate だが 各 external repo で 別 STEP 判断

6. 関連