mcp-project-context-server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CHROMA_DIR | No | ChromaDB persistence directory, e.g., ~/.mcp-data/chroma | ~/.mcp-data/chroma |
| EMBED_MODEL | Yes | Embedding model name, e.g., nomic-embed-text | |
| OLLAMA_HOST | Yes | Ollama server URL, e.g., http://localhost:11434 | |
| PROJECT_PATH | No | Path to project root (optional, defaults to CWD) | |
| MCP_TOOL_PREFIX | No | Prefix for tool names | project-context- |
| EMBED_CONCURRENCY | No | Max concurrent embedding requests | 4 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_context_indexA | Semantically search the whole indexed project context. Use this first to find which files are relevant to your task, then pass their paths to |
| search_adr_indexA | Semantically search only the architecture decision records under .context/decisions/. Use this to find ADRs relevant to your current task, then pass their paths to |
| search_session_filesA | Semantically search only past session summaries under .context/sessions/. Use this to find prior session notes relevant to a topic, then pass their paths to |
| find_latest_session_fileA | Deterministically find the most recent .context/sessions/*.md file (sorted by filename, not semantic relevance). Pass the returned path to |
| load_context_filesA | Load specific .context/-relative files into the active context. Each loaded file is tagged with its path and a SHA-512 hash of its contents so |
| reload_active_context_fileA | Check whether files currently held in active context (previously loaded via |
| save_session_summaryA | Save a summary of the current session to .context/sessions/YYYY-MM-DD.md. Call this at the end of a session with a concise summary of what was done. |
| index_project_contextB | Re-index the .context/ directory into the vector store. Run this after updating project.md, adding ADRs, or refreshing BUNDLE.md. |
| list_repositoriesA | List repositories accessible via the configured repository provider. In multi-tenant deployments, use this to discover which repositories are available before calling other tools. Optionally filter by organisation name. |
| list_adrsA | List every ADR in .context/decisions/ as a lightweight table (number, title, status, filename). Use this before |
| read_adrA | Read one ADR's full raw content by number or filename, tagged with its path and SHA-512 hash so |
| read_adr_statusA | Read one ADR's title and parsed Status without loading its full content. Returns an explicit message for ADRs using the legacy |
| list_adr_sectionsA | List one ADR's top-level (##) section names, in document order. |
| read_adr_sectionA | Read a single named top-level (##) section of one ADR (e.g. 'Context', 'Decision', 'Consequences'). Use |
| search_adr_sectionsA | Semantically search within a single resolved ADR, scoped by number or filename. Use this to find relevant sections/passages inside one ADR you've already identified (e.g. via |
| create_adrA | Create a new ADR: allocates the next sequential number, writes a 'Proposed'-status stub with the given title and context, and placeholder text in the remaining sections (Decision, Consequences, Alternatives Considered, ADR Review Discussion). No lock/retry against concurrent creation. |
| edit_adrA | Replace a single named top-level (##) section of one ADR. Rejects the 'Status' section — use |
| update_adr_statusA | Transition one ADR's Status, with lifecycle guardrails: rejects unknown statuses; requires the target ADR to already exist for 'Superseded by ADR-XXXXX'; requires an 'explanation' for unusual (non-adjacent-forward) transitions; requires a populated Decision section (or an 'explanation' to fold into it) before moving to 'Accepted'; and removes the 'ADR Review Discussion' section once 'Accepted' is reached. |
| write_projectC | Overwrite the full content of .context/project.md. |
| edit_projectB | Replace a single named top-level (##) section of .context/project.md. |
| get_bootstrap_questionsA | Get the interview question set for a bootstrap artifact (currently 'project', for .context/project.md). Ask the user each question, then pass the answers as |
| bootstrap_contextA | Atomically scaffold a brand-new .context/ directory for a project that doesn't have one yet: creates decisions/ and sessions/, writes the bundled ADR_CREATE_AND_MANAGEMENT.md and PLANNING_LOOP.md governance docs, writes an interview-driven project.md (answers from |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 22 tools
Each tool targets a distinct resource and action—ADRs, project files, sessions, index, and context loading—with clear boundaries. Even overlapping tools like read_adr vs read_adr_section are sharply differentiated, and the search tools are scoped by file type.
All 22 tools follow a consistent verb_noun snake_case pattern (load_context_files, list_adrs, create_adr, update_adr_status, bootstrap_context, etc.). No mixed conventions or vague verbs.
22 tools is on the heavier side but justified by the breadth of the domain: ADR lifecycle, project management, sessions, context indexing, and bootstrap. Each tool has a clear role, though a few could potentially be consolidated.
The surface covers the full .context lifecycle: bootstrap, project file management, ADR CRUD (minus delete), session saving/searching, and context reload. Minor gaps exist—no explicit session listing or ADR deletion—but these are workarounds via other tools.