Crossmatrix

io.github.praxec由 GitHub 帳號 praxec 發布v0.3.4更新於 Oct 24, 2026

Multidimensional House of Quality (QFD) MCP server — cross-dimensional relationship matrices.

概覽

AI 產生的概覽

Crossmatrix 是本地 MCP 伺服器,用於多維品質屋(QFD)模型,讓助理記錄觀測並讀取矩陣、缺口與報告。

可以做什麼
  • 開啟、檢視並驗證模型存放區,包括狀態、描述、驗證與匯出
  • 宣告設定與維度:量表、關係、收縮、維度及成員名冊
  • 在儲存格上記錄觀測與證據,停用成員或關係,寫入具版本與稽核紀錄
  • 讀取分析結果:切片、追溯、覆蓋率、孤立與下一步缺口、過期來源、衝突與發現
  • 產生 Markdown 品質屋報告,或匯出合併後的模型 JSON
  • 在特殊建置中可選擇讓模型建議觀測、新成員或敘述
適用情境
適合讓助理協助建立與維護結構化的需求取捨分析,例如品質屋、待辦任務、競品標竿、測試覆蓋或風險矩陣,並把模型以可審閱的檔案保存在程式碼儲存庫中。
執行需求
以本機 stdio 程序執行;建議用 npx 啟動器安裝,它會下載並以雜湊驗證平台二進位檔,或使用預先建置的二進位安裝腳本。需以 init 指令建立模型存放區。選用的 AI 輔助功能需要特殊建置、明確開啟,以及 TYPESAFE_JEV_API_KEY 或 OPENROUTER_API_KEY 等金鑰。
安裝前請注意
伺服器會寫入專案中的模型目錄,包括僅追加的稽核紀錄,提交前請先檢視變更。選用的輔助功能會把成員標籤、描述與證據傳送給第三方模型服務,並需要 API 金鑰;它們只記錄建議,不會寫入分析數值。README 也示範了把遠端安裝腳本直接透過管線交給 shell 執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Crossmatrix,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

crossmatrix

Multidimensional House of Quality (QFD) — cross-dimensional relationship matrices for structured trade-off and requirement analysis. A Rust workspace: crossmatrix (engine) + crossmatrix-mcp (MCP server). Part of Praxec.

Install

npm / npx (recommended for MCP clients)

sh
npx -y @matthew-cochran/crossmatrix --versionclaude mcp add crossmatrix --scope user -- npx -y @matthew-cochran/crossmatrix

The @matthew-cochran/crossmatrix package is a small launcher: on first run it downloads the release binary for your platform, verifies it against the release's checksums.sha256, caches it, and runs it over stdio (signals are forwarded; stdout belongs to MCP). CROSSMATRIX_MCP_BINARY points it at a binary you installed yourself. The package also bundles the agent skills.

Prebuilt binary (no Rust, Cargo, or Git required)

sh
# Linux / macOScurl -fsSL https://github.com/praxec/crossmatrix/releases/latest/download/install.sh | sh
# Windows (PowerShell)irm https://github.com/praxec/crossmatrix/releases/latest/download/install.ps1 | iex

The installer resolves your OS and CPU architecture, downloads the matching release asset, verifies its SHA-256 against the release's checksums.sha256, extracts it safely, and atomically installs the binary into a user-local managed directory ($HOME/.local/bin on Linux/macOS, %LOCALAPPDATA%\Programs\crossmatrix-mcp on Windows). It never compiles from source and fails loudly on an unsupported OS/architecture.

Pin a specific release instead of the current latest stable:

sh
curl -fsSL https://github.com/praxec/crossmatrix/releases/latest/download/install.sh \  | sh -s -- --version v0.3.1

The installer scripts are published as release assets alongside the binaries.

Or download the archive directly. Every release publishes a checksums.sha256 and a machine-readable release-manifest.json listing each target, asset, digest, version, and source SHA:

OSArchTarget tripleAssetBuild supportRuntime smoke tested
Linuxx86_64x86_64-unknown-linux-gnucrossmatrix-mcp-x86_64-unknown-linux-gnu.tar.gznative CInative CI
Linuxarm64aarch64-unknown-linux-gnucrossmatrix-mcp-aarch64-unknown-linux-gnu.tar.gznative CInative CI
macOSx86_64x86_64-apple-darwincrossmatrix-mcp-x86_64-apple-darwin.tar.gznative CInative CI
macOSApple Siliconaarch64-apple-darwincrossmatrix-mcp-aarch64-apple-darwin.tar.gznative CInative CI
Windowsx86_64x86_64-pc-windows-msvccrossmatrix-mcp-x86_64-pc-windows-msvc.zipnative CInative CI
Windowsarm64aarch64-pc-windows-msvccrossmatrix-mcp-aarch64-pc-windows-msvc.zipnative CInative CI

