Skip to main content

MCP server providing vector memory, drift detection, model routing, skills discovery, session management, and codebase indexing for AI-assisted development pipelines.

Project description

ensemble-mcp

A Python MCP (Model Context Protocol) server that provides vector memory, drift detection, model routing, skills discovery, session management, codebase indexing, and context compression for AI-assisted development pipelines.

All intelligence is local — zero LLM/API calls. Uses ONNX Runtime embeddings (~5ms), numpy cosine similarity, and SQLite storage.


Features

Feature What It Does
Pattern Memory Semantic vector search over stored pipeline patterns (MiniLM-L6-v2, 384-dim)
Drift Detection Cosine similarity between task description and code changes
Model Routing Recommend model tier (best/mid/cheapest) per agent and task complexity
Skills Discovery Scan .ai/skills/, .claude/skills/, .cursor/rules/ etc. with semantic search
Skill Intelligence Auto-detect recurring patterns and suggest converting them to reusable skills
Session Management Pipeline checkpoint save/load with optimistic versioning
Codebase Indexing File-level index with exports, imports, roles — incremental via mtime
Context Compression Compress verbose text into token-efficient form, rule-based
Prompt Caching Order and prepare prompt sections for optimal LLM cache hit rates
Codebase Snapshots Generate compact project baseline summaries from the codebase index
Auto-Installer Detect AI tools and register the MCP server in their configs
Web Dashboard Local browser UI at localhost:8787 for visualizing patterns, skills, projects, drift, and sessions

Quick Start

Install from source

git clone https://github.com/LynkByte/ensemble.git
cd ensemble
pip install -e ".[dev]"

Install via uvx (after PyPI publish)

uvx ensemble-mcp

Run the server

# Start the MCP server (stdio protocol)
ensemble-mcp

# Or explicitly
ensemble-mcp serve

Other CLI commands

# Auto-detect AI tools and register the MCP server
ensemble-mcp install

# Remove MCP server registration from AI tool configs
ensemble-mcp uninstall

# Copy agent files to a project (no MCP registration needed)
ensemble-mcp add-agents --tools opencode

# Copy skill files to a project (no MCP registration needed)
ensemble-mcp add-skills --tools opencode

Web Dashboard

A local-only browser dashboard for visualizing patterns, skills, projects, drift history, and sessions.

# Start the dashboard (opens browser to http://localhost:8787)
ensemble-mcp web

# Custom port
ensemble-mcp web --port 9000

# Start without auto-opening the browser
ensemble-mcp web --no-open

# Specify a reports directory (auto-detected from ./reports or git root otherwise)
ensemble-mcp web --reports-dir /path/to/reports

The dashboard reads directly from the same SQLite database the MCP server writes to (WAL mode, no contention). It binds to 127.0.0.1 only — never exposed to the network, no authentication needed.

Dashboard Pages

Page What It Shows
Overview Summary cards (patterns, skills, projects, drift checks), drift score trend chart, recent activity
Patterns All stored patterns with match counts, project filtering, search
Skills Pending skill suggestions with confidence scores, stale skill detection
Projects Indexed projects with language breakdown pie charts, file role bar charts, export counts
Drift Drift check history with scores, verdicts, flagged files, project filtering
Sessions Session list with lifecycle status, click-through to step-by-step detail

API Endpoints

All endpoints return the standard ok/data/error/meta envelope:

Endpoint Description
GET /api/summary Aggregate counts and recent activity
GET /api/patterns Paginated pattern list (filter by project)
GET /api/patterns/:id Single pattern detail with embedding metadata
GET /api/skills Skill suggestions (filter by project, status)
GET /api/skills/stale Skills not matched within threshold days
GET /api/projects Indexed projects with file/export counts
GET /api/projects/:path Project detail with language and role breakdown
GET /api/drift Drift history (filter by project, from, to)
GET /api/sessions Paginated session list (filter by project, status)
GET /api/sessions/:id Session detail with steps
GET /api/health Server health, version, DB size

MCP Client Configuration

OpenCode

Add to ~/.config/opencode/config.json or project config.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ensemble": {
      "type": "local",
      "command": ["uvx", "ensemble-mcp"]
    }
  }
}

Or for a local development install:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ensemble": {
      "type": "local",
      "command": ["/path/to/venv/bin/ensemble-mcp"]
    }
  }
}

Claude Code

Add to ~/.claude/claude_desktop_config.json:

{
  "mcpServers": {
    "ensemble": {
      "command": "uvx",
      "args": ["ensemble-mcp"]
    }
  }
}

GitHub Copilot (VS Code)

Add to .vscode/mcp.json:

{
  "servers": {
    "ensemble": {
      "command": "uvx",
      "args": ["ensemble-mcp"]
    }
  }
}

Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "ensemble": {
      "command": "uvx",
      "args": ["ensemble-mcp"]
    }
  }
}

Windsurf

Add to ~/.windsurf/mcp.json:

{
  "mcpServers": {
    "ensemble": {
      "command": "uvx",
      "args": ["ensemble-mcp"]
    }
  }
}

Auto-Install

Instead of manual configuration, run the installer to auto-detect installed AI tools and register the server:

# Detect tools and register (interactive)
ensemble-mcp install

# Register specific tools only
ensemble-mcp install --tools opencode,cursor

# Preview without making changes
ensemble-mcp install --dry-run

# Non-interactive
ensemble-mcp install --yes

The installer automatically detects how ensemble-mcp is available on your system and registers the appropriate command:

Priority Detection Registered Command
1st ensemble-mcp on PATH (pip/pipx install) ensemble-mcp
2nd uvx on PATH uvx ensemble-mcp
3rd Neither found /path/to/python -m ensemble_mcp (current interpreter)

