Skip to main content
Glama

context-portal

mem4sprint.schema_and_templates.md11 kB
--- trigger: always_on --- # --- mem4sprint Meta Schema and Starters (v1.0.0) --- mem4sprint_meta: version: "1.0.0" notes: - "This file defines entity shapes and allowed relations." - "Use these for validation before writing to ConPort." entities: sprint_goal: required: [content, sprint_id, status] optional: [tags, provenance] status_enum: [planned, active, blocked, done] sprint_subtask: required: [content, sprint_id, goal_id, status] optional: [tags, provenance] status_enum: [planned, active, blocked, done] artifact: required: [content, artifact_kind, status] optional: [goal_id, sprint_id, tags, provenance] artifact_kind_enum: [file, function, api, doc, dataset, run, env] status_enum: [planned, active, blocked, done] test: required: [content, status] optional: [sprint_id, goal_id, tags, provenance] status_enum: [planned, active, blocked, done] decision: required: [summary] optional: [rationale, tags, provenance] relation: required: [from_id, rel, to_id] optional: [provenance, tags] rel_enum: [BLOCKED_BY, IMPLEMENTS, VERIFIES, DEPENDS_ON, PRODUCES, CONSUMES, DERIVED_FROM, RELATED_TO, CLARIFIES, RESOLVES, TRACKS] story: required: [content, sprint_id, status] optional: [acceptance_criteria, epic_id, tags, provenance] status_enum: [planned, active, blocked, done] epic: required: [content, status] optional: [tags, provenance] status_enum: [planned, active, blocked, done] acceptance_criteria: required: [story_id, text] optional: [status, tags, provenance] status_enum: [pending, met, failed] bug: required: [content, status, severity] optional: [sprint_id, tags, provenance] status_enum: [open, in_progress, blocked, fixed, closed] severity_enum: [low, medium, high, critical] blocker: required: [content, affects_id] optional: [status, tags, provenance] status_enum: [open, resolved] risk: required: [content, severity, likelihood] optional: [mitigation, tags, provenance] severity_enum: [low, medium, high] likelihood_enum: [rare, possible, likely] retrospective_item: required: [content, kind] optional: [action_owner, status, tags, provenance] kind_enum: [keep_doing, stop_doing, start_doing, action] status_enum: [open, done] sprint_metric: required: [sprint_id, name, value] optional: [unit, notes, provenance] rfc_doc: required: [title, link_or_path] optional: [status, tags, provenance] literature_ref: required: [title, link_or_path] optional: [notes, tags, provenance] validation: id_uniqueness: true relation_tuple_uniqueness: true require_existing_nodes_for_edges: true # --- FTS Query Rules --- # Use ONLY the following prefixes with SQLite FTS5: # custom_data_fts: category:, key:, value_text: # decisions_fts: summary:, rationale:, implementation_details:, tags: # If a term has special chars (., /, \\, ") or unknown prefixes, quote it as a literal and, for custom data, # prefer value_text:"...". Examples: # - value_text:"artifact_kind:doc" # - summary:"S-2025.08" # Canonical Categories: see mem4sprint.md. Use flat categories (artifacts, rfc_doc, literature_ref, retrospective, ProjectGlossary, critical_settings). Put subtype/kind in tags or value JSON. # --- Starters (compact) --- starters: sprint_goal: json: { type: sprint_goal, content: "<goal statement>", sprint_id: "S-YYYY.MM", status: planned, tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } } sprint_subtask: json: { type: sprint_subtask, content: "<subtask description>", sprint_id: "S-YYYY.MM", goal_id: "<goal-id>", status: planned, tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } } artifact: json: { type: artifact, content: "<artifact description>", artifact_kind: file, status: planned, goal_id: "<goal-id>", sprint_id: "S-YYYY.MM", tags: [], provenance: { agent: dev, tool: mem4sprint, ts: "" } } test: json: { type: test, content: "<test description or assertion>", status: planned, sprint_id: "S-YYYY.MM", goal_id: "<goal-id>", tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } } decision: json: { type: decision, summary: "<concise decision summary>", rationale: "<why this decision>", tags: [mem4sprint], provenance: { agent: architect, tool: mem4sprint, ts: "" } } relation: json: { type: relation, content: "<relation summary>", from_id: "<source-id>", rel: BLOCKED_BY, to_id: "<target-id>", tags: [mem4sprint], provenance: { agent: system, tool: mem4sprint, ts: "" } } story: json: { type: story, content: "<story>", sprint_id: "S-YYYY.MM", status: planned, acceptance_criteria: [], tags: [], provenance: { agent: planner, tool: mem4sprint, ts: "" } } epic: json: { type: epic, content: "<epic>", status: planned, tags: [], provenance: { agent: architect, tool: mem4sprint, ts: "" } } acceptance_criteria: json: { type: acceptance_criteria, story_id: "<story-id>", text: "<criterion>", status: pending, tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } } bug: json: { type: bug, content: "<bug description>", status: open, severity: medium, sprint_id: "S-YYYY.MM", tags: [], provenance: { agent: qa, tool: mem4sprint, ts: "" } } blocker: json: { type: blocker, content: "<blocker>", affects_id: "<entity-id>", status: open, tags: [], provenance: { agent: pm, tool: mem4sprint, ts: "" } } risk: json: { type: risk, content: "<risk>", severity: medium, likelihood: possible, mitigation: "<plan>", tags: [], provenance: { agent: architect, tool: mem4sprint, ts: "" } } retrospective_item: json: { type: retrospective_item, content: "<retro item>", kind: action, action_owner: "@dev", status: open, tags: [], provenance: { agent: facilitator, tool: mem4sprint, ts: "" } } sprint_metric: json: type: sprint_metric sprint_id: "S-YYYY.MM" name: "velocity" value: 0 unit: "points" notes: "" provenance: { agent: pm, tool: mem4sprint, ts: "" } rfc_doc: json: type: rfc_doc title: "<rfc title>" link_or_path: "mdc:/tasks/rfc/<file>.md" status: draft tags: [] provenance: { agent: architect, tool: mem4sprint, ts: "" } literature_ref: json: type: literature_ref title: "<ref title>" link_or_path: "<url|mdc:/docs/literature/file>" notes: "" tags: [] provenance: { agent: researcher, tool: mem4sprint, ts: "" } # --- Minimal Routines (PLAN/ACT hooks) --- routines: PLAN: - "Load recent contexts and goals; confirm sprint_id." - "Derive plan; log decisions; set active_context.mode=PLAN." - "Propose entities/relations using starters; await confirm before logging." ACT: - "Fetch active goal/subtasks; execute change." - "Log progress, artifacts, tests; link via relations." - "Update statuses; set active_context.mode=ACT." # --- Relationships Diagram (Mermaid) --- diagram: mermaid: | flowchart TD G[sprint_goal] ST[sprint_subtask] S[story] T[test] A[artifact] D[decision] B[bug] BL[blocker] R[risk] RFC[rfc_doc] L[literature_ref] RI[retrospective_item] M[sprint_metric] S -- IMPLEMENTS --> G ST -- IMPLEMENTS --> S T -- VERIFIES --> ST ST -- PRODUCES --> A A -- DERIVED_FROM --> L RFC -- CLARIFIES --> D B -- BLOCKED_BY --> BL R -- RELATED_TO --> G RI -- RESOLVES --> B M -- TRACKS --> G # --- Appendix: Operational Call Recipes --- appendix_operational_call_recipes: notes: - "All calls require workspace_id set to the absolute workspace path." - "IDs/keys shown as placeholders; replace with actual IDs." canonical_mcp_call_recipes: - name: "create_doc_artifact" call: | mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "artifacts", key: "<artifact-id>", value: { type: "artifact", content: "<doc title>", artifact_kind: "doc", status: "planned|active|blocked|done", sprint_id: "S-YYYY.MM", tags: ["architecture"], provenance: { agent: "dev", tool: "mem4sprint", ts: "" } } }) - name: "create_rfc" call: | mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "rfc_doc", key: "<rfc-id>", value: { title: "<title>", link_or_path: "mdc:/tasks/rfc/<file>.md", status: "draft", tags: ["rfc"], provenance: { agent: "architect", tool: "mem4sprint", ts: "" } } }) - name: "record_lesson_learned" call: | mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "retrospective", key: "<retro-id>", value: { type: "retrospective_item", content: "<lesson>", kind: "action|keep_doing|stop_doing|start_doing", status: "open|done", tags: ["lessons_learned"], provenance: { agent: "facilitator", tool: "mem4sprint", ts: "" } } }) - name: "update_active_context" call: | mcp0_update_active_context({ workspace_id: "<ABS_PATH>", patch_content: { mode: "PLAN|ACT", focus: "<focus>", sprint_id: "S-YYYY.MM" } }) - name: "link_doc_clarifies_decision" call: | mcp0_link_conport_items({ workspace_id: "<ABS_PATH>", relationship_type: "CLARIFIES", source_item_type: "custom_data", source_item_id: "<artifact-id>", target_item_type: "decision", target_item_id: "<decision-id>" }) - name: "fetch_requirements_architecture_plan" calls: | mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:requirements\"", limit: 5 }) mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:architecture\"", limit: 5 }) mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:sprint_plan\" value_text:\"sprint_id:S-YYYY.MM\"", limit: 5 }) - name: "query_docs_by_tag" call: | mcp0_search_custom_data_value_fts({ workspace_id: "<ABS_PATH>", query_term: "category:artifacts value_text:\"tag:architecture\"", limit: 10 }) - name: "fetch_top_recent_decisions_for_sprint" calls: | mcp0_search_decisions_fts({ workspace_id: "<ABS_PATH>", query_term: "tags:\"S-YYYY.MM\"", limit: 5 }) public_docs_policy_calls: - name: "draft_quickstart_minimal" call: | mcp0_log_custom_data({ workspace_id: "<ABS_PATH>", category: "artifacts", key: "quickstart", value: { artifact_kind: "doc", title: "Quickstart", tags: ["public_doc","quickstart"], visibility: "public", publish_status: "DRAFT" } })

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/GreatScottyMac/context-portal'

If you have feedback or need assistance with the MCP directory API, please join our Discord server