Skip to main content
Glama
MatthewDegtyar

Claude Project History MCP Server

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
cph_session_initA

CALL THIS FIRST at the start of every Claude Code session.

Returns the minimum context needed to orient yourself: active tasks, open blockers, and decisions relevant to the files you're currently working on.

This is the ONLY tool you need to call proactively. Everything else is on-demand.

Args:

  • workflow_id: The workflow for this project (from CLAUDE.md)

  • cwd: Current working directory (pass process.cwd() equivalent)

  • depth: How much context to load minimal = active tasks + open blockers only (~300 tokens) standard = + relevant decisions (~600 tokens, DEFAULT) deep = + teammate activity + patterns (~1200 tokens)

Returns: SessionContext with workflow state, active work, open blockers, relevant decisions, and a hint.

After calling this, DO NOT call workflow_summary, task_list, or decision_list unless the user explicitly asks. Pull individual records on demand with their ID.

cph_detect_workflowA

Detect which workflow matches the current git branch.

Call this if you don't have a workflow_id in CLAUDE.md yet, or if you're on an unfamiliar branch and want to know if a workflow already exists for it.

Returns either a matched workflow or a suggestion to create one.

cph_set_depthA

Set your personal retrieval depth preference for session init.

This is saved by your git email and applied automatically on every future session.

minimal = active tasks + open blockers only (fastest, smallest context cost) standard = + relevant decisions (default, recommended) deep = + teammate activity + historical patterns (use when debugging complex issues)

cph_statusA

Get overall Claude Project History status: storage summary and active workflow count.

Use this to check that the plugin is working, not to get project context. For project context, use cph_session_init.

cph_context_syncA

Synchronize project context with the database.

Call this at the start of every session and after completing each task.

First call (or full_refresh=true): returns full context snapshot like session_init. Subsequent calls: returns only changes (deltas) since last sync, within token budget.

If a tool returns a conflict error, call this to get current state before retrying.

Args:

  • workflow_id: The workflow for this project (from CLAUDE.md)

  • cwd: Current working directory for git context

  • depth: How much context to load (minimal | standard | deep)

  • full_refresh: Force a full snapshot instead of deltas

Returns: { context, deltas, synced_at }

cph_workflow_createA

Create a new workflow (project container for tasks, blockers, decisions).

Create one per feature branch, sprint, or meaningful engineering effort.

Args:

  • name: Short name (e.g. "OAuth Migration", "API v2", "Payments Refactor")

  • description: Goals and scope (optional)

  • git_branch_pattern: Branch pattern for auto-detection (e.g. "feature/auth-", "fix/") Set this so cph_detect_workflow automatically finds this workflow on matching branches.

Returns: Created workflow with ID. PUT THIS ID IN YOUR CLAUDE.md.

cph_workflow_listA

List workflows filtered by status.

Returns: Array of workflows with ID, name, status. No task counts (use cph_workflow_summary for that).

cph_workflow_summaryA

Get a full status summary of a workflow.

Returns task counts by status, open blocker count, decision count, and estimation accuracy ratio.

Use this when a user explicitly asks for project status. Don't call proactively.

cph_workflow_updateB

Update a workflow's name, description, status, or git branch pattern.

cph_task_createA

Create a task within a workflow.

Call this when beginning any discrete piece of work that will take more than ~5 minutes. Create BEFORE starting work, not after.

Args:

  • workflow_id: Which workflow

  • title: What you're doing (e.g. "Implement JWT refresh token rotation")

  • description: Acceptance criteria and requirements (optional)

  • parent_task_id: If this is a subtask (optional)

  • priority: low | medium | high | critical

  • estimated_minutes: Your estimate. ALWAYS provide this even if rough. Skipping this excludes the task from estimation accuracy analysis. Guess if unsure — a bad estimate is more useful than no estimate.

Returns: Created task. Call cph_task_start immediately after.

cph_task_startA

Mark a task as in_progress and record start time.

CALL THIS BEFORE writing any code or making any changes for this task. The hook system uses the existence of an in_progress task to allow file writes.

State machine: pending → in_progress (only valid transition from this tool)

cph_task_completeA

Mark a task as completed.

State machine: in_progress → completed (rejects if not in_progress)

Args:

  • task_id: The task to complete

  • actual_minutes: Actual time spent. CRITICAL for estimation training. This is the ground truth that improves future predictions. Provide even if the task was blocked for part of the time.

  • completion_notes: What was done, any gotchas, what to know next time (optional)

cph_task_listA

List tasks filtered by workflow and/or status.

Returns ID and title only for efficiency. Use cph_task_get for full details on a specific task.

Call this only when explicitly asked — session_init already provides active tasks.

cph_task_getA

Get full details of a single task including subtasks and open blockers.

cph_task_updateA

Update task fields. For starting/completing, prefer task_start and task_complete.

cph_task_cancelA

Cancel a task that is no longer needed.

State machine: pending | in_progress | blocked → cancelled

Args:

  • task_id: The task to cancel

  • reason: Why the task is being cancelled (optional but recommended)

cph_blocker_createA

Log a blocker that is preventing progress.

CALL THIS IMMEDIATELY when blocked — before asking the user, before trying workarounds. The timestamp of when you were blocked is important data. Don't record it retroactively.

Blocker types: dependency → waiting on another task, PR, or service to be ready waiting_on_human → needs human decision, approval, or response technical → technical problem with no clear solution yet external → blocked by something outside the team unclear_requirements → requirements are ambiguous other → doesn't fit above

Auto-behavior: if task_id is provided, the task status is automatically set to 'blocked'.

cph_blocker_resolveA

Mark a blocker as resolved.

Always provide a resolution note — this is training data for predicting future blockers and is the most valuable signal in the system after actual_minutes on tasks.

Auto-behavior: if blocker has a task_id and unblock_task=true, task is set back to in_progress.

cph_blocker_escalateA

Mark a blocker as escalated — open but needs urgent attention.

Use when a blocker has been open too long and needs to be surfaced to stakeholders.

cph_blocker_listA

List blockers by workflow and/or status.

Call this when user asks about blockers. session_init already surfaces open blockers — don't duplicate.

cph_decision_recordA

Record an architectural, design, or process decision.

This is the institutional memory of the project. Future sessions — and future engineers — will use this to understand why things are built the way they are.

Record a decision when:

  • You chose between two or more approaches

  • You made an assumption about requirements

  • The word "because" appears in your reasoning

  • You're doing something non-obvious that someone will question later

The post-commit hook will automatically attach the commit hash to recent decisions — you don't need to provide it manually.

Args:

  • workflow_id, title, decision: Required

  • context: What problem were you solving? What constraints existed?

  • rationale: Why this option over the alternatives?

  • alternatives_considered: Structured list of options evaluated and why rejected

  • trade_offs: What does this choice cost or foreclose?

  • tags: Comma-separated (e.g. "auth,database,performance") or array

  • reversibility: How hard is it to undo? (reversible | costly | irreversible)

  • confidence: How confident are you? (low | medium | high)

  • files_affected: Which files does this decision impact?

  • forcing_constraint: What external force required this decision now?

  • revisit_if: Under what conditions should this be revisited?

cph_decision_searchA

Search decisions by keyword across title, decision, context, and rationale.

CALL THIS before making any significant architectural choice to check if it was already decided. This is the primary anti-repetition tool.

Returns summary view (id + title + decision only) to preserve context budget. Use cph_decision_get for full details on a specific result.

cph_decision_getA

Get full details of a single decision including rationale and alternatives.

Use after cph_decision_search returns relevant IDs.

cph_decision_listA

List decisions for a workflow. Returns summary view only.

Call this when user explicitly asks to see decisions. session_init surfaces relevant ones automatically.

cph_decision_attach_commitA

Internal: Called by the post-commit git hook to link recent decisions to a commit.

Do NOT call this manually. The hook calls it automatically after every commit.

Attaches commit_hash and diff_stat to decisions recorded in the last 30 minutes that don't already have a commit attached.

cph_thinking_summaryA

Get inferred thinking-time breakdown for recent turns.

Claude Code's extended thinking is not directly observable. This tool infers thinking time from the gaps between tool calls:

  • Initial gap: time from user prompt to first tool use

  • Interleaved gaps: time between consecutive tool calls

  • Final gap: time from last tool to response

Returns per-turn breakdowns, aggregate stats, tool baselines, and a caveat explaining inference limitations.

Args:

  • session_id: Filter to a specific session (optional)

  • workflow_id: Filter to a specific workflow (optional)

  • limit: Number of recent turns to return (default 10)

cph_who_is_workingA

Show active agents/developers and what they're working on.

Returns annotated list of active sessions with:

  • Developer name and identity

  • Current task (if any)

  • Current blocker (if any)

  • Status: active | blocked | idle_with_task | available

  • Summary counts

Use this to understand team state before starting work.

cph_activity_streamA

Get recent activity events for team awareness.

Shows what's been happening: tasks started/completed, decisions recorded, blockers created/resolved, sessions started.

Filter by workflow, time range, and event types.

cph_workflow_reconstructA

Reconstruct the full history of a workflow for handoff or review.

Aggregates tasks, decisions, blockers, sessions, and activity into a comprehensive reconstruction object. Identifies dead ends (cancelled tasks and resolved blockers) to show the journey, not just the destination.

Use this when:

  • Handing off a workflow to another developer

  • Reviewing what happened during a project

  • Debugging why certain decisions were made

cph_codebase_indexA

Register or update file area ownership for a workflow.

Use this during plan mode to declare which parts of the codebase are relevant to the current workflow, what their responsibilities are, and their dependencies.

Each area is a path pattern (e.g. "src/auth/**") with an optional responsibility description and dependency list.

Upserts by workflow_id + path_pattern — safe to call multiple times.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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/MatthewDegtyar/claude-project-history'

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