skillpkg-mcp-server 0.1.0 → 0.2.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/tools/github-search.d.ts +39 -0
- package/dist/tools/github-search.d.ts.map +1 -0
- package/dist/tools/github-search.js +197 -0
- package/dist/tools/github-search.js.map +1 -0
- package/dist/tools/install-skill.d.ts +2 -1
- package/dist/tools/install-skill.d.ts.map +1 -1
- package/dist/tools/install-skill.js +63 -31
- package/dist/tools/install-skill.js.map +1 -1
- package/dist/tools/recommend-skill.d.ts +1 -0
- package/dist/tools/recommend-skill.d.ts.map +1 -1
- package/dist/tools/recommend-skill.js +41 -31
- package/dist/tools/recommend-skill.js.map +1 -1
- package/dist/tools/search-skills.d.ts +2 -1
- package/dist/tools/search-skills.d.ts.map +1 -1
- package/dist/tools/search-skills.js +29 -27
- package/dist/tools/search-skills.js.map +1 -1
- package/dist/types.d.ts +3 -3
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub-based skill search
|
|
3
|
+
*
|
|
4
|
+
* Uses GitHub API to find AI agent skills in SKILL.md format.
|
|
5
|
+
* SKILL.md is the industry standard used by Claude Code and OpenAI Codex.
|
|
6
|
+
*/
|
|
7
|
+
export interface GitHubSkillResult {
|
|
8
|
+
name: string;
|
|
9
|
+
fullName: string;
|
|
10
|
+
description: string;
|
|
11
|
+
url: string;
|
|
12
|
+
stars: number;
|
|
13
|
+
language: string | null;
|
|
14
|
+
topics: string[];
|
|
15
|
+
updatedAt: string;
|
|
16
|
+
hasSkill: boolean;
|
|
17
|
+
skillFile?: string;
|
|
18
|
+
installSource?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface GitHubSearchOptions {
|
|
21
|
+
limit?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Search for AI agent skills on GitHub
|
|
25
|
+
*/
|
|
26
|
+
export declare function searchGitHubSkills(query: string, options?: GitHubSearchOptions): Promise<GitHubSkillResult[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Get skill info from a specific GitHub repository
|
|
29
|
+
*/
|
|
30
|
+
export declare function getGitHubSkillInfo(repoFullName: string): Promise<GitHubSkillResult | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Fetch and parse SKILL.md content from a repository
|
|
33
|
+
*/
|
|
34
|
+
export declare function fetchSkillContent(repoFullName: string, skillFile: string): Promise<{
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
instructions: string;
|
|
38
|
+
} | null>;
|
|
39
|
+
//# sourceMappingURL=github-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-search.d.ts","sourceRoot":"","sources":["../../src/tools/github-search.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAElB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuFD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAkE9B;AAoBD;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAmCnC;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA0B7E"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub-based skill search
|
|
3
|
+
*
|
|
4
|
+
* Uses GitHub API to find AI agent skills in SKILL.md format.
|
|
5
|
+
* SKILL.md is the industry standard used by Claude Code and OpenAI Codex.
|
|
6
|
+
*/
|
|
7
|
+
import { parse as parseYaml } from 'yaml';
|
|
8
|
+
/**
|
|
9
|
+
* Parse markdown frontmatter (YAML between --- markers)
|
|
10
|
+
*/
|
|
11
|
+
function parseFrontmatter(content) {
|
|
12
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
13
|
+
if (!match) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const frontmatter = parseYaml(match[1]);
|
|
18
|
+
return { frontmatter, body: match[2] };
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a repository has a SKILL.md file
|
|
26
|
+
*/
|
|
27
|
+
async function detectSkillMd(repoFullName) {
|
|
28
|
+
// Check common SKILL.md locations
|
|
29
|
+
const paths = [
|
|
30
|
+
'SKILL.md',
|
|
31
|
+
'skill.md',
|
|
32
|
+
'skills/SKILL.md',
|
|
33
|
+
'skills/skill.md',
|
|
34
|
+
'.claude/skills/skill.md',
|
|
35
|
+
];
|
|
36
|
+
for (const path of paths) {
|
|
37
|
+
const rawUrl = `https://raw.githubusercontent.com/${repoFullName}/HEAD/${path}`;
|
|
38
|
+
try {
|
|
39
|
+
const response = await fetch(rawUrl, {
|
|
40
|
+
headers: { 'User-Agent': 'skillpkg-mcp-server' },
|
|
41
|
+
});
|
|
42
|
+
if (!response.ok)
|
|
43
|
+
continue;
|
|
44
|
+
const content = await response.text();
|
|
45
|
+
const parsed = parseFrontmatter(content);
|
|
46
|
+
// Valid SKILL.md has frontmatter with name
|
|
47
|
+
if (parsed && parsed.frontmatter.name) {
|
|
48
|
+
return { hasSkill: true, skillFile: path };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { hasSkill: false };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Search for AI agent skills on GitHub
|
|
59
|
+
*/
|
|
60
|
+
export async function searchGitHubSkills(query, options = {}) {
|
|
61
|
+
const limit = options.limit || 20;
|
|
62
|
+
// Build search query
|
|
63
|
+
const searchQuery = buildSearchQuery(query);
|
|
64
|
+
const url = `https://api.github.com/search/repositories?q=${encodeURIComponent(searchQuery)}&sort=stars&order=desc&per_page=${limit}`;
|
|
65
|
+
try {
|
|
66
|
+
const response = await fetch(url, {
|
|
67
|
+
headers: {
|
|
68
|
+
Accept: 'application/vnd.github.v3+json',
|
|
69
|
+
'User-Agent': 'skillpkg-mcp-server',
|
|
70
|
+
...(process.env.GITHUB_TOKEN && {
|
|
71
|
+
Authorization: `token ${process.env.GITHUB_TOKEN}`,
|
|
72
|
+
}),
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
if (!response.ok) {
|
|
76
|
+
if (response.status === 403) {
|
|
77
|
+
throw new Error('GitHub API rate limit exceeded. Set GITHUB_TOKEN env var for higher limits.');
|
|
78
|
+
}
|
|
79
|
+
if (response.status === 422) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
throw new Error(`GitHub API error: ${response.status} ${response.statusText}`);
|
|
83
|
+
}
|
|
84
|
+
const data = (await response.json());
|
|
85
|
+
const results = [];
|
|
86
|
+
for (const item of data.items) {
|
|
87
|
+
const detection = await detectSkillMd(item.full_name);
|
|
88
|
+
results.push({
|
|
89
|
+
name: item.name,
|
|
90
|
+
fullName: item.full_name,
|
|
91
|
+
description: item.description || '',
|
|
92
|
+
url: item.html_url,
|
|
93
|
+
stars: item.stargazers_count,
|
|
94
|
+
language: item.language,
|
|
95
|
+
topics: item.topics || [],
|
|
96
|
+
updatedAt: item.updated_at,
|
|
97
|
+
hasSkill: detection.hasSkill,
|
|
98
|
+
skillFile: detection.skillFile,
|
|
99
|
+
installSource: detection.hasSkill ? `github:${item.full_name}` : undefined,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
// Sort: skills with SKILL.md first, then by stars
|
|
103
|
+
results.sort((a, b) => {
|
|
104
|
+
if (a.hasSkill && !b.hasSkill)
|
|
105
|
+
return -1;
|
|
106
|
+
if (!a.hasSkill && b.hasSkill)
|
|
107
|
+
return 1;
|
|
108
|
+
return b.stars - a.stars;
|
|
109
|
+
});
|
|
110
|
+
return results;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
if (error instanceof Error) {
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
throw new Error(`GitHub search failed: ${String(error)}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Build an optimized search query for AI agent skills
|
|
121
|
+
*/
|
|
122
|
+
function buildSearchQuery(userQuery) {
|
|
123
|
+
const queryLower = userQuery.toLowerCase();
|
|
124
|
+
// If user already included skill-related terms, use as-is
|
|
125
|
+
const skillTerms = ['skill', 'agent', 'prompt', 'ai', 'llm', 'claude', 'gpt', 'mcp'];
|
|
126
|
+
const hasSkillTerm = skillTerms.some((term) => queryLower.includes(term));
|
|
127
|
+
if (hasSkillTerm) {
|
|
128
|
+
return userQuery;
|
|
129
|
+
}
|
|
130
|
+
// Add context for better AI skill results
|
|
131
|
+
return `${userQuery} skill OR agent OR prompt`;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get skill info from a specific GitHub repository
|
|
135
|
+
*/
|
|
136
|
+
export async function getGitHubSkillInfo(repoFullName) {
|
|
137
|
+
try {
|
|
138
|
+
const response = await fetch(`https://api.github.com/repos/${repoFullName}`, {
|
|
139
|
+
headers: {
|
|
140
|
+
Accept: 'application/vnd.github.v3+json',
|
|
141
|
+
'User-Agent': 'skillpkg-mcp-server',
|
|
142
|
+
...(process.env.GITHUB_TOKEN && {
|
|
143
|
+
Authorization: `token ${process.env.GITHUB_TOKEN}`,
|
|
144
|
+
}),
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
if (!response.ok) {
|
|
148
|
+
return null;
|
|
149
|
+
}
|
|
150
|
+
const item = (await response.json());
|
|
151
|
+
const detection = await detectSkillMd(item.full_name);
|
|
152
|
+
return {
|
|
153
|
+
name: item.name,
|
|
154
|
+
fullName: item.full_name,
|
|
155
|
+
description: item.description || '',
|
|
156
|
+
url: item.html_url,
|
|
157
|
+
stars: item.stargazers_count,
|
|
158
|
+
language: item.language,
|
|
159
|
+
topics: item.topics || [],
|
|
160
|
+
updatedAt: item.updated_at,
|
|
161
|
+
hasSkill: detection.hasSkill,
|
|
162
|
+
skillFile: detection.skillFile,
|
|
163
|
+
installSource: detection.hasSkill ? `github:${item.full_name}` : undefined,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Fetch and parse SKILL.md content from a repository
|
|
172
|
+
*/
|
|
173
|
+
export async function fetchSkillContent(repoFullName, skillFile) {
|
|
174
|
+
const rawUrl = `https://raw.githubusercontent.com/${repoFullName}/HEAD/${skillFile}`;
|
|
175
|
+
try {
|
|
176
|
+
const response = await fetch(rawUrl, {
|
|
177
|
+
headers: { 'User-Agent': 'skillpkg-mcp-server' },
|
|
178
|
+
});
|
|
179
|
+
if (!response.ok)
|
|
180
|
+
return null;
|
|
181
|
+
const content = await response.text();
|
|
182
|
+
const parsed = parseFrontmatter(content);
|
|
183
|
+
if (!parsed)
|
|
184
|
+
return null;
|
|
185
|
+
return {
|
|
186
|
+
name: parsed.frontmatter.name || '',
|
|
187
|
+
description: parsed.frontmatter.description ||
|
|
188
|
+
parsed.frontmatter.metadata?.['short-description'] ||
|
|
189
|
+
'',
|
|
190
|
+
instructions: parsed.body,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=github-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-search.js","sourceRoot":"","sources":["../../src/tools/github-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: install_skill
|
|
3
3
|
*
|
|
4
|
-
* Installs a skill from
|
|
4
|
+
* Installs a skill from GitHub, Gist, URL, or local path.
|
|
5
|
+
* Supports SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
5
6
|
*/
|
|
6
7
|
import type { ToolHandler } from '../types.js';
|
|
7
8
|
export declare function createInstallSkillHandler(): ToolHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiE,MAAM,aAAa,CAAC;AA+L9G,wBAAgB,yBAAyB,IAAI,WAAW,CAyHvD"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: install_skill
|
|
3
3
|
*
|
|
4
|
-
* Installs a skill from
|
|
4
|
+
* Installs a skill from GitHub, Gist, URL, or local path.
|
|
5
|
+
* Supports SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
5
6
|
*/
|
|
6
|
-
import { getStore,
|
|
7
|
+
import { getStore, successResult, errorResult, validateString, validateScope } from './utils.js';
|
|
7
8
|
import { InvalidSourceError } from '../types.js';
|
|
8
9
|
import { parse as parseSkillYaml } from 'skillpkg-core';
|
|
10
|
+
import { parse as parseYaml } from 'yaml';
|
|
9
11
|
/**
|
|
10
12
|
* Parse source string to determine source type
|
|
11
13
|
*/
|
|
@@ -29,11 +31,9 @@ function parseSource(source) {
|
|
|
29
31
|
if (source.startsWith('./') || source.startsWith('/') || source.startsWith('../')) {
|
|
30
32
|
return { type: 'local', value: source };
|
|
31
33
|
}
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
throw new InvalidSourceError(source);
|
|
34
|
+
// Simple skill names are no longer supported (no central registry)
|
|
35
|
+
// Suggest using github:owner/repo format instead
|
|
36
|
+
throw new InvalidSourceError(`Invalid source "${source}". Use one of: github:owner/repo, gist:id, https://url, or ./local/path`);
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
39
|
* Fetch skill content from URL
|
|
@@ -45,15 +45,62 @@ async function fetchSkillFromUrl(url) {
|
|
|
45
45
|
}
|
|
46
46
|
return response.text();
|
|
47
47
|
}
|
|
48
|
+
function parseSkillMdFrontmatter(content) {
|
|
49
|
+
const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?([\s\S]*)$/);
|
|
50
|
+
if (!match) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
const frontmatter = parseYaml(match[1]);
|
|
55
|
+
return { frontmatter, body: match[2] };
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
48
61
|
/**
|
|
49
|
-
* Fetch skill from GitHub repo (
|
|
62
|
+
* Fetch skill from GitHub repo (SKILL.md or skill.yaml)
|
|
50
63
|
*/
|
|
51
64
|
async function fetchSkillFromGitHub(repo) {
|
|
52
|
-
// Try
|
|
53
|
-
const
|
|
54
|
-
|
|
65
|
+
// Try SKILL.md first (industry standard), then fall back to skill.yaml
|
|
66
|
+
const skillMdPaths = [
|
|
67
|
+
'SKILL.md',
|
|
68
|
+
'skill.md',
|
|
69
|
+
'skills/SKILL.md',
|
|
70
|
+
'skills/skill.md',
|
|
71
|
+
'.claude/skills/skill.md',
|
|
72
|
+
];
|
|
73
|
+
const skillYamlPaths = ['skill.yaml', 'skill.yml', '.claude/skill.yaml'];
|
|
74
|
+
const branches = ['main', 'master', 'HEAD'];
|
|
75
|
+
// Try SKILL.md first
|
|
76
|
+
for (const branch of branches) {
|
|
77
|
+
for (const path of skillMdPaths) {
|
|
78
|
+
const url = `https://raw.githubusercontent.com/${repo}/${branch}/${path}`;
|
|
79
|
+
try {
|
|
80
|
+
const content = await fetchSkillFromUrl(url);
|
|
81
|
+
const parsed = parseSkillMdFrontmatter(content);
|
|
82
|
+
if (parsed && parsed.frontmatter.name) {
|
|
83
|
+
// Convert SKILL.md to skill.yaml format for compatibility
|
|
84
|
+
const skillYaml = {
|
|
85
|
+
schema: '1.0',
|
|
86
|
+
name: parsed.frontmatter.name,
|
|
87
|
+
version: parsed.frontmatter.version || '1.0.0',
|
|
88
|
+
description: parsed.frontmatter.description ||
|
|
89
|
+
parsed.frontmatter.metadata?.['short-description'] ||
|
|
90
|
+
'',
|
|
91
|
+
instructions: parsed.body,
|
|
92
|
+
};
|
|
93
|
+
return `schema: "1.0"\nname: ${skillYaml.name}\nversion: ${skillYaml.version}\ndescription: ${JSON.stringify(skillYaml.description)}\ninstructions: |\n${parsed.body.split('\n').map((l) => ' ' + l).join('\n')}`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
// Try next path/branch
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// Fall back to skill.yaml
|
|
55
102
|
for (const branch of branches) {
|
|
56
|
-
for (const path of
|
|
103
|
+
for (const path of skillYamlPaths) {
|
|
57
104
|
const url = `https://raw.githubusercontent.com/${repo}/${branch}/${path}`;
|
|
58
105
|
try {
|
|
59
106
|
const content = await fetchSkillFromUrl(url);
|
|
@@ -64,7 +111,7 @@ async function fetchSkillFromGitHub(repo) {
|
|
|
64
111
|
}
|
|
65
112
|
}
|
|
66
113
|
}
|
|
67
|
-
throw new Error(`Could not find skill.yaml in repository ${repo}`);
|
|
114
|
+
throw new Error(`Could not find SKILL.md or skill.yaml in repository ${repo}`);
|
|
68
115
|
}
|
|
69
116
|
/**
|
|
70
117
|
* Fetch skill from Gist
|
|
@@ -112,13 +159,12 @@ async function fetchSkillFromLocal(path) {
|
|
|
112
159
|
export function createInstallSkillHandler() {
|
|
113
160
|
return {
|
|
114
161
|
name: 'install_skill',
|
|
115
|
-
description: `Install a skill from various sources.
|
|
162
|
+
description: `Install a skill from various sources. Supports SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
116
163
|
|
|
117
164
|
Supported source formats:
|
|
118
|
-
• Registry: skill-name (e.g., "commit-helper")
|
|
119
165
|
• GitHub: github:user/repo or user/repo (e.g., "anthropics/claude-code-skills")
|
|
120
166
|
• Gist: gist:id (e.g., "gist:abc123")
|
|
121
|
-
• URL: https://... (direct link to skill.yaml)
|
|
167
|
+
• URL: https://... (direct link to SKILL.md or skill.yaml)
|
|
122
168
|
• Local: ./path or /absolute/path (local file or directory)`,
|
|
123
169
|
inputSchema: {
|
|
124
170
|
type: 'object',
|
|
@@ -146,20 +192,6 @@ Supported source formats:
|
|
|
146
192
|
// Fetch skill content based on source type
|
|
147
193
|
let skillContent;
|
|
148
194
|
switch (type) {
|
|
149
|
-
case 'registry': {
|
|
150
|
-
// Download from registry
|
|
151
|
-
const client = getRegistryClient();
|
|
152
|
-
const info = await client.getSkillInfo(value);
|
|
153
|
-
// For now, fetch the skill.yaml URL if available
|
|
154
|
-
// In future, download tarball and extract
|
|
155
|
-
if (info.repository) {
|
|
156
|
-
skillContent = await fetchSkillFromGitHub(info.repository.replace('https://github.com/', ''));
|
|
157
|
-
}
|
|
158
|
-
else {
|
|
159
|
-
throw new Error(`Registry skill "${value}" does not have a repository URL`);
|
|
160
|
-
}
|
|
161
|
-
break;
|
|
162
|
-
}
|
|
163
195
|
case 'github':
|
|
164
196
|
skillContent = await fetchSkillFromGitHub(value);
|
|
165
197
|
break;
|
|
@@ -204,7 +236,7 @@ Supported source formats:
|
|
|
204
236
|
}
|
|
205
237
|
// Add the skill
|
|
206
238
|
await store.addSkill(skill, {
|
|
207
|
-
source: type === 'local' ? 'local' :
|
|
239
|
+
source: type === 'local' ? 'local' : 'import',
|
|
208
240
|
sourceUrl: sourceStr,
|
|
209
241
|
});
|
|
210
242
|
const output = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"install-skill.js","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-skill.d.ts","sourceRoot":"","sources":["../../src/tools/recommend-skill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"recommend-skill.d.ts","sourceRoot":"","sources":["../../src/tools/recommend-skill.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,aAAa,CAAC;AAIrB,wBAAgB,2BAA2B,IAAI,WAAW,CAmKzD"}
|
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
* Tool: recommend_skill
|
|
3
3
|
*
|
|
4
4
|
* Recommends the best skill for a given use case.
|
|
5
|
+
* Searches GitHub for repositories with SKILL.md files.
|
|
5
6
|
*/
|
|
6
|
-
import {
|
|
7
|
+
import { successResult, errorResult, validateString, calculateRelevanceScore } from './utils.js';
|
|
8
|
+
import { searchGitHubSkills } from './github-search.js';
|
|
7
9
|
export function createRecommendSkillHandler() {
|
|
8
10
|
return {
|
|
9
11
|
name: 'recommend_skill',
|
|
@@ -29,28 +31,31 @@ export function createRecommendSkillHandler() {
|
|
|
29
31
|
try {
|
|
30
32
|
const query = validateString(input.query, 'query');
|
|
31
33
|
const criteria = input.criteria || 'auto';
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return successResult(`No skills found matching "${query}". Try a different search term or browse available skills with search_registry.`);
|
|
34
|
+
// Search GitHub for skills with SKILL.md
|
|
35
|
+
const githubResults = await searchGitHubSkills(query, { limit: 10 });
|
|
36
|
+
if (githubResults.length === 0) {
|
|
37
|
+
return successResult(`No skills found matching "${query}". Try a different search term or search GitHub manually for SKILL.md files.`);
|
|
37
38
|
}
|
|
38
|
-
const scoredSkills =
|
|
39
|
+
const scoredSkills = githubResults.map((skill) => {
|
|
39
40
|
let score = calculateRelevanceScore({
|
|
40
41
|
name: skill.name,
|
|
41
42
|
description: skill.description,
|
|
42
|
-
downloads: skill.
|
|
43
|
+
downloads: skill.stars, // Use stars as popularity metric
|
|
43
44
|
updatedAt: skill.updatedAt,
|
|
44
|
-
tags: skill.
|
|
45
|
+
tags: skill.topics,
|
|
45
46
|
}, query);
|
|
47
|
+
// Boost repos with SKILL.md
|
|
48
|
+
if (skill.hasSkill) {
|
|
49
|
+
score += 30;
|
|
50
|
+
}
|
|
46
51
|
// Adjust score based on criteria
|
|
47
52
|
switch (criteria) {
|
|
48
53
|
case 'popular':
|
|
49
|
-
score =
|
|
54
|
+
score = skill.stars / 100 + score * 0.3;
|
|
50
55
|
break;
|
|
51
56
|
case 'highest_rated':
|
|
52
|
-
//
|
|
53
|
-
score = Math.log10(
|
|
57
|
+
// Use stars as rating proxy
|
|
58
|
+
score = Math.log10(skill.stars + 1) * 10 + score * 0.3;
|
|
54
59
|
break;
|
|
55
60
|
case 'newest':
|
|
56
61
|
if (skill.updatedAt) {
|
|
@@ -66,57 +71,62 @@ export function createRecommendSkillHandler() {
|
|
|
66
71
|
// Get top recommendation
|
|
67
72
|
const topSkill = scoredSkills[0].skill;
|
|
68
73
|
const recommendation = {
|
|
69
|
-
id: topSkill.
|
|
74
|
+
id: topSkill.fullName,
|
|
70
75
|
name: topSkill.name,
|
|
71
76
|
description: topSkill.description,
|
|
72
|
-
version:
|
|
73
|
-
rating: 0,
|
|
74
|
-
downloads: topSkill.
|
|
75
|
-
updatedAt: topSkill.updatedAt
|
|
76
|
-
author: topSkill.
|
|
77
|
-
tags: topSkill.
|
|
77
|
+
version: '1.0.0', // GitHub doesn't have version info
|
|
78
|
+
rating: 0,
|
|
79
|
+
downloads: topSkill.stars,
|
|
80
|
+
updatedAt: topSkill.updatedAt,
|
|
81
|
+
author: topSkill.fullName.split('/')[0], // Extract owner from fullName
|
|
82
|
+
tags: topSkill.topics || [],
|
|
78
83
|
};
|
|
79
84
|
// Get alternatives (next 3)
|
|
80
85
|
const alternatives = scoredSkills.slice(1, 4).map((item) => ({
|
|
81
86
|
name: item.skill.name,
|
|
82
87
|
description: item.skill.description,
|
|
83
|
-
rating: 0,
|
|
88
|
+
rating: 0,
|
|
84
89
|
}));
|
|
85
90
|
// Generate reason based on criteria
|
|
86
91
|
let reason = `"${recommendation.name}" is recommended because `;
|
|
92
|
+
const hasSkillMd = topSkill.hasSkill ? ' It has a SKILL.md file with proper instructions.' : '';
|
|
87
93
|
switch (criteria) {
|
|
88
94
|
case 'popular':
|
|
89
|
-
reason += `it's the most popular
|
|
95
|
+
reason += `it's the most popular (⭐${recommendation.downloads}) that matches your needs.${hasSkillMd}`;
|
|
90
96
|
break;
|
|
91
97
|
case 'highest_rated':
|
|
92
|
-
reason += `it has the highest
|
|
98
|
+
reason += `it has the highest stars (⭐${recommendation.downloads}) among matching skills.${hasSkillMd}`;
|
|
93
99
|
break;
|
|
94
100
|
case 'newest':
|
|
95
|
-
reason += `it was recently updated and matches your requirements
|
|
101
|
+
reason += `it was recently updated and matches your requirements.${hasSkillMd}`;
|
|
96
102
|
break;
|
|
97
103
|
default:
|
|
98
|
-
reason += `it best matches "${query}" based on name, description,
|
|
104
|
+
reason += `it best matches "${query}" based on name, description, and popularity.${hasSkillMd}`;
|
|
99
105
|
}
|
|
106
|
+
// Determine install source
|
|
107
|
+
const installSource = topSkill.installSource || `github:${topSkill.fullName}`;
|
|
100
108
|
const output = {
|
|
101
109
|
recommendation,
|
|
102
110
|
reason,
|
|
103
111
|
alternatives,
|
|
104
|
-
installCommand: `install_skill source: "${
|
|
112
|
+
installCommand: `install_skill source: "${installSource}"`,
|
|
105
113
|
};
|
|
106
114
|
// Format output
|
|
107
115
|
let text = `## Recommended Skill\n\n`;
|
|
108
|
-
text += `**${recommendation.name}
|
|
116
|
+
text += `**${recommendation.name}**${topSkill.hasSkill ? ' ✓ SKILL.md' : ''}\n`;
|
|
109
117
|
text += `${recommendation.description}\n\n`;
|
|
110
|
-
text += `⭐ ${recommendation.
|
|
111
|
-
text += `
|
|
118
|
+
text += `⭐ ${recommendation.downloads} stars | 🔗 ${topSkill.url}\n`;
|
|
119
|
+
text += `Owner: ${recommendation.author}\n`;
|
|
112
120
|
if (recommendation.tags.length > 0) {
|
|
113
|
-
text += `
|
|
121
|
+
text += `Topics: ${recommendation.tags.join(', ')}\n`;
|
|
114
122
|
}
|
|
115
123
|
text += `\n**Why this skill?**\n${reason}\n`;
|
|
116
124
|
if (alternatives.length > 0) {
|
|
117
125
|
text += `\n## Alternatives\n\n`;
|
|
118
126
|
for (const alt of alternatives) {
|
|
119
|
-
|
|
127
|
+
const altSkill = scoredSkills.find((s) => s.skill.name === alt.name)?.skill;
|
|
128
|
+
const hasSkill = altSkill?.hasSkill ? ' ✓' : '';
|
|
129
|
+
text += `• **${alt.name}**${hasSkill} (⭐${altSkill?.stars || 0})\n`;
|
|
120
130
|
text += ` ${alt.description}\n\n`;
|
|
121
131
|
}
|
|
122
132
|
}
|
|
@@ -125,7 +135,7 @@ export function createRecommendSkillHandler() {
|
|
|
125
135
|
}
|
|
126
136
|
catch (error) {
|
|
127
137
|
const message = error instanceof Error ? error.message : String(error);
|
|
128
|
-
return errorResult(`Recommendation failed: ${message}
|
|
138
|
+
return errorResult(`Recommendation failed: ${message}`, 'Set GITHUB_TOKEN environment variable for higher API rate limits.');
|
|
129
139
|
}
|
|
130
140
|
},
|
|
131
141
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-skill.js","sourceRoot":"","sources":["../../src/tools/recommend-skill.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"recommend-skill.js","sourceRoot":"","sources":["../../src/tools/recommend-skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: search_skills
|
|
3
3
|
*
|
|
4
|
-
* Searches for skills in local store and/or
|
|
4
|
+
* Searches for skills in local store and/or GitHub.
|
|
5
|
+
* Uses SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
5
6
|
*/
|
|
6
7
|
import type { ToolHandler } from '../types.js';
|
|
7
8
|
export declare function createSearchSkillsHandler(): ToolHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-skills.d.ts","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"search-skills.d.ts","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EAKZ,MAAM,aAAa,CAAC;AAYrB,wBAAgB,yBAAyB,IAAI,WAAW,CAqLvD"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Tool: search_skills
|
|
3
3
|
*
|
|
4
|
-
* Searches for skills in local store and/or
|
|
4
|
+
* Searches for skills in local store and/or GitHub.
|
|
5
|
+
* Uses SKILL.md format (industry standard for Claude Code and OpenAI Codex).
|
|
5
6
|
*/
|
|
6
|
-
import { getStore,
|
|
7
|
+
import { getStore, successResult, errorResult, validateString, validateLimit, calculateRelevanceScore, } from './utils.js';
|
|
8
|
+
import { searchGitHubSkills } from './github-search.js';
|
|
7
9
|
export function createSearchSkillsHandler() {
|
|
8
10
|
return {
|
|
9
11
|
name: 'search_skills',
|
|
10
|
-
description: 'Search for skills by keyword. Searches both installed skills and
|
|
12
|
+
description: 'Search for skills by keyword. Searches both installed skills and GitHub repositories with SKILL.md files, returning results sorted by relevance.',
|
|
11
13
|
inputSchema: {
|
|
12
14
|
type: 'object',
|
|
13
15
|
properties: {
|
|
@@ -17,9 +19,9 @@ export function createSearchSkillsHandler() {
|
|
|
17
19
|
},
|
|
18
20
|
source: {
|
|
19
21
|
type: 'string',
|
|
20
|
-
enum: ['all', 'local', '
|
|
22
|
+
enum: ['all', 'local', 'github'],
|
|
21
23
|
default: 'all',
|
|
22
|
-
description: 'Where to search: all, local (installed only), or
|
|
24
|
+
description: 'Where to search: all, local (installed only), or github (GitHub repositories with SKILL.md)',
|
|
23
25
|
},
|
|
24
26
|
limit: {
|
|
25
27
|
type: 'number',
|
|
@@ -74,48 +76,48 @@ export function createSearchSkillsHandler() {
|
|
|
74
76
|
}
|
|
75
77
|
}
|
|
76
78
|
}
|
|
77
|
-
// Search
|
|
78
|
-
if (source === 'all' || source === '
|
|
79
|
+
// Search GitHub
|
|
80
|
+
if (source === 'all' || source === 'github') {
|
|
79
81
|
try {
|
|
80
|
-
const
|
|
81
|
-
const
|
|
82
|
-
for (const skill of searchResult.results) {
|
|
82
|
+
const githubResults = await searchGitHubSkills(query, { limit });
|
|
83
|
+
for (const skill of githubResults) {
|
|
83
84
|
const isInstalled = installedNames.has(skill.name);
|
|
84
85
|
// Skip if already in results from local
|
|
85
86
|
if (isInstalled && source === 'all') {
|
|
86
|
-
// Update existing entry with
|
|
87
|
+
// Update existing entry with GitHub metadata
|
|
87
88
|
const existing = results.find((r) => r.name === skill.name);
|
|
88
89
|
if (existing) {
|
|
89
|
-
existing.downloads = skill.
|
|
90
|
-
existing.tags = skill.
|
|
90
|
+
existing.downloads = skill.stars; // Use stars as popularity metric
|
|
91
|
+
existing.tags = skill.topics || [];
|
|
91
92
|
}
|
|
92
93
|
continue;
|
|
93
94
|
}
|
|
94
95
|
results.push({
|
|
95
|
-
id: `
|
|
96
|
+
id: `github:${skill.fullName}`,
|
|
96
97
|
name: skill.name,
|
|
97
98
|
description: skill.description,
|
|
98
|
-
version:
|
|
99
|
-
source: '
|
|
99
|
+
version: '1.0.0', // GitHub doesn't have version info
|
|
100
|
+
source: 'github',
|
|
100
101
|
installed: isInstalled,
|
|
101
|
-
rating: 0,
|
|
102
|
-
downloads: skill.
|
|
103
|
-
updatedAt: skill.updatedAt
|
|
104
|
-
tags: skill.
|
|
102
|
+
rating: 0,
|
|
103
|
+
downloads: skill.stars, // Use stars as popularity metric
|
|
104
|
+
updatedAt: skill.updatedAt,
|
|
105
|
+
tags: skill.topics || [],
|
|
105
106
|
relevanceScore: calculateRelevanceScore({
|
|
106
107
|
name: skill.name,
|
|
107
108
|
description: skill.description,
|
|
108
|
-
downloads: skill.
|
|
109
|
+
downloads: skill.stars,
|
|
109
110
|
updatedAt: skill.updatedAt,
|
|
110
|
-
tags: skill.
|
|
111
|
-
}, query),
|
|
111
|
+
tags: skill.topics,
|
|
112
|
+
}, query) + (skill.hasSkill ? 20 : 0), // Boost repos with SKILL.md
|
|
112
113
|
});
|
|
113
114
|
}
|
|
114
115
|
}
|
|
115
|
-
catch {
|
|
116
|
-
//
|
|
117
|
-
if (source === '
|
|
118
|
-
|
|
116
|
+
catch (error) {
|
|
117
|
+
// GitHub might be unavailable or rate limited
|
|
118
|
+
if (source === 'github') {
|
|
119
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
120
|
+
return errorResult(`GitHub search failed: ${message}`, 'Try searching with source: "local" to see installed skills, or set GITHUB_TOKEN for higher rate limits.');
|
|
119
121
|
}
|
|
120
122
|
}
|
|
121
123
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-skills.js","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"search-skills.js","sourceRoot":"","sources":["../../src/tools/search-skills.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Types for MCP Server tools and handlers.
|
|
5
5
|
*/
|
|
6
6
|
export type Scope = 'local' | 'global';
|
|
7
|
-
export type Source = 'all' | 'local' | '
|
|
8
|
-
export type SourceType = '
|
|
7
|
+
export type Source = 'all' | 'local' | 'github';
|
|
8
|
+
export type SourceType = 'github' | 'gist' | 'url' | 'local';
|
|
9
9
|
export type RecommendCriteria = 'auto' | 'popular' | 'highest_rated' | 'newest';
|
|
10
10
|
export interface Author {
|
|
11
11
|
name: string;
|
|
@@ -46,7 +46,7 @@ export interface SearchSkillResult {
|
|
|
46
46
|
name: string;
|
|
47
47
|
description: string;
|
|
48
48
|
version: string;
|
|
49
|
-
source: 'local' | '
|
|
49
|
+
source: 'local' | 'github';
|
|
50
50
|
installed: boolean;
|
|
51
51
|
rating: number;
|
|
52
52
|
downloads: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,MAAM,MAAM,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AACvC,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "skillpkg-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "MCP Server for skillpkg - Enable AI agents to search, install, and manage skills via Model Context Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -53,7 +53,8 @@
|
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
55
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
56
|
-
"skillpkg-core": "^0.1.0"
|
|
56
|
+
"skillpkg-core": "^0.1.0",
|
|
57
|
+
"yaml": "^2.8.2"
|
|
57
58
|
},
|
|
58
59
|
"devDependencies": {
|
|
59
60
|
"@types/node": "^20.10.0",
|