@webiny/mcp 6.0.0 → 6.1.0-beta.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/agents/claude.d.ts +2 -2
- package/agents/claude.js.map +1 -1
- package/agents/cline.d.ts +2 -2
- package/agents/cline.js.map +1 -1
- package/agents/copilot.d.ts +2 -2
- package/agents/copilot.js +1 -1
- package/agents/copilot.js.map +1 -1
- package/agents/cursor.d.ts +2 -2
- package/agents/cursor.js.map +1 -1
- package/agents/instructions.js +1 -1
- package/agents/instructions.js.map +1 -1
- package/agents/kiro.d.ts +15 -0
- package/agents/kiro.js +33 -0
- package/agents/kiro.js.map +1 -0
- package/agents/opencode.d.ts +22 -0
- package/agents/opencode.js +76 -0
- package/agents/opencode.js.map +1 -0
- package/agents/shared.d.ts +5 -5
- package/agents/shared.js +3 -3
- package/agents/shared.js.map +1 -1
- package/agents/windsurf.d.ts +2 -2
- package/agents/windsurf.js.map +1 -1
- package/bin.d.ts +2 -0
- package/bin.js +4 -0
- package/bin.js.map +1 -0
- package/cli/ConfigureMcp.d.ts +7 -14
- package/cli/ConfigureMcp.js +24 -52
- package/cli/ConfigureMcp.js.map +1 -1
- package/cli/McpServer.d.ts +3 -10
- package/cli/McpServer.js +83 -109
- package/cli/McpServer.js.map +1 -1
- package/cli.d.ts +1 -0
- package/cli.js +60 -0
- package/cli.js.map +1 -0
- package/index.d.ts +6 -1
- package/index.js +7 -1
- package/index.js.map +1 -1
- package/package.json +11 -23
- package/skills/admin/admin-architect/SKILL.md +389 -0
- package/skills/admin/ui-extensions/SKILL.md +268 -0
- package/skills/api/api-architect/SKILL.md +189 -0
- package/skills/api/custom-field-type/SKILL.md +263 -0
- package/skills/api/event-handler-pattern/SKILL.md +131 -0
- package/skills/{custom-graphql-api → api/graphql-api}/SKILL.md +3 -3
- package/skills/api/use-case-pattern/SKILL.md +102 -0
- package/skills/cli-extensions/SKILL.md +45 -47
- package/skills/configure-auth0/SKILL.md +4 -4
- package/skills/configure-okta/SKILL.md +3 -3
- package/skills/content-models/SKILL.md +197 -196
- package/skills/dependency-injection/SKILL.md +9 -219
- package/skills/full-stack-architect/SKILL.md +195 -0
- package/skills/generated/admin/SKILL.md +119 -0
- package/skills/generated/admin/aco/SKILL.md +28 -0
- package/skills/generated/admin/build-params/SKILL.md +33 -0
- package/skills/generated/admin/cms/SKILL.md +342 -0
- package/skills/generated/admin/configs/SKILL.md +23 -0
- package/skills/generated/admin/env-config/SKILL.md +30 -0
- package/skills/generated/admin/form/SKILL.md +88 -0
- package/skills/generated/admin/graphql-client/SKILL.md +23 -0
- package/skills/generated/admin/lexical/SKILL.md +105 -0
- package/skills/generated/admin/local-storage/SKILL.md +42 -0
- package/skills/generated/admin/router/SKILL.md +48 -0
- package/skills/generated/admin/security/SKILL.md +63 -0
- package/skills/generated/admin/tenancy/SKILL.md +64 -0
- package/skills/generated/admin/ui/SKILL.md +468 -0
- package/skills/generated/admin/website-builder/SKILL.md +318 -0
- package/skills/generated/api/SKILL.md +40 -0
- package/skills/generated/api/aco/SKILL.md +202 -0
- package/skills/generated/api/build-params/SKILL.md +31 -0
- package/skills/generated/api/cms/SKILL.md +646 -0
- package/skills/generated/api/event-publisher/SKILL.md +31 -0
- package/skills/generated/api/file-manager/SKILL.md +189 -0
- package/skills/generated/api/graphql/SKILL.md +61 -0
- package/skills/generated/api/key-value-store/SKILL.md +31 -0
- package/skills/generated/api/logger/SKILL.md +25 -0
- package/skills/generated/api/opensearch/SKILL.md +39 -0
- package/skills/generated/api/scheduler/SKILL.md +112 -0
- package/skills/generated/api/security/SKILL.md +317 -0
- package/skills/generated/api/system/SKILL.md +34 -0
- package/skills/generated/api/tasks/SKILL.md +31 -0
- package/skills/generated/api/tenancy/SKILL.md +124 -0
- package/skills/generated/api/tenant-manager/SKILL.md +34 -0
- package/skills/generated/api/website-builder/SKILL.md +356 -0
- package/skills/generated/cli/SKILL.md +28 -0
- package/skills/generated/cli/command/SKILL.md +24 -0
- package/skills/generated/extensions/SKILL.md +43 -0
- package/skills/generated/infra/SKILL.md +190 -0
- package/skills/infrastructure-extensions/SKILL.md +3 -2
- package/skills/local-development/SKILL.md +2 -28
- package/skills/project-structure/SKILL.md +78 -56
- package/skills/webiny-sdk/SKILL.md +77 -76
- package/skills/website-builder/SKILL.md +143 -149
- package/ui.d.ts +24 -0
- package/ui.js +31 -0
- package/ui.js.map +1 -0
- package/Extension.d.ts +0 -2
- package/Extension.js +0 -11
- package/Extension.js.map +0 -1
- package/skills/admin-ui-extensions/SKILL.md +0 -267
- package/skills/api-custom-feature/SKILL.md +0 -195
- package/skills/lifecycle-events/SKILL.md +0 -348
package/cli/ConfigureMcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ConsoleUi","SUPPORTED","configureMcp","params","ui","cwd","process","instructions","printInstructions","target","agent","includes","error","text","join","exit","init"],"sources":["ConfigureMcp.ts"],"sourcesContent":["import type { IUi } from \"../ui.js\";\nimport { ConsoleUi } from \"../ui.js\";\n\nexport interface IConfigureMcpParams {\n agent?: string;\n instructions?: boolean;\n ui?: IUi;\n cwd?: string;\n}\n\nconst SUPPORTED = [\"claude\", \"cursor\", \"windsurf\", \"copilot\", \"cline\", \"opencode\", \"kiro\"];\n\nexport async function configureMcp(params: IConfigureMcpParams = {}): Promise<void> {\n const ui = params.ui ?? new ConsoleUi();\n const cwd = params.cwd ?? process.cwd();\n\n if (params.instructions) {\n const { printInstructions } = await import(\"../agents/instructions.js\");\n printInstructions();\n return;\n }\n\n const target = params.agent || \"claude\";\n\n if (!SUPPORTED.includes(target)) {\n ui.error(`Unknown agent \"${target}\".`);\n ui.text(`Supported: ${SUPPORTED.join(\", \")}`);\n ui.text(\"For other agents, run: npx webiny-mcp configure --instructions\");\n process.exit(1);\n }\n\n const { init } = await import(`../agents/${target}.js`);\n await init({ ui, cwd });\n}\n"],"mappings":"AACA,SAASA,SAAS;AASlB,MAAMC,SAAS,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;AAE1F,OAAO,eAAeC,YAAYA,CAACC,MAA2B,GAAG,CAAC,CAAC,EAAiB;EAChF,MAAMC,EAAE,GAAGD,MAAM,CAACC,EAAE,IAAI,IAAIJ,SAAS,CAAC,CAAC;EACvC,MAAMK,GAAG,GAAGF,MAAM,CAACE,GAAG,IAAIC,OAAO,CAACD,GAAG,CAAC,CAAC;EAEvC,IAAIF,MAAM,CAACI,YAAY,EAAE;IACrB,MAAM;MAAEC;IAAkB,CAAC,GAAG,MAAM,MAAM,4BAA4B,CAAC;IACvEA,iBAAiB,CAAC,CAAC;IACnB;EACJ;EAEA,MAAMC,MAAM,GAAGN,MAAM,CAACO,KAAK,IAAI,QAAQ;EAEvC,IAAI,CAACT,SAAS,CAACU,QAAQ,CAACF,MAAM,CAAC,EAAE;IAC7BL,EAAE,CAACQ,KAAK,CAAC,kBAAkBH,MAAM,IAAI,CAAC;IACtCL,EAAE,CAACS,IAAI,CAAC,cAAcZ,SAAS,CAACa,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7CV,EAAE,CAACS,IAAI,CAAC,gEAAgE,CAAC;IACzEP,OAAO,CAACS,IAAI,CAAC,CAAC,CAAC;EACnB;EAEA,MAAM;IAAEC;EAAK,CAAC,GAAG,MAAM,MAAM,CAAC,aAAaP,MAAM,KAAK,CAAC;EACvD,MAAMO,IAAI,CAAC;IAAEZ,EAAE;IAAEC;EAAI,CAAC,CAAC;AAC3B","ignoreList":[]}
|
package/cli/McpServer.d.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import { CliCommandFactory } from "@webiny/cli-core/exports/cli/command.js";
|
|
2
1
|
export interface IMcpServerParams {
|
|
3
|
-
skills
|
|
4
|
-
|
|
2
|
+
skills?: string;
|
|
3
|
+
additionalSkills?: string[];
|
|
5
4
|
}
|
|
6
|
-
declare
|
|
7
|
-
execute(): CliCommandFactory.CommandDefinition<IMcpServerParams>;
|
|
8
|
-
}
|
|
9
|
-
declare const _default: typeof McpServerCommand & {
|
|
10
|
-
__abstraction: import("@webiny/di").Abstraction<import("@webiny/cli-core/abstractions/features/CliCommand").ICliCommand<any>>;
|
|
11
|
-
};
|
|
12
|
-
export default _default;
|
|
5
|
+
export declare function startMcpServer(params?: IMcpServerParams): Promise<void>;
|
package/cli/McpServer.js
CHANGED
|
@@ -6,7 +6,6 @@ import fm from "front-matter";
|
|
|
6
6
|
import { z } from "zod";
|
|
7
7
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
8
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
-
import { CliCommandFactory } from "@webiny/cli-core/exports/cli/command.js";
|
|
10
9
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
11
10
|
|
|
12
11
|
// ---------------------------------------------------------------------------
|
|
@@ -120,120 +119,95 @@ function readSkillContent(skill) {
|
|
|
120
119
|
}
|
|
121
120
|
|
|
122
121
|
// ---------------------------------------------------------------------------
|
|
123
|
-
//
|
|
122
|
+
// Standalone entry point
|
|
124
123
|
// ---------------------------------------------------------------------------
|
|
125
124
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
}],
|
|
142
|
-
handler: async params => {
|
|
143
|
-
const cwd = process.cwd();
|
|
144
|
-
const builtInSkillsDir = join(__dirname, "..", "skills");
|
|
145
|
-
const skillsOverride = params.skills;
|
|
146
|
-
const additionalSkillsDirs = params["additional-skills"] || [];
|
|
147
|
-
const baseDir = skillsOverride ? resolve(cwd, skillsOverride) : builtInSkillsDir;
|
|
148
|
-
|
|
149
|
-
// skillsDirs[0] = highest priority, skillsDirs[last] = lowest priority
|
|
150
|
-
const skillsDirs = [...[...additionalSkillsDirs].map(p => resolve(cwd, p)).reverse(), baseDir];
|
|
151
|
-
if (skillsOverride) {
|
|
152
|
-
console.error(`[webiny-mcp] skills override: ${baseDir}`);
|
|
153
|
-
}
|
|
154
|
-
for (const d of additionalSkillsDirs) {
|
|
155
|
-
console.error(`[webiny-mcp] additional skills: ${resolve(cwd, d)}`);
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
// In-memory cache: populated on first list, reused by get.
|
|
159
|
-
let skillsCache = null;
|
|
160
|
-
function getSkills() {
|
|
161
|
-
if (!skillsCache) {
|
|
162
|
-
skillsCache = discoverSkills(skillsDirs);
|
|
163
|
-
console.error(`[webiny-mcp] discovered ${skillsCache.size} skill(s)`);
|
|
164
|
-
}
|
|
165
|
-
return skillsCache;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
// ---------------------------------------------------------------
|
|
169
|
-
// MCP server
|
|
170
|
-
// ---------------------------------------------------------------
|
|
125
|
+
export async function startMcpServer(params = {}) {
|
|
126
|
+
const cwd = process.cwd();
|
|
127
|
+
const builtInSkillsDir = join(__dirname, "..", "skills");
|
|
128
|
+
const skillsOverride = params.skills;
|
|
129
|
+
const additionalSkillsDirs = params.additionalSkills || [];
|
|
130
|
+
const baseDir = skillsOverride ? resolve(cwd, skillsOverride) : builtInSkillsDir;
|
|
131
|
+
|
|
132
|
+
// skillsDirs[0] = highest priority, skillsDirs[last] = lowest priority
|
|
133
|
+
const skillsDirs = [...[...additionalSkillsDirs].map(p => resolve(cwd, p)).reverse(), baseDir];
|
|
134
|
+
if (skillsOverride) {
|
|
135
|
+
console.error(`[webiny-mcp] skills override: ${baseDir}`);
|
|
136
|
+
}
|
|
137
|
+
for (const d of additionalSkillsDirs) {
|
|
138
|
+
console.error(`[webiny-mcp] additional skills: ${resolve(cwd, d)}`);
|
|
139
|
+
}
|
|
171
140
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
readOnlyHint: true
|
|
182
|
-
}
|
|
183
|
-
}, async () => ({
|
|
184
|
-
content: [{
|
|
185
|
-
type: "text",
|
|
186
|
-
text: buildCatalog(getSkills())
|
|
187
|
-
}]
|
|
188
|
-
}));
|
|
141
|
+
// In-memory cache: populated on first list, reused by get.
|
|
142
|
+
let skillsCache = null;
|
|
143
|
+
function getSkills() {
|
|
144
|
+
if (!skillsCache) {
|
|
145
|
+
skillsCache = discoverSkills(skillsDirs);
|
|
146
|
+
console.error(`[webiny-mcp] discovered ${skillsCache.size} skill(s)`);
|
|
147
|
+
}
|
|
148
|
+
return skillsCache;
|
|
149
|
+
}
|
|
189
150
|
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
151
|
+
// ---------------------------------------------------------------
|
|
152
|
+
// MCP server
|
|
153
|
+
// ---------------------------------------------------------------
|
|
154
|
+
|
|
155
|
+
const server = new McpServer({
|
|
156
|
+
name: "webiny",
|
|
157
|
+
version: getVersion()
|
|
158
|
+
});
|
|
159
|
+
server.registerTool("list_webiny_skills", {
|
|
160
|
+
title: "List Webiny Skills",
|
|
161
|
+
description: "Returns a catalog of all available Webiny skills with names and descriptions. " + "Always call this first when working on anything Webiny-related, then call " + "get_webiny_skill to load the specific skill you need.",
|
|
162
|
+
inputSchema: {},
|
|
163
|
+
annotations: {
|
|
164
|
+
readOnlyHint: true
|
|
165
|
+
}
|
|
166
|
+
}, async () => ({
|
|
167
|
+
content: [{
|
|
168
|
+
type: "text",
|
|
169
|
+
text: buildCatalog(getSkills())
|
|
170
|
+
}]
|
|
171
|
+
}));
|
|
172
|
+
server.registerTool("get_webiny_skill", {
|
|
173
|
+
title: "Get Webiny Skill",
|
|
174
|
+
description: "Loads the full Webiny documentation for a specific skill. " + "Call list_webiny_skills first to see available skill names.",
|
|
175
|
+
inputSchema: {
|
|
176
|
+
topic: z.string().describe("Skill name — use exact names from list_webiny_skills")
|
|
177
|
+
},
|
|
178
|
+
annotations: {
|
|
179
|
+
readOnlyHint: true
|
|
180
|
+
}
|
|
181
|
+
}, async ({
|
|
182
|
+
topic
|
|
183
|
+
}) => {
|
|
184
|
+
const skills = getSkills();
|
|
185
|
+
const skill = skills.get(topic);
|
|
186
|
+
if (!skill) {
|
|
187
|
+
const available = [...skills.keys()].sort();
|
|
188
|
+
return {
|
|
189
|
+
content: [{
|
|
190
|
+
type: "text",
|
|
191
|
+
text: `Skill not found: "${topic}".\n\n` + `Available skills: ${available.join(", ") || "(none)"}.`
|
|
192
|
+
}],
|
|
193
|
+
isError: true
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
content: [{
|
|
198
|
+
type: "text",
|
|
199
|
+
text: readSkillContent(skill)
|
|
200
|
+
}]
|
|
201
|
+
};
|
|
202
|
+
});
|
|
222
203
|
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
204
|
+
// ---------------------------------------------------------------
|
|
205
|
+
// Start
|
|
206
|
+
// ---------------------------------------------------------------
|
|
226
207
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
}
|
|
231
|
-
};
|
|
232
|
-
}
|
|
208
|
+
const transport = new StdioServerTransport();
|
|
209
|
+
await server.connect(transport);
|
|
210
|
+
console.error("[webiny-mcp] server ready");
|
|
233
211
|
}
|
|
234
|
-
export default CliCommandFactory.createImplementation({
|
|
235
|
-
implementation: McpServerCommand,
|
|
236
|
-
dependencies: []
|
|
237
|
-
});
|
|
238
212
|
|
|
239
213
|
//# sourceMappingURL=McpServer.js.map
|
package/cli/McpServer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["readFileSync","readdirSync","existsSync","join","resolve","dirname","fileURLToPath","createRequire","fm","z","McpServer","StdioServerTransport","CliCommandFactory","__dirname","import","meta","url","findSkillFiles","dir","results","entry","withFileTypes","fullPath","name","isDirectory","push","isFile","discoverSkills","skillsDirs","skills","Map","filePath","raw","parsed","description","attributes","console","error","has","context","set","err","getVersion","version","buildCatalog","lines","size","contextDescriptions","groups","skill","values","list","get","contextSkills","entries","sort","a","b","localeCompare","desc","skillDesc","replace","trim","readSkillContent","body","McpServerCommand","execute","examples","options","type","array","handler","params","cwd","process","builtInSkillsDir","skillsOverride","additionalSkillsDirs","baseDir","map","p","reverse","d","skillsCache","getSkills","server","registerTool","title","inputSchema","annotations","readOnlyHint","content","text","topic","string","describe","available","keys","isError","transport","connect","createImplementation","implementation","dependencies"],"sources":["McpServer.ts"],"sourcesContent":["import { readFileSync, readdirSync, existsSync } from \"fs\";\nimport { join, resolve, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createRequire } from \"module\";\nimport fm from \"front-matter\";\nimport { z } from \"zod\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { CliCommandFactory } from \"@webiny/cli-core/exports/cli/command.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport interface IMcpServerParams {\n skills: string;\n \"additional-skills\": string[];\n}\n\n// ---------------------------------------------------------------------------\n// Skill discovery\n// ---------------------------------------------------------------------------\n\ninterface SkillAttributes {\n name: string;\n description: string;\n context?: string;\n}\n\ninterface Skill {\n name: string;\n description: string;\n context: string;\n filePath: string;\n}\n\n/**\n * Recursively find all SKILL.md files under `dir`.\n */\nfunction findSkillFiles(dir: string): string[] {\n if (!existsSync(dir)) {\n return [];\n }\n const results: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n results.push(...findSkillFiles(fullPath));\n } else if (entry.isFile() && entry.name === \"SKILL.md\") {\n results.push(fullPath);\n }\n }\n return results;\n}\n\n/**\n * Discover skills from multiple directories. First match wins (higher-priority dirs first).\n */\nfunction discoverSkills(skillsDirs: string[]): Map<string, Skill> {\n const skills = new Map<string, Skill>();\n\n for (const dir of skillsDirs) {\n for (const filePath of findSkillFiles(dir)) {\n try {\n const raw = readFileSync(filePath, \"utf8\");\n const parsed = fm<SkillAttributes>(raw);\n const { name, description } = parsed.attributes;\n\n if (!name || !description) {\n console.error(`[webiny-mcp] skipping ${filePath}: missing name or description`);\n continue;\n }\n\n if (!skills.has(name)) {\n const context = parsed.attributes.context || \"webiny-extensions\";\n skills.set(name, { name, description, context, filePath });\n }\n } catch (err) {\n console.error(`[webiny-mcp] error reading ${filePath}:`, err);\n }\n }\n }\n\n return skills;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getVersion(): string {\n try {\n return createRequire(import.meta.url)(\"../../package.json\").version;\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction buildCatalog(skills: Map<string, Skill>): string {\n const lines: string[] = [`# Webiny Skills (v${getVersion()})`, \"\"];\n\n if (skills.size === 0) {\n lines.push(\n \"_(No skills found. Add SKILL.md files with front-matter to a skills directory.)_\"\n );\n return lines.join(\"\\n\");\n }\n\n // Group skills by context.\n const contextDescriptions: Record<string, string> = {\n \"webiny-extensions\":\n \"Use these skills when writing Webiny extensions (usually in `extensions/`) or making changes to `webiny.config.tsx` (user project development).\",\n \"webiny-packages\":\n \"Use these skills when writing code in `packages/` (core Webiny framework development).\"\n };\n\n const groups = new Map<string, Skill[]>();\n for (const skill of skills.values()) {\n const list = groups.get(skill.context) || [];\n list.push(skill);\n groups.set(skill.context, list);\n }\n\n for (const [context, contextSkills] of [...groups.entries()].sort((a, b) =>\n a[0].localeCompare(b[0])\n )) {\n lines.push(`## ${context}`, \"\");\n const desc = contextDescriptions[context];\n if (desc) {\n lines.push(desc, \"\");\n }\n lines.push(\"| Skill | Description |\");\n lines.push(\"|---|---|\");\n for (const skill of contextSkills.sort((a, b) => a.name.localeCompare(b.name))) {\n const skillDesc = skill.description.replace(/\\n/g, \" \").trim();\n lines.push(`| \\`${skill.name}\\` | ${skillDesc} |`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction readSkillContent(skill: Skill): string {\n const raw = readFileSync(skill.filePath, \"utf8\");\n return fm(raw).body;\n}\n\n// ---------------------------------------------------------------------------\n// CLI Command\n// ---------------------------------------------------------------------------\n\nclass McpServerCommand implements CliCommandFactory.Interface<IMcpServerParams> {\n execute(): CliCommandFactory.CommandDefinition<IMcpServerParams> {\n return {\n name: \"mcp-server\",\n description: \"Start the Webiny MCP server (stdio transport).\",\n examples: [\n \"$0 mcp-server\",\n \"$0 mcp-server --skills=./my-skills\",\n \"$0 mcp-server --additional-skills=./extra-skills\"\n ],\n options: [\n {\n name: \"skills\",\n description:\n \"Replace the built-in skills folder entirely. Only skills found in the given path will be served.\",\n type: \"string\"\n },\n {\n name: \"additional-skills\",\n description:\n \"Add a folder on top of the built-in (or --skills) folder. Can be repeated.\",\n type: \"string\",\n array: true\n }\n ],\n handler: async params => {\n const cwd = process.cwd();\n const builtInSkillsDir = join(__dirname, \"..\", \"skills\");\n const skillsOverride = params.skills;\n const additionalSkillsDirs = params[\"additional-skills\"] || [];\n\n const baseDir = skillsOverride ? resolve(cwd, skillsOverride) : builtInSkillsDir;\n\n // skillsDirs[0] = highest priority, skillsDirs[last] = lowest priority\n const skillsDirs = [\n ...[...additionalSkillsDirs].map(p => resolve(cwd, p)).reverse(),\n baseDir\n ];\n\n if (skillsOverride) {\n console.error(`[webiny-mcp] skills override: ${baseDir}`);\n }\n for (const d of additionalSkillsDirs) {\n console.error(`[webiny-mcp] additional skills: ${resolve(cwd, d)}`);\n }\n\n // In-memory cache: populated on first list, reused by get.\n let skillsCache: Map<string, Skill> | null = null;\n\n function getSkills(): Map<string, Skill> {\n if (!skillsCache) {\n skillsCache = discoverSkills(skillsDirs);\n console.error(`[webiny-mcp] discovered ${skillsCache.size} skill(s)`);\n }\n return skillsCache;\n }\n\n // ---------------------------------------------------------------\n // MCP server\n // ---------------------------------------------------------------\n\n const server = new McpServer({ name: \"webiny\", version: getVersion() });\n\n server.registerTool(\n \"list_webiny_skills\",\n {\n title: \"List Webiny Skills\",\n description:\n \"Returns a catalog of all available Webiny skills with names and descriptions. \" +\n \"Always call this first when working on anything Webiny-related, then call \" +\n \"get_webiny_skill to load the specific skill you need.\",\n inputSchema: {},\n annotations: { readOnlyHint: true }\n },\n async () => ({\n content: [{ type: \"text\", text: buildCatalog(getSkills()) }]\n })\n );\n\n // @ts-expect-error Incompatible Zod version\n server.registerTool(\n \"get_webiny_skill\",\n {\n title: \"Get Webiny Skill\",\n description:\n \"Loads the full Webiny documentation for a specific skill. \" +\n \"Call list_webiny_skills first to see available skill names.\",\n inputSchema: {\n topic: z\n .string()\n .describe(\"Skill name — use exact names from list_webiny_skills\")\n },\n annotations: { readOnlyHint: true }\n },\n async ({ topic }) => {\n const skills = getSkills();\n const skill = skills.get(topic);\n if (!skill) {\n const available = [...skills.keys()].sort();\n return {\n content: [\n {\n type: \"text\",\n text:\n `Skill not found: \"${topic}\".\\n\\n` +\n `Available skills: ${available.join(\", \") || \"(none)\"}.`\n }\n ],\n isError: true\n };\n }\n return {\n content: [{ type: \"text\", text: readSkillContent(skill) }]\n };\n }\n );\n\n // ---------------------------------------------------------------\n // Start\n // ---------------------------------------------------------------\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"[webiny-mcp] server ready\");\n }\n };\n }\n}\n\nexport default CliCommandFactory.createImplementation({\n implementation: McpServerCommand,\n dependencies: []\n});\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["readFileSync","readdirSync","existsSync","join","resolve","dirname","fileURLToPath","createRequire","fm","z","McpServer","StdioServerTransport","__dirname","import","meta","url","findSkillFiles","dir","results","entry","withFileTypes","fullPath","name","isDirectory","push","isFile","discoverSkills","skillsDirs","skills","Map","filePath","raw","parsed","description","attributes","console","error","has","context","set","err","getVersion","version","buildCatalog","lines","size","contextDescriptions","groups","skill","values","list","get","contextSkills","entries","sort","a","b","localeCompare","desc","skillDesc","replace","trim","readSkillContent","body","startMcpServer","params","cwd","process","builtInSkillsDir","skillsOverride","additionalSkillsDirs","additionalSkills","baseDir","map","p","reverse","d","skillsCache","getSkills","server","registerTool","title","inputSchema","annotations","readOnlyHint","content","type","text","topic","string","describe","available","keys","isError","transport","connect"],"sources":["McpServer.ts"],"sourcesContent":["import { readFileSync, readdirSync, existsSync } from \"fs\";\nimport { join, resolve, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { createRequire } from \"module\";\nimport fm from \"front-matter\";\nimport { z } from \"zod\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nexport interface IMcpServerParams {\n skills?: string;\n additionalSkills?: string[];\n}\n\n// ---------------------------------------------------------------------------\n// Skill discovery\n// ---------------------------------------------------------------------------\n\ninterface SkillAttributes {\n name: string;\n description: string;\n context?: string;\n}\n\ninterface Skill {\n name: string;\n description: string;\n context: string;\n filePath: string;\n}\n\n/**\n * Recursively find all SKILL.md files under `dir`.\n */\nfunction findSkillFiles(dir: string): string[] {\n if (!existsSync(dir)) {\n return [];\n }\n const results: string[] = [];\n for (const entry of readdirSync(dir, { withFileTypes: true })) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n results.push(...findSkillFiles(fullPath));\n } else if (entry.isFile() && entry.name === \"SKILL.md\") {\n results.push(fullPath);\n }\n }\n return results;\n}\n\n/**\n * Discover skills from multiple directories. First match wins (higher-priority dirs first).\n */\nfunction discoverSkills(skillsDirs: string[]): Map<string, Skill> {\n const skills = new Map<string, Skill>();\n\n for (const dir of skillsDirs) {\n for (const filePath of findSkillFiles(dir)) {\n try {\n const raw = readFileSync(filePath, \"utf8\");\n const parsed = fm<SkillAttributes>(raw);\n const { name, description } = parsed.attributes;\n\n if (!name || !description) {\n console.error(`[webiny-mcp] skipping ${filePath}: missing name or description`);\n continue;\n }\n\n if (!skills.has(name)) {\n const context = parsed.attributes.context || \"webiny-extensions\";\n skills.set(name, { name, description, context, filePath });\n }\n } catch (err) {\n console.error(`[webiny-mcp] error reading ${filePath}:`, err);\n }\n }\n }\n\n return skills;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction getVersion(): string {\n try {\n return createRequire(import.meta.url)(\"../../package.json\").version;\n } catch {\n return \"0.0.0\";\n }\n}\n\nfunction buildCatalog(skills: Map<string, Skill>): string {\n const lines: string[] = [`# Webiny Skills (v${getVersion()})`, \"\"];\n\n if (skills.size === 0) {\n lines.push(\n \"_(No skills found. Add SKILL.md files with front-matter to a skills directory.)_\"\n );\n return lines.join(\"\\n\");\n }\n\n // Group skills by context.\n const contextDescriptions: Record<string, string> = {\n \"webiny-extensions\":\n \"Use these skills when writing Webiny extensions (usually in `extensions/`) or making changes to `webiny.config.tsx` (user project development).\",\n \"webiny-packages\":\n \"Use these skills when writing code in `packages/` (core Webiny framework development).\"\n };\n\n const groups = new Map<string, Skill[]>();\n for (const skill of skills.values()) {\n const list = groups.get(skill.context) || [];\n list.push(skill);\n groups.set(skill.context, list);\n }\n\n for (const [context, contextSkills] of [...groups.entries()].sort((a, b) =>\n a[0].localeCompare(b[0])\n )) {\n lines.push(`## ${context}`, \"\");\n const desc = contextDescriptions[context];\n if (desc) {\n lines.push(desc, \"\");\n }\n lines.push(\"| Skill | Description |\");\n lines.push(\"|---|---|\");\n for (const skill of contextSkills.sort((a, b) => a.name.localeCompare(b.name))) {\n const skillDesc = skill.description.replace(/\\n/g, \" \").trim();\n lines.push(`| \\`${skill.name}\\` | ${skillDesc} |`);\n }\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction readSkillContent(skill: Skill): string {\n const raw = readFileSync(skill.filePath, \"utf8\");\n return fm(raw).body;\n}\n\n// ---------------------------------------------------------------------------\n// Standalone entry point\n// ---------------------------------------------------------------------------\n\nexport async function startMcpServer(params: IMcpServerParams = {}): Promise<void> {\n const cwd = process.cwd();\n const builtInSkillsDir = join(__dirname, \"..\", \"skills\");\n const skillsOverride = params.skills;\n const additionalSkillsDirs = params.additionalSkills || [];\n\n const baseDir = skillsOverride ? resolve(cwd, skillsOverride) : builtInSkillsDir;\n\n // skillsDirs[0] = highest priority, skillsDirs[last] = lowest priority\n const skillsDirs = [...[...additionalSkillsDirs].map(p => resolve(cwd, p)).reverse(), baseDir];\n\n if (skillsOverride) {\n console.error(`[webiny-mcp] skills override: ${baseDir}`);\n }\n for (const d of additionalSkillsDirs) {\n console.error(`[webiny-mcp] additional skills: ${resolve(cwd, d)}`);\n }\n\n // In-memory cache: populated on first list, reused by get.\n let skillsCache: Map<string, Skill> | null = null;\n\n function getSkills(): Map<string, Skill> {\n if (!skillsCache) {\n skillsCache = discoverSkills(skillsDirs);\n console.error(`[webiny-mcp] discovered ${skillsCache.size} skill(s)`);\n }\n return skillsCache;\n }\n\n // ---------------------------------------------------------------\n // MCP server\n // ---------------------------------------------------------------\n\n const server = new McpServer({ name: \"webiny\", version: getVersion() });\n\n server.registerTool(\n \"list_webiny_skills\",\n {\n title: \"List Webiny Skills\",\n description:\n \"Returns a catalog of all available Webiny skills with names and descriptions. \" +\n \"Always call this first when working on anything Webiny-related, then call \" +\n \"get_webiny_skill to load the specific skill you need.\",\n inputSchema: {},\n annotations: { readOnlyHint: true }\n },\n async () => ({\n content: [{ type: \"text\", text: buildCatalog(getSkills()) }]\n })\n );\n\n server.registerTool(\n \"get_webiny_skill\",\n {\n title: \"Get Webiny Skill\",\n description:\n \"Loads the full Webiny documentation for a specific skill. \" +\n \"Call list_webiny_skills first to see available skill names.\",\n inputSchema: {\n topic: z.string().describe(\"Skill name — use exact names from list_webiny_skills\")\n },\n annotations: { readOnlyHint: true }\n },\n async ({ topic }) => {\n const skills = getSkills();\n const skill = skills.get(topic);\n if (!skill) {\n const available = [...skills.keys()].sort();\n return {\n content: [\n {\n type: \"text\",\n text:\n `Skill not found: \"${topic}\".\\n\\n` +\n `Available skills: ${available.join(\", \") || \"(none)\"}.`\n }\n ],\n isError: true\n };\n }\n return {\n content: [{ type: \"text\", text: readSkillContent(skill) }]\n };\n }\n );\n\n // ---------------------------------------------------------------\n // Start\n // ---------------------------------------------------------------\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"[webiny-mcp] server ready\");\n}\n"],"mappings":"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","ignoreList":[]}
|
package/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/cli.js
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { startMcpServer } from "./cli/McpServer.js";
|
|
2
|
+
import { configureMcp } from "./cli/ConfigureMcp.js";
|
|
3
|
+
const args = process.argv.slice(2);
|
|
4
|
+
const command = args[0];
|
|
5
|
+
function parseFlags(args) {
|
|
6
|
+
const flags = {};
|
|
7
|
+
for (const arg of args) {
|
|
8
|
+
if (!arg.startsWith("--")) {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
const [key, ...rest] = arg.slice(2).split("=");
|
|
12
|
+
const value = rest.length > 0 ? rest.join("=") : true;
|
|
13
|
+
|
|
14
|
+
// Support repeated flags as arrays.
|
|
15
|
+
const existing = flags[key];
|
|
16
|
+
if (existing !== undefined) {
|
|
17
|
+
flags[key] = Array.isArray(existing) ? [...existing, value] : [existing, value];
|
|
18
|
+
} else {
|
|
19
|
+
flags[key] = value;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return flags;
|
|
23
|
+
}
|
|
24
|
+
async function main() {
|
|
25
|
+
if (command === "serve") {
|
|
26
|
+
const flags = parseFlags(args.slice(1));
|
|
27
|
+
const additionalSkills = flags["additional-skills"];
|
|
28
|
+
await startMcpServer({
|
|
29
|
+
skills: typeof flags.skills === "string" ? flags.skills : undefined,
|
|
30
|
+
additionalSkills: Array.isArray(additionalSkills) ? additionalSkills : typeof additionalSkills === "string" ? [additionalSkills] : undefined
|
|
31
|
+
});
|
|
32
|
+
} else if (command === "configure") {
|
|
33
|
+
const agent = args[1] && !args[1].startsWith("--") ? args[1] : undefined;
|
|
34
|
+
const flags = parseFlags(args.slice(1));
|
|
35
|
+
await configureMcp({
|
|
36
|
+
agent,
|
|
37
|
+
instructions: flags.instructions === true
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
console.log("Usage: webiny-mcp <command>");
|
|
41
|
+
console.log("");
|
|
42
|
+
console.log("Commands:");
|
|
43
|
+
console.log(" serve Start the MCP server (stdio transport)");
|
|
44
|
+
console.log(" configure Configure MCP server for a specific agent");
|
|
45
|
+
console.log("");
|
|
46
|
+
console.log("Examples:");
|
|
47
|
+
console.log(" npx webiny-mcp serve");
|
|
48
|
+
console.log(" npx webiny-mcp serve --additional-skills=./my-skills");
|
|
49
|
+
console.log(" npx webiny-mcp configure claude");
|
|
50
|
+
console.log(" npx webiny-mcp configure cursor");
|
|
51
|
+
console.log(" npx webiny-mcp configure --instructions");
|
|
52
|
+
process.exit(command ? 1 : 0);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
main().catch(err => {
|
|
56
|
+
console.error(err);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=cli.js.map
|
package/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["startMcpServer","configureMcp","args","process","argv","slice","command","parseFlags","flags","arg","startsWith","key","rest","split","value","length","join","existing","undefined","Array","isArray","main","additionalSkills","skills","agent","instructions","console","log","exit","catch","err","error"],"sources":["cli.ts"],"sourcesContent":["import { startMcpServer } from \"./cli/McpServer.js\";\nimport { configureMcp } from \"./cli/ConfigureMcp.js\";\n\nconst args = process.argv.slice(2);\nconst command = args[0];\n\nfunction parseFlags(args: string[]): Record<string, string | string[] | boolean> {\n const flags: Record<string, string | string[] | boolean> = {};\n for (const arg of args) {\n if (!arg.startsWith(\"--\")) {\n continue;\n }\n const [key, ...rest] = arg.slice(2).split(\"=\");\n const value = rest.length > 0 ? rest.join(\"=\") : true;\n\n // Support repeated flags as arrays.\n const existing = flags[key];\n if (existing !== undefined) {\n flags[key] = Array.isArray(existing)\n ? [...existing, value as string]\n : [existing as string, value as string];\n } else {\n flags[key] = value;\n }\n }\n return flags;\n}\n\nasync function main(): Promise<void> {\n if (command === \"serve\") {\n const flags = parseFlags(args.slice(1));\n const additionalSkills = flags[\"additional-skills\"];\n await startMcpServer({\n skills: typeof flags.skills === \"string\" ? flags.skills : undefined,\n additionalSkills: Array.isArray(additionalSkills)\n ? additionalSkills\n : typeof additionalSkills === \"string\"\n ? [additionalSkills]\n : undefined\n });\n } else if (command === \"configure\") {\n const agent = args[1] && !args[1].startsWith(\"--\") ? args[1] : undefined;\n const flags = parseFlags(args.slice(1));\n await configureMcp({\n agent,\n instructions: flags.instructions === true\n });\n } else {\n console.log(\"Usage: webiny-mcp <command>\");\n console.log(\"\");\n console.log(\"Commands:\");\n console.log(\" serve Start the MCP server (stdio transport)\");\n console.log(\" configure Configure MCP server for a specific agent\");\n console.log(\"\");\n console.log(\"Examples:\");\n console.log(\" npx webiny-mcp serve\");\n console.log(\" npx webiny-mcp serve --additional-skills=./my-skills\");\n console.log(\" npx webiny-mcp configure claude\");\n console.log(\" npx webiny-mcp configure cursor\");\n console.log(\" npx webiny-mcp configure --instructions\");\n process.exit(command ? 1 : 0);\n }\n}\n\nmain().catch(err => {\n console.error(err);\n process.exit(1);\n});\n"],"mappings":"AAAA,SAASA,cAAc;AACvB,SAASC,YAAY;AAErB,MAAMC,IAAI,GAAGC,OAAO,CAACC,IAAI,CAACC,KAAK,CAAC,CAAC,CAAC;AAClC,MAAMC,OAAO,GAAGJ,IAAI,CAAC,CAAC,CAAC;AAEvB,SAASK,UAAUA,CAACL,IAAc,EAA+C;EAC7E,MAAMM,KAAkD,GAAG,CAAC,CAAC;EAC7D,KAAK,MAAMC,GAAG,IAAIP,IAAI,EAAE;IACpB,IAAI,CAACO,GAAG,CAACC,UAAU,CAAC,IAAI,CAAC,EAAE;MACvB;IACJ;IACA,MAAM,CAACC,GAAG,EAAE,GAAGC,IAAI,CAAC,GAAGH,GAAG,CAACJ,KAAK,CAAC,CAAC,CAAC,CAACQ,KAAK,CAAC,GAAG,CAAC;IAC9C,MAAMC,KAAK,GAAGF,IAAI,CAACG,MAAM,GAAG,CAAC,GAAGH,IAAI,CAACI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI;;IAErD;IACA,MAAMC,QAAQ,GAAGT,KAAK,CAACG,GAAG,CAAC;IAC3B,IAAIM,QAAQ,KAAKC,SAAS,EAAE;MACxBV,KAAK,CAACG,GAAG,CAAC,GAAGQ,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,GAC9B,CAAC,GAAGA,QAAQ,EAAEH,KAAK,CAAW,GAC9B,CAACG,QAAQ,EAAYH,KAAK,CAAW;IAC/C,CAAC,MAAM;MACHN,KAAK,CAACG,GAAG,CAAC,GAAGG,KAAK;IACtB;EACJ;EACA,OAAON,KAAK;AAChB;AAEA,eAAea,IAAIA,CAAA,EAAkB;EACjC,IAAIf,OAAO,KAAK,OAAO,EAAE;IACrB,MAAME,KAAK,GAAGD,UAAU,CAACL,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,MAAMiB,gBAAgB,GAAGd,KAAK,CAAC,mBAAmB,CAAC;IACnD,MAAMR,cAAc,CAAC;MACjBuB,MAAM,EAAE,OAAOf,KAAK,CAACe,MAAM,KAAK,QAAQ,GAAGf,KAAK,CAACe,MAAM,GAAGL,SAAS;MACnEI,gBAAgB,EAAEH,KAAK,CAACC,OAAO,CAACE,gBAAgB,CAAC,GAC3CA,gBAAgB,GAChB,OAAOA,gBAAgB,KAAK,QAAQ,GAClC,CAACA,gBAAgB,CAAC,GAClBJ;IACZ,CAAC,CAAC;EACN,CAAC,MAAM,IAAIZ,OAAO,KAAK,WAAW,EAAE;IAChC,MAAMkB,KAAK,GAAGtB,IAAI,CAAC,CAAC,CAAC,IAAI,CAACA,IAAI,CAAC,CAAC,CAAC,CAACQ,UAAU,CAAC,IAAI,CAAC,GAAGR,IAAI,CAAC,CAAC,CAAC,GAAGgB,SAAS;IACxE,MAAMV,KAAK,GAAGD,UAAU,CAACL,IAAI,CAACG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvC,MAAMJ,YAAY,CAAC;MACfuB,KAAK;MACLC,YAAY,EAAEjB,KAAK,CAACiB,YAAY,KAAK;IACzC,CAAC,CAAC;EACN,CAAC,MAAM;IACHC,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC;IAC1CD,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;IACfD,OAAO,CAACC,GAAG,CAAC,WAAW,CAAC;IACxBD,OAAO,CAACC,GAAG,CAAC,uDAAuD,CAAC;IACpED,OAAO,CAACC,GAAG,CAAC,0DAA0D,CAAC;IACvED,OAAO,CAACC,GAAG,CAAC,EAAE,CAAC;IACfD,OAAO,CAACC,GAAG,CAAC,WAAW,CAAC;IACxBD,OAAO,CAACC,GAAG,CAAC,wBAAwB,CAAC;IACrCD,OAAO,CAACC,GAAG,CAAC,wDAAwD,CAAC;IACrED,OAAO,CAACC,GAAG,CAAC,mCAAmC,CAAC;IAChDD,OAAO,CAACC,GAAG,CAAC,mCAAmC,CAAC;IAChDD,OAAO,CAACC,GAAG,CAAC,2CAA2C,CAAC;IACxDxB,OAAO,CAACyB,IAAI,CAACtB,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;EACjC;AACJ;AAEAe,IAAI,CAAC,CAAC,CAACQ,KAAK,CAACC,GAAG,IAAI;EAChBJ,OAAO,CAACK,KAAK,CAACD,GAAG,CAAC;EAClB3B,OAAO,CAACyB,IAAI,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC","ignoreList":[]}
|
package/index.d.ts
CHANGED
|
@@ -1 +1,6 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export type { IUi } from "./ui.js";
|
|
2
|
+
export { ConsoleUi } from "./ui.js";
|
|
3
|
+
export { startMcpServer } from "./cli/McpServer.js";
|
|
4
|
+
export type { IMcpServerParams } from "./cli/McpServer.js";
|
|
5
|
+
export { configureMcp } from "./cli/ConfigureMcp.js";
|
|
6
|
+
export type { IConfigureMcpParams } from "./cli/ConfigureMcp.js";
|
package/index.js
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
// Ui interface and console implementation
|
|
2
|
+
|
|
3
|
+
export { ConsoleUi } from "./ui.js";
|
|
4
|
+
|
|
5
|
+
// Core functions
|
|
6
|
+
export { startMcpServer } from "./cli/McpServer.js";
|
|
7
|
+
export { configureMcp } from "./cli/ConfigureMcp.js";
|
|
2
8
|
|
|
3
9
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["ConsoleUi","startMcpServer","configureMcp"],"sources":["index.ts"],"sourcesContent":["// Ui interface and console implementation\nexport type { IUi } from \"./ui.js\";\nexport { ConsoleUi } from \"./ui.js\";\n\n// Core functions\nexport { startMcpServer } from \"./cli/McpServer.js\";\nexport type { IMcpServerParams } from \"./cli/McpServer.js\";\nexport { configureMcp } from \"./cli/ConfigureMcp.js\";\nexport type { IConfigureMcpParams } from \"./cli/ConfigureMcp.js\";\n"],"mappings":"AAAA;;AAEA,SAASA,SAAS;;AAElB;AACA,SAASC,cAAc;AAEvB,SAASC,YAAY","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/mcp",
|
|
3
|
-
"version": "6.0.0",
|
|
3
|
+
"version": "6.1.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"webiny-mcp": "./bin.js"
|
|
8
|
+
},
|
|
6
9
|
"repository": {
|
|
7
10
|
"type": "git",
|
|
8
11
|
"url": "https://github.com/webiny/webiny-js.git"
|
|
@@ -15,35 +18,20 @@
|
|
|
15
18
|
"directory": "dist"
|
|
16
19
|
},
|
|
17
20
|
"dependencies": {
|
|
18
|
-
"@modelcontextprotocol/sdk": "1.
|
|
19
|
-
"@webiny/cli-core": "6.0.0",
|
|
21
|
+
"@modelcontextprotocol/sdk": "1.28.0",
|
|
20
22
|
"front-matter": "4.0.2",
|
|
21
|
-
"
|
|
22
|
-
"zod": "3.25.76"
|
|
23
|
+
"zod": "4.3.6"
|
|
23
24
|
},
|
|
24
25
|
"devDependencies": {
|
|
25
26
|
"@types/lodash": "4.17.24",
|
|
26
27
|
"@types/ncp": "2.0.8",
|
|
27
|
-
"@webiny/build-tools": "6.0.0",
|
|
28
|
+
"@webiny/build-tools": "6.1.0-beta.0",
|
|
29
|
+
"execa": "5.1.1",
|
|
30
|
+
"tsx": "4.21.0",
|
|
28
31
|
"typescript": "5.9.3"
|
|
29
32
|
},
|
|
30
33
|
"scripts": {
|
|
31
|
-
"prepublishOnly": "
|
|
32
|
-
},
|
|
33
|
-
"adio": {
|
|
34
|
-
"ignoreDirs": [
|
|
35
|
-
"_templates"
|
|
36
|
-
],
|
|
37
|
-
"ignore": {
|
|
38
|
-
"src": [
|
|
39
|
-
"listr2",
|
|
40
|
-
"cloudfront"
|
|
41
|
-
],
|
|
42
|
-
"dependencies": [
|
|
43
|
-
"@pulumi/pulumi",
|
|
44
|
-
"@pulumi/aws"
|
|
45
|
-
]
|
|
46
|
-
}
|
|
34
|
+
"prepublishOnly": "bash ./prepublishOnly.sh"
|
|
47
35
|
},
|
|
48
|
-
"gitHead": "
|
|
36
|
+
"gitHead": "a3bd3695c66c79238e380d7360d9731b5fcf9c87"
|
|
49
37
|
}
|