@epiccontext/mcp 0.1.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 (113) hide show
  1. package/dist/api/client.d.ts +126 -0
  2. package/dist/api/client.d.ts.map +1 -0
  3. package/dist/api/client.js +152 -0
  4. package/dist/api/client.js.map +1 -0
  5. package/dist/bin/epicontext.d.ts +18 -0
  6. package/dist/bin/epicontext.d.ts.map +1 -0
  7. package/dist/bin/epicontext.js +18 -0
  8. package/dist/bin/epicontext.js.map +1 -0
  9. package/dist/cli/commands/init.d.ts +5 -0
  10. package/dist/cli/commands/init.d.ts.map +1 -0
  11. package/dist/cli/commands/init.js +61 -0
  12. package/dist/cli/commands/init.js.map +1 -0
  13. package/dist/cli/commands/link.d.ts +6 -0
  14. package/dist/cli/commands/link.d.ts.map +1 -0
  15. package/dist/cli/commands/link.js +158 -0
  16. package/dist/cli/commands/link.js.map +1 -0
  17. package/dist/cli/commands/pull.d.ts +6 -0
  18. package/dist/cli/commands/pull.d.ts.map +1 -0
  19. package/dist/cli/commands/pull.js +51 -0
  20. package/dist/cli/commands/pull.js.map +1 -0
  21. package/dist/cli/commands/push.d.ts +6 -0
  22. package/dist/cli/commands/push.d.ts.map +1 -0
  23. package/dist/cli/commands/push.js +64 -0
  24. package/dist/cli/commands/push.js.map +1 -0
  25. package/dist/cli/commands/serve.d.ts +5 -0
  26. package/dist/cli/commands/serve.d.ts.map +1 -0
  27. package/dist/cli/commands/serve.js +42 -0
  28. package/dist/cli/commands/serve.js.map +1 -0
  29. package/dist/cli/commands/status.d.ts +2 -0
  30. package/dist/cli/commands/status.d.ts.map +1 -0
  31. package/dist/cli/commands/status.js +85 -0
  32. package/dist/cli/commands/status.js.map +1 -0
  33. package/dist/cli/commands/sync.d.ts +7 -0
  34. package/dist/cli/commands/sync.d.ts.map +1 -0
  35. package/dist/cli/commands/sync.js +91 -0
  36. package/dist/cli/commands/sync.js.map +1 -0
  37. package/dist/cli/commands/watch.d.ts +6 -0
  38. package/dist/cli/commands/watch.d.ts.map +1 -0
  39. package/dist/cli/commands/watch.js +66 -0
  40. package/dist/cli/commands/watch.js.map +1 -0
  41. package/dist/cli/config.d.ts +39 -0
  42. package/dist/cli/config.d.ts.map +1 -0
  43. package/dist/cli/config.js +133 -0
  44. package/dist/cli/config.js.map +1 -0
  45. package/dist/cli/files.d.ts +29 -0
  46. package/dist/cli/files.d.ts.map +1 -0
  47. package/dist/cli/files.js +158 -0
  48. package/dist/cli/files.js.map +1 -0
  49. package/dist/cli/index.d.ts +5 -0
  50. package/dist/cli/index.d.ts.map +1 -0
  51. package/dist/cli/index.js +85 -0
  52. package/dist/cli/index.js.map +1 -0
  53. package/dist/index.d.ts +32 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +36 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/mcp/server.d.ts +12 -0
  58. package/dist/mcp/server.d.ts.map +1 -0
  59. package/dist/mcp/server.js +93 -0
  60. package/dist/mcp/server.js.map +1 -0
  61. package/dist/mcp/tools/create-block.d.ts +10 -0
  62. package/dist/mcp/tools/create-block.d.ts.map +1 -0
  63. package/dist/mcp/tools/create-block.js +88 -0
  64. package/dist/mcp/tools/create-block.js.map +1 -0
  65. package/dist/mcp/tools/get-block.d.ts +10 -0
  66. package/dist/mcp/tools/get-block.d.ts.map +1 -0
  67. package/dist/mcp/tools/get-block.js +70 -0
  68. package/dist/mcp/tools/get-block.js.map +1 -0
  69. package/dist/mcp/tools/get-sync-status.d.ts +10 -0
  70. package/dist/mcp/tools/get-sync-status.d.ts.map +1 -0
  71. package/dist/mcp/tools/get-sync-status.js +41 -0
  72. package/dist/mcp/tools/get-sync-status.js.map +1 -0
  73. package/dist/mcp/tools/list-blocks.d.ts +10 -0
  74. package/dist/mcp/tools/list-blocks.d.ts.map +1 -0
  75. package/dist/mcp/tools/list-blocks.js +65 -0
  76. package/dist/mcp/tools/list-blocks.js.map +1 -0
  77. package/dist/mcp/tools/read-context.d.ts +10 -0
  78. package/dist/mcp/tools/read-context.d.ts.map +1 -0
  79. package/dist/mcp/tools/read-context.js +138 -0
  80. package/dist/mcp/tools/read-context.js.map +1 -0
  81. package/dist/mcp/tools/sync-all.d.ts +10 -0
  82. package/dist/mcp/tools/sync-all.d.ts.map +1 -0
  83. package/dist/mcp/tools/sync-all.js +67 -0
  84. package/dist/mcp/tools/sync-all.js.map +1 -0
  85. package/dist/mcp/tools/sync-from-app.d.ts +10 -0
  86. package/dist/mcp/tools/sync-from-app.d.ts.map +1 -0
  87. package/dist/mcp/tools/sync-from-app.js +40 -0
  88. package/dist/mcp/tools/sync-from-app.js.map +1 -0
  89. package/dist/mcp/tools/sync-to-app.d.ts +10 -0
  90. package/dist/mcp/tools/sync-to-app.d.ts.map +1 -0
  91. package/dist/mcp/tools/sync-to-app.js +53 -0
  92. package/dist/mcp/tools/sync-to-app.js.map +1 -0
  93. package/dist/mcp/tools/update-block.d.ts +10 -0
  94. package/dist/mcp/tools/update-block.d.ts.map +1 -0
  95. package/dist/mcp/tools/update-block.js +90 -0
  96. package/dist/mcp/tools/update-block.js.map +1 -0
  97. package/dist/sync/pull.d.ts +16 -0
  98. package/dist/sync/pull.d.ts.map +1 -0
  99. package/dist/sync/pull.js +32 -0
  100. package/dist/sync/pull.js.map +1 -0
  101. package/dist/sync/push.d.ts +18 -0
  102. package/dist/sync/push.d.ts.map +1 -0
  103. package/dist/sync/push.js +39 -0
  104. package/dist/sync/push.js.map +1 -0
  105. package/dist/sync/watcher.d.ts +51 -0
  106. package/dist/sync/watcher.d.ts.map +1 -0
  107. package/dist/sync/watcher.js +114 -0
  108. package/dist/sync/watcher.js.map +1 -0
  109. package/dist/types/index.d.ts +110 -0
  110. package/dist/types/index.d.ts.map +1 -0
  111. package/dist/types/index.js +2 -0
  112. package/dist/types/index.js.map +1 -0
  113. package/package.json +56 -0
