@lyupro/skillforge-mcp 1.1.1 → 1.3.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/.claude-plugin/marketplace.json +36 -0
- package/.claude-plugin/plugin.json +28 -0
- package/CHANGELOG.md +43 -0
- package/README.md +94 -12
- package/dist/cli/dispatcher.d.ts.map +1 -1
- package/dist/cli/dispatcher.js +24 -2
- package/dist/cli/dispatcher.js.map +1 -1
- package/dist/cli/folders-format.d.ts +10 -0
- package/dist/cli/folders-format.d.ts.map +1 -0
- package/dist/cli/folders-format.js +41 -0
- package/dist/cli/folders-format.js.map +1 -0
- package/dist/cli/folders-handlers.d.ts +16 -0
- package/dist/cli/folders-handlers.d.ts.map +1 -0
- package/dist/cli/folders-handlers.js +195 -0
- package/dist/cli/folders-handlers.js.map +1 -0
- package/dist/cli/folders-shared.d.ts +29 -0
- package/dist/cli/folders-shared.d.ts.map +1 -0
- package/dist/cli/folders-shared.js +82 -0
- package/dist/cli/folders-shared.js.map +1 -0
- package/dist/cli/folders.d.ts +41 -0
- package/dist/cli/folders.d.ts.map +1 -0
- package/dist/cli/folders.js +100 -0
- package/dist/cli/folders.js.map +1 -0
- package/dist/cli/install.d.ts +2 -0
- package/dist/cli/install.d.ts.map +1 -1
- package/dist/cli/install.js +47 -9
- package/dist/cli/install.js.map +1 -1
- package/dist/cli/tools.d.ts +49 -0
- package/dist/cli/tools.d.ts.map +1 -0
- package/dist/cli/tools.js +177 -0
- package/dist/cli/tools.js.map +1 -0
- package/dist/config/config-schema.d.ts +8 -0
- package/dist/config/config-schema.d.ts.map +1 -1
- package/dist/config/config-schema.js +6 -0
- package/dist/config/config-schema.js.map +1 -1
- package/dist/detect/skill-source-conflict.d.ts +47 -0
- package/dist/detect/skill-source-conflict.d.ts.map +1 -0
- package/dist/detect/skill-source-conflict.js +99 -0
- package/dist/detect/skill-source-conflict.js.map +1 -0
- package/dist/installers/cursor-installer.d.ts +6 -7
- package/dist/installers/cursor-installer.d.ts.map +1 -1
- package/dist/installers/cursor-installer.js +15 -20
- package/dist/installers/cursor-installer.js.map +1 -1
- package/dist/installers/paths.d.ts +28 -6
- package/dist/installers/paths.d.ts.map +1 -1
- package/dist/installers/paths.js +72 -20
- package/dist/installers/paths.js.map +1 -1
- package/dist/installers/registry.d.ts +8 -2
- package/dist/installers/registry.d.ts.map +1 -1
- package/dist/installers/registry.js +14 -7
- package/dist/installers/registry.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +3 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/configure.d.ts +8 -0
- package/dist/tools/configure.d.ts.map +1 -1
- package/dist/tools/configure.js +17 -1
- package/dist/tools/configure.js.map +1 -1
- package/dist/tools/list.d.ts +2 -0
- package/dist/tools/list.d.ts.map +1 -1
- package/dist/tools/list.js +12 -0
- package/dist/tools/list.js.map +1 -1
- package/manifest.json +5 -4
- package/package.json +3 -2
package/dist/installers/paths.js
CHANGED
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Config path helpers for host tools.
|
|
3
3
|
*
|
|
4
4
|
* Per repo convention, all SkillForge config paths use `os.homedir()`
|
|
5
|
-
* exclusively — no platform branching.
|
|
6
|
-
*
|
|
7
|
-
* control, so the platform-specific dispatch here is rubric-exempt.
|
|
5
|
+
* exclusively — no platform branching. Every host (Claude Code, Codex CLI,
|
|
6
|
+
* Cursor) stores its MCP config in a homedir-rooted file uniform across OSes.
|
|
8
7
|
*/
|
|
9
8
|
import { join, resolve } from 'node:path';
|
|
10
|
-
import { homedir
|
|
9
|
+
import { homedir } from 'node:os';
|
|
11
10
|
import { fileURLToPath } from 'node:url';
|
|
11
|
+
import { statSync } from 'node:fs';
|
|
12
12
|
export function claudeConfigPath() {
|
|
13
13
|
return join(homedir(), '.claude.json');
|
|
14
14
|
}
|
|
15
15
|
export function codexConfigPath() {
|
|
16
16
|
return join(homedir(), '.codex', 'config.toml');
|
|
17
17
|
}
|
|
18
|
-
// Cursor
|
|
19
|
-
//
|
|
20
|
-
//
|
|
21
|
-
//
|
|
22
|
-
export function
|
|
23
|
-
|
|
24
|
-
if (os === 'win32') {
|
|
25
|
-
const appData = process.env.APPDATA ?? join(homedir(), 'AppData', 'Roaming');
|
|
26
|
-
return join(appData, 'Cursor', 'User', 'settings.json');
|
|
27
|
-
}
|
|
28
|
-
if (os === 'darwin') {
|
|
29
|
-
return join(homedir(), 'Library', 'Application Support', 'Cursor', 'User', 'settings.json');
|
|
30
|
-
}
|
|
31
|
-
return join(homedir(), '.config', 'Cursor', 'User', 'settings.json');
|
|
18
|
+
// Cursor reads its global MCP server registry from ~/.cursor/mcp.json on
|
|
19
|
+
// every OS — the same top-level `mcpServers` shape as ~/.claude.json. This
|
|
20
|
+
// is distinct from Cursor's VS Code-style `settings.json`, which Cursor
|
|
21
|
+
// does NOT read MCP servers from.
|
|
22
|
+
export function cursorConfigPath() {
|
|
23
|
+
return join(homedir(), '.cursor', 'mcp.json');
|
|
32
24
|
}
|
|
33
25
|
// Fallback `--entry local` target when --binary-path is not supplied.
|
|
34
26
|
// Resolves to <package root>/dist/server.js via import.meta.url so the
|
|
@@ -43,8 +35,68 @@ export function defaultPaths() {
|
|
|
43
35
|
return {
|
|
44
36
|
claudeConfigPath: claudeConfigPath(),
|
|
45
37
|
codexConfigPath: codexConfigPath(),
|
|
46
|
-
|
|
38
|
+
cursorConfigPath: cursorConfigPath(),
|
|
47
39
|
defaultBinaryPath: defaultBinaryPath(),
|
|
48
40
|
};
|
|
49
41
|
}
|
|
42
|
+
// --- Project-scoped config paths -------------------------------------------
|
|
43
|
+
//
|
|
44
|
+
// `--scope project` targets a config file rooted at the current working
|
|
45
|
+
// directory instead of the home directory. The internal file shapes are
|
|
46
|
+
// identical to the global counterparts, so the same installer + atomic-write
|
|
47
|
+
// + merge logic applies unchanged — only the resolved path differs.
|
|
48
|
+
// Claude Code reads project-local MCP servers from `.mcp.json` at the repo
|
|
49
|
+
// root, with the same top-level `mcpServers` map as `~/.claude.json`.
|
|
50
|
+
export function claudeProjectConfigPath(projectRoot) {
|
|
51
|
+
return join(projectRoot, '.mcp.json');
|
|
52
|
+
}
|
|
53
|
+
// Codex CLI reads project-local config from `.codex/config.toml`, same
|
|
54
|
+
// `[mcp_servers.<name>]` table shape as `~/.codex/config.toml`.
|
|
55
|
+
export function codexProjectConfigPath(projectRoot) {
|
|
56
|
+
return join(projectRoot, '.codex', 'config.toml');
|
|
57
|
+
}
|
|
58
|
+
// Cursor reads project-local MCP servers from `.cursor/mcp.json`, the same
|
|
59
|
+
// top-level `mcpServers` JSON shape as the global `~/.cursor/mcp.json`, so
|
|
60
|
+
// the existing merge logic is reused verbatim.
|
|
61
|
+
export function cursorProjectConfigPath(projectRoot) {
|
|
62
|
+
return join(projectRoot, '.cursor', 'mcp.json');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate that `projectRoot` is a usable directory for `--scope project`.
|
|
66
|
+
* Throws a clear error otherwise (caller maps this to a non-zero exit).
|
|
67
|
+
*/
|
|
68
|
+
export function assertProjectRoot(projectRoot) {
|
|
69
|
+
let stat;
|
|
70
|
+
try {
|
|
71
|
+
stat = statSync(projectRoot);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
throw new Error(`--scope project: cannot resolve a project root at "${projectRoot}" (path does not exist)`);
|
|
75
|
+
}
|
|
76
|
+
if (!stat.isDirectory()) {
|
|
77
|
+
throw new Error(`--scope project: project root "${projectRoot}" is not a directory`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Resolve the config path for a host under the given scope.
|
|
82
|
+
*
|
|
83
|
+
* - `global` → the host's home-directory config (historical default).
|
|
84
|
+
* - `project` → the host's repo-local config rooted at `projectRoot`
|
|
85
|
+
* (defaults to `process.cwd()`). Validates the root first.
|
|
86
|
+
*/
|
|
87
|
+
export function resolveConfigPath(host, scope, projectRoot = process.cwd()) {
|
|
88
|
+
if (scope === 'global') {
|
|
89
|
+
if (host === 'claude')
|
|
90
|
+
return claudeConfigPath();
|
|
91
|
+
if (host === 'codex')
|
|
92
|
+
return codexConfigPath();
|
|
93
|
+
return cursorConfigPath();
|
|
94
|
+
}
|
|
95
|
+
assertProjectRoot(projectRoot);
|
|
96
|
+
if (host === 'claude')
|
|
97
|
+
return claudeProjectConfigPath(projectRoot);
|
|
98
|
+
if (host === 'codex')
|
|
99
|
+
return codexProjectConfigPath(projectRoot);
|
|
100
|
+
return cursorProjectConfigPath(projectRoot);
|
|
101
|
+
}
|
|
50
102
|
//# sourceMappingURL=paths.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/installers/paths.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/installers/paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,13 @@
|
|
|
2
2
|
* Installer registry — stable enumeration of the three host installers
|
|
3
3
|
* consumed by the `--all` dispatcher and by --claude / --codex / --cursor.
|
|
4
4
|
*/
|
|
5
|
+
import { type HostName, type Scope } from './paths.js';
|
|
5
6
|
import type { Installer } from './types.js';
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Build a single installer for `host`, with its config path resolved for the
|
|
9
|
+
* given scope. The resolved path is threaded into the existing `configPath`
|
|
10
|
+
* constructor override — installer merge / atomic-write logic is unchanged.
|
|
11
|
+
*/
|
|
12
|
+
export declare function getInstallerByName(name: HostName, scope?: Scope, projectRoot?: string): Installer;
|
|
13
|
+
export declare function getAllInstallers(scope?: Scope, projectRoot?: string): Installer[];
|
|
8
14
|
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/installers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/installers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAqB,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,KAAK,GAAE,KAAgB,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,SAAS,CAKX;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,GAAE,KAAgB,EACvB,WAAW,CAAC,EAAE,MAAM,GACnB,SAAS,EAAE,CAIb"}
|
|
@@ -5,14 +5,21 @@
|
|
|
5
5
|
import { ClaudeInstaller } from './claude-installer.js';
|
|
6
6
|
import { CodexInstaller } from './codex-installer.js';
|
|
7
7
|
import { CursorInstaller } from './cursor-installer.js';
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
import { resolveConfigPath } from './paths.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build a single installer for `host`, with its config path resolved for the
|
|
11
|
+
* given scope. The resolved path is threaded into the existing `configPath`
|
|
12
|
+
* constructor override — installer merge / atomic-write logic is unchanged.
|
|
13
|
+
*/
|
|
14
|
+
export function getInstallerByName(name, scope = 'global', projectRoot) {
|
|
15
|
+
const configPath = resolveConfigPath(name, scope, projectRoot);
|
|
12
16
|
if (name === 'claude')
|
|
13
|
-
return new ClaudeInstaller();
|
|
17
|
+
return new ClaudeInstaller({ configPath });
|
|
14
18
|
if (name === 'codex')
|
|
15
|
-
return new CodexInstaller();
|
|
16
|
-
return new CursorInstaller();
|
|
19
|
+
return new CodexInstaller({ configPath });
|
|
20
|
+
return new CursorInstaller({ configPath });
|
|
21
|
+
}
|
|
22
|
+
export function getAllInstallers(scope = 'global', projectRoot) {
|
|
23
|
+
return ['claude', 'codex', 'cursor'].map((name) => getInstallerByName(name, scope, projectRoot));
|
|
17
24
|
}
|
|
18
25
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/installers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/installers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAA6B,MAAM,YAAY,CAAC;AAG1E;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,IAAc,EACd,QAAe,QAAQ,EACvB,WAAoB;IAEpB,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;IAC/D,IAAI,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAClE,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,IAAI,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAChE,OAAO,IAAI,eAAe,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,QAAe,QAAQ,EACvB,WAAoB;IAEpB,OAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC3D,kBAAkB,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,CAC7C,CAAC;AACJ,CAAC"}
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAmBpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAcnD,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAmGvD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,CA2DrD"}
|
package/dist/server.js
CHANGED
|
@@ -24,7 +24,9 @@ export function buildServer(deps) {
|
|
|
24
24
|
const server = new McpServer({ name: 'skillforge-mcp', version: '0.1.0' });
|
|
25
25
|
server.registerTool('skills__list', {
|
|
26
26
|
title: 'List skills',
|
|
27
|
-
description: 'List available skills, optionally filtered by folder / search / source.'
|
|
27
|
+
description: 'List available skills, optionally filtered by folder / search / source / folderTag. ' +
|
|
28
|
+
'folderTag restricts results to skills whose folder has that tag in config.json folders[].tags. ' +
|
|
29
|
+
'Note: env-override folders (SKILLFORGE_FOLDERS) carry no tags — folderTag returns nothing for them.',
|
|
28
30
|
inputSchema: listInputSchema,
|
|
29
31
|
}, async (args) => {
|
|
30
32
|
try {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EACL,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,EACL,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,eAAe,EACf,YAAY,GACb,MAAM,kBAAkB,CAAC;AAE1B,MAAM,UAAU,WAAW,CAAC,IAAgB;IAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAE3E,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,KAAK,EAAE,aAAa;QACpB,WAAW,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { ServerDeps } from '../server-deps.js';
|
|
|
3
3
|
export declare const configureInputSchema: {
|
|
4
4
|
readonly action: z.ZodEnum<["add_folder", "remove_folder", "list_folders", "set_blacklist", "get_blacklist", "reset"]>;
|
|
5
5
|
readonly folder: z.ZodOptional<z.ZodString>;
|
|
6
|
+
readonly alias: z.ZodOptional<z.ZodString>;
|
|
6
7
|
readonly blacklist: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
7
8
|
};
|
|
8
9
|
export type ConfigureAction = 'add_folder' | 'remove_folder' | 'list_folders' | 'set_blacklist' | 'get_blacklist' | 'reset';
|
|
@@ -13,10 +14,17 @@ export interface ConfigureResult {
|
|
|
13
14
|
blacklist: string[];
|
|
14
15
|
/** Skills visible in the registry after the action took effect. */
|
|
15
16
|
totalSkills: number;
|
|
17
|
+
/**
|
|
18
|
+
* Set by `add_folder` only, when the added folder is also served by a host
|
|
19
|
+
* CLI's native plugin/extension system (skills would load twice). It is an
|
|
20
|
+
* informational hint — the folder is still registered. Absent otherwise.
|
|
21
|
+
*/
|
|
22
|
+
conflictHint?: string;
|
|
16
23
|
}
|
|
17
24
|
export declare function handleConfigure(deps: ServerDeps, args: {
|
|
18
25
|
action: ConfigureAction;
|
|
19
26
|
folder?: string;
|
|
27
|
+
alias?: string;
|
|
20
28
|
blacklist?: string[];
|
|
21
29
|
}): Promise<ConfigureResult>;
|
|
22
30
|
//# sourceMappingURL=configure.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/tools/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../src/tools/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAUpD,eAAO,MAAM,oBAAoB;;;;;CAYvB,CAAC;AAEX,MAAM,MAAM,eAAe,GACvB,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,eAAe,GACf,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,uDAAuD;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAmBD,wBAAsB,eAAe,CACnC,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GACvF,OAAO,CAAC,eAAe,CAAC,CAgH1B"}
|
package/dist/tools/configure.js
CHANGED
|
@@ -3,6 +3,7 @@ import { resolve } from 'node:path';
|
|
|
3
3
|
import { defaultConfig } from '../config/index.js';
|
|
4
4
|
import { loadResolvedConfig } from '../config.js';
|
|
5
5
|
import { ensureRegistryFresh } from './loader.js';
|
|
6
|
+
import { detectSkillSourceConflict, formatConflictHint, } from '../detect/skill-source-conflict.js';
|
|
6
7
|
export const configureInputSchema = {
|
|
7
8
|
action: z.enum([
|
|
8
9
|
'add_folder',
|
|
@@ -13,6 +14,7 @@ export const configureInputSchema = {
|
|
|
13
14
|
'reset',
|
|
14
15
|
]),
|
|
15
16
|
folder: z.string().optional(),
|
|
17
|
+
alias: z.string().optional(),
|
|
16
18
|
blacklist: z.array(z.string()).optional(),
|
|
17
19
|
};
|
|
18
20
|
/** Recompute resolved folders from env + persisted config, then splice deps.folders in place. */
|
|
@@ -62,15 +64,29 @@ export async function handleConfigure(deps, args) {
|
|
|
62
64
|
const persisted = await deps.configStore.load();
|
|
63
65
|
const alreadyPresent = persisted.folders.some((f) => resolve(f.path) === absPath);
|
|
64
66
|
if (!alreadyPresent) {
|
|
65
|
-
|
|
67
|
+
if (args.alias !== undefined && !/^[a-z0-9]+(-[a-z0-9]+)*$/.test(args.alias)) {
|
|
68
|
+
throw new Error(`configure: invalid alias "${args.alias}" — use kebab-case (e.g. my-folder)`);
|
|
69
|
+
}
|
|
70
|
+
if (args.alias !== undefined && persisted.folders.some((f) => f.alias === args.alias)) {
|
|
71
|
+
throw new Error(`configure: alias already in use: ${args.alias}`);
|
|
72
|
+
}
|
|
73
|
+
persisted.folders.push({
|
|
74
|
+
path: absPath,
|
|
75
|
+
priority: 100,
|
|
76
|
+
enabled: true,
|
|
77
|
+
tags: [],
|
|
78
|
+
...(args.alias !== undefined ? { alias: args.alias } : {}),
|
|
79
|
+
});
|
|
66
80
|
}
|
|
67
81
|
// Why: always save even on no-op — simpler than branching, atomic write is cheap.
|
|
68
82
|
await deps.configStore.save(persisted);
|
|
69
83
|
const finalPersisted = await reconcileFolders(deps);
|
|
84
|
+
const conflict = detectSkillSourceConflict(absPath);
|
|
70
85
|
return {
|
|
71
86
|
folders: [...deps.folders],
|
|
72
87
|
blacklist: finalPersisted.blacklist,
|
|
73
88
|
totalSkills: deps.registry.size,
|
|
89
|
+
...(conflict !== null ? { conflictHint: formatConflictHint(conflict) } : {}),
|
|
74
90
|
};
|
|
75
91
|
}
|
|
76
92
|
if (action === 'remove_folder') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/tools/configure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"configure.js","sourceRoot":"","sources":["../../src/tools/configure.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/list.d.ts
CHANGED
|
@@ -5,11 +5,13 @@ export declare const listInputSchema: {
|
|
|
5
5
|
readonly folder: z.ZodOptional<z.ZodString>;
|
|
6
6
|
readonly search: z.ZodOptional<z.ZodString>;
|
|
7
7
|
readonly source: z.ZodOptional<z.ZodEnum<["claude", "codex", "persona", "custom"]>>;
|
|
8
|
+
readonly folderTag: z.ZodOptional<z.ZodString>;
|
|
8
9
|
};
|
|
9
10
|
export declare function handleList(deps: ServerDeps, args: {
|
|
10
11
|
folder?: string;
|
|
11
12
|
search?: string;
|
|
12
13
|
source?: string;
|
|
14
|
+
folderTag?: string;
|
|
13
15
|
}): Promise<{
|
|
14
16
|
skills: SkillSummary[];
|
|
15
17
|
}>;
|
package/dist/tools/list.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGrD,eAAO,MAAM,eAAe;;;;;CAKlB,CAAC;AAEX,wBAAsB,UAAU,CAC9B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9E,OAAO,CAAC;IAAE,MAAM,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC,CAqCrC"}
|
package/dist/tools/list.js
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
2
3
|
import { ensureRegistryFresh } from './loader.js';
|
|
3
4
|
export const listInputSchema = {
|
|
4
5
|
folder: z.string().optional(),
|
|
5
6
|
search: z.string().optional(),
|
|
6
7
|
source: z.enum(['claude', 'codex', 'persona', 'custom']).optional(),
|
|
8
|
+
folderTag: z.string().optional(),
|
|
7
9
|
};
|
|
8
10
|
export async function handleList(deps, args) {
|
|
9
11
|
await ensureRegistryFresh(deps);
|
|
12
|
+
// Build the set of folder paths that match the requested tag (when set).
|
|
13
|
+
let taggedFolderPaths = null;
|
|
14
|
+
if (args.folderTag !== undefined) {
|
|
15
|
+
const persisted = await deps.configStore.load();
|
|
16
|
+
taggedFolderPaths = new Set(persisted.folders
|
|
17
|
+
.filter((f) => f.tags.includes(args.folderTag))
|
|
18
|
+
.map((f) => resolve(f.path)));
|
|
19
|
+
}
|
|
10
20
|
const all = deps.registry.getAll();
|
|
11
21
|
const filtered = all.filter((meta) => {
|
|
12
22
|
if (args.folder !== undefined && meta.folder !== args.folder)
|
|
@@ -18,6 +28,8 @@ export async function handleList(deps, args) {
|
|
|
18
28
|
if (!haystack.includes(args.search.toLowerCase()))
|
|
19
29
|
return false;
|
|
20
30
|
}
|
|
31
|
+
if (taggedFolderPaths !== null && !taggedFolderPaths.has(resolve(meta.folder)))
|
|
32
|
+
return false;
|
|
21
33
|
return true;
|
|
22
34
|
});
|
|
23
35
|
const skills = filtered.map((meta) => ({
|
package/dist/tools/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/tools/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE;IACnE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACxB,CAAC;AAEX,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAgB,EAChB,IAA+E;IAE/E,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAEhC,yEAAyE;IACzE,IAAI,iBAAiB,GAAuB,IAAI,CAAC;IACjD,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACjC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAChD,iBAAiB,GAAG,IAAI,GAAG,CACzB,SAAS,CAAC,OAAO;aACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAU,CAAC,CAAC;aAC/C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAC/B,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEnC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACnC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAC3E,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC;YACxE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;gBAAE,OAAO,KAAK,CAAC;QAClE,CAAC;QACD,IAAI,iBAAiB,KAAK,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QAC7F,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAmB,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrD,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,MAAM,EAAE,IAAI,CAAC,MAAM;KACpB,CAAC,CAAC,CAAC;IAEJ,OAAO,EAAE,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
package/manifest.json
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
"$schema": "https://modelcontextprotocol.io/schemas/manifest.json",
|
|
3
3
|
"name": "@lyupro/skillforge-mcp",
|
|
4
4
|
"displayName": "SkillForge MCP",
|
|
5
|
-
"version": "1.
|
|
5
|
+
"version": "1.3.0",
|
|
6
6
|
"description": "Universal Skills MCP server — load Markdown skills from arbitrary folders, lazy-by-design, cross-tool (Claude Code / Codex CLI / any MCP client).",
|
|
7
7
|
"author": {
|
|
8
|
-
"name": "
|
|
8
|
+
"name": "Lyu Pro",
|
|
9
|
+
"email": "lyupro.dev@gmail.com",
|
|
9
10
|
"url": "https://lyupro.com"
|
|
10
11
|
},
|
|
11
12
|
"license": "MIT",
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
"tools": [
|
|
41
42
|
{
|
|
42
43
|
"name": "skills__list",
|
|
43
|
-
"description": "Enumerate available skills (metadata only). Filters: folder, search, source."
|
|
44
|
+
"description": "Enumerate available skills (metadata only). Filters: folder, search, source, folderTag (keeps skills under folders carrying that tag)."
|
|
44
45
|
},
|
|
45
46
|
{
|
|
46
47
|
"name": "skills__get",
|
|
@@ -52,7 +53,7 @@
|
|
|
52
53
|
},
|
|
53
54
|
{
|
|
54
55
|
"name": "skills__configure",
|
|
55
|
-
"description": "Manage configured skill folders, blacklist, and reset to defaults. Actions: add_folder, remove_folder, list_folders, set_blacklist, get_blacklist, reset. Persists to the platform config path."
|
|
56
|
+
"description": "Manage configured skill folders, blacklist, and reset to defaults. Actions: add_folder (optionally with a kebab-case alias), remove_folder, list_folders, set_blacklist, get_blacklist, reset. Persists to the platform config path."
|
|
56
57
|
},
|
|
57
58
|
{
|
|
58
59
|
"name": "skills__reload",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lyupro/skillforge-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Universal Skills MCP Server — load Markdown skills from arbitrary folders, lazy-by-design, cross-tool (Claude Code / Codex CLI / any MCP client).",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"prompt-engineering"
|
|
13
13
|
],
|
|
14
14
|
"license": "MIT",
|
|
15
|
-
"author": "lyupro (https://lyupro.com)",
|
|
15
|
+
"author": "Lyu Pro <lyupro.dev@gmail.com> (https://lyupro.com)",
|
|
16
16
|
"repository": {
|
|
17
17
|
"type": "git",
|
|
18
18
|
"url": "git+https://github.com/lyupro/skillforge-mcp.git"
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
35
|
"dist",
|
|
36
|
+
".claude-plugin",
|
|
36
37
|
"manifest.json",
|
|
37
38
|
"README.md",
|
|
38
39
|
"LICENSE",
|