@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.
- package/dist/api/client.d.ts +126 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +152 -0
- package/dist/api/client.js.map +1 -0
- package/dist/bin/epicontext.d.ts +18 -0
- package/dist/bin/epicontext.d.ts.map +1 -0
- package/dist/bin/epicontext.js +18 -0
- package/dist/bin/epicontext.js.map +1 -0
- package/dist/cli/commands/init.d.ts +5 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +61 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/link.d.ts +6 -0
- package/dist/cli/commands/link.d.ts.map +1 -0
- package/dist/cli/commands/link.js +158 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/pull.d.ts +6 -0
- package/dist/cli/commands/pull.d.ts.map +1 -0
- package/dist/cli/commands/pull.js +51 -0
- package/dist/cli/commands/pull.js.map +1 -0
- package/dist/cli/commands/push.d.ts +6 -0
- package/dist/cli/commands/push.d.ts.map +1 -0
- package/dist/cli/commands/push.js +64 -0
- package/dist/cli/commands/push.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +5 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +42 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +85 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +7 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +91 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/watch.d.ts +6 -0
- package/dist/cli/commands/watch.d.ts.map +1 -0
- package/dist/cli/commands/watch.js +66 -0
- package/dist/cli/commands/watch.js.map +1 -0
- package/dist/cli/config.d.ts +39 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +133 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/files.d.ts +29 -0
- package/dist/cli/files.d.ts.map +1 -0
- package/dist/cli/files.js +158 -0
- package/dist/cli/files.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +85 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +12 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +93 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/create-block.d.ts +10 -0
- package/dist/mcp/tools/create-block.d.ts.map +1 -0
- package/dist/mcp/tools/create-block.js +88 -0
- package/dist/mcp/tools/create-block.js.map +1 -0
- package/dist/mcp/tools/get-block.d.ts +10 -0
- package/dist/mcp/tools/get-block.d.ts.map +1 -0
- package/dist/mcp/tools/get-block.js +70 -0
- package/dist/mcp/tools/get-block.js.map +1 -0
- package/dist/mcp/tools/get-sync-status.d.ts +10 -0
- package/dist/mcp/tools/get-sync-status.d.ts.map +1 -0
- package/dist/mcp/tools/get-sync-status.js +41 -0
- package/dist/mcp/tools/get-sync-status.js.map +1 -0
- package/dist/mcp/tools/list-blocks.d.ts +10 -0
- package/dist/mcp/tools/list-blocks.d.ts.map +1 -0
- package/dist/mcp/tools/list-blocks.js +65 -0
- package/dist/mcp/tools/list-blocks.js.map +1 -0
- package/dist/mcp/tools/read-context.d.ts +10 -0
- package/dist/mcp/tools/read-context.d.ts.map +1 -0
- package/dist/mcp/tools/read-context.js +138 -0
- package/dist/mcp/tools/read-context.js.map +1 -0
- package/dist/mcp/tools/sync-all.d.ts +10 -0
- package/dist/mcp/tools/sync-all.d.ts.map +1 -0
- package/dist/mcp/tools/sync-all.js +67 -0
- package/dist/mcp/tools/sync-all.js.map +1 -0
- package/dist/mcp/tools/sync-from-app.d.ts +10 -0
- package/dist/mcp/tools/sync-from-app.d.ts.map +1 -0
- package/dist/mcp/tools/sync-from-app.js +40 -0
- package/dist/mcp/tools/sync-from-app.js.map +1 -0
- package/dist/mcp/tools/sync-to-app.d.ts +10 -0
- package/dist/mcp/tools/sync-to-app.d.ts.map +1 -0
- package/dist/mcp/tools/sync-to-app.js +53 -0
- package/dist/mcp/tools/sync-to-app.js.map +1 -0
- package/dist/mcp/tools/update-block.d.ts +10 -0
- package/dist/mcp/tools/update-block.d.ts.map +1 -0
- package/dist/mcp/tools/update-block.js +90 -0
- package/dist/mcp/tools/update-block.js.map +1 -0
- package/dist/sync/pull.d.ts +16 -0
- package/dist/sync/pull.d.ts.map +1 -0
- package/dist/sync/pull.js +32 -0
- package/dist/sync/pull.js.map +1 -0
- package/dist/sync/push.d.ts +18 -0
- package/dist/sync/push.d.ts.map +1 -0
- package/dist/sync/push.js +39 -0
- package/dist/sync/push.js.map +1 -0
- package/dist/sync/watcher.d.ts +51 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +114 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/types/index.d.ts +110 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- 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":"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"}
|
|
@@ -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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|