fmeca について
fmeca-mcpは、チームやエージェントが構造化されたリスク分析を行うための、オフラインで決定論的なFMECAエンジンです。モデルからスコアを受け取るのではなく、固定ルールに基づいて観察項目から重大度、発生確率、重要度、残存リスク、承認準備状況を算出します。
主な機能
- 01観察項目に基づく決定論的スコアリング
- 02固定された重要度マトリクス
- 03故障モードと軽減策の追跡
- 04準備状況の評価とレポート出力
- 05追記専用の分析ログ
- 06任意の助言的レビュー
活用シーン
- 01製品リスクレビューで故障モードを順位付け
- 02軽減策を追跡し残存リスクを再評価
- 03分析が承認可能な状態か確認
- 04プロジェクトリポジトリで分析ログを管理
MCP 対応
stdio経由で、セッション管理、スコアリング、準備状況の評価、レポート出力などのFMECA分析ツールをMCPクライアントに提供します。呼び出し側が観察項目を渡し、サーバーが固定カタログとマトリクスを用いてスコアを算出します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm ghcr.io/praxec/fmeca:0.2.2ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/praxec/fmeca:0.2.2stdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
fmeca-mcp
fmeca-mcp は、MCP サーバーとして公開される構造化された FMECA エンジンです。故障モードと、それらの特徴を示す観察結果を入力すると、重大度/発生確率のスコアを導出し、固定されたマトリックスに基づいて重大度を算出し、予防→検出→迅速なフェイルの規律に沿って緩和策を追跡し、分析が承認可能な状態かどうかを判定します。任意の MCP クライアント(Claude Code、Cursor、またはカスタムオーケストレーター)から、標準プロトコルを介して操作できます。
AI エージェント向け: クライアント用のサーバーとスキルをインストールするには、docs/AGENT-INSTALL.md に従ってください。
FMECA とは
故障モード・影響・重大度解析(Failure Modes, Effects & Criticality Analysis)は、構造化されたリスクの優先順位付け手法です。対象がどのように故障するかを列挙し、それぞれの故障の深刻さ(重大度)と発生可能性(発生確率)を評価して、組み合わせた重大度に基づいて順位付けし、最もリスクの高いものから対処します。その後、緩和策を重ねて適用し、残留リスクを再評価します。fmeca-mcp はこのプロセスの構造と計算を担い、呼び出し側はドメインに関する判断を提供します。
設計原則:決定論的、オフライン、LLM が数値を提示しない
エンジンは (events in) → (criticality + residual + gaps + readiness out) の純粋関数です。追記専用のイベントログ以外には I/O を行わず、ネットワーク接続もモデルの実行もしません。
重要なのは、呼び出し側がスコアを提示することは決してないという点です。呼び出し側(多くの場合 LLM)は、故障モード、その原因と影響の特定、緩和策の提案といった曖昧さを伴う作業を行い、固定カタログ(例:
data_loss、happens_in_normal_use)から選んだ観察結果を提示します。カーネルは、ロックされたエビデンス→スコアの対応表を通じて、それらの観察結果を重大度/発生確率レベルに変換し、固定されロックされた S×P マトリックスから重大度を読み取ります。モデルは提案し、コードが採点します。重大度、残留リスク、状態、準備状況はイベントログの集約によって計算され、保存も入力としての受け付けもされないため、同じ分析からは常に同じ結果が得られ、どのモデルもマトリックスを説得してより甘い判定に変えることはできません。
インストール
npx(インストール不要)
npx -y @matthew-cochran/fmeca
npm ランチャーは、対応するリリースバイナリをダウンロードし、チェックサムを検証してキャッシュし、実行します。このパッケージは fmeca と fmeca-mcp の 2 つのコマンドエイリアスをインストールし、どちらも同じランチャーを実行します。MCP クライアントでどちらかのコマンドを指定してください(MCP クライアントの設定を参照)。
ビルド済みバイナリ(Rust、Cargo、Git は不要)
# Linux / macOS
curl -fsSL https://github.com/praxec/fmeca/releases/latest/download/install.sh | sh
# Windows (PowerShell)
irm https://github.com/praxec/fmeca/releases/latest/download/install.ps1 | iex
インストーラーは OS と CPU アーキテクチャを判別し、対応するリリースアセットをダウンロードして、リリースの checksums.sha256 と照合して SHA-256 を検証し、安全に展開したうえで、ユーザー専用の管理ディレクトリ(Linux/macOS では $HOME/.local/bin、Windows では %LOCALAPPDATA%\Programs\fmeca-mcp)にバイナリをアトミックにインストールします。ソースからビルドすることはなく、対応していない OS/アーキテクチャではエラーを明示して終了します。
最新の安定版ではなく、特定のリリースを指定するには、次のようにします。
curl -fsSL https://github.com/praxec/fmeca/releases/latest/download/install.sh \
| sh -s -- --version v0.1.0
インストーラースクリプトは、たとえば https://github.com/praxec/fmeca/releases/download/v0.1.0/install.sh のように、特定のリリースから取得することもできます。
インストーラースクリプトは、バイナリとともにリリースアセットとして公開されています。
または、アーカイブを直接ダウンロードしてください。各リリースでは、checksums.sha256 と、各ターゲット、アセット、ダイジェスト、バージョン、ソース SHA を記載した機械可読な release-manifest.json が公開されています。
| OS | アーキテクチャ | ターゲットトリプル | アセット | ビルドサポート | 実行時のスモークテスト |
|---|---|---|---|---|---|
| Linux | x86_64 | x86_64-unknown-linux-gnu | fmeca-mcp-x86_64-unknown-linux-gnu.tar.gz | ネイティブ CI | ネイティブ CI |
| Linux | arm64 | aarch64-unknown-linux-gnu | fmeca-mcp-aarch64-unknown-linux-gnu.tar.gz | ネイティブ CI | ネイティブ CI |
| macOS | x86_64 | x86_64-apple-darwin | fmeca-mcp-x86_64-apple-darwin.tar.gz | ネイティブ CI | ネイティブ CI |
| macOS | Apple Silicon | aarch64-apple-darwin | fmeca-mcp-aarch64-apple-darwin.tar.gz | ネイティブ CI | ネイティブ CI |
| Windows | x86_64 | x86_64-pc-windows-msvc | fmeca-mcp-x86_64-pc-windows-msvc.zip | ネイティブ CI | ネイティブ CI |
| Windows | arm64 | aarch64-pc-windows-msvc | fmeca-mcp-aarch64-pc-windows-msvc.zip | ネイティブ CI | ネイティブ CI |
「ネイティブ CI」とは、各アセットがビルドされ、そのプラットフォーム独自のランナー上で MCP の initialize/tools/list ハンドシェイクのスモークテストが実施されることを意味します。それ以外の CPU/OS の組み合わせはサポート対象としていません。サポートされていないプラットフォームは、暗黙にクロスコンパイルするのではなく、エラーとして拒否されます。
アップデート
アップデートするには、インストーラーを再実行してください。管理対象のインストールディレクトリ内のバイナリのみが(アトミックに)置き換えられます。アプリケーションの状態と設定はそのディレクトリの外部に保存され、上書きされることはありません。状態の保存先については、Configuration を参照してください。
Docker
docker run -i --rm ghcr.io/praxec/fmeca:0.1.0
コンテナ終了時に状態が失われないよう、プロジェクトをマウントして分析データをプロジェクトの .fmeca/ フォルダーに保存してください(マウントしない場合、コンテナの終了時に状態は失われます)。FMECA_STATE_DIR を設定すると、fmeca-mcp init の実行前でも、サーバーはそのフォルダーを参照します。
docker run -i --rm --user "$(id -u):$(id -g)" -v "$PWD:/work" -w /work -e FMECA_STATE_DIR=/work/.fmeca -e OPENROUTER_API_KEY ghcr.io/praxec/fmeca:0.1.0
ソースからビルド
cargo install fmeca-mcp
クレートが crates.io に公開された後は、cargo install を利用できます。それまでは、チェックアウトから cargo build --release でビルドしてください。
MCP クライアントの設定
標準のトランスポートである stdio を介して MCP 通信を行います。他の MCP サーバーと同じように、エディターに組み込んでください。同じエントリーを Claude Code(.mcp.json)と Copilot(.mcp.json)で使用できます(Cursor では "type": "stdio" が必要です。AGENT-INSTALL の該当セクションを参照してください)。
{
"mcpServers": {
"fmeca": {
"command": "npx",
"args": ["-y", "@matthew-cochran/fmeca"]
}
}
}
バイナリには "command": "fmeca-mcp"(またはエイリアスの "command": "fmeca")を使用し、"args": [] を指定してください。Codex では TOML を使用します。
[mcp_servers.fmeca]
command = "npx"
args = ["-y", "@matthew-cochran/fmeca"]
env_vars = ["OPENROUTER_API_KEY"]
各クライアントの設定と、それぞれのスキルのインストール方法(Cursor の .cursor/mcp.json エントリーを含む)は、docs/AGENT-INSTALL.md に記載されています。キーは任意です(vet のみ使用します)。設定ファイルに書き込まれることはありません。クライアントが変数を展開する場合は、"env": { "OPENROUTER_API_KEY": "${OPENROUTER_API_KEY}" } として渡すか、サーバーに環境変数を継承させてください。
ツール一覧
| ツール | 説明 |
|---|---|
session.open | セッションを開始または再開します。任意でマトリクス戦略を選択し、分析メタデータ(title、level、aspect、scope_paths、parent)を記録します。これらはセッションの存続期間中、変更されません。 |
append | 失敗モードの追加(add_failure_mode)、緩和策の追加(add_mitigation)、または既存の失敗モードの再スコアリング(rescore)を行います。set_mitigation_status は、緩和策のステータスを計画済み、実装済み、検証済み、または放棄済みに変更します(検証済みにするには、メモ以外のエビデンスが必要です)。set_failure_mode_disposition は、失敗モードの残余リスクを受容する(承認者が必要)か、信頼性がないとして除外する(エビデンスが必要)かを設定します。失敗モードは削除されません。再計算された状態を返します。 |
state.get | セッションの読み取り専用ビューです。各失敗モードの計算済みクリティカリティ、残余リスク、ステータスを表示します。 |
risk.next | 緩和されていない失敗モードのうち、クリティカリティが最も高いものを返します。次に対処すべき項目です。 |
readiness.assess | 準備状況のゲートです。すべての高/中の残余リスクが低減され、すべてのブロッカーが解消されているかを確認します。 |
report.export | セッションの FMECA 表全体を出力します。 |
scoring.catalog | 戦略に対応する固定の観察項目一覧です。呼び出し元はここにある ID を選択します。 |
analyze | ステートレスな一括処理です。分析全体を渡すと、計算済みレポート全体が返されます。セッションも永続化もありません。 |
session.list | 状態ディレクトリ(プロジェクトに .fmeca/ がある場合はそのディレクトリ)内のすべての分析を、それぞれのメタデータ、ステータス件数(除外された失敗モードは別途集計)、ready、ready_verified、解決件数とともに表示します。フィルター:level、aspect、parent。再生に失敗したログは、エラーとともに一覧表示されます。 |
vet | アドバイザリー機能です。Jev(OpenRouter 経由、OPENROUTER_API_KEY が必要)に、観察結果、緩和策、カバレッジ、準備状況が妥当かを確認させ、決定論的なゲートと並べて確率を返します。スコアの書き込みや変更は行いません。キーがない場合は vet_unavailable を返します。 |
actions.suggest | 読み取り専用です。リスクポリシーに基づいてセッション(またはインライン分析)を読み込み、失敗モードごとのリスク区分、エビデンスの信頼度、処置、タグ付きアクション、承認判定を提案します。分析やログは変更しません。 |
policy.list | 読み取り専用です。組み込みのポリシープリセットと、プロジェクトの .fmeca/policies/ ファイルを、それぞれの名前、ハッシュ、クラスとともに表示します。読み込みに失敗したプロジェクトファイルは、error とともに一覧表示されます。 |
analyze ツールは、セッション経由の処理とまったく同じカーネル計算を再利用するため、
両者で結果が食い違うことはありません。
リポジトリに分析を保存する(.fmeca/)
fmeca-mcp init # at the project root: creates .fmeca/
git add .fmeca && git commit -m "chore: add .fmeca"
fmeca-mcp check --dir .fmeca # in CI: replays every log, catches duplicate ids
プロジェクトのルートからサーバーを起動する(または FMECA_STATE_DIR を設定する)と、
分析ごとに .fmeca/ 内にログが保存され、ファイル名は <aspect>-<level> になります。セットアップ、マージの動作、Docker のマウント、各レベルに対応するスキルについては、
docs/AGENT-INSTALL.md をご覧ください。
リスクポリシー
リスクポリシーは、プロジェクト独自のリスク区分に基づいて分析を読み込み、 承認ルールを設定し、タグ付きアクション(設計、レビュー、テスト、運用、プロセス、 ドキュメント、セキュリティ)を提案します。要求時に計算され、ログには書き込まれないため、 1 つの分析を複数のポリシーに基づいて評価できます。fmeca は提案を行いますが、実行はしません。
プリセットは、compat-0.1(デフォルト。承認条件は readiness.assess と同じ)、
prototype、standard、business-critical、safety-critical、
confidence-view です。独自のポリシーは .fmeca/policies/<name>.toml
に TOML ファイルとして保存し、プリセットの後に解決されます。
fmeca-mcp policy list # presets and project files
fmeca-mcp policy validate .fmeca/policies/team.toml # ok <name> <hash>, or the error
fmeca-mcp suggest checkout-implementation --policy standard --format markdown
suggest は、ポリシーの承認条件を満たす場合は 0、満たさない場合は 1(CI で利用可能)、
使用方法またはポリシーのエラーがある場合は 2 を終了コードとして返します。エージェントは
actions.suggest および policy.list ツールと同じ機能を呼び出します。モデル、すべてのプリセット、
アクションカタログについては、docs/policies.md をご覧ください。
設定
| 変数 | デフォルト | 効果 |
|---|---|---|
FMECA_STATE_DIR | nearest .fmeca/, else $XDG_DATA_HOME/fmeca-mcp (or $HOME/.local/share/fmeca-mcp), else ./fmeca-state | セッションごとのログの保存先です。 |
OPENROUTER_API_KEY | unset | オプションの vet ツールを有効にします。環境変数からのみ読み込まれます。 |
FMECA_JEV_MODEL | typesafe/jev-1.13 | vet が問い合わせるモデルです。 |
FMECA_JEV_TIMEOUT_SECS | 30 | vet リクエストのタイムアウト時間(秒)です。 |
マトリックス戦略
重要度マトリックスは、コードに定義された選択肢からなる固定の戦略で、session.open 時に選択され、セッション中は変更されません。各戦略には、固定された S×P マトリックスと独自のスコアリングカタログが付属します。
| 戦略 | スケール | 備考 |
|---|---|---|
qualitative3x3 | 低/中/高 | デフォルトの 3×3 定性的マトリックスです。 |
nasa8004_5x5 | 影響度 × 発生可能性の 5×5 | NASA GSFC-HDBK-8004 のリスクマトリックスです。 |
呼び出し元は戦略を 選択 します。戦略のセルを編集することはできません。
fmeca をライブラリとして使用する
カーネルは MCP に依存しない、純粋な Rust ライブラリです。ステートレスな analyze 関数は、戦略と故障モードのバッチを受け取り、計算済みの完全なレポートを返します。
use fmeca::{
analyze, AnalyzeInput, AnalyzeMitigation, Domain, EntityRef, MatrixStrategy, MitigationKind,
};
let failure_modes = vec![AnalyzeInput {
id: "fm-1".into(),
component: EntityRef::new("checkout-service"),
description: "Payment double-charge on retry".into(),
cause: Some("Non-idempotent charge endpoint".into()),
effect: Some("Customer billed twice".into()),
domain: Domain::Runtime,
scope: None,
// Observations, not scores — the kernel derives severity/probability.
severity_observations: vec!["data_loss".into()],
probability_observations: vec!["happens_in_normal_use".into()],
mitigations: vec![AnalyzeMitigation {
id: "m-1".into(),
kind: MitigationKind::Prevention,
description: "Idempotency key on the charge endpoint".into(),
residual_severity_observations: vec![],
residual_probability_observations: vec!["rare_edge_case".into()],
}],
}];
let report = analyze(MatrixStrategy::default(), &failure_modes).unwrap();
println!("risk ranking: {:?}", report.risk_ranking);
println!("ready: {} blockers: {:?}", report.ready, report.blockers);
// report.failure_modes carries per-FM criticality / residual_criticality /
// standing / response_class / issues.
長期間にわたる複数ターンの分析には、StateStore(FilesystemStore が用意されています)上で fmeca::Engine を使用します。これは追記専用のイベントログを永続化し、そのログを再生して状態を計算します。API ドキュメントをご覧ください。
開発
cargo build
cargo test
cargo fmt --all
cargo clippy --all-targets -- -D warnings
skills/ にあるエージェントスキルは、ビルド時にバイナリに埋め込まれます。スキルを追加または削除した後、ローカルのインクリメンタルビルドでは変更が検出されません。touch crates/fmeca-mcp/build.rs を実行してから、再度ビルドしてください。
CI では Linux/macOS/Windows でビルドとテストを実行し、さらに rustfmt と clippy も実行します(警告はエラーとして扱われます)。プルリクエストを作成する前に、ローカルでこれらがすべて通ることを確認してください。
Praxec での使用
これは Praxec のパックで使用される MCP ツールです。このツールと、それを使用するワークフローパックを最も簡単にセットアップして実行する方法は、次のワンコマンドセットアップです。
curl -fsSL https://raw.githubusercontent.com/praxec/packs/main/setup.sh | bash
このツールのプロバイダー座標(コンテナーイメージ/リリースバイナリ)と、それに依存するパックについては、パックレジストリをご覧ください。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。