@gherk/reactive-architecture 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +151 -0
  2. package/dist/index.d.ts +3 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +57 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/knowledge/backend-folder-structure.d.ts +10 -0
  7. package/dist/knowledge/backend-folder-structure.d.ts.map +1 -0
  8. package/dist/knowledge/backend-folder-structure.js +730 -0
  9. package/dist/knowledge/backend-folder-structure.js.map +1 -0
  10. package/dist/knowledge/backend-guides.d.ts +13 -0
  11. package/dist/knowledge/backend-guides.d.ts.map +1 -0
  12. package/dist/knowledge/backend-guides.js +914 -0
  13. package/dist/knowledge/backend-guides.js.map +1 -0
  14. package/dist/knowledge/examples.d.ts +6 -0
  15. package/dist/knowledge/examples.d.ts.map +1 -0
  16. package/dist/knowledge/examples.js +829 -0
  17. package/dist/knowledge/examples.js.map +1 -0
  18. package/dist/knowledge/folder-structure.d.ts +10 -0
  19. package/dist/knowledge/folder-structure.d.ts.map +1 -0
  20. package/dist/knowledge/folder-structure.js +686 -0
  21. package/dist/knowledge/folder-structure.js.map +1 -0
  22. package/dist/knowledge/philosophy.d.ts +11 -0
  23. package/dist/knowledge/philosophy.d.ts.map +1 -0
  24. package/dist/knowledge/philosophy.js +427 -0
  25. package/dist/knowledge/philosophy.js.map +1 -0
  26. package/dist/knowledge/stack-guides.d.ts +18 -0
  27. package/dist/knowledge/stack-guides.d.ts.map +1 -0
  28. package/dist/knowledge/stack-guides.js +841 -0
  29. package/dist/knowledge/stack-guides.js.map +1 -0
  30. package/dist/knowledge/style-rules.d.ts +8 -0
  31. package/dist/knowledge/style-rules.d.ts.map +1 -0
  32. package/dist/knowledge/style-rules.js +355 -0
  33. package/dist/knowledge/style-rules.js.map +1 -0
  34. package/dist/prompts/plan-feature.d.ts +3 -0
  35. package/dist/prompts/plan-feature.d.ts.map +1 -0
  36. package/dist/prompts/plan-feature.js +79 -0
  37. package/dist/prompts/plan-feature.js.map +1 -0
  38. package/dist/resources/philosophy-resource.d.ts +3 -0
  39. package/dist/resources/philosophy-resource.d.ts.map +1 -0
  40. package/dist/resources/philosophy-resource.js +25 -0
  41. package/dist/resources/philosophy-resource.js.map +1 -0
  42. package/dist/tools/architecture-guide.d.ts +3 -0
  43. package/dist/tools/architecture-guide.d.ts.map +1 -0
  44. package/dist/tools/architecture-guide.js +38 -0
  45. package/dist/tools/architecture-guide.js.map +1 -0
  46. package/dist/tools/backend-folder-structure.d.ts +3 -0
  47. package/dist/tools/backend-folder-structure.d.ts.map +1 -0
  48. package/dist/tools/backend-folder-structure.js +47 -0
  49. package/dist/tools/backend-folder-structure.js.map +1 -0
  50. package/dist/tools/backend-guide.d.ts +3 -0
  51. package/dist/tools/backend-guide.d.ts.map +1 -0
  52. package/dist/tools/backend-guide.js +41 -0
  53. package/dist/tools/backend-guide.js.map +1 -0
  54. package/dist/tools/detect-and-guide.d.ts +3 -0
  55. package/dist/tools/detect-and-guide.d.ts.map +1 -0
  56. package/dist/tools/detect-and-guide.js +130 -0
  57. package/dist/tools/detect-and-guide.js.map +1 -0
  58. package/dist/tools/examples.d.ts +3 -0
  59. package/dist/tools/examples.d.ts.map +1 -0
  60. package/dist/tools/examples.js +28 -0
  61. package/dist/tools/examples.js.map +1 -0
  62. package/dist/tools/folder-structure.d.ts +3 -0
  63. package/dist/tools/folder-structure.d.ts.map +1 -0
  64. package/dist/tools/folder-structure.js +52 -0
  65. package/dist/tools/folder-structure.js.map +1 -0
  66. package/dist/tools/scaffold.d.ts +3 -0
  67. package/dist/tools/scaffold.d.ts.map +1 -0
  68. package/dist/tools/scaffold.js +562 -0
  69. package/dist/tools/scaffold.js.map +1 -0
  70. package/dist/tools/style-rules.d.ts +3 -0
  71. package/dist/tools/style-rules.d.ts.map +1 -0
  72. package/dist/tools/style-rules.js +43 -0
  73. package/dist/tools/style-rules.js.map +1 -0
  74. package/dist/tools/validate.d.ts +3 -0
  75. package/dist/tools/validate.d.ts.map +1 -0
  76. package/dist/tools/validate.js +195 -0
  77. package/dist/tools/validate.js.map +1 -0
  78. package/package.json +37 -0
