@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.
- package/README.md +151 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -0
- package/dist/knowledge/backend-folder-structure.d.ts +10 -0
- package/dist/knowledge/backend-folder-structure.d.ts.map +1 -0
- package/dist/knowledge/backend-folder-structure.js +730 -0
- package/dist/knowledge/backend-folder-structure.js.map +1 -0
- package/dist/knowledge/backend-guides.d.ts +13 -0
- package/dist/knowledge/backend-guides.d.ts.map +1 -0
- package/dist/knowledge/backend-guides.js +914 -0
- package/dist/knowledge/backend-guides.js.map +1 -0
- package/dist/knowledge/examples.d.ts +6 -0
- package/dist/knowledge/examples.d.ts.map +1 -0
- package/dist/knowledge/examples.js +829 -0
- package/dist/knowledge/examples.js.map +1 -0
- package/dist/knowledge/folder-structure.d.ts +10 -0
- package/dist/knowledge/folder-structure.d.ts.map +1 -0
- package/dist/knowledge/folder-structure.js +686 -0
- package/dist/knowledge/folder-structure.js.map +1 -0
- package/dist/knowledge/philosophy.d.ts +11 -0
- package/dist/knowledge/philosophy.d.ts.map +1 -0
- package/dist/knowledge/philosophy.js +427 -0
- package/dist/knowledge/philosophy.js.map +1 -0
- package/dist/knowledge/stack-guides.d.ts +18 -0
- package/dist/knowledge/stack-guides.d.ts.map +1 -0
- package/dist/knowledge/stack-guides.js +841 -0
- package/dist/knowledge/stack-guides.js.map +1 -0
- package/dist/knowledge/style-rules.d.ts +8 -0
- package/dist/knowledge/style-rules.d.ts.map +1 -0
- package/dist/knowledge/style-rules.js +355 -0
- package/dist/knowledge/style-rules.js.map +1 -0
- package/dist/prompts/plan-feature.d.ts +3 -0
- package/dist/prompts/plan-feature.d.ts.map +1 -0
- package/dist/prompts/plan-feature.js +79 -0
- package/dist/prompts/plan-feature.js.map +1 -0
- package/dist/resources/philosophy-resource.d.ts +3 -0
- package/dist/resources/philosophy-resource.d.ts.map +1 -0
- package/dist/resources/philosophy-resource.js +25 -0
- package/dist/resources/philosophy-resource.js.map +1 -0
- package/dist/tools/architecture-guide.d.ts +3 -0
- package/dist/tools/architecture-guide.d.ts.map +1 -0
- package/dist/tools/architecture-guide.js +38 -0
- package/dist/tools/architecture-guide.js.map +1 -0
- package/dist/tools/backend-folder-structure.d.ts +3 -0
- package/dist/tools/backend-folder-structure.d.ts.map +1 -0
- package/dist/tools/backend-folder-structure.js +47 -0
- package/dist/tools/backend-folder-structure.js.map +1 -0
- package/dist/tools/backend-guide.d.ts +3 -0
- package/dist/tools/backend-guide.d.ts.map +1 -0
- package/dist/tools/backend-guide.js +41 -0
- package/dist/tools/backend-guide.js.map +1 -0
- package/dist/tools/detect-and-guide.d.ts +3 -0
- package/dist/tools/detect-and-guide.d.ts.map +1 -0
- package/dist/tools/detect-and-guide.js +130 -0
- package/dist/tools/detect-and-guide.js.map +1 -0
- package/dist/tools/examples.d.ts +3 -0
- package/dist/tools/examples.d.ts.map +1 -0
- package/dist/tools/examples.js +28 -0
- package/dist/tools/examples.js.map +1 -0
- package/dist/tools/folder-structure.d.ts +3 -0
- package/dist/tools/folder-structure.d.ts.map +1 -0
- package/dist/tools/folder-structure.js +52 -0
- package/dist/tools/folder-structure.js.map +1 -0
- package/dist/tools/scaffold.d.ts +3 -0
- package/dist/tools/scaffold.d.ts.map +1 -0
- package/dist/tools/scaffold.js +562 -0
- package/dist/tools/scaffold.js.map +1 -0
- package/dist/tools/style-rules.d.ts +3 -0
- package/dist/tools/style-rules.d.ts.map +1 -0
- package/dist/tools/style-rules.js +43 -0
- package/dist/tools/style-rules.js.map +1 -0
- package/dist/tools/validate.d.ts +3 -0
- package/dist/tools/validate.d.ts.map +1 -0
- package/dist/tools/validate.js +195 -0
- package/dist/tools/validate.js.map +1 -0
- 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
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|