Skip to main content
Glama
spelech

Notes RAG MCP Server

by spelech

ContextCortex (v2.17.1)

Build and Publish Docker Image Docker Image Documentation

A high-performance, multi-repo Model Context Protocol (MCP) server providing syntax-aware Code RAG, Hybrid Retrieval (Dense + BM25), Tree-sitter AST chunking, Pluggable Dual-Engine Architecture (PostgreSQL 16 + pgvector & SQLite), MCP 2026-07-28 OAuth 2.1 & 3-Tier RBAC, and Universal Git Provider indexing with an integrated Web Admin Dashboard (ContextCortex) and real-time Diagnostic Observability.

Overview

Git Repositories

Overview

Git Repos

Codebase Navigator

Search & Inspector

Codebase Navigator

Search

Files & Storage

Settings

Files & Storage

Settings

Diagnostics & Logs

Add Repository Modal

Diagnostics

Add Repository Modal

Deep Ocean (Dark Default)

Midnight Blue (Dark Space)

Deep Ocean

Midnight Blue

Petrol spruce #07181b with vibrant cyan #0891b2 & mint

Obsidian navy #0a0f1d with royal blue #3b82f6 & teal

Lavender Haze (Light Purple)

Amber Warmth (Light Sandstone)

:---:

:---:

Lavender Haze

Amber Warmth

Lilac canvas #f5f3ff with purple #7c3aed & fuchsia

Sandstone #fdf8f4 with terracotta #ea580c & amber


