{"_id":"@cubiczan/codesentinel-mcp","_rev":"3-693984c79e415c7721a32f358305d598","name":"@cubiczan/codesentinel-mcp","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@cubiczan/codesentinel-mcp","version":"1.0.0","_id":"@cubiczan/codesentinel-mcp@1.0.0","maintainers":[{"name":"cubiczan","email":"icohangar@gmail.com"}],"bin":{"codesentinel-mcp":"mcp-server/index.js"},"dist":{"shasum":"4b4ddfe6e4c2e9bf97a0453d64dc08d8e2f142f1","tarball":"https://registry.npmjs.org/@cubiczan/codesentinel-mcp/-/codesentinel-mcp-1.0.0.tgz","fileCount":34,"integrity":"sha512-x0yvlZMCqVrW6IoZ7peDN1uSkGIvgBwS6bxwFnO/FYheJaRAO6NUkiKtU1AcTaATr15T0v2y7wzdJpk5Fkul2Q==","signatures":[{"sig":"MEUCIFNWJOJqQY7YqgAdiS/b/uz01sEISw7Z7PJpqPEWDPcIAiEA9XfTgJPAPe/crbCKUkMPG2y8QfYRYZkNPBq6HzH/GvI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164807},"main":"app.js","engines":{"node":">=18"},"gitHead":"df787d67839ab26fc91d1629bf10e872550c8478","mcpName":"io.github.Cubiczan/codesentinel","scripts":{"dev":"node --watch app.js","lint":"eslint **/*.js","start":"node app.js","mcp:start":"node mcp-server/index.js"},"_npmUser":{"name":"cubiczan","email":"icohangar@gmail.com"},"_npmVersion":"11.12.1","description":"CodeSentinel — AI-powered codebase health agent for Slack","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","chalk":"^5.4.1","dotenv":"^16.4.7","adm-zip":"^0.5.16","express":"^4.21.2","octokit":"^4.1.3","ts-morph":"^25.0.1","node-cache":"^5.1.2","@slack/bolt":"^4.2.0","neo4j-driver":"^5.28.1","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.1"},"_npmOperationalInternal":{"tmp":"tmp/codesentinel-mcp_1.0.0_1782384862296_0.4035520638002925","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@cubiczan/codesentinel-mcp","version":"1.0.1","_id":"@cubiczan/codesentinel-mcp@1.0.1","maintainers":[{"name":"cubiczan","email":"icohangar@gmail.com"}],"homepage":"https://github.com/icohangar-ops/codesentinel#readme","bugs":{"url":"https://github.com/icohangar-ops/codesentinel/issues"},"bin":{"codesentinel-mcp":"mcp-server/index.js"},"dist":{"shasum":"749334651810413ef64a4e77bc54df172890334d","tarball":"https://registry.npmjs.org/@cubiczan/codesentinel-mcp/-/codesentinel-mcp-1.0.1.tgz","fileCount":41,"integrity":"sha512-keGfwTv7BHUDoEmzWrGzr99y7V7jIbMgBdopQszTrHqr1ZKTuv7aJpgXz5kaOPqafZgpmZUBqIiN6v8fXoVB1Q==","signatures":[{"sig":"MEQCIAzX1bIwUfld1typx21h4qxqJKNgSxEYVXj6Zxfu+5hJAiAs9t/J0HIWlfXwEm0XeIPTvZYgRI7ihnUCCO+Vl5liRA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1435408},"main":"app.js","engines":{"node":">=18"},"gitHead":"dc04088f040b63791c8442ed758c478a5a271913","mcpName":"io.github.icohangar-ops/codesentinel-mcp","scripts":{"dev":"node --watch app.js","lint":"eslint **/*.js","start":"node app.js","mcp:start":"node mcp-server/index.js"},"_npmUser":{"name":"cubiczan","email":"icohangar@gmail.com"},"repository":{"url":"git+https://github.com/icohangar-ops/codesentinel.git","type":"git"},"_npmVersion":"12.0.2","description":"CodeSentinel — AI-powered codebase health agent for Slack","directories":{},"_nodeVersion":"26.0.0","dependencies":{"zod":"^3.23.8","chalk":"^5.4.1","dotenv":"^16.4.7","openai":"^6.45.0","adm-zip":"^0.5.16","express":"^4.21.2","octokit":"^4.1.3","ts-morph":"^25.0.1","node-cache":"^5.1.2","@slack/bolt":"^4.2.0","@daytona/sdk":"^0.190.1","neo4j-driver":"^5.28.1","@modelcontextprotocol/sdk":"^1.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.1"},"_npmOperationalInternal":{"tmp":"tmp/codesentinel-mcp_1.0.1_1787368423125_0.20492133226949005","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cubiczan/codesentinel-mcp","version":"1.0.2","description":"Codebase health as MCP tools — dead code, circular dependencies, coupling, and architectural drift for Claude Desktop, Cursor, Windsurf and Slack.","mcpName":"io.github.icohangar-ops/codesentinel-mcp","main":"app.js","bin":{"codesentinel-mcp":"mcp-server/index.js"},"scripts":{"start":"node app.js","dev":"node --watch app.js","lint":"eslint **/*.js","mcp:start":"node mcp-server/index.js"},"dependencies":{"@daytona/sdk":"^0.190.1","@modelcontextprotocol/sdk":"^1.12.1","@slack/bolt":"^4.2.0","adm-zip":"^0.5.16","chalk":"^5.4.1","dotenv":"^16.4.7","express":"^4.21.2","neo4j-driver":"^5.28.1","node-cache":"^5.1.2","octokit":"^4.1.3","openai":"^6.45.0","ts-morph":"^25.0.1","zod":"^3.23.8"},"devDependencies":{"eslint":"^9.25.1"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/icohangar-ops/codesentinel.git"},"homepage":"https://github.com/icohangar-ops/codesentinel#readme","keywords":["mcp","model-context-protocol","mcp-server","code-quality","codebase-health","dead-code","circular-dependencies","coupling","architecture","static-analysis","technical-debt","claude","cursor"],"license":"MIT","bugs":{"url":"https://github.com/icohangar-ops/codesentinel/issues"},"gitHead":"3281cad766ad4375e19f165b17c5aab16b9764dd","_id":"@cubiczan/codesentinel-mcp@1.0.2","_nodeVersion":"26.0.0","_npmVersion":"12.0.2","dist":{"integrity":"sha512-hlQLsck+DR7/EXQXa0bJOI3pOs47RloVcU8f/OTrQs5ayX4hJOaPWOb1sptBYBvT5SlM5xlh30Kxxeyh5mZM6g==","shasum":"6965ebeaf9b2b67510e3a05a401f547d94c0e3a9","tarball":"https://registry.npmjs.org/@cubiczan/codesentinel-mcp/-/codesentinel-mcp-1.0.2.tgz","fileCount":43,"unpackedSize":1437941,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFIaASJ/ByZucaSjoEgTTS802OxNXG3wTWeLmKJILMAeAiEAqlKPgi6MYQO8ztn0pRGlcXgLSjZbW651TY2du7j6Apo="}]},"_npmUser":{"name":"cubiczan","email":"icohangar@gmail.com"},"directories":{},"maintainers":[{"name":"cubiczan","email":"icohangar@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/codesentinel-mcp_1.0.2_1787400839291_0.333946296990691"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-25T10:54:22.157Z","modified":"2026-08-22T12:13:59.671Z","1.0.0":"2026-06-25T10:54:22.456Z","1.0.1":"2026-08-22T03:13:43.354Z","1.0.2":"2026-08-22T12:13:59.504Z"},"bugs":{"url":"https://github.com/icohangar-ops/codesentinel/issues"},"homepage":"https://github.com/icohangar-ops/codesentinel#readme","repository":{"type":"git","url":"git+https://github.com/icohangar-ops/codesentinel.git"},"description":"Codebase health as MCP tools — dead code, circular dependencies, coupling, and architectural drift for Claude Desktop, Cursor, Windsurf and Slack.","maintainers":[{"name":"cubiczan","email":"icohangar@gmail.com"}],"readme":"<div align=\"center\">\n\n# CodeHealth MCP\n\n**Codebase health analysis that works everywhere.** Dead code, circular dependencies, coupling issues, and architectural drift — exposed as MCP tools for Claude Desktop, Cursor, Windsurf, and Slack.\n\n[![npm](https://img.shields.io/npm/v/@cubiczan/codesentinel-mcp)](https://www.npmjs.com/package/@cubiczan/codesentinel-mcp)\n[![MCP Registry](https://img.shields.io/badge/MCP_Registry-io.github.icohangar--ops%2Fcodesentinel--mcp-00C4B4)](https://registry.modelcontextprotocol.io)\n[![MCP](https://img.shields.io/badge/MCP-Protocol-00C4B4?logo=modelcontextprotocol&logoColor=white)](https://modelcontextprotocol.io)\n[![Node.js](https://img.shields.io/badge/Node.js-18+-339933?logo=node.js&logoColor=white)](https://nodejs.org)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![awesome-mcp-servers](https://img.shields.io/badge/awesome--mcp--servers-Listed-blue)](https://github.com/punkpeye/awesome-mcp-servers)\n\n</div>\n\n---\n\n## The Problem\n\nDead code, circular dependencies, excessive coupling, and architectural drift are invisible in day-to-day work. Static analysis tools produce noise in CI dashboards nobody checks. CodeHealth MCP brings these insights into the tools developers actually use — via the Model Context Protocol.\n\n---\n\n## What CodeHealth MCP Does\n\n6 analysis tools, available in any MCP-compatible client:\n\n| Tool | What It Finds |\n|------|--------------|\n| `analyze_dead_code` | Unused functions, classes, modules with file:line + fix suggestions |\n| `detect_circular_deps` | Module import cycles via DFS with impact assessment |\n| `analyze_coupling` | Fan-out per module, tight cluster detection, refactoring suggestions |\n| `detect_architectural_drift` | Layer boundary violations (UI→Data, Business→UI, etc.) |\n| `full_health_scan` | All four analyses + 0–100 health score + prioritized action items |\n| `explain_finding` | AI-powered detailed explanation of any finding |\n\n---\n\n## Where It Works\n\n| Client | How to Add |\n|--------|-----------|\n| **Claude Desktop** | Add to `claude_desktop_config.json` |\n| **Cursor / Windsurf** | Add to MCP settings |\n| **Slack** | Built-in Agent Builder integration with Block Kit UI |\n| **Any MCP client** | Standard MCP server (stdio) |\n\n---\n\n## Install\n\n```bash\nnpm install -g @cubiczan/codesentinel-mcp\nnpx -y @cubiczan/codesentinel-mcp\n```\n\n**MCP Registry:** `io.github.icohangar-ops/codesentinel-mcp`  \n**npm:** [@cubiczan/codesentinel-mcp](https://www.npmjs.com/package/@cubiczan/codesentinel-mcp) **1.0.1**\n\n### Claude Desktop / Cursor\n\n```json\n{\n  \"mcpServers\": {\n    \"codesentinel\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cubiczan/codesentinel-mcp\"]\n    }\n  }\n}\n```\n\n## Quick Start (from source)\n\n```bash\ngit clone https://github.com/icohangar-ops/codesentinel.git\ncd codesentinel\nnpm install\ncp .env.sample .env\nnpm start\n```\n\n### Use in Claude Desktop\n\n```\nRun a full health scan on /path/to/my/repo\n```\n\n```\nFind circular dependencies in the frontend\n```\n\n```\nCheck coupling metrics in src/services\n```\n\n### Daytona sandbox scans (optional)\n\nSet `DAYTONA_API_KEY` (and optionally `GITHUB_TOKEN` for private repos). MCP tools and Slack analysis will shallow-clone GitHub URLs in a Daytona VM and return live import-graph findings instead of demo data.\n\n```\nfull_health_scan repo_path=https://github.com/org/repo\n```\n\n### Use in Slack\n\nAdd the Slack app manifest, enable Agent Builder, and @CodeHealth in any channel.\n\n---\n\n## Architecture\n\n```\n┌──────────────────────────────────────────┐\n│          MCP CLIENT (any)                │\n│  Claude Desktop, Cursor, Slack, etc.     │\n└──────────────────┬───────────────────────┘\n                   │ MCP Protocol (stdio)\n┌──────────────────▼───────────────────────┐\n│         CODEHEALTH MCP SERVER            │\n│                                          │\n│  🔧 analyze_dead_code                    │\n│  🔧 detect_circular_deps                 │\n│  🔧 analyze_coupling                     │\n│  🔧 detect_architectural_drift           │\n│  🔧 full_health_scan                     │\n│  🔧 explain_finding                      │\n│                                          │\n│  ┌──────────────────────────────────┐    │\n│  │       Analysis Engine            │    │\n│  │  dead-code | circular-deps       │    │\n│  │  coupling | drift                │    │\n│  └──────────────────────────────────┘    │\n│                                          │\n│  ┌──────────────────────────────────┐    │\n│  │       LLM Provider               │    │\n│  │  Deepseek / OpenAI / Anthropic   │    │\n│  └──────────────────────────────────┘    │\n└──────────────────────────────────────────┘\n```\n\n---\n\n## Slack Integration\n\nCodeHealth MCP ships with a full Slack Agent Builder app featuring:\n\n- **Block Kit UI** — Severity-coded findings, health scores, actionable suggestions\n- **Thread-based conversations** — Follow-up analysis in threads\n- **Suggested prompts** — One-click analysis triggers\n- **MCP server** — Same tools, available everywhere\n\n### Demo Sandbox (Devpost judges)\n\nThe live demo workspace is **[codehealthdemo.slack.com](https://codehealthdemo.slack.com/)** — the **CodeSentinel** agent (App ID `A0BEHRDN5TQ`) is installed and authorized there. Mention it in any channel:\n\n```\n@CodeSentinel run a full health scan on https://github.com/icohangar-ops/codesentinel\n```\n\nSandbox configuration:\n\n**Live agent response in the sandbox** — a real `@CodeSentinel` mention in `#general` triggering a Daytona-sandboxed repo scan:\n\n![CodeSentinel responding in #general](docs/sandbox-setup/04-agent-response.png)\n\n| App credentials & App ID | Agent capability enabled | Socket Mode enabled |\n|---|---|---|\n| ![App Basic Information](docs/sandbox-setup/01-app-basic-info.png) | ![Agent enabled](docs/sandbox-setup/02-agent-enabled.png) | ![Socket Mode enabled](docs/sandbox-setup/03-socket-mode.png) |\n\n---\n\n## Adding Custom Analyzers\n\nEach analyzer follows a simple interface:\n\n```javascript\nfunction analyze(repoInfo) {\n  return {\n    type: \"your_analysis_type\",\n    findings: [\n      {\n        type: \"finding_type\",\n        severity: \"critical\" | \"warning\" | \"info\",\n        file: \"path/to/file.ts\",\n        line: 42,\n        name: \"symbol_name\",\n        reason: \"Why this is a problem\",\n        suggestion: \"How to fix it\",\n      },\n    ],\n    stats: { /* summary metrics */ },\n  };\n}\n```\n\nAdd a new analyzer in `lib/analyzers/`, register it in `analysis-engine.js`, and it's automatically available in Slack and via MCP.\n\n---\n\n## Roadmap\n\n- [ ] Real AST analysis — ts-morph for TypeScript, tree-sitter for multi-language\n- [ ] GitHub App — Automatic analysis on PRs with inline comments\n- [ ] Historical trends — Track health score over time per repo\n- [ ] Custom architecture rules — Define layer boundaries via config\n- [ ] Team dashboards — Aggregate health in Slack Canvas\n\n---\n\n## Project Structure\n\n```\ncodesentinel/\n├── app.js                    # Bolt app entry (Slack)\n├── manifest.json             # Slack app manifest\n├── lib/\n│   ├── analysis-engine.js    # Analysis orchestrator + health score\n│   ├── intent-parser.js      # NLP intent classification\n│   ├── block-kit-builder.js  # Rich Slack UI\n│   ├── llm-provider.js       # Multi-provider LLM\n│   └── analyzers/            # dead-code, circular-deps, coupling, drift\n├── mcp-server/\n│   ├── index.js              # MCP server with 6 tools\n│   └── package.json\n└── functions/                # Slack function definitions\n```\n\n---\n\n## Community & Registry\n\n- **npm** — [@cubiczan/codesentinel-mcp](https://www.npmjs.com/package/@cubiczan/codesentinel-mcp)\n- **MCP Registry** — [io.github.icohangar-ops/codesentinel-mcp](https://registry.modelcontextprotocol.io)\n- **[awesome-mcp-servers](https://github.com/punkpeye/awesome-mcp-servers)**\n\n---\n\n## License\n\nMIT. See [`LICENSE`](./LICENSE).\n","readmeFilename":"README.md","keywords":["mcp","model-context-protocol","mcp-server","code-quality","codebase-health","dead-code","circular-dependencies","coupling","architecture","static-analysis","technical-debt","claude","cursor"],"license":"MIT"}