"Native CI" means each asset is built and its MCP initialize/tools/list handshake smoke-tested on that platform's own runner. No other CPU/OS combination is claimed; unsupported platforms are rejected rather than silently cross-compiled.

Updates

Re-run the installer to update. Only the binary in the managed install directory is replaced (atomically); application state and configuration live outside that directory and are never overwritten.

From source

sh
cargo build --release

produces the crossmatrix-mcp MCP stdio server.

Repo-committed models: .crossmatrix/

crossmatrix keeps a model as three documents linked by stable id@version (ADR-0004), plus an append-only audit log, in a directory you commit:

sh
crossmatrix-mcp init            # creates .crossmatrix/ in the current directorycrossmatrix-mcp check           # validates every document and cross-reference
.crossmatrix/  config/<configId>@<version>.json            # methodology: scales, relations, contractions  dimensions/<dimensionSetId>@<version>.json  # dimensions and their members  state/<stateId>.json                        # cells/observations + revision  audit/<stateId>.jsonl                       # one line per accepted mutation (merge=union)

Writes are canonical JSON (sorted keys, 2-space indent, trailing newline) and atomic, so diffs stay small. Findings are computed on every read and never stored. check exits non-zero with path-specific diagnostics (for example state/demo.json: cells[3].to: unknown member 'x' in dimension 'dim_part'); run it in CI.

The server finds its store from, in order: CROSSMATRIX_DIR, the nearest ancestor directory containing .crossmatrix/, $XDG_DATA_HOME/crossmatrix (or ~/.local/share/crossmatrix), then ./crossmatrix-state. model.status reports the resolved root.

CLI

CommandEffect
crossmatrix-mcpserve MCP on stdio
crossmatrix-mcp init [--dir D]create D/.crossmatrix/ (idempotent)
crossmatrix-mcp check [--dir D]validate the store; exit 1 on any problem
crossmatrix-mcp skills install --target <t> (--project D | --user) [--dry-run] [--force]install the bundled agent skills
crossmatrix-mcp skills uninstall --target <t> (--project D | --user) / skills listremove / list installs
crossmatrix-mcp --version / --helpversion / usage

Tools

Two MCP tools, crossmatrix.command (writes) and crossmatrix.query (reads). Every response, including a rejection, carries links to the legal next ops; a rejection's structuredContent is {ok: false, error: {code, message}, links}.

Writes (crossmatrix.command)

json
{"request": {"schemaVersion": "0.2.0", "requestId": "r-17", "modelId": "checkout",  "expectedVersion": 16, "actor": {"actorType": "llm", "persona": "observer"},  "op": {"kind": "observe", "relationId": "rel_need_char", "from": "need_fast",         "to": "char_latency", "observation": "strong", "provenanceClass": "normative"}}}
OpLayerPurpose
model.open—open (or create) state/<stateId>.json; survives restarts
model.status—version, store root, counts
scale.declareConfigurationobservation token → value table
relation.declareConfigurationfrom/to dimensions, relationType, scale, coveragePolicy
contraction.declareConfigurationa chain of relations for derived views
dimension.registerDimensionsan axis (dimensionKind is any snake_case word)
members.syncDimensionsupsert a roster; missing members are deprecated, not deleted; an unchanged roster is a no-op
member.proposeDimensionsadd one member
observeStatea token + evidence on a cell (never a number)
evidence.attachStateadd evidence to an observation
deprecateanyretire a member or relation (supersededBy)

Observation-only: a numeric member weight is accepted only with sourceRef.system (a deterministic import), and a measuredValue only with provenanceClass: observed plus a sourceRef. expectedVersion is an optimistic lock; requestId makes a command idempotent, also across restarts. Each accepted mutation appends one audit line {ts, requestId, actor, op, beforeVersion, afterVersion, summary}.

The legacy one-call flow still works: a command carrying a full model imports it into the session (in memory) for the queries that follow.

Reads (crossmatrix.query)