package/README.md ADDED
@@ -0,0 +1,151 @@
1
+ # Reactive Frontend MCP Server
2
+
3
+ An MCP (Model Context Protocol) server that teaches AI assistants a **framework-agnostic reactive frontend architecture philosophy**: `Component → Store → Service`.
4
+
5
+ Add this server to any project — Angular, React, Vue, Svelte, or anything else — and the AI will always structure frontend code following the same reactive pattern.
6
+
7
+ ## Philosophy
8
+
9
+ Every frontend feature follows three clearly separated layers:
10
+
11
+ ```
12
+ Component → Store → Service
13
+ (UI) (State) (Data Access)
14
+ ```
15
+
16
+ - **Component**: Only presentation + user interaction. Reads from store, dispatches actions.
17
+ - **Store**: Single source of truth. Manages state (loading/error/data). Contains business logic.
18
+ - **Service**: Pure data access. HTTP/WebSocket/storage. Stateless, no logic.
19
+
20
+ ## Installation
21
+
22
+ ```bash
23
+ cd mcp
24
+ npm install
25
+ npm run build
26
+ ```
27
+
28
+ ## Configuration
29
+
30
+ ### Claude Desktop
31
+
32
+ Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
33
+
34
+ ```json
35
+ {
36
+ "mcpServers": {
37
+ "reactive-frontend": {
38
+ "command": "node",
39
+ "args": ["/ABSOLUTE/PATH/TO/mcp/dist/index.js"]
40
+ }
41
+ }
42
+ }
43
+ ```
44
+
45
+ ### Cursor
46
+
47
+ Add to `.cursor/mcp.json` in your project root:
48
+
49
+ ```json
50
+ {
51
+ "mcpServers": {
52
+ "reactive-frontend": {
53
+ "command": "node",
54
+ "args": ["/ABSOLUTE/PATH/TO/mcp/dist/index.js"]
55
+ }
56
+ }
57
+ }
58
+ ```
59
+
60
+ ### VS Code (Copilot)
61
+
62
+ Add to `.vscode/mcp.json`:
63
+
64
+ ```json
65
+ {
66
+ "servers": {
67
+ "reactive-frontend": {
68
+ "command": "node",
69
+ "args": ["/ABSOLUTE/PATH/TO/mcp/dist/index.js"]
70
+ }
71
+ }
72
+ }
73
+ ```
74
+
75
+ ### Gemini CLI
76
+
77
+ Add to `~/.gemini/settings.json`:
78
+
79
+ ```json
80
+ {
81
+ "mcpServers": {
82
+ "reactive-frontend": {
83
+ "command": "node",
84
+ "args": ["/ABSOLUTE/PATH/TO/mcp/dist/index.js"]
85
+ }
86
+ }
87
+ }
88
+ ```
89
+
90
+ ## Available Tools
91
+
92
+ | Tool | Description |
93
+ |------|-------------|
94
+ | `get_architecture_guide` | Returns the complete reactive architecture philosophy (or a specific section) |
95
+ | `generate_scaffold` | Generates file scaffolds for a feature in any framework |
96
+ | `validate_architecture` | Validates if a proposed structure follows the reactive pattern |
97
+ | `get_framework_example` | Returns concrete, copy-paste-ready examples per framework |
98
+
99
+ ### `get_architecture_guide`
100
+
101
+ ```
102
+ Sections: overview, component, store, service, anti-patterns, file-structure, implementation-flow
103
+ ```
104
+
105
+ ### `generate_scaffold`
106
+
107
+ ```
108
+ Params:
109
+ - feature_name: "user management"
110
+ - framework: angular | react | vue | svelte
111
+ - operations: [list, detail, create, update, delete]
112
+ ```
113
+
114
+ ### `validate_architecture`
115
+
116
+ ```
117
+ Params:
118
+ - description: "The component fetches users directly from the API..."
119
+ ```
120
+
121
+ ### `get_framework_example`
122
+
123
+ ```
124
+ Params:
125
+ - framework: angular | react | vue | svelte
126
+ - pattern: list | detail | form | crud
127
+ ```
128
+
129
+ ## Available Resources
130
+
131
+ | Resource URI | Description |
132
+ |-------------|-------------|
133
+ | `reactive://philosophy` | Complete philosophy document as markdown |
134
+
135
+ ## Available Prompts
136
+
137
+ | Prompt | Description |
138
+ |--------|-------------|
139
+ | `plan_feature` | Structured template for planning a feature with Component → Store → Service decomposition |
140
+
141
+ ## Development
142
+
143
+ ```bash
144
+ npm run dev # Watch mode (recompiles on changes)
145
+ npm run build # Production build
146
+ npm start # Run the server
147
+ ```
148
+
149
+ ## License
150
+
151
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ // =============================================================================
3
+ // REACTIVE ARCHITECTURE MCP SERVER
4
+ // =============================================================================
5
+ // An MCP server that teaches AI assistants the reactive architecture
6
+ // philosophy: Component → Store → Service (frontend)
7
+ // and Controller → Service → Repository (backend).
8
+ //
9
+ // When added to any project, the AI will always follow the same working
10
+ // philosophy regardless of stack.
11
+ // =============================================================================
12
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
13
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
14
+ // Tools
15
+ import { registerArchitectureGuideTool } from './tools/architecture-guide.js';
16
+ import { registerScaffoldTool } from './tools/scaffold.js';
17
+ import { registerValidateTool } from './tools/validate.js';
18
+ import { registerExamplesTool } from './tools/examples.js';
19
+ import { registerDetectAndGuideTool } from './tools/detect-and-guide.js';
20
+ import { registerStyleRulesTool } from './tools/style-rules.js';
21
+ import { registerFolderStructureTool } from './tools/folder-structure.js';
22
+ import { registerBackendGuideTool } from './tools/backend-guide.js';
23
+ import { registerBackendFolderStructureTool } from './tools/backend-folder-structure.js';
24
+ // Resources
25
+ import { registerPhilosophyResource } from './resources/philosophy-resource.js';
26
+ // Prompts
27
+ import { registerPlanFeaturePrompt } from './prompts/plan-feature.js';
28
+ // Create the MCP server
29
+ const server = new McpServer({
30
+ name: 'reactive-architecture',
31
+ version: '1.1.0',
32
+ });
33
+ // Register all tools
34
+ registerArchitectureGuideTool(server);
35
+ registerScaffoldTool(server);
36
+ registerValidateTool(server);
37
+ registerExamplesTool(server);
38
+ registerDetectAndGuideTool(server);
39
+ registerStyleRulesTool(server);
40
+ registerFolderStructureTool(server);
41
+ registerBackendGuideTool(server);
42
+ registerBackendFolderStructureTool(server);
43
+ // Register resources
44
+ registerPhilosophyResource(server);
45
+ // Register prompts
46
+ registerPlanFeaturePrompt(server);
47
+ // Connect via stdio transport
48
+ async function main() {
49
+ const transport = new StdioServerTransport();
50
+ await server.connect(transport);
51
+ console.error('🚀 Reactive Frontend MCP Server running on stdio');
52
+ }
53
+ main().catch((error) => {
54
+ console.error('Fatal error:', error);
55
+ process.exit(1);
56
+ });
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,gFAAgF;AAChF,mCAAmC;AACnC,gFAAgF;AAChF,qEAAqE;AACrE,qDAAqD;AACrD,mDAAmD;AACnD,EAAE;AACF,wEAAwE;AACxE,kCAAkC;AAClC,gFAAgF;AAEhF,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AAEjF,QAAQ;AACR,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,kCAAkC,EAAE,MAAM,qCAAqC,CAAC;AAEzF,YAAY;AACZ,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAEhF,UAAU;AACV,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,wBAAwB;AACxB,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IACzB,IAAI,EAAE,uBAAuB;IAC7B,OAAO,EAAE,OAAO;CACnB,CAAC,CAAC;AAEH,qBAAqB;AACrB,6BAA6B,CAAC,MAAM,CAAC,CAAC;AACtC,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,oBAAoB,CAAC,MAAM,CAAC,CAAC;AAC7B,0BAA0B,CAAC,MAAM,CAAC,CAAC;AACnC,sBAAsB,CAAC,MAAM,CAAC,CAAC;AAC/B,2BAA2B,CAAC,MAAM,CAAC,CAAC;AACpC,wBAAwB,CAAC,MAAM,CAAC,CAAC;AACjC,kCAAkC,CAAC,MAAM,CAAC,CAAC;AAE3C,qBAAqB;AACrB,0BAA0B,CAAC,MAAM,CAAC,CAAC;AAEnC,mBAAmB;AACnB,yBAAyB,CAAC,MAAM,CAAC,CAAC;AAElC,8BAA8B;AAC9B,KAAK,UAAU,IAAI;IACf,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;AACtE,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { BackendStack } from './backend-guides.js';
2
+ export interface BackendFolderGuide {
3
+ stack: BackendStack;
4
+ displayName: string;
5
+ structure: string;
6
+ }
7
+ export declare const BACKEND_DETECTION_GUIDE: string;
8
+ export declare function getBackendFolderStructure(stack: string): string;
9
+ export declare function getAllBackendFolderStructures(): string;
10
+ //# sourceMappingURL=backend-folder-structure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend-folder-structure.d.ts","sourceRoot":"","sources":["../../src/knowledge/backend-folder-structure.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,YAAY,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACrB;AAupBD,eAAO,MAAM,uBAAuB,QAgDxB,CAAC;AAEb,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAU/D;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAQtD"}