🌟 Key Features

  • Pluggable Dual-Engine Architecture:

    • PostgreSQL 16 + pgvector Profile: Containerized production deployment with native vector(384) HNSW cosine distance indexing (vector_cosine_ops), JSONB metadata payload queries, and robust connection pooling (psycopg3).

    • SQLite Profile: Zero-configuration, zero-dependency embedded disk mode with automatic WAL journaling, 5000ms busy timeout, and resilient relational caching.

  • SQLAlchemy 2.0 Core Unified Schema: Single source of truth relational schema (metadata) shared seamlessly between SQLite and PostgreSQL, with startup connection retry loops (wait_for_db) and automatic metadata seeding.

  • MCP 2026-07-28 OAuth 2.1 & RBAC Security Engine:

    • RFC 9728 Protected Resource Metadata: Standard discovery endpoint at /.well-known/oauth-protected-resource exposing resource indicators, authorization server issuers, and MCP scopes.

    • JWT & OIDC Discovery: Validates RS256/ES256 signed bearer tokens with automatic JWKS key discovery and cached key rotation.

    • Database-Backed API Keys: Cryptographically secure cc_... API keys with SHA-256 hash verification, expiration timestamps, and one-click revocation.

    • 3-Tier RBAC Hierarchy: admin (Level 30 / mcp:admin), editor (Level 20 / mcp:editor), and viewer (Level 10 / mcp:viewer).

    • Zero-Friction Local Dev Bypass: Runs in unrestricted admin mode when AUTH_ENABLED=false for local developer velocity.

  • FastMCP 2.0 Native Architecture: Built on the official Model Context Protocol Python SDK 2.0.0+ (FastMCP), supporting modern decorator patterns, typed schemas, dynamic catalog resources, and custom agent prompts.

  • Dual MCP Transports:

    • Server-Sent Events (SSE): Full streaming events at /sse with POST message routing at /messages/.

    • Streamable HTTP: Bidirectional JSON-RPC transport endpoint at /mcp.

  • Multi-Vector Database Backends:

    • pgvector: PostgreSQL 16 vector extension with HNSW cosine search.

    • Qdrant: High-scale vector engine supporting dense + sparse BM25 multi-vectors with Reciprocal Rank Fusion (RRF) in both embedded disk and remote server modes.

    • ChromaDB: Lightweight, zero-dependency embedded disk or remote vector store with automatic fallback.

    • Dynamic Backend Switching: Test and switch vector backends live from the Settings UI or REST API without server restarts.

  • Universal Git Provider Support & Persistent Shallow Retention:

    • Ingest repositories from any source where Git lives: GitHub, GitLab (Cloud, Enterprise & Self-Hosted), Gitea & Forgejo, Bitbucket (Cloud & Server), and Generic Git HTTP/HTTPS.

    • Configurable Shallow Copy Retention (keep_shallow): Choose between ephemeral shallow clones (immediate deletion after indexing to save storage) or persistent shallow clones (--depth 1 retained on disk under /app/data/repos/{repo_name} on the cache volume). Persistent copies power instant full source code inspection in Code Navigator and accelerated incremental delta syncing (git fetch --depth 1 + git reset --hard).

    • Full-Screen React Portals for Modals: Add Repository modal, Webhook setup modal, and Sync Drawer render cleanly via React Portals (createPortal(..., document.body)), eliminating containment clipping from glassmorphism cards.

    • Provider-Aware Permalinks: Automatically generates exact deep-links for code results (/blob/, /-/blob/, /src/branch/, /src/commit/, /src/#lines-).

    • Custom Git Host Credential Vault: Register per-host tokens and authentication types for private internal domains (e.g. gitlab.company.internal or http://git.lan:3000).

  • AST-Aware Code Chunking (Tree-sitter): Understands syntax structures across Python, TypeScript/JavaScript, Go, Rust, C#, C++, Java, Ruby, PHP, and more. Chunks along class, method, and function boundaries with exact line numbers and symbol names.

  • Multi-Tier Git Authentication Hierarchy:

    1. Per-repository override token & optional username.

    2. Domain-level Custom Git Host Vault (git_host_credentials).

    3. Global provider tokens (GITHUB_TOKEN, GITLAB_TOKEN, GITEA_TOKEN in DB or Settings UI).

    4. Environment variable fallback.

  • Managed Local Storage Option & Real-Time Incremental Indexing:

    • Direct file upload, replace, read, and delete operations within a managed directory (LOCAL_STORAGE_PATH / /app/data/storage).

    • Real-time incremental AST extraction, semantic chunking, embedding generation, and vector store upserts with zero delay.

    • Strict path sanitization preventing directory traversal attacks (.., leading slashes, null bytes).

    • Immediate vector point and relational metadata purging upon file deletion.

  • Unified Ingestion Catalog (what_is_ingested):

    • Comprehensive inspection of all ingested Git repositories, monitored local directory vaults, and uploaded local storage files.

    • Granular multi-dimensional filtering by source_type (all, git, monitored_path, local_storage), repo_name, path_prefix, and file_extension.

    • Flexible granularity (summary for totals and status; detailed for hierarchical file trees).

  • Fast Deterministic Symbol Lookup: Built-in symbol table (ast_symbols) powers instantaneous symbol searches (find_symbol) and file outlines (get_file_outline) without token bloat.

  • High-Performance Codebase Navigator & Omni-Search:

    • Omni-Search Command Palette (Ctrl+K / Cmd+K): Unified command palette searching across repositories, file paths, and AST symbols with live fuzzy scoring and keyboard navigation.

    • Dual-Pane Sidebar (Files & Symbols): Tabbed sidebar separating file directory hierarchy and AST symbol outline. Preserves folder expansion state per-repository across browser sessions (sessionStorage).

    • Hero Viewport (Full Source Code & Documentation):

      • Syntax-Highlighted Source Code Viewer: High-fidelity syntax highlighting across 8+ languages (C#, Python, JavaScript/TypeScript, C++, Go, Rust, SQL, COBOL, JSON, YAML, etc.) with line numbers, highlighted target symbol line ranges, permalink copy, and collapsible caller impact drawer.

      • Markdown Document Reader: Automatic table auto-normalization (bridging gaps and synthesizing separator rows for loose Markdown) and interactive Mermaid diagram rendering.

      • Instant Intelligence & Impact Tab: Caller/callee analysis, route mappings, AST signatures, and cross-file jump navigation, immediately clickable and populated upon file selection without requiring manual outline navigation.

    • Customizable Layout Density & Mobile Responsiveness: Persisted Compact (IDE density), Balanced (default), and Spacious (cards) modes with responsive vertical stacking and zero horizontal overflow across devices.

  • Diagnostic Logging & Observability: In-memory ring buffer (500 events) capturing server warnings, errors, indexing lifecycle events, and expandable stack traces with a REST API (/admin/api/logs).

  • Multi-Theme Engine & Modern Tabbed Web Dashboard (/admin/):

    • Appearance & Theme Settings: Instant zero-latency switching between 4 distinct dark and light themes (Deep Ocean, Midnight Blue, Lavender Haze, and Amber Warmth) with live palette swatches and browser persistence.

    • Overview: Real-time stats, vector counts, AST symbols, model specs, topic tag cloud, and manual full reindexing trigger.

    • Codebase Navigator: Hero split layout with Omni-Search palette, folder tree persistence, syntax-highlighted code viewer, Mermaid documentation reader, and instant intelligence inspection.

    • Git Repositories: Register repos across GitHub, GitLab, Gitea, Bitbucket, or Generic Git, configure shallow copy retention, trigger syncs, inspect commit SHAs, and manage sources.

    • Files & Storage: Unified explorer managing monitored local directory vaults and managed local file storage with upload modal and file preview.

    • Ingestion Catalog: Unified multi-source explorer with source type filters, repository lookup, and file listings.

    • Search & Inspector: Interactive live hybrid search tester with RRF score previews, target type toggle (Code vs Docs), and syntax highlighted results.

    • Settings: Vector Database manager (pgvector, Qdrant, & ChromaDB switcher & connection tester), LiteLLM Model Discovery with dynamic categorized model dropdowns (Embeddings, Vision OCR, and Chat models), multi-provider token cards, GitHub rate limit monitor, and interactive Custom Git Host Credential Vault table/modal.

    • Diagnostics & Logs: Real-time log viewer with level filtering (ALL, INFO, WARNING, ERROR, DEBUG), keyword search, traceback modal/drawer, and buffer clearing.


Related MCP server: mycelium

🛠️ MCP Tools, Resources & Prompts

Tools & RBAC Permissions

Tool

Required Role

Parameters

Description

search_code

viewer

query (str), repo (str, opt), language (str, opt), limit (int, default 5)

Hybrid semantic + BM25 code search. Returns code blocks with line ranges & clickable git permalinks.

search_docs

viewer

query (str), repo (str, opt), category (str, opt), tag (str, opt), limit (int, default 5)

Hybrid search across markdown documentation, system architecture, and runbooks.

find_symbol

viewer

name (str), repo (str, opt), exact (bool, default True), limit (int, default 10)

Instant exact or prefix AST symbol lookup (functions, classes, structs, interfaces).

get_file_outline

viewer

filepath (str), repo (str, opt)

Returns the AST structure (classes, methods, signatures, lines) without full file token costs.

list_repositories

viewer

None

Lists all registered Git repositories and local paths with commit SHAs and indexing status.

sync_repository

editor

repo (str, opt)

Triggers background shallow clone sync for a specific repository or all sources.

index_status

viewer

None

Returns vector counts, collection status, embedding models, and GitHub rate limits.

get_architecture

viewer

repo (str, opt)

Synthesizes codebase entry points, language breakdown, core directories, and architectural overview.

manage_adr

editor

action (str: list|get|create|update), repo (str, opt), title (str, opt), decision (str, opt), status (str, opt)

Query, create, or update Architectural Decision Records (MADR / Nygard format).

get_code_routes

viewer

repo (str, opt), framework (str, opt), http_method (str, opt)

Returns API endpoint route definitions and HTTP client invocations across backend frameworks.

trace_call_path

viewer

target (str), repo (str, opt), direction (str, default downstream), depth (int, default 3)

Traces AST symbol calls, imports, inheritance, and cross-repo API client-to-route connections via BFS.

manage_local_file

editor / viewer

action (str: upload|replace|delete|read), file_path (str), content (str, opt), repo (str, opt), category (str, opt)

Manage files in ContextCortex local storage: upload, replace, read, or delete files with immediate vector indexing.

what_is_ingested

viewer

source_type (str, opt), repo_name (str, opt), path_prefix (str, opt), file_extension (str, opt), detail_level (str, opt)

Inspect all ingested Git repositories, monitored local paths, and uploaded local storage files with optional filtering.

Resources

Resource URI

MIME Type

Description

knowledge://catalog/summary

text/markdown

Dynamic catalog of all indexed repositories, document distributions, and AST symbol totals.

Prompts

Prompt Name

Arguments

Description

search_infrastructure_docs

topic (str)

Guided agent workflow to retrieve system architecture, container port mappings, and reverse proxy configs.

find_implementation_symbol

symbol (str), repo (str, opt)

Guided agent workflow to locate symbol definitions, class signatures, and implementations.


⚙️ Environment Variables

Variable

Description

Default

DATABASE_URL

SQLAlchemy connection string (e.g. postgresql+psycopg://user:pass@host:5432/db or sqlite:////app/data/index_cache.db)

sqlite:////app/data/index_cache.db

POSTGRES_DB

PostgreSQL database name (Docker Compose)

contextcortex

POSTGRES_USER

PostgreSQL username (Docker Compose)

contextcortex

POSTGRES_PASSWORD

PostgreSQL password (Docker Compose)

cortexsecret

POSTGRES_PORT

PostgreSQL host port mapping

5432

LOCAL_STORAGE_PATH

Managed local storage directory for direct file uploads & real-time incremental indexing

/app/data/storage

AUTH_ENABLED

Enable MCP 2026-07-28 OAuth 2.1 & API Key RBAC

false

AUTH_OIDC_ISSUER

OpenID Connect Identity Provider Issuer URL (e.g. https://auth.company.com/realms/master)

None

AUTH_JWKS_URI

Custom JWKS URI override for JWT verification

None

AUTH_RESOURCE_INDICATOR

RFC 8707 / RFC 9728 Resource Indicator for ContextCortex

https://contextcortex.local

ADMIN_INITIAL_KEY

Initial admin API key or secret token for container bootstrapping

None

VECTOR_STORE_PROVIDER

Vector database backend (pgvector, qdrant, or chroma)

qdrant

VECTOR_STORE_MODE

Vector store mode (embedded or remote)

embedded

COLLECTION_NAME

Vector collection name

knowledge_rag_v1

QDRANT_URL

URL to remote Qdrant vector database (if mode is remote)

http://localhost:6333

QDRANT_STORAGE_PATH

Embedded Qdrant disk directory

/app/data/qdrant_storage

CHROMA_STORAGE_PATH

Embedded ChromaDB disk directory

/app/data/chroma_db

EMBEDDING_PROVIDER

Embedding engine (local for in-process ONNX, api for LiteLLM/OpenAI)

local

EMBEDDING_MODEL

FastEmbed dense model name

BAAI/bge-small-en-v1.5

SPARSE_MODEL

FastEmbed sparse BM25 model name

Qdrant/bm25

GITHUB_TOKEN

Optional GitHub Personal Access Token for higher rate limits & private repos

None

VAULT_PATH

Default path to the markdown documentation directory

/docs

CACHE_DB_PATH

Path to persistent SQLite cache database

/app/data/index_cache.db

CHUNK_SIZE

Maximum character length per chunk

1500

CHUNK_OVERLAP

Character overlap between consecutive chunks

200


ContextCortex provides a production-ready multi-container configuration with PostgreSQL 16 + pgvector:

# 1. Clone the repository
git clone git@github.com:spelech/contextcortex.git
cd contextcortex

# 2. Copy and customize environment variables (optional)
cp .env.example .env

# 3. Launch PostgreSQL 16 + pgvector and ContextCortex
docker compose up -d

docker-compose.yml Architecture:

version: '3.8'

services:
  postgres:
    image: pgvector/pgvector:pg16
    container_name: contextcortex-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${POSTGRES_DB:-contextcortex}
      POSTGRES_USER: ${POSTGRES_USER:-contextcortex}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cortexsecret}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
      interval: 5s
      timeout: 5s
      retries: 5

  contextcortex:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: contextcortex-app
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    ports:
      - "${PORT:-3000}:3000"
    environment:
      DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-contextcortex}:${POSTGRES_PASSWORD:-cortexsecret}@postgres:5432/${POSTGRES_DB:-contextcortex}
      AUTH_ENABLED: ${AUTH_ENABLED:-false}
      AUTH_OIDC_ISSUER: ${AUTH_OIDC_ISSUER:-}
      AUTH_JWKS_URI: ${AUTH_JWKS_URI:-}
      AUTH_RESOURCE_INDICATOR: ${AUTH_RESOURCE_INDICATOR:-https://contextcortex.local}
      ADMIN_INITIAL_KEY: ${ADMIN_INITIAL_KEY:-}
      LOCAL_STORAGE_PATH: ${LOCAL_STORAGE_PATH:-/app/data/storage}
    volumes:
      - repo_cache:/app/data

volumes:
  postgres_data:
  repo_cache:

💻 Running Locally (Bare-Metal)

ContextCortex can be run directly on Linux, macOS, or Windows without Docker dependencies. By default, it operates with zero external services required by leveraging embedded Qdrant/ChromaDB, local SQLite (index_cache.db), and in-process CPU embeddings via FastEmbed/ONNX.

1. Prerequisites

  • Python 3.11+

  • Node.js 20+ & npm

  • Git (available on system PATH)

Clone the repository and run the automated setup script for your platform:

Linux / macOS (Bash):

git clone git@github.com:spelech/contextcortex.git
cd contextcortex
./setup.sh

Windows (PowerShell):

git clone git@github.com:spelech/contextcortex.git
cd contextcortex
.\setup.ps1
# 1. Create and activate a Python virtual environment
python3 -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# 2. Install Python dependencies
pip install -r requirements.txt

# 3. Build the React 19 administrative dashboard frontend
cd frontend
npm install
npm run build
cd ..

3. Start the Server

# Activate virtual environment (if not already active)
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Run ContextCortex with embedded vector store and local SQLite database
python3 main.py

The server starts on port 3000:

  • Web Dashboard: Access the admin interface at http://localhost:3000/admin/

  • MCP SSE Transport: http://localhost:3000/sse

  • MCP Streamable HTTP Transport: http://localhost:3000/mcp

  • OAuth Protected Resource Metadata: http://localhost:3000/.well-known/oauth-protected-resource

  • Health Check: http://localhost:3000/health


📡 Connecting MCP Clients

Connect any MCP client (VS Code, Cursor, Antigravity CLI, Claude Desktop, or Windsurf) using either Server-Sent Events (SSE) or Streamable HTTP.

Server-Sent Events (SSE) Configuration (claude_desktop_config.json / Cursor)

Unauthenticated (Local Dev Bypass):

{
  "mcpServers": {
    "contextcortex": {
      "url": "http://localhost:3000/sse"
    }
  }
}

Authenticated (API Key or Bearer Token):

{
  "mcpServers": {
    "contextcortex": {
      "url": "http://localhost:3000/sse",
      "headers": {
        "Authorization": "Bearer cc_live_your_api_key_here"
      }
    }
  }
}

Streamable HTTP Configuration

{
  "mcpServers": {
    "contextcortex-http": {
      "url": "http://localhost:3000/mcp",
      "headers": {
        "Authorization": "Bearer cc_live_your_api_key_here"
      }
    }
  }
}

🌐 REST Administration APIs

ContextCortex provides REST endpoints under /admin/api/* protected by RBAC authentication (Role.VIEWER, Role.EDITOR, Role.ADMIN):

Codebase Navigator (/admin/api/navigator/*)

Endpoint

Method

Required Role

Description

/admin/api/navigator/tree

GET

viewer

Returns repository file and directory hierarchy (?repo=...) with aggregate symbol and route counts.

/admin/api/navigator/file-outline

GET

viewer

Returns language-aware AST symbol outline (?filepath=...&repo=...) and associated API routes.

/admin/api/navigator/symbol-impact

GET

viewer

Returns comprehensive symbol impact intelligence (?symbol_id=... or ?name=...&filepath=...) including callers, callees, imports, and route mappings.

Local Storage (/admin/api/storage/*)

Endpoint

Method

Required Role

Description

/admin/api/storage/upload

POST

editor

Uploads and indexes a new file via multipart/form-data or JSON payload (path, content, repo, category).

/admin/api/storage/file

PUT

editor

Replaces existing file content and re-indexes vector representations.

/admin/api/storage/file

DELETE

editor

Deletes file from disk (?path=...) and purges vector embeddings and AST symbols.

/admin/api/storage/file

GET

viewer

Retrieves raw file content and metadata (size_bytes, mtime, repo, category).

/admin/api/storage/tree

GET

viewer

Explores storage directory hierarchy (?folder=...) with file and subdirectory listings.

Ingestion Catalog (/admin/api/ingestion/*)

Endpoint

Method

Required Role

Description

/admin/api/ingestion/catalog

GET

viewer

Unified inventory across Git repos, monitored paths, and uploaded files. Supports source_type, repo_name, path_prefix, file_extension, detail_level.


🔐 OAuth 2.1 & API Key Management

Protected Resource Discovery

ContextCortex implements RFC 9728 Protected Resource Metadata. Clients can discover OAuth capabilities:

curl http://localhost:3000/.well-known/oauth-protected-resource

Response:

{
  "resource": "https://contextcortex.local",
  "authorization_servers": ["https://auth.company.com/realms/master"],
  "scopes_supported": ["mcp:admin", "mcp:editor", "mcp:viewer"],
  "bearer_methods_supported": ["header"],
  "resource_documentation": "https://github.com/spelech/contextcortex"
}

Generating API Keys (Admin API)

# Create a Viewer API key
curl -X POST http://localhost:3000/admin/api/auth/keys \
  -H "Authorization: Bearer cc_admin_key" \
  -H "Content-Type: application/json" \
  -d '{"name": "Cursor Agent Key", "role": "viewer"}'

📚 Documentation & Specifications

The documentation follows the ASD-STE100 Simplified Technical English (Issue 9) standard for maximum clarity and technical precision.


🧪 Testing & Verification

Run the full automated test suites across backend and frontend:

# Python Backend Tests & Code Coverage
pytest -v --cov=app

# Synchronize Requirements Catalog
python3 scripts/generate_requirements.py

# Frontend Unit & Component Tests (Vitest)
cd frontend && npm run test

# Frontend End-to-End Tests (Playwright)
cd frontend && npx playwright test

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables managing and searching markdown notes with semantic search, question answering, and note generation, and provides an MCP server for GitHub Copilot integration.
    4
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides MCP tools for semantic search over personal knowledge sources using pluggable embeddings and local vector indexing.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Provides hybrid search (BM25 + vector) and staleness reporting for local markdown notes, exposing search and indexing tools to AI assistants via MCP.
    6 npm
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables semantic and full-text search over markdown notes, with tools to create, edit, move, and delete notes, all through MCP. Runs entirely locally using Ollama for embeddings and SQLite for storage, working with Obsidian or standalone.
    MIT