model.status, describe, slice, trace, explain, coverage, gaps.orphans, gaps.next, stale, conflicts, analyze.marginalize, analyze.contract, analyze.findings, validate, report, export.

  • report {relationId?} returns a Markdown House of Quality: weights, the relationship matrix, the correlation roof (a self-relation), technical importance, targets (attributes.target), coverage and findings with contributors. Without relationId it covers every relation.
  • export {format: model|report|findings} returns the merged model JSON.
  • conflicts {relationId?} lists valence-by-separation tensions and conflicts.
  • trace and slice accept a member id or a sourceRef.uri, page with limit/cursor, and with rollup: true roll leaf observations up a contains hierarchy (a directory implements a feature if any file under it does).
  • stale {hashes?, readFiles?} compares stored source hashes with current ones (readFiles hashes file:// sources inside the project) and returns the changed members plus every cell that references them, paged.

AI assist (optional, off by default)

Two optional cargo features add model-backed helpers. Neither is in the default build or the release binaries unless you build with them, both need an explicit opt-in and a key, and neither ever writes an analysis number: suggestions are recorded as proposed observations that count in no analysis until a human or LLM confirms the cell with an ordinary observe.

sh
cargo build --release --features jev,rigexport CROSSMATRIX_ASSIST=jev,rig            # explicit opt-in (or `all`)export TYPESAFE_JEV_API_KEY=...              # or OPENROUTER_API_KEY (also used by rig)
QueryFeatureWhat it does
assist.suggest {relationId, cells?, maxCells?, record?}jevFor each candidate cell (default: from gaps.next), asks Jev a choice question over the relation's scale tokens, with a compact state from the two members' labels, descriptions and evidence. Returns {cell, token, probabilities, confidence} per cell; record: true stores them as proposed observations by actor {classifier, jev}.
gaps.next {rankBy: "uncertainty", relationId}jevRanks candidate cells by Jev uncertainty (1 − confidence).
proposals {relationId?}—Lists proposed observations awaiting confirmation.
assist.members {dimensionId, sourceText, sourceUri?}rigProposes new members from supplied text (README, interview notes, a competitor page), each with a verbatim excerpt and its character span. Never adds them; each comes with a ready member.propose payload.
assist.narrative {relationId?} / report {narrative: true}rigA short narrative of analyze.findings for the report.

Configuration: Jev uses https://api.typesafe.ai with jev-latest when TYPESAFE_JEV_API_KEY is set, otherwise OpenRouter with ~typesafe/jev-latest; override with CROSSMATRIX_JEV_BASE_URL, CROSSMATRIX_JEV_MODEL and CROSSMATRIX_JEV_TIMEOUT_SECS. Rig uses OpenRouter with CROSSMATRIX_RIG_MODEL (default openai/gpt-5-mini) and CROSSMATRIX_RIG_TIMEOUT_SECS. Calls are bounded (timeout, cells per call, token budget) and every response reports usage. Without the feature, opt-in or key, the query returns {ok: false, status: "assist_unavailable", reason, links}.

Agent skills

crossmatrix ships Agent Skills that teach an agent the method and common uses. Install them into a project (or --user) for one client or all:

sh
npx -y @matthew-cochran/crossmatrix skills install --target claude --project .crossmatrix-mcp skills install --target all --project .      # .claude/skills + .agents/skills

Targets: claude, codex, cursor, copilot, gemini, agents-md, all. A .crossmatrix-skills.json manifest records file hashes, so re-installs update only files you have not edited (--force overwrites them) and uninstall removes only unmodified files. The installer never edits MCP configuration; it prints the registration command instead (claude mcp add crossmatrix --scope user -- npx -y @matthew-cochran/crossmatrix).

SkillUse it for
crossmatrixthe method: Configuration / Dimensions / State, observation-only writes, the driver loop, scoped reads, .crossmatrix/
crossmatrix-hoqa classic House of Quality: weighted needs × characteristics, roof, technical importance, targets
crossmatrix-jtbdjobs to be done × user segments × journeys, joined by a contraction
crossmatrix-competitiveneeds × competitors benchmarking and gaps worth winning
crossmatrix-test-coveragerequirements/journeys × tests; orphans are untested requirements
crossmatrix-riskfailure modes × components/requirements (pairs with fmeca)
crossmatrix-prioritizedeliverables × value drivers → a ranked list for a planner (pairs with cpm)
crossmatrix-reviewcheck, conflicts, stale, the report and a sign-off checklist

Using it with Praxec

This is an MCP tool used by Praxec packs. The easiest way to get it — and a workflow pack that uses it — up and running is the one-command setup:

bash
curl -fsSL https://raw.githubusercontent.com/praxec/packs/main/setup.sh | bash

See the pack registry for this tool's provider coordinates (container image / release binary) and which packs depend on it.

Releasing

Maintainers: see docs/releasing.md (version bump, dev → main, tag, scripts/npm-release.sh, crates.io, rollback).

License

Apache-2.0.

來源:README.md,提交 3555966

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

4
  1. v0.3.4最新Oct 22, 2026
  2. v0.3.3Oct 20, 2026
  3. v0.3.2Oct 16, 2026
  4. v0.3.1Oct 13, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分