io.github.contextq/contextq-mcp
NPM · @CONTEXTQ/MCP · 2 COMPONENTS · SCANNED OCT 1
Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP.
Available components
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 Security63
- No malware found by supply-chain analysis.Pass
- Known CVEs could not be checked: the version this server declares is not published in its registry.Unverified
- No install/post-install scripts declared.Pass
- Dependency health could not be checked: the version this server declares is not published in its registry.Unverified
Provenance & Transparency45
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 0 days ago).Pass
- Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability65
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 5980 tokens (~249/item across 24 items; 24 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management0
- Stability not yet verified: not enough scan history yet (needs a 30-day window).Unverified
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Tool Safety75
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "ctx_delete" implies "delete" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
- An AI judge read all 25 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Unverified: 1 category
A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.
How do I install the io.github.contextq/contextq-mcp server?
io.github.contextq/contextq-mcp runs locally as an npm package, launched with npx -y @contextq/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 · @contextq/mcp
claude mcp add contextq-contextq-mcp -- npx -y @contextq/mcp
{
"mcpServers": {
"contextq-contextq-mcp": {
"command": "npx",
"args": [
"-y",
"@contextq/mcp"
]
}
}
} {
"servers": {
"contextq-contextq-mcp": {
"command": "npx",
"args": [
"-y",
"@contextq/mcp"
]
}
}
} codex mcp add contextq-contextq-mcp -- npx -y @contextq/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"contextq-contextq-mcp": {
"type": "local",
"command": [
"npx",
"-y",
"@contextq/mcp"
],
"enabled": true
}
}
} openclaw mcp add contextq-contextq-mcp --command npx --arg -y --arg @contextq/mcp
mcp_servers:
contextq-contextq-mcp:
command: "npx"
args: ["-y", "@contextq/mcp"] {
"McpServers": {
"contextq-contextq-mcp": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@contextq/mcp"
]
}
}
} assistant mcp add contextq-contextq-mcp -t stdio -c npx -a -y @contextq/mcp
{
"mcpServers": {
"contextq-contextq-mcp": {
"command": "npx",
"args": [
"-y",
"@contextq/mcp"
]
}
}
} 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.
- 1 Oct 26 56
First indexed and scored.
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 1 Oct 2026 · Analysed npm/@contextq/mcp@2.1.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 →
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 →
agent_boot ~760
Boot an autonomous agent: ONE token-budgeted call returning everything needed to start or resume work. Call this FIRST in any agent run. Returns {agent, session:{...,role}, resume:{checkpoint_summary, open_tasks}, handoff:{tldr, source}, lessons:[], facts:[], brief, skills:[], skills_full, repo_map, siblings:[], budget:{limit, used, dropped}, client}. If a non-terminal session exists for this agent (or session_id is given), `resume` tells you exactly where you left off; `handoff` is the best-ranked latest handoff (a hand-written wrap SEED first). `goal` drives the facts, lessons AND skills retrieval. `skills` are parametrized procedures distilled from verified past runs matching the goal ({context_id, name, description, success_count, similarity}) -- check them BEFORE re-deriving a solution. On a session's later boots `skills` holds only new or changed entries and `skills_full` is false (empty then means nothing new, not no skills); pass `full:true` for the complete set. With `project_id` you also get a goal-graph `brief` {north_star, role, lane, next, blocked_on, blocking, done} and the session role is inferred from the matched goal node. With `include_repo_map:true` on a code-indexed workspace, `repo_map` carries top-ranked file signatures to answer "where is X handled" without grepping. `siblings` lists other active sessions in this workspace (last ~60 min, max 5) so you can coordinate via relay_* before touching shared resources. Slots fill resume > handoff > lessons > facts > brief; overflow is reported in budget.dropped. Trigger: resume or catch up on tracked work ("hôm trước tới đâu", "tiếp gì", "tóm lại đang làm gì", "what's next", "resume", "where did we leave off", "catch me up"). Skip for unrelated casual questions.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | yes | Stable agent slug (handle the agent boots with every run, e.g. 'claude-code') |
| agent_name | string | – | Human-readable name; used only when the agent is first created |
| epistemic_min | string | – | Epistemic floor (T358) for the FACTS slot: only surface facts at or above this confidence tier (weakest->strongest: assumed < inferred < told < observed). Omit for no floor. |
| full | boolean | – | T506: bypass the skills diff-since-last-boot behavior and always return the full current skills match set. Default false (repeat boots of the same session return only new/changed skills). |
| goal | string | – | The objective for this run — drives relevant-facts + lessons retrieval AND goal-node role inference |
| include_repo_map | boolean | – | When true, include a token-budgeted repo map (entries with path+signatures) from code-indexed contexts. Only useful for workspaces indexed with contextq index. Default false. |
| project_id | number | – | Project id to scope the goal-graph situation brief + role inference to (omit = no brief, classic pack) |
| repo_map_token_budget | number | – | Token cap for the repo map slot (default ~2000, range 100-16000). Ignored when include_repo_map is false. |
| session_id | number | – | Resume a specific session by id (otherwise the latest active/paused session for this agent) |
| token_budget | number | – | Max tokens for the assembled pack (default 4000) |
| workspace | string | – | Workspace slug to scope handoff + facts to |
No output schema declared.
No examples provided.
agent_checkpoint ~139
Snapshot the agent's working state so a restart/crash can resume from exactly here. `state` is an arbitrary JSON scratchpad (cursor, partial results, plan, open files). `summary` is a 1-line 'where I am'. Returns the checkpoint with its monotonic seq. Call periodically after each chunk of progress.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | number | yes | Session id to checkpoint |
| state | object | – | Working-state scratchpad (arbitrary JSON) |
| summary | string | – | One-line human-readable 'where I am' |
| token_estimate | number | – | Optional explicit token size of the state (auto-estimated if omitted) |
No output schema declared.
No examples provided.
agent_handoff ~176
Generate a handoff document for the session's workspace at run end (wraps the dream handoff generator — LLM-synthesized TL;DR + in-progress + next-steps + open-questions). Links the handoff context back to the session. Pass complete=true to also mark the session completed. Requires an LLM provider configured on the server.
| Name | Type | Req | Description |
|---|---|---|---|
| complete | boolean | – | Also set the session status to 'completed' |
| dry_run | boolean | – | Generate without persisting the handoff context |
| project | string | – | Optional project slug to narrow the handoff |
| session_id | number | yes | Session to generate a handoff for |
| since_days | number | – | Look-back window in days (default 7) |
| workspace | string | – | Workspace slug (falls back to the session's workspace) |
No output schema declared.
No examples provided.
agent_lesson_add ~137
Record a lesson learned during a run so the agent doesn't repeat the failure. Embedded for goal-relevant recall at the next agent_boot. Mirrors the vibe-loop '## Lessons' log. scope controls breadth: 'session' (this run), 'agent' (this agent always), or 'workspace'.
| Name | Type | Req | Description |
|---|---|---|---|
| scope | string | – | How broadly the lesson applies (default 'session') |
| session_id | number | yes | Session this lesson came from |
| try_instead | string | – | What to do differently next time |
| what_failed | string | yes | What was attempted that failed |
| why | string | – | Why it failed |
No output schema declared.
No examples provided.
agent_resume ~68
Read the resume bundle for a session WITHOUT booting fresh: latest checkpoint, open tasks (pending/in_progress/blocked), and goal-relevant lessons. Use when you already know the session_id and just need to reload where you left off.
| Name | Type | Req | Description |
|---|---|---|---|
| session_id | number | yes | Session id to resume |
No output schema declared.
No examples provided.
agent_session_end ~119
End or update an agent session's status. Use status='completed' when the goal is met, 'paused' to suspend (resume later from the checkpoint), 'stalled' when the vibe-loop stall detector trips, or 'abandoned' to drop the run. Setting completed/abandoned stamps ended_at.
| Name | Type | Req | Description |
|---|---|---|---|
| goal | string | – | Optionally revise the goal |
| metadata | object | – | Metadata to merge into the session |
| session_id | number | yes | Session id to update |
| status | string | yes | New session status |
No output schema declared.
No examples provided.
agent_session_start ~184
Start a new agent session (a run with a goal). Returns the created session including its id. Use when beginning a fresh task that you want to track and resume. Pass parent_session_id to chain a resumed run to its predecessor.
| Name | Type | Req | Description |
|---|---|---|---|
| agent | string | yes | Stable agent slug |
| agent_name | string | – | Human-readable name (used only on first creation) |
| goal | string | – | The A-Z objective for this run |
| metadata | object | – | Arbitrary run metadata |
| parent_session_id | number | – | Id of the session this one resumes/continues |
| project | string | – | Optional project slug within the workspace |
| role | string | – | Optional role this session plays (frontend, backend, design, ...). Usually inferred at boot from the matched goal node instead. |
| workspace | string | – | Workspace slug this run operates in |
No output schema declared.
No examples provided.
agent_task_tick ~183
Flip a task's status. Setting status='verified' REQUIRES non-empty `evidence` (real observed output: test result, HTTP status, exit code) — the no-self-certification rule. Returns 400 if you try to verify without evidence. Use this as each checklist item is proven. Trigger: user reports finishing a piece of tracked work ("xong rồi", "xong X", "done X", "done", "mark done", "finished X") — tick the matching session-scoped checklist item here (use goal_advance instead for a board-level task). Only call when it maps to a tracked item; ignore unrelated casual chatter.
| Name | Type | Req | Description |
|---|---|---|---|
| evidence | string | – | Real observed output proving the task (required to set 'verified') |
| status | string | yes | New status |
| task_id | number | yes | Task id to tick |
No output schema declared.
No examples provided.
agent_task_upsert ~267
Create or update one checklist item in a session's task tree. Omit task_id to create; pass task_id to update. `verify_cmd` names HOW the item is proven done (the agent must run it before ticking). Use parent_task_id for subtasks. This productizes the vibe goal-file checklist. Trigger: call at the START of a tracked piece of work to record a checklist item (session-scoped — for a task meant to persist across sessions use goal_add on the board instead). Only call when the work is actually being tracked; ignore unrelated casual chat.
| Name | Type | Req | Description |
|---|---|---|---|
| context_id | number | – | Optional id of the durable context this task produced |
| goal_node_id | number | – | Optional goal-graph node this task rolls up to (links session work to the project goal) |
| order_index | number | – | Ordering within the session |
| parent_task_id | number | – | Parent task id for a subtask |
| session_id | number | yes | Session that owns this task |
| status | string | – | Task status |
| task_id | number | – | Existing task id to update (omit to create) |
| title | string | – | Task title (required when creating) |
| verify_cmd | string | – | Command/observation that proves this task done |
No output schema declared.
No examples provided.
ctx_delete ~49
Permanently delete a context entry by ID. This action cannot be undone. Use this only when you are sure the entry should be removed.
| Name | Type | Req | Description |
|---|---|---|---|
| id | number | yes | The context entry ID to delete |
No output schema declared.
No examples provided.
ctx_get ~63
Get a single context entry by its ID. Use this when you already know the exact context ID you want to read. Response includes lifecycle, atomic, quality_score, valid_from, and valid_to alongside the standard fields.
| Name | Type | Req | Description |
|---|---|---|---|
| id | number | yes | The context entry ID |
No output schema declared.
No examples provided.
ctx_health ~80
Run the deep health probe and return the full report. Probes DB, Elasticsearch, embedding provider, LLM provider, and scheduler states. 30-second in-memory cache on the server. Returns `{status, components, schedulers, queue}` - status is `ok|degraded|fail`. Useful for ad-hoc prod health checks from MCP clients.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ctx_list ~143
List context entries with optional filters. Use this to browse existing contexts by workspace, project, type, or tag without a search query.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | – | Max results to return (default 20) |
| memoryKind | string | – | Filter to a single taxonomy kind: 'episodic', 'semantic', or 'procedural'. |
| offset | number | – | Offset for pagination |
| project | string | – | Filter by project identifier |
| scope | string | – | Filter by visibility scope |
| tag | string | – | Filter by a single tag |
| type | string | – | Filter by context type |
| workspace | string | – | Filter by workspace identifier |
No output schema declared.
No examples provided.
ctx_load_tool_group ~175
Load one additional group of ContextQ tools into this session (group names come from ctx_tool_groups) so they become callable without reconnecting. Pass "all" to load every remaining ContextQ tool at once. Some MCP clients need to refresh their tool list to actually see newly loaded tools in the model's context -- if a loaded tool still doesn't show up, call it directly by name anyway (ContextQ accepts a tool call for any known tool name regardless of what tools/list currently returns), or restart this server with the environment variable CONTEXT_MCP_TOOL_PROFILE=full to get every tool from the start.
| Name | Type | Req | Description |
|---|---|---|---|
| group | string | yes | Group name from ctx_tool_groups (e.g. "pkm", "admin", "relay", "knowledge-graph"), or "all" to load every remaining ContextQ tool. |
No output schema declared.
No examples provided.
ctx_remember ~463
Extract durable memories from a raw multi-turn conversation and save them as deduped atomic contexts. Turn-aware sibling of ctx_ingest: the server builds a speaker-attributed transcript, extracts only durable facts/preferences via LLM (skipping chit-chat), and runs the claims through the SAME kNN-dedup + diff + create/update/archive pipeline ctx_ingest uses. Pass subjectId to scope memories to a single end-user of your application (Mem0-parity user_id) — dedup then only considers that subject's own prior memories, and every created context is tagged with that subjectId so ctx_search (subjectId param) and GET /api/memory can retrieve it later. Set dryRun=true to preview without persisting. Long conversations run async — the response is { jobId, statusUrl } and you must poll ctx_ingest_status (or GET /api/ingest-jobs/:id) until status='succeeded' or 'failed'. Short conversations return the full result inline. Pass async=true/false to force a path explicitly.
| Name | Type | Req | Description |
|---|---|---|---|
| agentSlug | string | – | Optional identifier of the agent that produced/consumed this conversation. Recorded as metadata only. |
| async | boolean | – | Force the async path (true) or sync path (false). Omit to let the server auto-pick — conversations longer than MEMORY_ASYNC_THRESHOLD messages (default 8) run async. |
| dryRun | boolean | – | When true, run the full extract + diff pipeline but skip every DB write. Default false. |
| maxClaims | number | – | Cap on claims extracted from the conversation. Default 10, hard max 25. |
| messages | array | yes | Conversation turns in chronological order. |
| project | string | – | Optional project identifier within the workspace. |
| sessionId | string | – | Optional conversation/session identifier. Recorded as metadata and on the audit row only. |
| subjectId | string | – | End-user identity this conversation belongs to (Mem0-parity user_id). Scopes dedup and tags every created context so it can be retrieved later via ctx_search subjectId or GET /api/memory. |
| workspace | string | – | Workspace identifier the extracted memories belong to. Falls back to the request's active scope when omitted. |
No output schema declared.
No examples provided.
ctx_save ~445
Save a new context entry (reference doc, feedback, project note, incident report, lesson learned, or user profile). Use this when you want to persist knowledge for future retrieval. Optional lifecycle/valid_from/valid_to flag the note's maturity and bi-temporal validity. Response includes atomic, quality_score, and lifecycle once the backend judge has run. Trigger: user asks you to remember/save something ("nhớ cái này", "lưu lại", "ghi nhớ giúp", "remember this", "save this", "note this down") — call whenever work-relevant info should persist across sessions. Only call when the request is actually about tracked work/memory; ignore unrelated casual chat.
| Name | Type | Req | Description |
|---|---|---|---|
| content | string | yes | Full content / body of the context entry |
| description | string | yes | One-line summary used for search ranking |
| lifecycle | string | – | Lifecycle state of the note. Omit to let the backend default to 'working'. Use 'fleeting' for transient captures, 'evergreen' for durable knowledge, 'archived' to retire from active surfacing. |
| memoryKind | string | – | Taxonomy override: 'episodic' (an event/interaction happened), 'semantic' (durable factual/reference knowledge), or 'procedural' (how-to / lesson that changes future behavior). Omit to let the backen… |
| metadata | object | – | Arbitrary key-value metadata |
| name | string | yes | Short, descriptive title |
| project | string | – | Optional project identifier within the workspace |
| scope | string | – | Visibility scope (defaults to personal) |
| tags | array | – | Tags for categorization and filtering |
| type | string | yes | Category of the context entry |
| valid_from | string | – | Bi-temporal: ISO 8601 timestamp when the fact this context describes started being true. Optional. |
| valid_to | string | – | Bi-temporal: ISO 8601 timestamp when the fact stopped being true. Optional; null means still valid. |
| workspace | string | yes | Workspace identifier that owns this context |
No output schema declared.
No examples provided.
ctx_search ~671
Search / recall saved knowledge and memories using hybrid full-text + semantic search ranked by relevance — the default tool for 'what do I know about X' or 'did I already save this'. Use this when you need to find, remember, or look up existing knowledge by keyword or phrase. Set chunk_search=false to disable per-chunk passage matching, lifecycle_boost=false for legacy ranking, or include_archived=true to surface retired notes. Results may include lifecycle, quality_score, and matched_chunk per hit.
| Name | Type | Req | Description |
|---|---|---|---|
| chunk_search | boolean | – | When true (default), search at the chunk level so individual passages can match. When false, only whole-context fields are scored. |
| epistemicMin | string | – | Epistemic floor (T358): only return contexts at or above this confidence tier (weakest->strongest: assumed < inferred < told < observed). E.g. 'told' excludes 'assumed'/'inferred' rows. Omit to searc… |
| include_archived | boolean | – | When true, include lifecycle='archived' rows. Default false — archived notes are excluded from regular searches. |
| include_trace_events | boolean | – | T375: when true, ALSO search episodic tool-call trace summaries ('what did I try before this worked?') and return them in a separate `traceEvents` field. Default false — this is fully additive and ne… |
| level | string | – | Layered representation level. 'full' (default) keeps the stored description; 'paragraph' replaces it with a ~120-word distill; 'sentence' replaces it with a ~25-word claim. Use 'sentence' for cheap h… |
| lifecycle_boost | boolean | – | When true (default), apply the evergreen/fleeting lifecycle multipliers to the ranking. Set false for legacy ts_rank * tagBoost * recencyBoost only. |
| limit | number | – | Max results to return (default 20) |
| memoryKind | string | – | Filter to a single taxonomy kind: 'episodic' (events/interactions), 'semantic' (durable reference knowledge), or 'procedural' (how-to / lessons). Omit to search across all kinds. |
| offset | number | – | Offset for pagination |
| project | string | – | Filter by project identifier |
| query | string | yes | Search query (full-text + semantic) |
| scope | string | – | Filter by visibility scope |
| subjectId | string | – | Filter to memories scoped to a single end-user (Mem0-parity user_id axis). Matches the subjectId used when the memory was created via ctx_remember / POST /api/memory. Omit to search across all subjec… |
| tags | array | – | Filter by tags (all must match) |
| trace_session_id | number | – | Scope trace-event fusion to one agent session (omit to search across the tenant's trace events). Ignored unless include_trace_events is true. |
| type | string | – | Filter by context type |
| workspace | string | – | Filter by workspace identifier |
No output schema declared.
No examples provided.
ctx_stats ~56
Get aggregate statistics: total context count, breakdown by workspace, type, tag, recently updated entries, and orphan_rate (notes with no tags and no inbound references). Use this for an overview of what is stored and to spot disconnected knowledge.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ctx_tool_groups ~125
List additional groups of ContextQ tools not loaded in this session by default -- code-graph lookup, admin/audit, relay handoff, world-model snapshots, saved searches, knowledge-graph traversal, bulk import/ingest, and more. Search here first if a ContextQ tool you expect (a saved search, a relay, a snapshot, a code reference) is missing from your current tool list. Returns each group's name, one-line purpose, member tool names, and how many of them are already loaded, plus how to load a group with ctx_load_tool_group.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
ctx_update ~286
Update an existing context entry. Only the provided fields are changed; omitted fields remain unchanged. Use this to correct, append to, reclassify, or retire (archive) an existing entry. Optional lifecycle/valid_from/valid_to update note maturity and bi-temporal validity.
| Name | Type | Req | Description |
|---|---|---|---|
| archivedAt | string|null | – | Set to null to unarchive, or ISO date string to archive |
| content | string | – | New content body |
| description | string | – | New description |
| id | number | yes | The context entry ID to update |
| lifecycle | string | – | New lifecycle state (fleeting/working/evergreen/archived). |
| memoryKind | string | – | Taxonomy override: 'episodic', 'semantic', or 'procedural'. Setting this locks the value against the fire-and-forget atomicity-judge LLM refinement on this write. |
| metadata | object | – | Replacement metadata object |
| name | string | – | New title |
| scope | string | – | New visibility scope |
| tags | array | – | Replacement set of tags |
| type | string | – | New context type |
| valid_from | string | – | Bi-temporal: ISO 8601 timestamp when the fact started being true. |
| valid_to | string | – | Bi-temporal: ISO 8601 timestamp when the fact stopped being true; null to keep open. |
No output schema declared.
No examples provided.
goal_add ~472
Add a node to the goal graph. Progressive elaboration: only title is required -- omit parent_id to create a root node (a vague node is created status='draft'); fill the rest as reality reveals it. kind: objective|milestone|goal|work_item|relay. owner_role/status/origin are free strings. Trigger: when a user (including a non-technical one) asks you to remember or hand off a piece of work for later ("thêm việc", "thêm task", "todo", "add a task", "add to the board"), create a node here with a valid status (draft is fine if details are vague) — this is how a casual request becomes a durable tracked task. Only call when the request is genuinely about work to track; ignore unrelated casual questions.
| Name | Type | Req | Description |
|---|---|---|---|
| brief | object | – | Cold-executor brief: all six keys or omit (a partial brief is rejected). A work_item added without one gets a `hint` with the template. |
| content | string | – | Long description (creates a searchable contexts row) |
| do | string | – | One-sentence work order (stored as payload.do) |
| effort_weeks | number | – | Estimated effort in weeks |
| external_ref | object | – | External tracker ref, e.g. {jira: 'FIP-123'} |
| kind | string | – | objective|milestone|goal|work_item|relay (default work_item) |
| origin | string | – | greenfield|leverage|migrate|unknown |
| owner_role | string | – | Role that owns this node (e.g. frontend, backend, design) |
| parent_id | number | – | Parent node id (containment tree; null/omit for a root) |
| project_id | number | – | Project id (optional) |
| session_id | number | – | Your agent session id, recorded on the node's history row |
| size | string | – | S|M|L|XL |
| status | string | – | draft|not_started|ready|in_progress|blocked|done|superseded |
| target_weeks | number | – | Milestone target (weeks) |
| title | string | yes | Node title (the only hard requirement) |
| verify_cmd | string | – | How a leaf is proven done |
No output schema declared.
No examples provided.
goal_advance ~365
Advance a node's status. A leaf moving to 'done' REQUIRES non-empty evidence (real observed output) — the no-self-certification rule. Parent status rolls up automatically from children. Trigger: when the user reports finishing a tracked piece of work ("xong rồi", "xong X", "done X", "done", "mark done", "finished X"), advance the matching board node's status here. Only call when the report maps to a tracked board item; ignore unrelated casual chatter.
| Name | Type | Req | Description |
|---|---|---|---|
| evidence | string | – | Real observed output proving the node (required for a leaf -> done) |
| external_ref | object | – | Shallow-merged into the node's externalRef. Never trusted as a security predicate. |
| node_id | number | yes | Node id to advance |
| note | object | – | Named annotation kept under payload.notes, e.g. {name: "rechecked-2026-09-27", text: "..."} |
| order_index | number | – | Manifest position |
| payload | object | – | Shallow-merged into the node's payload; `{"do": "<text>"}` is the manifest `do:` line. Keys not named here survive. |
| session_id | number | – | Your agent session id, recorded on the node's history row |
| status | string | yes | New status (draft|not_started|ready|in_progress|blocked|done|superseded). Always required: to edit a field below WITHOUT a status change, pass the node's CURRENT status. |
| title | string | – | Rename the node (manifest task title) |
| verify_cmd | string | – | Replace the node's done-when text (manifest `done-when:`). Whole-value replace, max 2000 chars. |
No output schema declared.
No examples provided.
goal_frontier ~142
The ready-frontier: nodes (optionally for a role, or scoped to one objective_run_id) whose ALL blocking dependencies are done and that aren't done yet — i.e. 'what can I start NOW'. Returns GoalNode[] with depsIn/depsOut ([{nodeId, kind}]). A node whose externalRef.blocker is set is waiting on a person or an external event, not on a dependency: treat it as not runnable.
| Name | Type | Req | Description |
|---|---|---|---|
| objective_run_id | string | – | Scope to one objective's run id |
| owner_role | string | – | Filter to a role's ready work |
| project_id | number | – | Filter by project |
No output schema declared.
No examples provided.
goal_list ~214
List goal nodes, filtered. Use to read the graph (your lane, a status column, all milestones, or one objective's whole run via objective_run_id). Returns a COMPACT view by default (id, title, status, kind, externalRef.local_id/priority, blocked, depsIn/depsOut) and omits done nodes unless include_done is true or a status filter is given; call goal_get for one node's full payload, or pass view="full".
| Name | Type | Req | Description |
|---|---|---|---|
| include_done | boolean | – | Include done nodes (default false) |
| kind | string | – | Filter by kind |
| objective_run_id | string | – | Filter to nodes stamped with one objective's run id (from goal_set_objective/goal_get/goal_decompose) |
| owner_role | string | – | Filter by owning role |
| project_id | number | – | Filter by project |
| status | string | – | Filter by status |
| view | string | – | compact (default) drops payload and brief; full returns every field |
No output schema declared.
No examples provided.
What is the io.github.contextq/contextq-mcp server?
io.github.contextq/contextq-mcp is listed in the public MCP registry as io.github.contextq/contextq-mcp. Persistent memory, hybrid search and a goal graph for AI agents, over stdio or remote HTTP. This page covers its npm package (@contextq/mcp).
Is the io.github.contextq/contextq-mcp server safe to use?
io.github.contextq/contextq-mcp scores 56 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 io.github.contextq/contextq-mcp server expose?
io.github.contextq/contextq-mcp exposes 24 tools: ctx_save, ctx_search, ctx_list, ctx_get, ctx_update, and 19 more. Their descriptions and schemas cost roughly 5,782 tokens of context every time the server is loaded.
Is the io.github.contextq/contextq-mcp server still maintained?
io.github.contextq/contextq-mcp is still listed as active in the MCP registry. We last reached this channel on 1 October 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 io.github.contextq/contextq-mcp server under?
io.github.contextq/contextq-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.