19 MCP Tools

Patterns (semantic memory)

Tool Description
patterns_search Semantic search over stored patterns
patterns_store Store a new pattern with embedding
patterns_prune Remove old/unused patterns

Drift Detection

Tool Description
drift_check Cosine similarity between task and changes (0-1 score)

Model Routing

Tool Description
model_recommend Recommend model tier for agent + task complexity

Skills

Tool Description
skills_discover Scan skill directories with optional semantic search
skills_suggest Detect recurring patterns, propose as reusable skills
skills_generate Accept, dismiss, or defer a skill suggestion

Session

Tool Description
session_save Save pipeline checkpoint with optimistic versioning
session_load Load latest or specific checkpoint
session_search Search sessions by semantic similarity

Codebase Indexer

Tool Description
project_index Build/refresh file-level codebase index
project_query Query index by language, path, or text
project_dependencies Get import/dependency graph for a file
project_snapshot Generate compact project baseline summary (cached)

Context Compression

Tool Description
context_compress Compress verbose text into terse, token-efficient form while preserving technical content
context_prepare Order prompt sections for optimal LLM cache hit rates (static → project → task)

Utility

Tool Description
health Server health check
reset Reset all data (destructive, requires confirmation)

Response Envelope

Every tool returns a standardized envelope:

{
  "ok": true,
  "data": { "matches": [...] },
  "error": null,
  "meta": {
    "duration_ms": 12,
    "source": "sqlite",
    "confidence": "exact"
  }
}

Confidence indicators: exact (direct data), partial (mixed sources), estimated (heuristic).

Architecture

ensemble-mcp/
  src/ensemble_mcp/
    server.py             # MCP server + tool registration
    config/               # Settings, defaults
    contracts/            # Response envelope, error taxonomy
    memory/               # ONNX embeddings, SQLite vector store, cosine similarity
    security/             # Secret redaction, trust boundaries
    state/                # Session/step lifecycle, idempotency, locks
    tools/                # 19 MCP tool implementations + call-recording utility
    installer/            # AI tool detection + MCP registration
    dashboard/            # Web dashboard (aiohttp server, JSON API, SPA frontend)
    compress/             # Rule-based text compression engine
    cli/                  # Startup banner
    data/                 # Bundled agent and skill files

Technology Stack

Component Choice
Language Python 3.11+
Distribution uvx (zero-hassle cross-platform)
MCP Framework mcp (official Python SDK)
Embeddings ONNX Runtime + MiniLM-L6-v2 (~22MB, 384-dim)
Vector Storage SQLite + numpy cosine similarity
Tokenizer HuggingFace tokenizers (for MiniLM input)
Package Size ~90MB (including ONNX + model)

Local Storage

Path Contents
~/.cache/ensemble-mcp/data.db SQLite database (WAL mode)
~/.cache/ensemble-mcp/models/ ONNX MiniLM-L6-v2 model (~22MB)
~/.config/ensemble-mcp/config.toml Global user configuration

Configuration

Layered config with deterministic merge order:

  1. Package defaults (built-in)
  2. Global config (~/.config/ensemble-mcp/config.toml)
  3. Project config (.ensemble-mcp.toml)
  4. Environment variables (ENSEMBLE_MCP_*)
# ~/.config/ensemble-mcp/config.toml
drift_threshold_aligned = 0.25
default_top_k = 5
cluster_similarity_threshold = 0.8

Development

# Install with dev dependencies
pip install -e ".[dev]"

# Run tests
python -m pytest tests/ -v

# Lint
ruff check src/ tests/

# Format
ruff format src/ tests/

# Type check
mypy src/

# Build package
python -m build

Docker

docker build -t ensemble-mcp .
docker run --rm -v ~/.cache/ensemble-mcp:/home/app/.cache/ensemble-mcp ensemble-mcp

Eval Framework

Benchmark harness for measuring tool effectiveness:

# Run eval benchmarks
python evals/runner.py

# Or via pytest
python -m pytest evals/ -v

Supported AI Tools

AI Tool Config Format Auto-Install
OpenCode JSON Yes
Claude Code JSON Yes
GitHub Copilot (VS Code) JSON Yes
Cursor JSON Yes
Windsurf JSON Yes
Devin CLI JSON Yes

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ensemble_mcp-0.1.0b4.tar.gz (525.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ensemble_mcp-0.1.0b4-py3-none-any.whl (152.1 kB view details)

Uploaded Python 3

File details

Details for the file ensemble_mcp-0.1.0b4.tar.gz.

File metadata

  • Download URL: ensemble_mcp-0.1.0b4.tar.gz
  • Upload date:
  • Size: 525.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for ensemble_mcp-0.1.0b4.tar.gz
Algorithm Hash digest
SHA256 218e55a6b5d64d9ad02d4062ca04021c89e6fa6401f9b715413281cb39338092
MD5 7b0844a01f3cd69526c92d8e6bc4659d
BLAKE2b-256 310cdcfb6754ac4dc6b0e5583a0c947fb646f1bb269674e7d5f7fe2b7cf6bee8

See more details on using hashes here.

File details

Details for the file ensemble_mcp-0.1.0b4-py3-none-any.whl.

File metadata

  • Download URL: ensemble_mcp-0.1.0b4-py3-none-any.whl
  • Upload date:
  • Size: 152.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for ensemble_mcp-0.1.0b4-py3-none-any.whl
Algorithm Hash digest
SHA256 820962de731c8b84f918c9c574a5854275aa2c882ea309fa1dda489b207650ef
MD5 0e426b942238c45306ad04c5c2bf9cf5
BLAKE2b-256 6c4d5bee889b18b28aed0efca0969189d54aab3d3d6c808edb7f39830b396970

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page