Skip to main content
Glama
quebi-gmbh
by quebi-gmbh

mcp-features

Reusable Dev Container Features that drop MCP servers into any dev container, giving coding agents (Claude Code and any other MCP client) three capabilities:

Feature

What it gives the agent

Transport

Implementation

lsp-mcp

Code intelligence — find symbol, find-references, hover/types, document & workspace symbols, diagnostics, LSP-backed rename — backed by real language servers.

HTTP (warm, long-running service)

wraps oraios/serena (MIT)

codebase-memory-mcp

Repo-scale structure — architecture overview, call-graph traversal, dead-code detection, HTTP/gRPC cross-service linking, git-diff blast-radius, Cypher-like graph queries.

stdio (client-spawned)

wraps DeusData/codebase-memory-mcp (MIT)

orama-mcp

Repo knowledge search — hybrid (BM25 + vector) search over every Markdown and JSONL file in the workspace, kept live as files change.

stdio (client-spawned)

packages/orama-mcp

All three are MIT licensed, published as public OCI artifacts under ghcr.io/quebi-gmbh/..., and installable with one line in devcontainer.json.


Design philosophy

These features are the "local, fresh, zero-infra" half of a code-and-knowledge retrieval system. The guiding rule: everything is a pure function of the local clone — no external database, no sync service, no quota. Three tiers, each answering a different class of question:

Tier 1 — live tools, no index, no embeddings. Exact, symbol/text-level answers. The agent already has (or gets, via lsp-mcp):

  • ripgrep — lexical code search

  • ast-grep — structural code search

  • lsp-mcp — semantic code, single-symbol precision (defs / refs / types / diagnostics / rename)

  • git CLI (incl. git log --grep / -S / -G) — history, blame, diff, commit search

  • gh CLI — specific PR / issue lookup, on demand

Tier 1.5 — a persistent structural graph, over code only. That's codebase-memory-mcp: repo-scale questions Tier 1 can't answer in one call — architecture overview, call-graph traversal, dead-code detection, cross-service HTTP/gRPC linking, git-diff blast-radius. Mostly exact structural analysis (tree-sitter + Cypher-like queries), not semantic search — see the note below.

Tier 2 — the only tier that primarily embeds, over prose. That's orama-mcp: Markdown docs and JSONL knowledge records, indexed in-memory and updated live.

On "no vector-indexing code." We previously ruled that out entirely, reasoning the CLI/LSP tools above were exact and sufficient — and for single-symbol precision, they still are. But repo-scale structural questions (architecture, dead code, blast-radius) have no equivalent among them, which is what justified adding codebase-memory-mcp. Its semantic_query tool does use a bundled embedding model, but it's one of 14 tools and not why we added it — the rest of its surface is exact graph/Cypher analysis, not vector search.

Deliberately out of scope: any always-running GitHub mirror (use the gh CLI on demand, or a periodic batch dump to committed JSONL that orama-mcp then indexes).

See each package README for the detailed tool surface and build plan.


Related MCP server: solograph

Usage (once published)

Add to a repo's .devcontainer/devcontainer.json:

{
  "features": {
    "ghcr.io/quebi-gmbh/mcp-features/lsp-mcp:0": {},
    "ghcr.io/quebi-gmbh/mcp-features/codebase-memory-mcp:0": {},
    "ghcr.io/quebi-gmbh/mcp-features/orama-mcp:0": {
      "globs": "**/*.md,**/*.jsonl"
    }
  }
}

Rebuild the container and the tools are installed, started, and (optionally) registered with any MCP client in the workspace.


MCP registration contract

Each feature can register itself by writing/merging a .mcp.json at the workspace root (the format Claude Code auto-discovers). This is controlled by the autoRegister option (default true).

// .mcp.json (what the features produce)
{
  "mcpServers": {
    "orama": {
      "command": "orama-mcp",
      "args": ["--globs", "**/*.md,**/*.jsonl"]
    },
    "codebase-memory": {
      "command": "codebase-memory-mcp",
      "args": []
    },
    "lsp": {
      "type": "http",
      "url": "http://127.0.0.1:7337/mcp"
    }
  }
}

claude-manager integration. claude-manager may prefer to own .mcp.json itself. In that case set autoRegister: false on all three features and have the daemon write the entries above into the project .mcp.json before launching the Claude session. The registration contract (stdio command/args for orama and codebase-memory, http url for lsp) is stable — that's the only coupling between this repo and claude-manager.


Repository layout

mcp-features/
├── packages/                 # the MCP server implementations we own (Bun + TypeScript)
│   └── orama-mcp/            #   stdio MCP server over Orama
├── src/                      # the Dev Container Features (what ghcr publishes)
│   ├── lsp-mcp/              #   devcontainer-feature.json + install.sh (wraps Serena)
│   ├── codebase-memory-mcp/  #   devcontainer-feature.json + install.sh (wraps codebase-memory-mcp)
│   └── orama-mcp/            #   devcontainer-feature.json + install.sh (installs packages/orama-mcp)
├── test/                     # devcontainers CLI feature tests
├── turbo.json                # Turborepo pipeline
└── package.json              # Bun workspaces root

Why the packages/src/ split? packages/* holds MCP server code we own (built/tested with Bun + Turbo). src/* holds the Dev Container Features, whose install.sh wires up the corresponding server. lsp-mcp and codebase-memory-mcp are both exceptions: rather than maintaining from-scratch implementations, their install.sh scripts install and wrap existing, actively maintained MCP servers (Serena, codebase-memory-mcp) — so there's no packages/lsp-mcp or packages/codebase-memory-mcp. The devcontainers publish/test GitHub Actions operate on src/ either way.


Development

Requires Bun ≥ 1.2.

bun install
bun run build       # turbo: build all packages
bun run typecheck
bun run test

Test a feature locally with the devcontainers CLI:

npm i -g @devcontainers/cli
devcontainer features test --features orama-mcp --base-image mcr.microsoft.com/devcontainers/base:ubuntu .
devcontainer features test --features codebase-memory-mcp --base-image mcr.microsoft.com/devcontainers/base:ubuntu .

Publishing

Features are published as OCI artifacts to ghcr.io/quebi-gmbh/mcp-features/<feature-id> by .github/workflows/release.yml (the official devcontainers/action). Bump the version in each feature's devcontainer-feature.json and push to main.

This is easy to forget, and the publish step won't tell you. It's idempotent and version-gated: if version is unchanged, it silently skips that feature (logging Version X already exists, skipping — not a failure, so CI stays green) and the registry keeps serving whatever was last published under that version. Any PR that changes a feature's behavior — install.sh, or the package it installs — must also bump that feature's version, or the change never reaches ghcr.io despite tests passing.


Status

  • lsp-mcp — implemented: src/lsp-mcp installs and wraps Serena as a warm HTTP MCP service.

  • codebase-memory-mcp — implemented: src/codebase-memory-mcp installs and wraps codebase-memory-mcp as a stdio MCP server. Live-verified end-to-end (install, tools/list, index_repository, search_graph, trace_path, and a Cypher query_graph dead-code check all confirmed against a real fixture project), same as lsp-mcp.

  • orama-mcp — 🚧 scaffold only; see its package/feature README ## Build plan / TODO sections for what to do next.

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

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/quebi-gmbh/mcp-features'

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