Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
제작자가 쓴 설명(영어 원문)
Multidimensional House of Quality (QFD) MCP server — cross-dimensional relationship matrices.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"crossmatrix": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/praxec/crossmatrix:0.3.4"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add crossmatrix -- docker run -i --rm ghcr.io/praxec/crossmatrix:0.3.4프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"crossmatrix": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/praxec/crossmatrix:0.3.4"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"crossmatrix": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/praxec/crossmatrix:0.3.4"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 6일 점검
레지스트리 이름이 GitHub 계정 praxec 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.3.4)은 15일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Docker도 있어야 해요.
같은 카테고리에는: Spec Driven Development, Remote Desktop Commander, topo^alpin
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Avalanche bulletins and mountain weather forecasts for any place in the Alps.
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
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.
npx -y @matthew-cochran/crossmatrix --version
claude 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.
# Linux / macOS
curl -fsSL https://github.com/praxec/crossmatrix/releases/latest/download/install.sh | sh
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:
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:
| OS | Arch | Target triple | Asset | Build support | Runtime smoke tested |
|---|---|---|---|---|---|
| Linux | x86_64 | x86_64-unknown-linux-gnu | crossmatrix-mcp-x86_64-unknown-linux-gnu.tar.gz | native CI | native CI |
| Linux | arm64 | aarch64-unknown-linux-gnu | crossmatrix-mcp-aarch64-unknown-linux-gnu.tar.gz | native CI | native CI |
| macOS | x86_64 | x86_64-apple-darwin | crossmatrix-mcp-x86_64-apple-darwin.tar.gz | native CI | native CI |
| macOS | Apple Silicon | aarch64-apple-darwin | crossmatrix-mcp-aarch64-apple-darwin.tar.gz | native CI | native CI |
| Windows | x86_64 | x86_64-pc-windows-msvc | crossmatrix-mcp-x86_64-pc-windows-msvc.zip | native CI | native CI |
| Windows | arm64 | aarch64-pc-windows-msvc | crossmatrix-mcp-aarch64-pc-windows-msvc.zip | native CI | native 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.
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.
cargo build --release
produces the crossmatrix-mcp MCP stdio server.
.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:
crossmatrix-mcp init # creates .crossmatrix/ in the current directory
crossmatrix-mcp check # validates every document and cross-reference
.crossmatrix/ config/ @ .json # methodology: scales, relations, contractions dimensions/ @ .json # dimensions and their members state/ .json # cells/observations + revision audit/ .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.
| Command | Effect | |
|---|---|---|
crossmatrix-mcp | serve 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 (--project D \ | --user) [--dry-run] [--force]` | install the bundled agent skills |
| `crossmatrix-mcp skills uninstall --target (--project D \ | --user) / skills list` | remove / list installs |
crossmatrix-mcp --version / --help | version / usage |
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}.
crossmatrix.command){"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"}}}
| Op | Layer | Purpose |
|---|---|---|
model.open | — | open (or create) state/ .json; survives restarts |
model.status | — | version, store root, counts |
scale.declare | Configuration | observation token → value table |
relation.declare | Configuration | from/to dimensions, relationType, scale, coveragePolicy |
contraction.declare | Configuration | a chain of relations for derived views |
dimension.register | Dimensions | an axis (dimensionKind is any snake_case word) |
members.sync | Dimensions | upsert a roster; missing members are deprecated, not deleted; an unchanged roster is a no-op |
member.propose | Dimensions | add one member |
observe | State | a token + evidence on a cell (never a number) |
evidence.attach | State | add evidence to an observation |
deprecate | any | retire 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.
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.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.
cargo build --release --features jev,rig
export CROSSMATRIX_ASSIST=jev,rig # explicit opt-in (or all) export TYPESAFE_JEV_API_KEY=... # or OPENROUTER_API_KEY (also used by rig)
| Query | Feature | What it does |
|---|---|---|
assist.suggest {relationId, cells?, maxCells?, record?} | jev | For 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} | jev | Ranks candidate cells by Jev uncertainty (1 − confidence). |
proposals {relationId?} | — | Lists proposed observations awaiting confirmation. |
assist.members {dimensionId, sourceText, sourceUri?} | rig | Proposes 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} | rig | A 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}.
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:
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).
| Skill | Use it for |
|---|---|
crossmatrix | the method: Configuration / Dimensions / State, observation-only writes, the driver loop, scoped reads, .crossmatrix/ |
crossmatrix-hoq | a classic House of Quality: weighted needs × characteristics, roof, technical importance, targets |
crossmatrix-jtbd | jobs to be done × user segments × journeys, joined by a contraction |
| `crossmatrix
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요