Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Codebase Memory Plus

Personal MCP layer + local dashboard on top of codebase-memory-mcp. The goal is to keep the original indexer and graph engine intact, while adding higher-level tools for visual summaries, route maps, symbol graphs, impact analysis, and a local dashboard.

This repo gives you two independent things, both built on the same local graph cache:

  • An MCP server (codebase-memory-plus) - one tool, project_summary_visual, for use from any MCP-compatible AI agent (Claude Code, Cursor, Codex, etc.).
  • A local web dashboard - project picker, package/symbol dependency graphs, relation filters, architecture/perf/duplicate insights, an Agent Config view for managing MCP servers/skills/plugins across Claude Code, Cursor, and Codex, a Serena panel for monitoring and managing a Serena MCP session against the selected project, and a toggle to embed codebase-memory-mcp's own built-in graph UI alongside it.

Prerequisites

  • Node.js >= 22
  • codebase-memory-mcp already installed and reachable as a command (on your PATH, or pointed to via config - see Configure). This project only adds tooling on top of it; it does not index code itself. At least one project needs to have been indexed by codebase-memory-mcp before there's anything for the dashboard or the project_summary_visual tool to show.

Install

git clone https://github.com/InM1nd/codebase-memory-plus.git
cd codebase-memory-plus
npm install

npm install runs the prepare script, which builds both required gitignored artifacts: dist/ for the MCP server and dashboard/app.js for the web dashboard.

To rebuild manually after local changes:

npm run build
npm run build:dashboard

Use the dashboard

npm run dashboard

Then open:

http://127.0.0.1:5178

The dashboard reads local graph databases from ~/.cache/codebase-memory-mcp. Useful environment variables:

VariablePurposeDefault
PORTDashboard HTTP port5178
HOSTDashboard bind address127.0.0.1
CODEBASE_MEMORY_MCP_CACHE_DIRCustom cache directory to read projects from~/.cache/codebase-memory-mcp
PORT=9000 CODEBASE_MEMORY_MCP_CACHE_DIR=/path/to/cache npm run dashboard

Agent Config

Open via the header's MCP & Skills button. It scans MCP servers, skills, and plugins across Claude Code, Cursor, and Codex (both global and per-project configs) and shows them as one list, grouped by name so the same skill mirrored across tools appears once with a per-tool breakdown.

  • Toggle / delete any entry - uses each tool's native CLI where one exists (e.g. claude plugin enable/disable), otherwise edits the underlying config file directly (Codex's config.toml, Cursor's mcp.json, or a stash file for Claude's mcpServers, since it has no native disable flag). Delete always backs up the source file/directory to ~/.codebase-memory-plus/backups/<timestamp>/ first.
  • User vs plugin origin - skills whose real files live inside a plugin's own cache (resolved through symlinks) are tagged plugin; the "Include plugin skills" toggle keeps them out of the default view so it isn't swamped by every sub-skill of every installed plugin. See docs/agent-config-sync.md for the sync policy this was built to enforce.
  • Duplicates - flags names genuinely reused across different entity types (e.g. a playwright skill and a playwright MCP server), not just the same skill synced to multiple tools.
  • Usage - when available, shows Claude Code's own tracked invocation counts (skillUsage/pluginUsage in ~/.claude.json), plus a hooked badge on plugins that register their own session hooks (so they stay active regardless of the skill toggle).

Serena

If you also run Serena (an LSP-based semantic coding MCP) against your projects, open its panel via the header's Serena button (only shown once a project is selected). This proxies Serena's own local dashboard REST API - it does not run any of Serena's LSP tools itself, so symbol/reference browsing still happens through Serena directly.

Prerequisite: Serena's dashboard API is disabled by default. Set web_dashboard: true in ~/.serena/serena_config.yml and restart your Serena session(s) - this is a global Serena setting, not per-project.

  • Status - detects whether Serena's dashboard is enabled, whether an instance is reachable for the currently selected project, and whether that instance's active project actually matches (Serena only works on one project per instance at a time, so a running instance attached to a different project shows as connected-but-elsewhere, with the list of projects it has registered).
  • Discovery - Serena exposes no endpoint that lists running instances, so discovery is a bounded scan of the local port range Serena allocates dashboards from (24282-24297). An instance outside that range, or one that doesn't answer within ~300ms, won't be found.
  • Project cards - on the home screen and inside a project, a small Serena badge shows whether a live Serena instance is currently active on that project.
  • Overview & tool usage - active project/language/context/modes, plus per-tool call counts and estimated input/output token usage for the session.
  • Memories - list, view, create, edit, rename, and delete Serena's project memory files (.serena/memories/*.md) directly from the panel.
  • Log tail - polls Serena's session log while the panel is open (paused when the tab or panel isn't visible).

Use the MCP server

The server talks over stdio, so add it to your AI tool's MCP config, pointing at dist/index.js from where you cloned this repo.

Claude Code

claude mcp add codebase-memory-plus -- node /absolute/path/to/codebase-memory-plus/dist/index.js

Or add it manually to your Claude Code / Claude Desktop MCP config JSON:

{
"mcpServers": {
"codebase-memory-plus": {
"command": "node",
"args": ["/absolute/path/to/codebase-memory-plus/dist/index.js"]
}
}
}

Cursor and other JSON-config MCP clients

Same shape as above - add a codebase-memory-plus entry under mcpServers in whatever MCP config file the client reads (e.g. ~/.cursor/mcp.json).

Codex

Add this to the global Codex MCP config:

[mcp_servers.codebase-memory-plus]
command = "node"args = ["/absolute/path/to/codebase-memory-plus/dist/index.js"]

Optional: expose a bare codebase-memory-plus command

Instead of pointing every client at node .../dist/index.js, you can link the package once:

npm link

This uses the bin entry in package.json to put codebase-memory-plus on your PATH, so MCP configs can use it directly:

[mcp_servers.codebase-memory-plus]
command = "codebase-memory-plus"

Configure

Create ~/.codebase-memory-plus/config.json to point this tool at a non-default codebase-memory-mcp binary or cache directory:

{
"baseMcp": {
"command": "/Users/you/.local/bin/codebase-memory-mcp",
"args": []
},
"projects": [
{
"name": "my-project",
"root": "/Users/you/Documents/Project/my-project"
}
]
}

If the config file is missing, codebase-memory-plus falls back to running codebase-memory-mcp from PATH. All of the following can also be set via environment variables, which take priority over the config file:

VariableOverrides
CODEBASE_MEMORY_PLUS_CONFIGPath to the config file itself (default ~/.codebase-memory-plus/config.json)
CODEBASE_MEMORY_MCP_COMMANDbaseMcp.command
CODEBASE_MEMORY_MCP_ARGSbaseMcp.args (space-separated)

Tool example

project_summary_visual input:

{
"projectRoot": "/Users/you/Documents/Project/my-project",
"includeIndexing": false
}

Set includeIndexing to true if the project is not indexed and you want the tool to run a fast index before summarizing.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages