Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Compose MCP

NPM · @SMARTMEMORY/COMPOSE-MCP · SCANNED SEP 27

Typed feature management for compose projects: roadmap, changelog, artifacts, journal.

−37 this week 28 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security88
  • No malware found by supply-chain analysis.Pass
  • Known CVEs were checked across the 400 of 585 dependencies we could resolve, so this covers what we could see, not the whole tree.Partial
  • No install/post-install scripts declared.Pass
  • Dependency health was assessed across the 400 of 585 dependencies we could resolve, so this covers what we could see, not the whole tree. View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability0
  • Schema quality not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Stability & Change Management0
  • Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.Unverified
Tool Coverage0
  • Tool coverage not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.Unverified
Tool Safety0
  • Tool safety not yet verified: we do not have a sandbox capture of the tool definitions this version of the package serves yet.Unverified
Capabilities0
  • Protocol version not yet verified: we do not have a sandbox capture of the MCP handshake this version of the package performs yet.Unverified

Unverified: 5 categories

Categories scored 0 because our sandbox has not given us the schema these checks need to read. That is a gap on our side rather than a finding about the package, and we only credit what we can confirm, so the score stands at 0 until the capture succeeds. We are working through the fleet, so this normally clears without any action from you. How we score packages →

Install

How do I install the Compose MCP server?

Compose MCP runs locally as an npm package, launched with npx -y @smartmemory/compose-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @smartmemory/compose-mcp