@@ -0,0 +1,29 @@
1
+ import type { FileInfo } from "../types/index.js";
2
+ /**
3
+ * Read all markdown files from a directory recursively
4
+ */
5
+ export declare function readContextFolder(contextPath: string): FileInfo[];
6
+ /**
7
+ * Write files to the context folder
8
+ */
9
+ export declare function writeContextFolder(contextPath: string, files: FileInfo[]): {
10
+ written: number;
11
+ skipped: number;
12
+ };
13
+ /**
14
+ * Ensure the context folder exists with basic structure
15
+ */
16
+ export declare function ensureContextFolder(contextPath: string): void;
17
+ /**
18
+ * Get file modification time
19
+ */
20
+ export declare function getFileModTime(filePath: string): Date | null;
21
+ /**
22
+ * Check if a file exists
23
+ */
24
+ export declare function fileExists(filePath: string): boolean;
25
+ /**
26
+ * Delete a file
27
+ */
28
+ export declare function deleteFile(filePath: string): boolean;
29
+ //# sourceMappingURL=files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,EAAE,CAmCjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,QAAQ,EAAE,GAChB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAwBtC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAgE7D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAO5D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOpD"}
@@ -0,0 +1,158 @@
1
+ import * as fs from "fs";
2
+ import * as path from "path";
3
+ /**
4
+ * Read all markdown files from a directory recursively
5
+ */
6
+ export function readContextFolder(contextPath) {
7
+ const files = [];
8
+ if (!fs.existsSync(contextPath)) {
9
+ return files;
10
+ }
11
+ function walkDir(dir, relativeTo) {
12
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
13
+ for (const entry of entries) {
14
+ const fullPath = path.join(dir, entry.name);
15
+ const relativePath = path.relative(relativeTo, fullPath);
16
+ if (entry.isDirectory()) {
17
+ // Skip hidden directories and node_modules
18
+ if (!entry.name.startsWith(".") && entry.name !== "node_modules") {
19
+ walkDir(fullPath, relativeTo);
20
+ }
21
+ }
22
+ else if (entry.isFile() && entry.name.endsWith(".md")) {
23
+ // Skip README and AI-GUIDE
24
+ const lowerName = entry.name.toLowerCase();
25
+ if (lowerName !== "readme.md" && lowerName !== "ai-guide.md") {
26
+ const content = fs.readFileSync(fullPath, "utf-8");
27
+ files.push({
28
+ path: relativePath,
29
+ content,
30
+ });
31
+ }
32
+ }
33
+ }
34
+ }
35
+ walkDir(contextPath, contextPath);
36
+ return files;
37
+ }
38
+ /**
39
+ * Write files to the context folder
40
+ */
41
+ export function writeContextFolder(contextPath, files) {
42
+ let written = 0;
43
+ let skipped = 0;
44
+ for (const file of files) {
45
+ const fullPath = path.join(contextPath, file.path);
46
+ const dir = path.dirname(fullPath);
47
+ // Create directory if needed
48
+ if (!fs.existsSync(dir)) {
49
+ fs.mkdirSync(dir, { recursive: true });
50
+ }
51
+ // Write file
52
+ try {
53
+ fs.writeFileSync(fullPath, file.content, "utf-8");
54
+ written++;
55
+ }
56
+ catch (error) {
57
+ console.error(`Failed to write ${file.path}:`, error);
58
+ skipped++;
59
+ }
60
+ }
61
+ return { written, skipped };
62
+ }
63
+ /**
64
+ * Ensure the context folder exists with basic structure
65
+ */
66
+ export function ensureContextFolder(contextPath) {
67
+ if (!fs.existsSync(contextPath)) {
68
+ fs.mkdirSync(contextPath, { recursive: true });
69
+ }
70
+ // Create default section folders
71
+ const defaultSections = [
72
+ "constitution",
73
+ "brand",
74
+ "product",
75
+ "users",
76
+ "research",
77
+ "technical",
78
+ "design-system",
79
+ "journeys",
80
+ "decisions",
81
+ "development",
82
+ ];
83
+ for (const section of defaultSections) {
84
+ const sectionPath = path.join(contextPath, section);
85
+ if (!fs.existsSync(sectionPath)) {
86
+ fs.mkdirSync(sectionPath, { recursive: true });
87
+ }
88
+ }
89
+ // Create README.md
90
+ const readmePath = path.join(contextPath, "README.md");
91
+ if (!fs.existsSync(readmePath)) {
92
+ const readme = `# CONTEXT
93
+
94
+ This folder contains product context documentation synced with EpicContext.
95
+
96
+ ## Structure
97
+
98
+ Each folder represents a section of your product documentation:
99
+
100
+ - \`constitution/\` - Non-negotiable rules and principles
101
+ - \`brand/\` - Identity, voice, and visual system
102
+ - \`product/\` - Vision, features, and roadmap
103
+ - \`users/\` - Personas and jobs to be done
104
+ - \`research/\` - Market and competitor analysis
105
+ - \`technical/\` - Stack, architecture, and constraints
106
+ - \`design-system/\` - Components and patterns
107
+ - \`journeys/\` - User flows and experiences
108
+ - \`decisions/\` - What we decided and why
109
+ - \`development/\` - Epics, stories, and tasks
110
+
111
+ ## Syncing
112
+
113
+ This folder is synced with your EpicContext project using the MCP server.
114
+
115
+ To sync changes:
116
+ \`\`\`bash
117
+ epiccontext sync
118
+ \`\`\`
119
+
120
+ To watch for changes and auto-sync:
121
+ \`\`\`bash
122
+ epiccontext watch
123
+ \`\`\`
124
+ `;
125
+ fs.writeFileSync(readmePath, readme, "utf-8");
126
+ }
127
+ }
128
+ /**
129
+ * Get file modification time
130
+ */
131
+ export function getFileModTime(filePath) {
132
+ try {
133
+ const stats = fs.statSync(filePath);
134
+ return stats.mtime;
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ }
140
+ /**
141
+ * Check if a file exists
142
+ */
143
+ export function fileExists(filePath) {
144
+ return fs.existsSync(filePath);
145
+ }
146
+ /**
147
+ * Delete a file
148
+ */
149
+ export function deleteFile(filePath) {
150
+ try {
151
+ fs.unlinkSync(filePath);
152
+ return true;
153
+ }
154
+ catch {
155
+ return false;
156
+ }
157
+ }
158
+ //# sourceMappingURL=files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/cli/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,SAAS,OAAO,CAAC,GAAW,EAAE,UAAkB;QAC9C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEzD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,2CAA2C;gBAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACjE,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,IAAI,KAAK,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxD,2BAA2B;gBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3C,IAAI,SAAS,KAAK,WAAW,IAAI,SAAS,KAAK,aAAa,EAAE,CAAC;oBAC7D,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACnD,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,YAAY;wBAClB,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,KAAiB;IAEjB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEnC,6BAA6B;QAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,aAAa;QACb,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAClD,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC,CAAC;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iCAAiC;IACjC,MAAM,eAAe,GAAG;QACtB,cAAc;QACd,OAAO;QACP,SAAS;QACT,OAAO;QACP,UAAU;QACV,WAAW;QACX,eAAe;QACf,UAAU;QACV,WAAW;QACX,aAAa;KACd,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgClB,CAAC;QACE,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,IAAI,CAAC;QACH,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Command } from "commander";
2
+ declare const program: Command;
3
+ export declare function run(): Promise<void>;
4
+ export { program };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA2E9B,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAWzC;AAED,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,85 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import { initCommand } from "./commands/init.js";
4
+ import { linkCommand } from "./commands/link.js";
5
+ import { syncCommand } from "./commands/sync.js";
6
+ import { pullCommand } from "./commands/pull.js";
7
+ import { pushCommand } from "./commands/push.js";
8
+ import { statusCommand } from "./commands/status.js";
9
+ import { watchCommand } from "./commands/watch.js";
10
+ import { serveCommand } from "./commands/serve.js";
11
+ const program = new Command();
12
+ program
13
+ .name("epiccontext")
14
+ .description("EpicContext MCP Server - Sync documentation with your codebase")
15
+ .version("0.1.0");
16
+ // Init command - create CONTEXT folder
17
+ program
18
+ .command("init")
19
+ .description("Initialize a CONTEXT folder in the current directory")
20
+ .option("-p, --path <path>", "Path for CONTEXT folder", "./CONTEXT")
21
+ .action(initCommand);
22
+ // Link command - connect to EpicContext project
23
+ program
24
+ .command("link")
25
+ .description("Link to an EpicContext project")
26
+ .option("-u, --url <url>", "EpicContext project URL")
27
+ .option("-k, --key <key>", "API key")
28
+ .action(linkCommand);
29
+ // Status command - show sync status
30
+ program
31
+ .command("status")
32
+ .description("Show sync status")
33
+ .action(statusCommand);
34
+ // Sync command - bidirectional sync
35
+ program
36
+ .command("sync")
37
+ .description("Synchronize local CONTEXT folder with cloud")
38
+ .option("-d, --dry-run", "Preview changes without applying")
39
+ .option("-c, --conflict <mode>", "Conflict resolution: timestamp, local, remote", "timestamp")
40
+ .option("-s, --section <type>", "Only sync specific section")
41
+ .action(syncCommand);
42
+ // Pull command - pull from cloud
43
+ program
44
+ .command("pull")
45
+ .description("Pull changes from cloud to local")
46
+ .option("-s, --section <type>", "Only pull specific section")
47
+ .option("-f, --force", "Overwrite local changes without confirmation")
48
+ .action(pullCommand);
49
+ // Push command - push to cloud
50
+ program
51
+ .command("push")
52
+ .description("Push local changes to cloud")
53
+ .option("-s, --section <type>", "Only push specific section")
54
+ .option("-f, --force", "Overwrite cloud changes without confirmation")
55
+ .action(pushCommand);
56
+ // Watch command - auto-sync on file changes
57
+ program
58
+ .command("watch")
59
+ .description("Watch for file changes and auto-sync")
60
+ .option("-d, --debounce <ms>", "Delay before syncing", "2000")
61
+ .option("--push-only", "Only push changes, don't pull")
62
+ .action(watchCommand);
63
+ // Serve command - start MCP server
64
+ program
65
+ .command("serve")
66
+ .description("Start MCP server for AI tools")
67
+ .option("-t, --transport <type>", "Transport type: stdio", "stdio")
68
+ .action(serveCommand);
69
+ // Error handling
70
+ program.exitOverride();
71
+ export async function run() {
72
+ try {
73
+ await program.parseAsync(process.argv);
74
+ }
75
+ catch (error) {
76
+ if (error.name === "CommanderError") {
77
+ // Commander handled this error (help, version, etc.)
78
+ return;
79
+ }
80
+ console.error(chalk.red("Error:"), error.message);
81
+ process.exit(1);
82
+ }
83
+ }
84
+ export { program };
85
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @epiccontext/mcp
3
+ *
4
+ * MCP server and CLI for syncing local CONTEXT folders with EpicContext cloud.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { createClient, startMcpServer } from "@epiccontext/mcp";
9
+ *
10
+ * const client = createClient({
11
+ * baseUrl: "https://app.epiccontext.io",
12
+ * apiKey: "eck_live_...",
13
+ * projectId: "project-uuid",
14
+ * });
15
+ *
16
+ * // Start MCP server
17
+ * await startMcpServer({
18
+ * client,
19
+ * contextPath: "./CONTEXT",
20
+ * config: { ... },
21
+ * });
22
+ * ```
23
+ */
24
+ export { createClient, EpicContextClient } from "./api/client.js";
25
+ export { startMcpServer, type McpServerConfig } from "./mcp/server.js";
26
+ export { pushToCloud } from "./sync/push.js";
27
+ export { pullFromCloud } from "./sync/pull.js";
28
+ export { FileWatcher, createWatcher, type WatcherConfig } from "./sync/watcher.js";
29
+ export { readContextFolder, writeContextFolder, ensureContextFolder, } from "./cli/files.js";
30
+ export { loadConfig, saveConfig, getContextPath, findConfigPath, getProjectRoot, } from "./cli/config.js";
31
+ export type { EpicContextConfig, FileInfo, Block, SyncResult, ConflictResolution, } from "./types/index.js";
32
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAGvE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,UAAU,EACV,kBAAkB,GACnB,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,36 @@
1
+ /**
2
+ * @epiccontext/mcp
3
+ *
4
+ * MCP server and CLI for syncing local CONTEXT folders with EpicContext cloud.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { createClient, startMcpServer } from "@epiccontext/mcp";
9
+ *
10
+ * const client = createClient({
11
+ * baseUrl: "https://app.epiccontext.io",
12
+ * apiKey: "eck_live_...",
13
+ * projectId: "project-uuid",
14
+ * });
15
+ *
16
+ * // Start MCP server
17
+ * await startMcpServer({
18
+ * client,
19
+ * contextPath: "./CONTEXT",
20
+ * config: { ... },
21
+ * });
22
+ * ```
23
+ */
24
+ // API Client
25
+ export { createClient, EpicContextClient } from "./api/client.js";
26
+ // MCP Server
27
+ export { startMcpServer } from "./mcp/server.js";
28
+ // Sync utilities
29
+ export { pushToCloud } from "./sync/push.js";
30
+ export { pullFromCloud } from "./sync/pull.js";
31
+ export { FileWatcher, createWatcher } from "./sync/watcher.js";
32
+ // File utilities
33
+ export { readContextFolder, writeContextFolder, ensureContextFolder, } from "./cli/files.js";
34
+ // Config utilities
35
+ export { loadConfig, saveConfig, getContextPath, findConfigPath, getProjectRoot, } from "./cli/config.js";
36
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,aAAa;AACb,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAElE,aAAa;AACb,OAAO,EAAE,cAAc,EAAwB,MAAM,iBAAiB,CAAC;AAEvE,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAsB,MAAM,mBAAmB,CAAC;AAEnF,iBAAiB;AACjB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,mBAAmB;AACnB,OAAO,EACL,UAAU,EACV,UAAU,EACV,cAAc,EACd,cAAc,EACd,cAAc,GACf,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { EpicContextClient } from "../api/client.js";
2
+ import type { EpicContextConfig } from "../types/index.js";
3
+ export interface McpServerConfig {
4
+ client: EpicContextClient;
5
+ contextPath: string;
6
+ config: EpicContextConfig;
7
+ }
8
+ /**
9
+ * Start the MCP server
10
+ */
11
+ export declare function startMcpServer(serverConfig: McpServerConfig): Promise<void>;
12
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAa3D,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,YAAY,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FjF"}
@@ -0,0 +1,93 @@
1
+ import { Server } from "@modelcontextprotocol/sdk/server/index.js";
2
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
4
+ // Import tools
5
+ import { getSyncStatusTool, handleGetSyncStatus } from "./tools/get-sync-status.js";
6
+ import { syncAllTool, handleSyncAll } from "./tools/sync-all.js";
7
+ import { syncToAppTool, handleSyncToApp } from "./tools/sync-to-app.js";
8
+ import { syncFromAppTool, handleSyncFromApp } from "./tools/sync-from-app.js";
9
+ import { getBlockTool, handleGetBlock } from "./tools/get-block.js";
10
+ import { listBlocksTool, handleListBlocks } from "./tools/list-blocks.js";
11
+ import { updateBlockTool, handleUpdateBlock } from "./tools/update-block.js";
12
+ import { createBlockTool, handleCreateBlock } from "./tools/create-block.js";
13
+ import { readContextTool, handleReadContext } from "./tools/read-context.js";
14
+ /**
15
+ * Start the MCP server
16
+ */
17
+ export async function startMcpServer(serverConfig) {
18
+ const server = new Server({
19
+ name: "epiccontext",
20
+ version: "0.1.0",
21
+ }, {
22
+ capabilities: {
23
+ tools: {},
24
+ },
25
+ });
26
+ // List available tools
27
+ server.setRequestHandler(ListToolsRequestSchema, async () => {
28
+ return {
29
+ tools: [
30
+ getSyncStatusTool,
31
+ syncAllTool,
32
+ syncToAppTool,
33
+ syncFromAppTool,
34
+ getBlockTool,
35
+ listBlocksTool,
36
+ updateBlockTool,
37
+ createBlockTool,
38
+ readContextTool,
39
+ ],
40
+ };
41
+ });
42
+ // Handle tool calls
43
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
44
+ const { name, arguments: args = {} } = request.params;
45
+ try {
46
+ switch (name) {
47
+ case "get_sync_status":
48
+ return await handleGetSyncStatus(serverConfig, args);
49
+ case "sync_all":
50
+ return await handleSyncAll(serverConfig, args);
51
+ case "sync_to_app":
52
+ return await handleSyncToApp(serverConfig, args);
53
+ case "sync_from_app":
54
+ return await handleSyncFromApp(serverConfig, args);
55
+ case "get_block":
56
+ return await handleGetBlock(serverConfig, args);
57
+ case "list_blocks":
58
+ return await handleListBlocks(serverConfig, args);
59
+ case "update_block":
60
+ return await handleUpdateBlock(serverConfig, args);
61
+ case "create_block":
62
+ return await handleCreateBlock(serverConfig, args);
63
+ case "read_context":
64
+ return await handleReadContext(serverConfig, args);
65
+ default:
66
+ return {
67
+ content: [
68
+ {
69
+ type: "text",
70
+ text: `Unknown tool: ${name}`,
71
+ },
72
+ ],
73
+ isError: true,
74
+ };
75
+ }
76
+ }
77
+ catch (error) {
78
+ return {
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: `Error: ${error.message}`,
83
+ },
84
+ ],
85
+ isError: true,
86
+ };
87
+ }
88
+ });
89
+ // Start the server with stdio transport
90
+ const transport = new StdioServerTransport();
91
+ await server.connect(transport);
92
+ }
93
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { McpServerConfig } from "../server.js";
3
+ export declare const createBlockTool: Tool;
4
+ export declare function handleCreateBlock(config: McpServerConfig, args: Record<string, unknown>): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=create-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-block.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/create-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,eAAe,EAAE,IAmC7B,CAAC;AAEF,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAsD7D"}
@@ -0,0 +1,88 @@
1
+ export const createBlockTool = {
2
+ name: "create_block",
3
+ description: "Create a new block in a section.",
4
+ inputSchema: {
5
+ type: "object",
6
+ properties: {
7
+ section: {
8
+ type: "string",
9
+ description: "The section type to create the block in (e.g., 'brand', 'product')",
10
+ },
11
+ key: {
12
+ type: "string",
13
+ description: "Unique key for the block within the section",
14
+ },
15
+ type: {
16
+ type: "string",
17
+ description: "Block type (e.g., 'text', 'persona', 'feature')",
18
+ },
19
+ name: {
20
+ type: "string",
21
+ description: "Display name for the block",
22
+ },
23
+ value: {
24
+ type: "object",
25
+ description: "Initial content value for the block",
26
+ },
27
+ status: {
28
+ type: "string",
29
+ enum: ["empty", "draft", "complete"],
30
+ description: "Initial status (default: draft)",
31
+ },
32
+ },
33
+ required: ["section", "key", "type"],
34
+ },
35
+ };
36
+ export async function handleCreateBlock(config, args) {
37
+ const section = args.section;
38
+ const key = args.key;
39
+ const type = args.type;
40
+ const name = args.name;
41
+ const value = args.value || {};
42
+ const status = args.status || "draft";
43
+ if (!section || !key || !type) {
44
+ return {
45
+ content: [
46
+ {
47
+ type: "text",
48
+ text: "Error: section, key, and type are required.",
49
+ },
50
+ ],
51
+ };
52
+ }
53
+ try {
54
+ const response = await config.client.createBlock({
55
+ section,
56
+ key,
57
+ type,
58
+ name: name || key,
59
+ value,
60
+ status,
61
+ });
62
+ const block = response.block;
63
+ let output = `Block created successfully!\n\n`;
64
+ output += `- **Key:** ${block.key}\n`;
65
+ output += `- **Type:** ${block.type}\n`;
66
+ output += `- **Section:** ${section}\n`;
67
+ output += `- **Status:** ${block.status}\n`;
68
+ return {
69
+ content: [
70
+ {
71
+ type: "text",
72
+ text: output,
73
+ },
74
+ ],
75
+ };
76
+ }
77
+ catch (error) {
78
+ return {
79
+ content: [
80
+ {
81
+ type: "text",
82
+ text: `Error creating block: ${error.message}`,
83
+ },
84
+ ],
85
+ };
86
+ }
87
+ }
88
+ //# sourceMappingURL=create-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-block.js","sourceRoot":"","sources":["../../../src/mcp/tools/create-block.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,eAAe,GAAS;IACnC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,kCAAkC;IAC/C,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,oEAAoE;aACvE;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,6CAA6C;aAC3D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iDAAiD;aAC/D;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,4BAA4B;aAC1C;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC;aACnD;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;gBACpC,WAAW,EAAE,iCAAiC;aAC/C;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,CAAC;KACrC;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAAuB,EACvB,IAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAa,CAAC;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAc,CAAC;IACjC,MAAM,IAAI,GAAG,IAAI,CAAC,IAA0B,CAAC;IAC7C,MAAM,KAAK,GAAI,IAAI,CAAC,KAAiC,IAAI,EAAE,CAAC;IAC5D,MAAM,MAAM,GAAI,IAAI,CAAC,MAAyC,IAAI,OAAO,CAAC;IAE1E,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,6CAA6C;iBACpD;aACF;SACF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC;YAC/C,OAAO;YACP,GAAG;YACH,IAAI;YACJ,IAAI,EAAE,IAAI,IAAI,GAAG;YACjB,KAAK;YACL,MAAM;SACP,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAE7B,IAAI,MAAM,GAAG,iCAAiC,CAAC;QAC/C,MAAM,IAAI,cAAc,KAAK,CAAC,GAAG,IAAI,CAAC;QACtC,MAAM,IAAI,eAAe,KAAK,CAAC,IAAI,IAAI,CAAC;QACxC,MAAM,IAAI,kBAAkB,OAAO,IAAI,CAAC;QACxC,MAAM,IAAI,iBAAiB,KAAK,CAAC,MAAM,IAAI,CAAC;QAE5C,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM;iBACb;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yBAA0B,KAAe,CAAC,OAAO,EAAE;iBAC1D;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Tool } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { McpServerConfig } from "../server.js";
3
+ export declare const getBlockTool: Tool;
4
+ export declare function handleGetBlock(config: McpServerConfig, args: Record<string, unknown>): Promise<{
5
+ content: Array<{
6
+ type: string;
7
+ text: string;
8
+ }>;
9
+ }>;
10
+ //# sourceMappingURL=get-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-block.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-block.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,eAAO,MAAM,YAAY,EAAE,IAa1B,CAAC;AAEF,wBAAsB,cAAc,CAClC,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CA0D7D"}