MCP server for AI agents to manage project execution context
Project description
ccontext-mcp — Execution Context for AI Agents
Local-first MCP server that gives agents a shared, durable “execution context” across sessions: Vision (why) · Sketch (static blueprint) · Milestones (timeline) · Tasks (deliverables) · Notes/Refs (knowledge) · Presence (who’s doing what).
🧠 Persistent agent memory • 📋 Agent-native task tracking • 🧹 Built-in hygiene (diagnostics + lifecycle) • ⚡ Batch updates (one call) • 🔒 Local files, zero infra
🖼️ ccontext at a Glance
Files on disk (portable, git-friendly)
your-project/
└── context/
├── context.yaml # vision, sketch, milestones, notes, references (+ embedded contract)
├── tasks/
│ ├── T001.yaml # deliverable tasks with steps
│ └── T002.yaml
├── presence.yaml # runtime status (recommend gitignore)
├── .ccontext.lock # lock file (recommend gitignore)
└── archive/ # auto-archived notes/refs/tasks (optional gitignore)
One call to “load the brain”
get_context() returns version + now + diagnostics so agents can quickly orient:
{
"version": "abc123def456",
"now": {
"active_milestone": { "id": "M2", "name": "Phase 2", "description": "...", "status": "active" },
"active_tasks": [{ "id": "T001", "name": "Implement auth", "milestone": "M2" }]
},
"diagnostics": {
"debt_score": 2,
"top_issues": [{ "id": "NO_ACTIVE_MILESTONE", "severity": "info", "message": "No active milestone." }]
},
"context": { "...": "vision/sketch/milestones/notes/references/tasks_summary" }
}
Why ccontext? (Pain → Payoff)
The Pain
- Agents forget what they were doing between sessions.
- Multi-agent work becomes N² coordination noise without a shared “source of truth”.
- Context grows unbounded; old notes become misleading; task state drifts.
The Payoff
- Resume instantly: agents always start from the same structured context.
- Coordinate cleanly: presence shows who’s doing what; tasks show what’s actually done.
- Stay sane: diagnostics highlight context debt; score-based lifecycle prevents bloat.
✨ What Makes ccontext Different
|
🗂️ Local-first, Portable 📋 Agent-native Structure ⚡ Low-friction Updates |
🧹 Context Hygiene ⏳ Lifecycle Built-in 👥 Presence That Stays Readable |
Core Model (The “Contract”)
- Vision: one-sentence north star. Low frequency.
- Sketch: static blueprint only (architecture, strategy, constraints, major decisions).
Do not put TODO/progress/task lists here. - Milestones: coarse phases (typically 2–6). Exactly one active at a time.
- Tasks: deliverables with 3–7 steps. If work spans handoffs, it belongs in a task.
- Notes/References: “things we must not forget” + “where to look”.
- Presence: what each agent is doing/thinking right now (keep it short).
This contract is embedded into context.yaml under meta.contract for standalone use.
Installation
Claude Code
# Using uvx (recommended)
claude mcp add ccontext -- uvx ccontext-mcp
# Or using pipx
claude mcp add ccontext -- pipx run ccontext-mcp
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"ccontext": {
"command": "uvx",
"args": ["ccontext-mcp"],
"env": { "CCONTEXT_ROOT": "/path/to/your/project" }
}
}
}
Other MCP clients / manual
pip install ccontext-mcp
CCONTEXT_ROOT=/path/to/project ccontext-mcp
Root selection: ccontext uses CCONTEXT_ROOT when set; otherwise it uses the current working directory.
Agent Loop (Recommended)
- Start every run
ctx = get_context() # call first
- If missing, set the foundation
update_vision("Ship a reliable X that achieves Y.")
update_sketch("## Architecture\n...\n## Strategy\n...\n## Risks\n...")
- Keep one milestone active
create_milestone(name="Phase 1: Foundation", description="...", status="active")
- Track real work as tasks
create_task(
name="Implement auth",
goal="Users can sign in and sessions are validated",
steps=[
{"name":"Design", "acceptance":"Spec reviewed"},
{"name":"Implement", "acceptance":"Tests passing"},
{"name":"Rollout", "acceptance":"Docs updated"}
],
milestone_id="M1",
assignee="peer-a"
)
- Update with low friction (one call)
commit_updates(ops=[
{"op":"presence.set","agent_id":"peer-a","status":"Auth: implementing session validation; checking edge cases"},
{"op":"task.step","task_id":"T001","step_id":"S2","step_status":"done"},
{"op":"note.add","content":"Edge case: empty header triggers fallback path","score":50}
])
Tools
| Category | Tool | Purpose |
|---|---|---|
| Context | get_context() |
Call first. Returns version, now, diagnostics, and the full context. |
commit_updates() |
Batch multiple updates (presence + task progress + notes/refs) in one call. | |
| Vision / Sketch | update_vision() |
Set the north star. |
update_sketch() |
Update blueprint (static, no TODO/progress). | |
| Presence | get_presence() |
See what other agents are doing. |
update_my_status() |
Update your status (1–2 sentences). | |
clear_status() |
Clear your status (remove stale/finished status). | |
| Milestones | create_milestone() / update_milestone() / complete_milestone() / remove_milestone() |
Manage coarse phases. |
| Tasks | list_tasks() / create_task() / update_task() / delete_task() |
Track deliverables with steps. |
| Notes / Refs | add_note() / update_note() / remove_note() |
Preserve lessons/decisions with score lifecycle. |
add_reference() / update_reference() / remove_reference() |
Bookmark key files/URLs with score lifecycle. |
Version Tracking (ETag-style)
Agents can detect change without guessing:
v = get_context()["version"]
# ... later ...
if get_context()["version"] != v:
# someone changed context/tasks
ctx = get_context()
Diagnostics & Lifecycle (Context Hygiene)
- Diagnostics:
get_context()returnsdiagnostics(includingdebt_scoreandtop_issues) so agents can keep the context clean. - Score-based lifecycle: notes and references decay by 1 each
get_context()call and auto-archive when stale, preventing “memory bloat”. - Presence normalization: agent IDs are canonicalized and de-duped; status is normalized to a single concise line and length-capped for readability.
Git Recommendations
Most teams prefer:
context/presence.yaml
context/.ccontext.lock
context/archive/
Commit context/context.yaml and context/tasks/ so work survives sessions and can be reviewed.
Works With (and Without) Orchestrators
- Standalone: any MCP-capable agent client can use ccontext directly.
- Orchestrators: tools like CCCC can read/write the same
context/files for multi-agent runtime UX. - No MCP? You can still read/write the YAML files manually (you just won’t get MCP ergonomics like batch updates and diagnostics).
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ccontext_mcp-0.1.11.tar.gz.
File metadata
- Download URL: ccontext_mcp-0.1.11.tar.gz
- Upload date:
- Size: 95.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ccf06e2e3bbc6ba163ba46ec614cf8dea6a57d36824e9ed4a2a782be2d4f0083
|
|
| MD5 |
aa1041718e1edf339e9ad1c39a8f8397
|
|
| BLAKE2b-256 |
3d65c2b4230aa40caadea982def54781323861d9c4f032032837b1638998e259
|
File details
Details for the file ccontext_mcp-0.1.11-py3-none-any.whl.
File metadata
- Download URL: ccontext_mcp-0.1.11-py3-none-any.whl
- Upload date:
- Size: 29.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc2c3160073de814d028a23ae5eb8df5fafc04a0b23acd72293db936ea0520dc
|
|
| MD5 |
2b5edce4676a3e9d28b90a612cdaa48d
|
|
| BLAKE2b-256 |
9c7b38f6078672f47cee7154f8809114425873fe9cd22199271c2d881ca8baf6
|