# add to Claude Code
claude mcp add ai-smartmemory-compose-mcp -- npx -y @smartmemory/compose-mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "ai-smartmemory-compose-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@smartmemory/compose-mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ai-smartmemory-compose-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@smartmemory/compose-mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add ai-smartmemory-compose-mcp -- npx -y @smartmemory/compose-mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ai-smartmemory-compose-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@smartmemory/compose-mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ai-smartmemory-compose-mcp --command npx --arg -y --arg @smartmemory/compose-mcp
# ~/.hermes/config.yaml
mcp_servers:
  ai-smartmemory-compose-mcp:
    command: "npx"
    args: ["-y", "@smartmemory/compose-mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ai-smartmemory-compose-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@smartmemory/compose-mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add ai-smartmemory-compose-mcp -t stdio -c npx -a -y @smartmemory/compose-mcp
// mcp.json
{
  "mcpServers": {
    "ai-smartmemory-compose-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@smartmemory/compose-mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 27 Sept 26 −29
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Known CVEs: unverified → partial ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Dependency health: unverified → partial ▲ functional
    • Package version: 0.7.0 → 0.7.1 functional
  • 26 Sept 26 +37
    • Stability: unverified → fail ▼ security
    • Injection markers: unverified → pass ▲ security
    • Known CVEs: unverified → partial ▲ security
    • Tool coverage: unverified → 100 ▲ functional
    • Dependency health: unverified → partial ▲ functional
    • MCP protocol: unverified → pass ▲ functional
    • Package version: 0.6.5 → 0.7.0 functional
  • 25 Sept 26 −31
    • Known CVEs: partial → unverified ▼ security
    • Stability: fail → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Dependency health: partial → unverified ▼ functional
    • License: pass → fail ▼ functional
    • First check of Schema quality: unverified functional
    • Licence: MIT → BUSL-1.1 functional
    • Package version: 0.6.3 → 0.6.5 functional
    • Package version: 0.6.3 → 0.6.4 functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 −15
    • Malware scan: pass → unverified ▼ security
    • Stability: 0.57 → fail ▼ security
    • Package version: 0.4.1 → 0.6.3 functional
  • 22 Sept 26 +1
    • Security disclosure: unverified → fail ▼ functional
  • 20 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

  • 18 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

  • 16 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 27 Sept 2026 · Analysed npm/@smartmemory/compose-mcp@0.7.1

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 400 packages
Packages resolved 400
Stale 159
No linked repository 18
Tree resolution Partial

The dependency tree was only partially resolved, so these counts may be incomplete.

Background: SBOMs and build attestations, explained →

MCP tools · 51 exposed · ~7,225 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
abort_iteration_loop ~40

Abort the current iteration loop early.

NameTypeReqDescription
idstringyesItem ID or semanticId
reasonstring–Why the loop was aborted

No output schema declared.

No examples provided.

add_changelog_entry ~257

Insert (or replace, with force: true) a typed entry in compose/CHANGELOG.md. Idempotent on (date_or_version, code) at storage level; optional caller-supplied idempotency_key for retry safety. Audit-log append is best-effort. Use this instead of editing CHANGELOG.md by hand.

NameTypeReqDescription
bodystring–Free paragraphs between header and labeled subsections.
codestringyesFeature code (e.g. "COMP-FOO-1"). Uppercase A-Z, digits, dashes; cannot start or end with a dash.
date_or_versionstringyesISO date "YYYY-MM-DD" or semver "vX.Y.Z"
forceboolean–If true and an entry with the same (date_or_version, code) exists, replace it in place.
idempotency_keystring–Optional caller-supplied key. Same key replays return the cached result without re-mutating.
sectionsobject–Optional labeled subsections; emitted in fixed order Added → Changed → Fixed → Snapshot.
summarystringyesOne-line summary; renders as the "— summary" tail of the entry header.

No output schema declared.

No examples provided.

add_roadmap_entry ~355

Register a new feature in the project. Writes feature.json and regenerates ROADMAP.md (audit-log append is best-effort). Use this instead of editing ROADMAP.md by hand.

NameTypeReqDescription
codestringyesUnique feature code (e.g. "COMP-FOO-1"). Must be uppercase A-Z, digits, dashes; cannot start or end with a dash.
complexitystring––
descriptionstringyesOne-line description for the ROADMAP cell
forceboolean–Bypass the pre-commit roundtrip guard (commit even if ROADMAP.md would not be a generation fixed point).
idempotency_keystring–Optional caller-provided key. Same key replays return the cached result without re-mutating.
impactstring–Estimated impact, carried from the plan/ideabox estimation step.
parentstring–Parent feature code, for cross-references
phasestringyesPhase heading (e.g. "Phase 6: MCP Writers"). Required.
plannedBystring–Originating plan session code (e.g. "PLAN-WIDGET"). Marks a plan-authored, build-ready feature.
positionnumber–Sort order within phase
profileobject–Triage build profile (needs_prd/needs_architecture/etc.). Set by the plan lifecycle so build can skip fresh triage.
statusstring–Initial status (default PLANNED)
tagsarray––
triageTimestampstring–Triage cache stamp (ISO 8601). Set AFTER design.md is written so build treats triage as a cached no-op.

No output schema declared.

No examples provided.

approve_gate ~62

Resolve a pending policy gate. Outcomes: approved (proceed), revised (stay in phase), killed (abandon feature).

NameTypeReqDescription
commentstring–Optional human feedback
gateIdstringyesGate ID
outcomestringyesResolution outcome

No output schema declared.

No examples provided.

assess_feature_artifacts ~47

Assess quality signals for all artifacts of a feature: section completeness, word count, last modified.

NameTypeReqDescription
featureCodestringyesFeature folder name (e.g. "artifact-awareness")

No output schema declared.

No examples provided.

backfill_completion ~123

Reconstruct a completion through the running Compose server from historical evidence. With no configured guard.testCommand, tests_pass must be explicitly true. Each occurrence must cite either a verified commit SHA or a repo-relative file already inside the repository. This is HTTP delegation like complete_feature, so the Compose server must be running.

NameTypeReqDescription
commit_shastringyes–
files_changedarrayyes–
idstringyes–
notesstring––
occurrencesarray––
reasonstringyes–
tests_passbooleanyes–

No output schema declared.

No examples provided.

bind_session ~63

Bind the current agent session to a lifecycle feature. Call once per session after creating/identifying the feature. Binding is one-shot — calling again on a bound session returns already_bound.

NameTypeReqDescription
featureCodestringyesThe feature code (e.g., "gate-ui")

No output schema declared.

No examples provided.

complete_feature ~223

Mark a feature as complete. Only callable from the ship phase. For a managed build-mode feature (one with a feature.json) this goes through the completion gate (COMP-COMPLETION-GATE): the commit is verified and tests attested when capabilities.guard is on, ONE guarded transition is ledgered, and the gate writes the completion record, feature.status COMPLETE, ROADMAP.md and the cockpit item. A refusal (bad evidence, KILLED feature, guard refused) returns 422 and writes nothing. commit_sha is required under the guard; with the guard off a commit-less completion records a no-commit completion. Fix/plan items and items with no feature.json transition as before.

NameTypeReqDescription
commit_shastring–Full 40-char commit SHA. Required to write a completion record.
files_changedarray–Repo-relative paths committed in the SHA.
idstringyesItem ID
notesstring–One-line note for the completion record.
tests_passboolean–Defaults to true when commit_sha is provided.

No output schema declared.

No examples provided.

compose_resume ~88

COMP-RESUME: reconcile a build against ground-truth environment state and return the resume decision. Rebuilds derived state, classifies drift (clean/advanced/diverged), and returns action resume|needs-sync|gate. On needs-sync the caller runs the reconciliation agent with the returned prompt. Requires the Compose server (reconciles live lifecycle state).

NameTypeReqDescription
featureCodestringyes–

No output schema declared.

No examples provided.

get_blocked_items ~23

List all tracker items that are blocked by non-complete items.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_changelog_entries ~114

Read parsed entries from compose/CHANGELOG.md. Filter by code (exact) or since (shorthand "24h"/"7d"/"30m" or ISO date — date-only; version surfaces always pass through).

NameTypeReqDescription
codestring––
limitnumber–Default 50; capped at 500.
sincestring–Window: shorthand like "24h"/"7d"/"30m" or ISO date. Date-only filter; version surfaces are always returned.

No output schema declared.

No examples provided.

get_completions ~80

Read completion records from feature.json files. Filter by feature_code (exact), commit_sha (short or full prefix), or since (shorthand or ISO date).

NameTypeReqDescription
commit_shastring––
feature_codestring––
limitnumber–Default 50; capped at 500.
sincestring––

No output schema declared.

No examples provided.

get_current_session ~50

Get the most recent session: tool count, items touched, error count, and recent Haiku summaries of what was accomplished.

NameTypeReqDescription
featureCodestring–Optional: get context for a specific feature

No output schema declared.

No examples provided.

get_feature_artifacts ~61

Read both canonical (auto-discovered: design.md, plan.md, …) and linked (snapshots, journals, findings) artifacts for a feature in one call. Each linked entry includes a current existence check.

NameTypeReqDescription
feature_codestringyes–

No output schema declared.

No examples provided.

get_feature_lifecycle ~42

Get the lifecycle state of a feature: current phase, phase history, artifacts, warnings.

NameTypeReqDescription
idstringyesItem ID (UUID) or slug

No output schema declared.

No examples provided.

get_feature_links ~50

Read outgoing and/or incoming feature links. Default returns both directions; filter by kind if needed.

NameTypeReqDescription
directionstring––
feature_codestringyes–
kindstring––

No output schema declared.

No examples provided.

get_item_detail ~39

Get full detail for a single tracker item including all its connections.

NameTypeReqDescription
idstringyesItem ID (UUID) or semanticId/slug

No output schema declared.

No examples provided.

get_journal_entries ~88

Read parsed entries from compose/docs/journal/. Filter by feature_code (exact), session (exact), or since (shorthand "24h"/"7d"/"30m" or ISO date).

NameTypeReqDescription
feature_codestring––
limitnumber–Default 50; capped at 500.
sessionnumber––
sincestring––

No output schema declared.

No examples provided.

get_judgment_state ~38

Judgment canon snapshot: positions (derived status), joints, under-test, open predictions, recent ledger. Replays pending judgment intents first.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

get_judgment_trace ~76

Causal ancestry of one judgment position: every revision in order, what it superseded (walked recursively), and what superseded it. Read-only; answers "what did we believe when we made that call", which get_judgment_state cannot (it returns latest-only).

NameTypeReqDescription
slugstringyesPosition slug

No output schema declared.

No examples provided.

get_pending_gates ~39

List pending policy gates. Optionally filter by item ID.

NameTypeReqDescription
itemIdstring–Filter to gates for a specific item (optional)

No output schema declared.

No examples provided.

get_phase_summary ~59

Get status and type distribution for a phase (or all phases). Useful for understanding overall project health.

NameTypeReqDescription
phasestring–Phase to summarize: vision, requirements, design, planning, implementation, verification, release. Omit for all phases.

No output schema declared.

No examples provided.

get_roadmap ~302

Read the current roadmap rendered from canon (feature.json) WITHOUT writing. Returns a status summary, the active/blocked convenience lists, and a staleness flag vs on-disk ROADMAP.md. Pass a status/phase filter or a limit to also get a general `rows` list (e.g. {status:"PLANNED", limit:10} for "what to work on next") — structured rows so callers never re-parse the markdown. Narrative-owned workspaces return the hand-authored file verbatim. Read-only — prefer this over reading ROADMAP.md directly.

NameTypeReqDescription
check_driftboolean–Compare the render against on-disk ROADMAP.md and set stale/drift (default true)
formatstring–"summary" (default — counts + lists, token-safe) or "markdown" (full rendered text)
limitinteger–Cap on the general `rows` list (default 50). Supplying status/phase/limit emits rows[]/rowsTotal/rowsTruncated; without any of them rows is omitted (token-safe summary). A finite value is floored and…
phasestring–Filter active/blocked + rows to a single phase (matched against phaseId)
statusstring–Filter active/blocked + rows by status (comma-separated): PLANNED, IN_PROGRESS, PARTIAL, BLOCKED, COMPLETE, …

No output schema declared.

No examples provided.

get_vision_items ~152

Query Compose tracker items. Filter by phase, status, type, or keyword. Returns id, title, type, phase, status, confidence, description.

NameTypeReqDescription
keywordstring–Search keyword matched against title and description
limitnumber–Max results to return (default 30)
phasestring–Filter by phase: vision, requirements, design, planning, implementation, verification, release
statusstring–Filter by status (comma-separated for multiple): planned, in_progress, complete, blocked, parked, killed
typestring–Filter by type: task, decision, evaluation, idea, spec, thread, artifact, question, feature, track

No output schema declared.

No examples provided.

get_workspace ~21

Get the current MCP workspace binding plus all candidates discovered from cwd.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

judgment_goal_write ~259

Write goal canon by op. Ordinary cuts require elicited clauses, provocation, and owner ratification. Every non-migrate op is migration-locked while a live legacy objective requires migration; migrate is the one-shot, fail-closed cutover that lifts the lock and takes no payload. joint_link/load_link support create and remove. Provenance and intents are writer-owned.

NameTypeReqDescription
carriesstring––
clausestring–load_link create branch v<N>#c<N> reference.
clause_idstring–correct branch clause ID.
clausesarray–cut: {text, channel, elicitation, secondhand source attribution?}[]
diff_notestring––
idempotency_keystring––
jointstring–joint_link create branch joint slug.
joint_link_idstring––
load_link_idstring––
opstringyes–
provocationobject–cut: {quote, at}
ratificationobject–cut: {asked, answered_at, answer_ref, quote}
reasonstring––
removeboolean––
textstring–correct branch replacement wording.

No output schema declared.

No examples provided.

judgment_joint_add ~182

Add a judgment joint (born open). Both branches and a coarse cost bucket are required; EXT/STRADDLE method packages may be attached now or at dispose time.

NameTypeReqDescription
branch_falsestringyes–
branch_truestringyes–
coststringyeshours|days|weeks|months
extobject–EXT package: {sharpened_question, bar, falsifier} or {judgment_dispatch: true, reason}.
flagsarray––
idempotency_keystring––
questionstringyes–
rankstringyeshigh|medium
resolve_bystringyesEXT|INT|CONSTRUCT|ASSERT|STRADDLE
slugstringyes–
straddleobject–{discriminating_signal, kill_criteria}

No output schema declared.

No examples provided.

judgment_ledger_append ~304

Append a judgment ledger event (kind-specific required fields enforced: commit-decide needs trigger+open_joints+prediction; postmortem needs recall_verdict+attribution and grades prediction_ref; override needs reason). Commit/CONSTRUCT events spawn prediction records.

NameTypeReqDescription
anchorstring–On note: projection anchor (register-header, joint:<slug>, …).
attributionstring––
bodystring––
convictionobject––
dispositionstring–Method disposed with; CONSTRUCT requires prediction.
idempotency_keystring––
kindstringyesdecide|kill|override|escalate|calibrate|postmortem|rank|note|correct|open
open_jointsarray––
predictionobject–{text, outcome_criteria}
prediction_gradestring–right|right-wrong-reason|wrong
prediction_refstring––
reasonstring––
recall_verdictstring––
refsarray––
rejectedarray––
rests_onarray–On commit-moment decide: goal clause refs (goal:v<N>#c<N>) the commit rests on; resolved through the effective goal chain.
titlestringyes–
triggerstring–On decide: earned|forced|exhausted (marks a commit-moment decide).

No output schema declared.

No examples provided.

judgment_person_write ~305

Write person canon by op. create adds a person; open_field supports create, fill, and reopen; edge/load_link support create and remove; correct supports divergence pair/clear. Provenance is writer-stamped.

NameTypeReqDescription
atstring–ISO date (YYYY-MM-DD).
carriesstring––
channelstring–said|observed|secondhand|inferred
cleararray–On correct: exactly ["diverges_with"].
display_namestring––
edge_idstring––
factstring–load_link create branch fact ID.
fact_idstring––
filled_bystring––
idempotency_keystring––
kindstring–edge create branch kind.
load_link_idstring––
namestring–open_field create branch.
opstringyes–
open_field_idstring––
pair_withstring–Pair stated↔revealed divergence on correct.
reasonstring––
removeboolean––
reopenboolean––
sectionstring–role|life|stated|revealed
slugstring––
textstring––
tostring–edge create branch target person slug.
viastring–Source attribution for a secondhand fact; not provenance.

No output schema declared.

No examples provided.

judgment_position_amend ~97

Scoped amendment (P6): new revision changing ONE claim's grounding and/or the conviction block. Anything else is supersession via judgment_position_create.

NameTypeReqDescription
claim_idstring––
convictionobject––
elicitationobject–Required if new grounding is ASSERT.
groundingstring–New grounding for claim_id.
idempotency_keystring––
slugstringyes–

No output schema declared.

No examples provided.

judgment_position_create ~162

Create a judgment position revision (new chain, update, supersession via supersedes, or tombstone via retracted). ASSERT grounding requires an elicitation block. Provenance is writer-stamped.

NameTypeReqDescription
claimsarrayyesClaims: {id, text, grounding EXT|INT|ASSERT|DERIVED|AGENT, supports[], elicitation?}.
convictionobjectyes{level high|medium|low, source stated|inferred}
idempotency_keystring––
rejected_alternativesarray–{what, why}[]
retractedboolean–true → tombstone revision.
slugstringyes–
supersedesstring–<slug>#r<N> being superseded.

No output schema declared.

No examples provided.

judgment_situation_write ~226

Write situation-entity canon by op. create adds an entity; owed supports create, give, and reopen; load_link supports create and remove. Provenance is writer-stamped.

NameTypeReqDescription
atstring–ISO date (YYYY-MM-DD).
carriesstring––
channelstring–said|observed|secondhand|inferred
display_namestring––
factstring–load_link create branch fact ID.
fact_idstring––
filled_bystring––
idempotency_keystring––
load_link_idstring––
namestring–owed create branch.
opstringyes–
owed_idstring––
reasonstring––
removeboolean––
reopenboolean––
slugstring––
textstring––
viastring–Source attribution for a secondhand fact; not provenance.
why_load_bearingstring––

No output schema declared.

No examples provided.

judgment_transition ~227

Joint state machine (edge→artifact table enforced; Stratum-guarded where capabilities.guard). Provide the target state plus its required artifact (resolution/dissolution/reopen/redispose), and/or a rank change (atomic rank ledger event).

NameTypeReqDescription
dissolutionobject–{decomposed_into[]}
extobject–EXT package attached at dispose time.
idempotency_keystring––
rankobject–{to: high|medium}
redisposeobject–{new_resolve_by, ext?, straddle?} (retry inconclusive with a different method)
reopenobject–{shaken_evidence_ref} (P6)
resolutionobject–{outcome resolved|inconclusive|failed_to_run|superseded, …outcome-specific fields, ext_result?, elicitation?}
slugstringyes–
straddleobject––
tostring–open|under_test|resolved|inconclusive|superseded|dissolved

No output schema declared.

No examples provided.

kill_feature ~45

Kill a feature from any phase. Records reason and sets status to killed.

NameTypeReqDescription
idstringyesItem ID
reasonstringyesWhy the feature is being killed

No output schema declared.

No examples provided.

link_artifact ~173

Register a non-canonical artifact (snapshot, journal entry, finding, etc.) on a feature. Canonical artifacts (design.md, plan.md, …) inside the feature folder are auto-discovered and rejected here. Stores in feature.json artifacts[]; dedups on (type, path); appends an audit event (best-effort).

NameTypeReqDescription
artifact_typestringyese.g. "journal", "snapshot", "finding", "report-supplement", "link", "external"
feature_codestringyes–
forceboolean–Overwrite an existing entry with the same (type, path)
idempotency_keystring––
pathstringyesRepo-relative path. Must exist; cannot contain ".." after normalization.
statusstring––

No output schema declared.

No examples provided.

link_features ~478

Register a typed cross-feature relationship. Two shapes: (1) SAME-PROJECT — kind ∈ surfaced_by|blocks|depends_on|follow_up|supersedes|related, requires to_code; self-links rejected; dedups on (kind,to_code). (2) EXTERNAL (kind:"external") — a cross-project pointer, NOT a same-project link: requires provider; four resolvable sub-shapes — github or forgejo (repo "owner/name" + integer issue), local (repo token + to_code), url (url); plus reserved url-class providers jira|linear|notion|obsidian (parse-valid, require url, NOT resolved in v1). External dedups on (kind=external, provider, repo, issue|to_code|url). Stores on the source feature; query inverse via get_feature_links(direction:"incoming").

NameTypeReqDescription
derive_expectboolean–For github/forgejo, derive open|closed from the owning feature status at validation and push time instead of storing expect.
expectstring–Optional expected state. github/forgejo: open|closed. local: a status token. url-class: recorded, never resolved.
expect_labelsarray–Optional labels to add without removing existing labels. Supported by github and forgejo links.
forceboolean––
from_codestringyes–
idempotency_keystring––
issueinteger–External github/forgejo: issue/PR number.
kindstringyes–
notestring––
providerstring–Required when kind:"external". Resolvable: github|forgejo|local|url. Reserved url-class (require url, not resolved in v1): jira|linear|notion|obsidian.
pushboolean–Opt this external link into roadmap_xref_push. Default false.
repostring–External github/forgejo: "owner/name". External local: workspace-relative repo token.
to_codestring–Same-project: target feature code (required unless kind:"external"). External local: the cited feature code. Need not exist yet.
urlstring–External url-class (url|jira|linear|notion|obsidian): the pointer URL.

No output schema declared.

No examples provided.

propose_followup ~223

File a follow-up feature against a parent. Auto-numbers the next code in the parent's namespace (parent_code-N), adds the ROADMAP row, links surfaced_by from new → parent, and scaffolds design.md with a "## Why" rationale block. Idempotent on (parent_code, idempotency_key); resumes across partial failures via an inflight ledger.

NameTypeReqDescription
complexitystring––
descriptionstringyesOne-line description for the ROADMAP cell.
idempotency_keystring–Optional retry-safety key. Without it, repeated calls allocate new codes.
parent_codestringyesParent feature code (e.g. "COMP-MCP-MIGRATION"). Must exist; must not be KILLED/SUPERSEDED.
phasestring–Phase heading. Defaults to the parent's phase if omitted.
rationalestringyesWhy this follow-up exists. Persisted as a "## Why" block in the new design.md and in the audit event.
statusstring––

No output schema declared.

No examples provided.

record_completion ~280

Record a completion bound to a commit SHA — THROUGH the completion gate (COMP-COMPLETION-GATE): under capabilities.guard the commit is server-verified and tests attested (no silent default), ONE guarded transition is ledgered, then the gate writes completions[], status COMPLETE, ROADMAP.md, the cockpit item and the audit event. A refusal (bad evidence, KILLED/SUPERSEDED feature, guard refused/unreachable) errors with COMPLETION_REFUSED and writes NOTHING. Projection failures (ROADMAP/vision) return success with partial:true + failures[]. set_status:false records evidence only (no status change, no guard transition). Idempotent on (feature_code, commit_sha).

NameTypeReqDescription
commit_shastringyesFull 40-char hex SHA (Decision 9). Short prefixes are rejected before any guard write. Stored lowercase; commit_sha_short is derived for display only.
feature_codestringyes–
files_changedarrayyes–
forceboolean–If true and a record with the same (feature_code, commit_sha) exists, replace it in place.
idempotency_keystring––
notesstring––
set_statusboolean–Default true. When true, flips status to COMPLETE via set_feature_status.
tests_passbooleanyes–

No output schema declared.

No examples provided.

report_iteration_result ~68

Report one iteration result. Compose evaluates exit criteria and returns whether to continue.

NameTypeReqDescription
idstringyesItem ID or semanticId
resultobjectyesIteration result. Review: {clean: bool, findings: []}, Coverage: {passing: bool, failures: []}

No output schema declared.

No examples provided.

roadmap_diff ~90

Read the feature-management audit log for a window. Returns events plus derived added[] and status_changed[] arrays.

NameTypeReqDescription
feature_codestring––
sincestring–Window: shorthand like "24h"/"7d"/"30m", or an ISO date. Default 24h.
toolstring–Filter to one tool name, e.g. "set_feature_status"

No output schema declared.

No examples provided.

roadmap_graph ~143

COMP-ROADMAP-GRAPH-1: generate a self-contained roadmap dependency-graph HTML from feature.json status/phase + per-feature deps.yaml edges + display frontmatter. Drops COMPLETE/SUPERSEDED/KILLED nodes; refuses (DANGLING_EDGE) when any edge points at an unknown feature. Deterministic/idempotent. Returns a small summary (path + counts + warnings), never the HTML body.

NameTypeReqDescription
outstring–Output HTML path (relative to project root unless absolute). Default: compose.json#roadmap_graph.out or roadmap-graph.html.
projectstring–Project root path. Default: current workspace.

No output schema declared.

No examples provided.

roadmap_graph_check ~116

COMP-ROADMAP-GRAPH-1: render the roadmap graph in-memory and diff against the on-disk HTML without writing. Returns { matches, exists, diffSummary, counts, warnings }. matches:false means the file is stale/missing — run roadmap_graph. Raises DANGLING_EDGE on a bad edge.

NameTypeReqDescription
outstring–Output HTML path to compare against. Default: compose.json#roadmap_graph.out or roadmap-graph.html.
projectstring–Project root path. Default: current workspace.

No output schema declared.

No examples provided.

roadmap_xref_push ~224

COMP-ROADMAP-XREF-PUSH: write external trackers to match feature.json declared `expect=`/`expect_labels` intent or lifecycle-derived intent (`derive_expect: true`; GitHub/Forgejo). DRY-RUN by default — returns {pushed, skipped, unchanged, scanned} describing what WOULD change. Only links with `push: true` are eligible. apply:true performs the writes: GitHub issue open/closed + additive labels (never removes; PR-backed refs skipped); Forgejo issue state + additive labels through independent operations, with partial-success rows reporting {statePushed, labelsPushed, errors[]}; and local refs via the sibling repo's own setFeatureStatus. Resolution failures are skipped; GitHub write failures and local disallowed transitions also skip, while successful Forgejo operations remain reported if another operation fails. Returns a small summary, never a large body.

NameTypeReqDescription
applyboolean–Perform the writes. Default false (dry-run — report only).
projectstring–Project root path. Default: current workspace.

No output schema declared.

No examples provided.

scaffold_feature ~65

Create feature folder with template stubs for all phase artifacts. Existing files are never overwritten.

NameTypeReqDescription
featureCodestringyesFeature folder name
onlyarray–Limit to specific artifacts (e.g. ["design.md", "blueprint.md"]). Omit for all.

No output schema declared.

No examples provided.

set_feature_status ~135

Flip a feature status. Updates feature.json and regenerates ROADMAP.md. Enforces a transition policy (use force: true to bypass). Appends an audit event (best-effort).

NameTypeReqDescription
codestringyes–
commit_shastring–Optional commit binding
forceboolean–Bypass the transition policy AND the roundtrip fixed-point guard (commits even if ROADMAP.md would not be a generation fixed point). Recorded in audit.
idempotency_keystring––
reasonstring–Free-form reason persisted in the audit event
statusstringyes–

No output schema declared.

No examples provided.

set_workspace ~48

Bind this MCP session to a workspace. Required when cwd contains multiple workspaces. Lives in process memory; lost on MCP restart.

NameTypeReqDescription
workspaceIdstringyesWorkspace ID (kebab-case)

No output schema declared.

No examples provided.

start_iteration_loop ~65

Start a review or coverage iteration loop on a feature. Returns loop state.

NameTypeReqDescription
idstringyesItem ID or semanticId
loopTypestringyesType of iteration loop
maxIterationsnumber–Override max iterations (optional, defaults from settings)

No output schema declared.

No examples provided.

validate_feature ~145

Cross-check a single feature against ROADMAP, vision-state, feature.json, folder contents, linked artifacts, and cross-references. Returns structured findings with severity (error/warning/info). FEATURE_NOT_FOUND emitted as a finding (not thrown) when the code matches strict regex but exists in no source.

NameTypeReqDescription
external_prefixesarray–Code prefixes (e.g. ["STRAT-"]) treated as external; downgrades ORPHAN_FOLDER to info
feature_codestringyesStrict feature code, e.g. "COMP-MCP-VALIDATE"
feature_json_modeboolean–Default true. Set false to skip feature.json comparisons in legacy projects.

No output schema declared.

No examples provided.

validate_project ~263

Run validate_feature for every code in vision-state, ROADMAP, and folders, plus cross-cutting checks (orphan folders, dangling cross-refs, CHANGELOG references, journal index drift) and read-only external-reference staleness (kind:"external" links + xref: roadmap citations). external:true enables network resolution of github refs (off by default — github refs then emit XREF_RESOLUTION_SKIPPED). Returns the union of all findings.

NameTypeReqDescription
applyboolean–With fix:true, write the fixes and re-validate. Default false (dry-run plan only).
externalboolean–Resolve github external refs over the network (read-only). Default false: github refs degrade to XREF_RESOLUTION_SKIPPED.
external_prefixesarray––
feature_json_modeboolean––
fixboolean–COMP-MCP-VALIDATE-2: reconcile mechanical drift. Returns a fix plan under `reconcile` (dry-run unless apply:true). Local-provider only.
fix_classesarray–Override the enabled fix classes: dangling_link, invalid_link_kind, status_fj_vision, partial_age, roadmap_status_rewrite, invalid_link_kind_repair. Default: the non-destructive set.

No output schema declared.

No examples provided.

write_checkpoint ~194

COMP-RESUME: write a durable build checkpoint anchored to a deterministic environment fingerprint. Omit `soft` for a cheap anchor checkpoint — the response then includes a `scribePrompt` you can answer (returning {goal,nextStep,risks} anchored to the fingerprint) and re-submit as `soft` for a narrative checkpoint. Pass `soft` directly to skip that. Returns {checkpoint, scribePrompt}. Direct-to-disk (works when the server is down).

NameTypeReqDescription
confidencenumber–Only on resume-sync checkpoints (0..1).
featureCodestringyes–
flowIdstring–Stratum flow id, if any.
phasestring–Lifecycle phase label; falls back to feature.json then "unknown".
softobject–Narrative intent; omit for an anchor checkpoint. Every factual claim should reference a fingerprint anchor.
triggerstringyes–

No output schema declared.

No examples provided.

Common questions

What is the Compose MCP server?

Compose MCP is listed in the public MCP registry as ai.smartmemory/compose-mcp. Typed feature management for compose projects: roadmap, changelog, artifacts, journal. This page covers its npm package (@smartmemory/compose-mcp).

Is the Compose MCP server safe to use?

Compose MCP scores 28 out of 100 on VerifyMCP. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the Compose MCP server expose?

Compose MCP exposes 51 tools: get_vision_items, get_item_detail, get_phase_summary, get_blocked_items, get_current_session, and 46 more. Their descriptions and schemas cost roughly 7,225 tokens of context every time the server is loaded.

Is the Compose MCP server still maintained?

Compose MCP is still listed as active in the MCP registry. We last reached this channel on 27 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the Compose MCP server under?

Compose MCP declares the BUSL-1.1 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.