{"_id":"@cmiretf/pattern-police-mcp","_rev":"8-4c843e33ed0e080ccef2cc996d0d69b1","name":"@cmiretf/pattern-police-mcp","dist-tags":{"latest":"1.1.2"},"versions":{"1.0.0":{"name":"@cmiretf/pattern-police-mcp","version":"1.0.0","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":{"name":"Carlos Miret Fiuza"},"license":"ISC","_id":"@cmiretf/pattern-police-mcp@1.0.0","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"067cd27bc6541f523feacc145b9aff2a56428ca1","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.0.0.tgz","fileCount":434,"integrity":"sha512-AJbp3q0hQraeQPhMJkJxaf98UEgos1uMkTyC4kzz5xkeQf7cxhitdKFt0ewGzhqfxFIdaikqSaaoCZu8C62c8g==","signatures":[{"sig":"MEYCIQCRACVZoQW+H5mRB5j9HGvR3G1zHZVE9coPm+rSYgFT1QIhANJEoh7gWn6eQu/wPvqyTEUNpqDtfJNEbj0MM4rtZOGs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":130118824},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"d2fc9e14eb9a5af26e418faff9c689ac38ef351f","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"10.9.2","description":"MCP Server for pattern validation","directories":{},"_nodeVersion":"22.17.0","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.0.0_1763403827689_0.5700560859365271","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@cmiretf/pattern-police-mcp","version":"1.0.1","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"ISC","_id":"@cmiretf/pattern-police-mcp@1.0.1","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"e2a5b7e69b559b36ceb353dcd065df5b9e584c81","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.0.1.tgz","fileCount":92,"integrity":"sha512-1hfeMEs/tt3J5u1j3r3wqHo+8V1+17EgpnxJZ4d6gxkHfEUYdMMm2kxJE3zPzSPbiKribQeoE1QZMQMagk8r6Q==","signatures":[{"sig":"MEQCIAYdB6OLscu5f9pmUwaN73SKea1v1GccywVPXPiVik2HAiAmfl0FACtkx6tFwJuNzHPaGsyhEEmwL+MKd2Jx1jvR9w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565973},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"e9d8de645131995c543fa6182c09ff2c6ddf6cb0","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"8.1.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.0.1_1763495161861_0.6730106140751491","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@cmiretf/pattern-police-mcp","version":"1.0.2","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"ISC","_id":"@cmiretf/pattern-police-mcp@1.0.2","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"569ce17c714ef7dd9a7889c1dc5e535736bcb22f","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.0.2.tgz","fileCount":92,"integrity":"sha512-GQSA8vjjH2lAsnDhKKL1ZFSSiEjmHm98aBJ4SA6vlVN6B+FVrrSS3GzAUQ/LBVgeTj1c0cEQrRsEGrfgS6aqlw==","signatures":[{"sig":"MEUCIQCz5LbvxYgfs3NSL9gzrkuW31ivJRhsfXafE5kfMFQlhAIgPOCYQA74BechfFtBg1uzrL2Cx6Wx4glwUcTqO+WRJh0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":565982},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"d78848a35891309ffe64ff10b1d190a4583b8e53","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"8.1.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.0.2_1763550584589_0.19273823646796862","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@cmiretf/pattern-police-mcp","version":"1.0.3","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"MIT","_id":"@cmiretf/pattern-police-mcp@1.0.3","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"8a0672735f950d273e258e687fe4685058371cd4","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.0.3.tgz","fileCount":92,"integrity":"sha512-wSHEE1Cm8+/iCZKi0Hh5SNl21SfbE/Jok7SiCQGAyF3JPl3jTtgh10MkH9cMvt3YLeHzo1d+bqqtY7qWIyTYhA==","signatures":[{"sig":"MEUCIEWjqhtYdF2dU2mj4VuFexBV0d733wt5F2V6USFRBZsxAiEA1V9STnwPpskSc3QHOGQixE2ZYUxIGjyYGyHiEmyuWA4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":569001},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"67324711b9e205bb9605e954cbe84fa54ba875c1","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"11.6.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.0.3_1763578858850_0.46351575434582926","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@cmiretf/pattern-police-mcp","version":"1.0.4","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"MIT","_id":"@cmiretf/pattern-police-mcp@1.0.4","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"586e5a184b02bf26d958ae90071ec379388f4a25","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.0.4.tgz","fileCount":92,"integrity":"sha512-nxeYxfK56S+9lYNchCYdxQWu3mPHMSN7GTnpYtmOOZygLhovM72BoGgZ6Z5CflW7BQxWrAVOr9T0/+M6RwLAGQ==","signatures":[{"sig":"MEUCIEKFICZwyn3SHpmr3kIHXiJR2VPjJBYhaa/HUFRfjOJuAiEAzJrzEKGFT3RRu10TY8aiYPqZ6zr/gTb5TDSL2PISMRY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571096},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"b1231e69d42f3eab53cf7d13b4d1671dde2644c9","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"11.6.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.0.4_1763579959445_0.27994959446540224","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@cmiretf/pattern-police-mcp","version":"1.1.0","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"MIT","_id":"@cmiretf/pattern-police-mcp@1.1.0","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"06b9b05498df4ec02ff3ca611ef48de62c321164","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.1.0.tgz","fileCount":92,"integrity":"sha512-EzY1vJjtqEEHKlK4Thgavx++FSBM+gEpuo7s/WCTQsJvli5Lx46gNBjG/m+9DrC7qEF8Nq4vhpcITts3CCy9JA==","signatures":[{"sig":"MEUCIB/ATvCCykvpfzeMach7YNBdBHVUW7iZes5YByL/BMOzAiEAjr5rlwKttwl4hNFqUzZBSuGxtqc59Q7Ddo0NpCR7AG4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":571105},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"6168ff6c507e32cfc107029020281695352ab252","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"11.6.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.1.0_1763835229383_0.7174178821684198","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@cmiretf/pattern-police-mcp","version":"1.1.1","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"MIT","_id":"@cmiretf/pattern-police-mcp@1.1.1","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"bin":{"pattern-police":"dist/index.js"},"dist":{"shasum":"2203872a49a7bdef5035f5d31961b56c1537198b","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.1.1.tgz","fileCount":90,"integrity":"sha512-X7F54TLBmY44H5Q4X7M7wrOdgQxGT40gJp/Xos3+OMye3S52RgLzfkpA7Xk5VAJfNbcvhNx+d8GrSZQzDOdKgA==","signatures":[{"sig":"MEUCIQDv039n6f9ckDi6/XNg6zQg3bKjeIf0/4juaJjcPGdLZQIgelTDH3L1RnISiw7uMF9VO5pgvmJ8tuRiQDgMXo5rkEs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":570642},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","gitHead":"9bf3d1804628eb82d4676ad46e71dc14765980c4","scripts":{"dev":"tsx src/index.ts","build":"tsc","start":"node dist/index.js","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","prepare":"npm run build","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts"},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"_npmVersion":"11.6.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","directories":{},"_nodeVersion":"25.2.1","dependencies":{"tsx":"^4.19.2","typescript":"^5.7.2","@types/node":"^22.13.11","java-parser":"^3.0.1","@vue/compiler-sfc":"^3.5.24","@modelcontextprotocol/sdk":"^1.0.4","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/pattern-police-mcp_1.1.1_1763835658970_0.5440278669147058","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@cmiretf/pattern-police-mcp","version":"1.1.2","description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","type":"module","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/cmiretf/pattern-police-mcp.git"},"homepage":"https://github.com/cmiretf/pattern-police-mcp/blob/main/README.md","bin":{"pattern-police":"dist/index.js"},"scripts":{"build":"tsc","start":"node dist/index.js","dev":"tsx src/index.ts","inspect":"npx @modelcontextprotocol/inspector node dist/index.js","inspect:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","prepare":"npm run build"},"keywords":["mcp","design-patterns","code-quality","linting","typescript"],"author":"","license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.4","@types/node":"^22.13.11","@typescript-eslint/parser":"^8.46.4","@typescript-eslint/typescript-estree":"^8.46.4","@vue/compiler-sfc":"^3.5.24","java-parser":"^3.0.1","tsx":"^4.19.2","typescript":"^5.7.2"},"gitHead":"dcd0b6af15d8aa5b89ff53a0e146a51feb6f1bc3","types":"./dist/index.d.ts","_id":"@cmiretf/pattern-police-mcp@1.1.2","bugs":{"url":"https://github.com/cmiretf/pattern-police-mcp/issues"},"_nodeVersion":"25.2.1","_npmVersion":"11.6.2","dist":{"integrity":"sha512-ybvmj+vAVZnME9dFBqO6/dLnLQSuzYIO3KPafWoGvTjAJCD/LFWhlZsBx8N1J6emks67H+AKfMHN7B/5Mi28bQ==","shasum":"b9d3acc5f9b9399fea0eff1871a660f0cdf9a11e","tarball":"https://registry.npmjs.org/@cmiretf/pattern-police-mcp/-/pattern-police-mcp-1.1.2.tgz","fileCount":90,"unpackedSize":570826,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDjIaBgMKcxRpkJteOz6gt6BNat0bGNaWZ9OJ/pcffebAiA7VVaCVBAra/Rz0tYheNmHwZqdNY1LeCncH0w7LL1yrQ=="}]},"_npmUser":{"name":"cmiretf","email":"cmiretf@gmail.com"},"directories":{},"maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pattern-police-mcp_1.1.2_1763849625343_0.23870332478452116"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-17T18:23:47.583Z","modified":"2025-11-22T22:13:45.726Z","1.0.0":"2025-11-17T18:23:48.478Z","1.0.1":"2025-11-18T19:46:02.100Z","1.0.2":"2025-11-19T11:09:44.964Z","1.0.3":"2025-11-19T19:00:59.037Z","1.0.4":"2025-11-19T19:19:19.678Z","1.1.0":"2025-11-22T18:13:49.636Z","1.1.1":"2025-11-22T18:20:59.209Z","1.1.2":"2025-11-22T22:13:45.552Z"},"license":"MIT","keywords":["mcp","design-patterns","code-quality","linting","typescript"],"description":"MCP Server para validación de patrones de diseño en TypeScript/JavaScript","maintainers":[{"name":"cmiretf","email":"cmiretf@gmail.com"}],"readme":"# Pattern Police MCP Server 🚓\n\nA Model Context Protocol (MCP) server that validates design patterns in TypeScript/JavaScript, Java, and Vue.js code. Detects 50+ GoF, Enterprise J2EE, and Modern patterns in Java, plus validates SOLID principles, naming conventions, and code smells across all supported languages.\n\n## 🚀 Quick Start\n\n### Installation\n\nInstall globally via npm:\n\n```bash\nnpm install -g @cmiretf/pattern-police-mcp\n```\n\nOr add to your project:\n\n```bash\nnpm install @cmiretf/pattern-police-mcp\n```\n\n### Usage\n\n#### With MCP Inspector\n\nTest the server interactively:\n\n```bash\nnpm install -g @cmiretf/pattern-police-mcp\nnpx @modelcontextprotocol/inspector pattern-police\n```\n\nOr if installed locally:\n\n```bash\nnpx @modelcontextprotocol/inspector node node_modules/pattern-police-mcp/dist/index.js\n```\n\n#### With Claude Desktop\n\nAdd to your `claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"pattern-police\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cmiretf/pattern-police-mcp\"]\n    }\n  }\n}\n```\n\nOr with a local installation:\n\n```json\n{\n  \"mcpServers\": {\n    \"pattern-police\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/node_modules/pattern-police-mcp/dist/index.js\"]\n    }\n  }\n}\n```\n\n#### With Visual Studio Code / Cursor\n\nAdd to your `mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"pattern-police\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@cmiretf/pattern-police-mcp\"]\n    }\n  }\n}\n```\n\nOr with a local installation:\n\n```json\n{\n  \"mcpServers\": {\n    \"pattern-police\": {\n      \"command\": \"node\",\n      \"args\": [\"/path/to/node_modules/pattern-police-mcp/dist/index.js\"]\n    }\n  }\n}\n```\n\n## 🎯 Features\n\n### TypeScript/JavaScript Validation\n\n- **Naming Conventions**: PascalCase for classes, camelCase for functions, UPPER_CASE for constants\n- **SOLID Principles**: Detects long functions, too many parameters, and God Classes\n- **Code Smells**: Identifies duplicate code, unused variables, missing comments\n\n### Java Pattern Detection (50+ Patterns)\n\n- **GoF Patterns (23)**: Singleton, Factory, Observer, Strategy, and more\n- **Enterprise J2EE (15+)**: DAO, DTO, Service Locator, MVC, and more\n- **Modern Patterns (6+)**: Repository, CQRS, Event Sourcing, and more\n\n### Vue.js Pattern Detection (30+ Patterns)\n\n- **Vue 3 Composables**: useCounter, useAuth, composable patterns\n- **Component Patterns**: Provide/Inject, Teleport, Suspense\n- **Anti-patterns**: Improper reactivity, incorrect lifecycle usage\n- **Best Practices**: Composition API, proper typing, performance patterns\n\n## 📖 Available MCP Tools\n\n### TypeScript/JavaScript Tools\n\n#### `validate_code`\n\nValidates TypeScript/JavaScript code against configured patterns.\n\n**Parameters:**\n\n- `code` (string): The code to validate\n- `filename` (string, optional): Filename for better context\n\n**Example:**\n\n```json\n{\n  \"code\": \"class myClass { ... }\",\n  \"filename\": \"example.ts\"\n}\n```\n\n#### `validate_file`\n\nValidates a specific file from the filesystem.\n\n**Parameters:**\n\n- `filepath` (string): Path to the file to validate\n\n#### `list_patterns`\n\nLists all configured patterns and rules.\n\n#### `get_violations`\n\nGets a summary of common violations and suggestions.\n\n**Parameters:**\n\n- `severity` (string, optional): Filter by \"warning\", \"error\", or \"info\"\n\n### Java Tools\n\n#### `validate_java_code`\n\nDetects 50+ design patterns in Java code.\n\n**Parameters:**\n\n- `code` (string): Java code to analyze\n- `filename` (string, optional): Filename\n\n**Example:**\n\n```json\n{\n  \"code\": \"public class DatabaseConnection { private static final DatabaseConnection INSTANCE = new DatabaseConnection(); ... }\",\n  \"filename\": \"DatabaseConnection.java\"\n}\n```\n\n#### `validate_java_file`\n\nDetects patterns in Java files from the filesystem.\n\n**Parameters:**\n\n- `filepath` (string): Path to the Java file (.java)\n\n#### `list_java_patterns`\n\nLists all 50+ configured Java patterns (GoF, Enterprise, Modern).\n\nSee [JAVA_PATTERNS.md](./JAVA_PATTERNS.md) for complete list of detected patterns.\n\n### Vue.js Tools\n\n#### `validate_vue_code`\n\nDetects 30+ Vue.js patterns and best practices.\n\n**Parameters:**\n\n- `code` (string): Vue SFC code to analyze\n- `filename` (string, optional): Filename\n\n#### `validate_vue_file`\n\nDetects patterns in Vue files from the filesystem.\n\n**Parameters:**\n\n- `filepath` (string): Path to the Vue file (.vue)\n\n#### `list_vue_patterns`\n\nLists all 30+ configured Vue.js patterns.\n\nSee [VUE_PATTERNS.md](./VUE_PATTERNS.md) for complete list of detected patterns.\n\n## ⚙️ Configuration\n\nPattern Police uses configuration files for customization:\n\n- `pattern-police.config.json` - TypeScript/JavaScript rules\n- `java-patterns.config.json` - Java pattern definitions\n- `vue-patterns.config.json` - Vue.js pattern definitions\n\n### Default Configuration\n\n**TypeScript/JavaScript:**\n\n- **Naming**: PascalCase (classes), camelCase (functions/variables), UPPER_CASE (constants)\n- **SOLID**: Max 50 lines/function, 10 methods/class, 5 parameters/function\n- **Code Smells**: Detects duplication, long methods, God Classes, dead code\n\n**Java:**\n\n- Detects all 23 GoF patterns\n- Detects 15+ Enterprise J2EE patterns\n- Detects 6+ Modern architectural patterns\n\n**Vue.js:**\n\n- Detects Composition API patterns\n- Validates component best practices\n- Identifies anti-patterns and code smells\n\n## 📋 Example Validations\n\n### ✅ Good Code\n\n```typescript\nclass UserService {\n  getUserData(userId: string): User {\n    return this.repository.find(userId);\n  }\n}\n\nconst MAX_RETRIES = 3;\n```\n\n### ⚠️ Warnings\n\n```typescript\n// ⚠️ Naming: class should use PascalCase\nclass userService {}\n\n// ⚠️ SOLID: too many parameters\nfunction createUser(name, email, age, address, phone, country) {}\n\n// ⚠️ Code Smell: unused variable\nconst unusedVar = 42;\n```\n\n## 🛠️ Development\n\n### Prerequisites\n\n- Node.js 18+\n- npm or yarn\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone <your-repo-url>\ncd pattern-police-mcp\n\n# Install dependencies\nnpm install\n\n# Build the project\nnpm run build\n```\n\n### Development Commands\n\n```bash\n# Development with auto-reload\nnpm run dev\n\n# Build TypeScript\nnpm run build\n\n# Run built version\nnpm start\n\n# Test with MCP Inspector (built version)\nnpm run inspect\n\n# Test with MCP Inspector (dev version)\nnpm run inspect:dev\n```\n\n### Project Structure\n\n```\n├── src/\n│   ├── index.ts                         # Main MCP server\n│   ├── types.ts                         # TypeScript/JavaScript types\n│   ├── types-java.ts                    # Java types\n│   ├── types-vue.ts                     # Vue.js types\n│   └── validators/\n│       ├── PatternValidator.ts          # TS/JS validator (AST)\n│       ├── JavaPatternValidator.ts      # Java validator (CST)\n│       └── VuePatternValidator.ts       # Vue.js validator (SFC)\n├── examples/\n│   ├── JavaPatterns/                    # Java pattern examples\n│   └── VuePatterns/                     # Vue.js pattern examples\n├── dist/                                # Compiled output\n└── *.config.json                        # Configuration files\n```\n\n## 🧪 Testing\n\nTest the server interactively with the MCP Inspector:\n\n```bash\nnpm run inspect\n```\n\nThis opens the inspector at `http://localhost:6274` where you can:\n\n- Test all MCP tools with different parameters\n- View real-time server logs\n- Validate example code from `examples/` directory\n- Experiment with different severities and configurations\n\n## 🔗 Integration Examples\n\n### Git Hooks\n\nAdd to `.git/hooks/pre-commit`:\n\n```bash\n#!/bin/bash\n# Validate staged files before commit\nnpx pattern-police-mcp validate-files $(git diff --cached --name-only)\n```\n\n### CI/CD\n\n```yaml\n# GitHub Actions example\n- name: Validate Code Patterns\n  run: |\n    npm install -g @cmiretf/pattern-police-mcp\n    pattern-police validate-all\n```\n\n## 📚 Documentation\n\n- [TypeScript/JavaScript Validation](./README.md#typescriptjavascript-validation)\n- [Java Pattern Detection](./JAVA_PATTERNS.md)\n- [Vue.js Pattern Detection](./VUE_PATTERNS.md)\n- [Testing Guide](./TESTING.md)\n\n## 🤝 Contributing\n\nContributions are welcome! Please:\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Commit your changes (`git commit -m 'Add amazing feature'`)\n4. Push to the branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n## 📝 License\n\nThis project is licensed under the **MIT License** - an open source license that allows you to use, modify, and distribute this software freely.\n\n### What this means:\n\n- ✅ **Free to use**: You can use this software in any project, commercial or personal\n- ✅ **Open source**: The source code is publicly available and can be inspected, modified, and improved\n- ✅ **Modify freely**: You can adapt the code to fit your specific needs\n- ✅ **Distribute**: You can share the original or modified versions\n- ✅ **Private use**: You can use it in proprietary projects without disclosing your source code\n\n### License Text\n\nCopyright (c) 2025 Carlos Miret Fiuza\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n## 🔍 Severity Levels\n\n- **error**: Critical issues that should block commits\n- **warning**: Important pattern violations (naming, SOLID)\n- **info**: Suggestions for improvement (duplication, comments)\n\n## 💡 Use Cases\n\n- **Pre-commit validation**: Catch pattern violations before they reach the repo\n- **Code reviews**: Automated pattern detection in PRs\n- **Learning tool**: Understand design patterns through detection\n- **Refactoring aid**: Identify areas needing improvement\n- **Team standards**: Enforce consistent coding patterns across teams\n\n## 🌟 Supported Languages\n\n- TypeScript/JavaScript (ES6+)\n- Java (8+)\n- Vue.js (2.x and 3.x)\n\n---\n\n## 👤 Author\n\nThis project is developed and maintained by [Carlos Miret Fiuza](https://www.linkedin.com/in/carlos-miret-fiuza-87026a52/).  \nFeel free to connect on LinkedIn for collaborations, suggestions, or any questions related to **Pattern Police MCP Server**!\n","readmeFilename":"README.md","homepage":"https://github.com/cmiretf/pattern-police-mcp/blob/main/README.md","repository":{"type":"git","url":"git+https://github.com/cmiretf/pattern-police-mcp.git"},"bugs":{"url":"https://github.com/cmiretf/pattern-police-mcp/issues"}}