skill7 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +192 -0
- package/data/skills_index.json +5708 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +400 -0
- package/dist/index.js.map +1 -0
- package/package.json +56 -0
- package/scripts/sandbox_test.js +99 -0
- package/scripts/setup.js +234 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @antigravity/skills-mcp-server
|
|
4
|
+
*
|
|
5
|
+
* Universal MCP server for 634+ AI development skills
|
|
6
|
+
* Supports: stdio (local) and HTTP (remote/Docker) transports
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* Local: node dist/index.js
|
|
10
|
+
* Docker: docker run -p 3000:3000 antigravity/skills-mcp
|
|
11
|
+
*/
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @antigravity/skills-mcp-server
|
|
4
|
+
*
|
|
5
|
+
* Universal MCP server for 634+ AI development skills
|
|
6
|
+
* Supports: stdio (local) and HTTP (remote/Docker) transports
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* Local: node dist/index.js
|
|
10
|
+
* Docker: docker run -p 3000:3000 antigravity/skills-mcp
|
|
11
|
+
*/
|
|
12
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
13
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
14
|
+
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
|
|
15
|
+
import { z } from 'zod';
|
|
16
|
+
import { readFileSync, existsSync } from 'fs';
|
|
17
|
+
import { dirname, join } from 'path';
|
|
18
|
+
import { fileURLToPath } from 'url';
|
|
19
|
+
import { createServer } from 'http';
|
|
20
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
21
|
+
// ============================================================================
|
|
22
|
+
// CONFIGURATION
|
|
23
|
+
// ============================================================================
|
|
24
|
+
const PORT = parseInt(process.env.PORT || '3000', 10);
|
|
25
|
+
const TRANSPORT = process.env.MCP_TRANSPORT || 'stdio'; // 'stdio' or 'http'
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// DATA LOADING
|
|
28
|
+
// ============================================================================
|
|
29
|
+
function loadSkillsData() {
|
|
30
|
+
const possiblePaths = [
|
|
31
|
+
join(__dirname, '..', 'data', 'skills_index.json'),
|
|
32
|
+
join(__dirname, '..', '..', 'antigravity-awesome-skills', 'skills_index.json'),
|
|
33
|
+
join(process.cwd(), 'data', 'skills_index.json'),
|
|
34
|
+
join(process.cwd(), 'skills_index.json'),
|
|
35
|
+
join(process.cwd(), 'antigravity-awesome-skills', 'skills_index.json'),
|
|
36
|
+
];
|
|
37
|
+
for (const p of possiblePaths) {
|
|
38
|
+
if (existsSync(p)) {
|
|
39
|
+
const data = readFileSync(p, 'utf-8');
|
|
40
|
+
return JSON.parse(data);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
console.error('โ ๏ธ Skills data not found. Using empty catalog.');
|
|
44
|
+
return [];
|
|
45
|
+
}
|
|
46
|
+
const skills = loadSkillsData();
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// HELPER FUNCTIONS
|
|
49
|
+
// ============================================================================
|
|
50
|
+
function getCategories() {
|
|
51
|
+
const categoryMap = new Map();
|
|
52
|
+
for (const skill of skills) {
|
|
53
|
+
const cat = skill.category || 'uncategorized';
|
|
54
|
+
if (!categoryMap.has(cat)) {
|
|
55
|
+
categoryMap.set(cat, []);
|
|
56
|
+
}
|
|
57
|
+
categoryMap.get(cat).push(skill.id);
|
|
58
|
+
}
|
|
59
|
+
return Array.from(categoryMap.entries())
|
|
60
|
+
.map(([name, skillIds]) => ({
|
|
61
|
+
name,
|
|
62
|
+
count: skillIds.length,
|
|
63
|
+
skills: skillIds.slice(0, 10)
|
|
64
|
+
}))
|
|
65
|
+
.sort((a, b) => b.count - a.count);
|
|
66
|
+
}
|
|
67
|
+
function searchSkills(query, limit = 20) {
|
|
68
|
+
const lowerQuery = query.toLowerCase();
|
|
69
|
+
return skills
|
|
70
|
+
.filter(s => s.name.toLowerCase().includes(lowerQuery) ||
|
|
71
|
+
s.description.toLowerCase().includes(lowerQuery) ||
|
|
72
|
+
s.id.toLowerCase().includes(lowerQuery))
|
|
73
|
+
.slice(0, limit);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Semantic search using TF-IDF style scoring
|
|
77
|
+
* Matches skills by meaning, not just keywords
|
|
78
|
+
*/
|
|
79
|
+
function semanticSearch(query, topK = 3) {
|
|
80
|
+
const queryTerms = query.toLowerCase().split(/\W+/).filter(t => t.length > 2);
|
|
81
|
+
const scored = skills.map(skill => {
|
|
82
|
+
const nameText = skill.name.toLowerCase();
|
|
83
|
+
const descText = skill.description.toLowerCase();
|
|
84
|
+
const catText = skill.category.toLowerCase();
|
|
85
|
+
const pathText = skill.path.toLowerCase();
|
|
86
|
+
let score = 0;
|
|
87
|
+
for (const term of queryTerms) {
|
|
88
|
+
// Name matches are most valuable
|
|
89
|
+
if (nameText.includes(term))
|
|
90
|
+
score += 5;
|
|
91
|
+
// Category matches indicate domain relevance
|
|
92
|
+
if (catText.includes(term))
|
|
93
|
+
score += 3;
|
|
94
|
+
// Path often contains good keywords
|
|
95
|
+
if (pathText.includes(term))
|
|
96
|
+
score += 2;
|
|
97
|
+
// Description matches are baseline relevance
|
|
98
|
+
if (descText.includes(term))
|
|
99
|
+
score += 1;
|
|
100
|
+
}
|
|
101
|
+
return { skill, score };
|
|
102
|
+
});
|
|
103
|
+
return scored
|
|
104
|
+
.filter(s => s.score > 0)
|
|
105
|
+
.sort((a, b) => b.score - a.score)
|
|
106
|
+
.slice(0, topK)
|
|
107
|
+
.map(s => s.skill);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get skill content from SKILL.md or fallback to description
|
|
111
|
+
*/
|
|
112
|
+
function getSkillContentSync(skill) {
|
|
113
|
+
const skillPaths = [
|
|
114
|
+
join(__dirname, '..', '..', 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
|
|
115
|
+
join(process.cwd(), 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
|
|
116
|
+
];
|
|
117
|
+
for (const p of skillPaths) {
|
|
118
|
+
if (existsSync(p)) {
|
|
119
|
+
return readFileSync(p, 'utf-8');
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return `# ${skill.name}\n\n${skill.description}\n\n**Category:** ${skill.category}\n**Risk:** ${skill.risk}`;
|
|
123
|
+
}
|
|
124
|
+
function suggestWorkflow(goal) {
|
|
125
|
+
const keywords = goal.toLowerCase();
|
|
126
|
+
const steps = [];
|
|
127
|
+
if (keywords.includes('api') || keywords.includes('backend')) {
|
|
128
|
+
steps.push({ skill: 'api-design-principles', action: 'design', reason: 'Define API structure' });
|
|
129
|
+
}
|
|
130
|
+
if (keywords.includes('web') || keywords.includes('frontend')) {
|
|
131
|
+
steps.push({ skill: 'react-best-practices', action: 'design', reason: 'Plan UI components' });
|
|
132
|
+
}
|
|
133
|
+
if (keywords.includes('security')) {
|
|
134
|
+
steps.push({ skill: 'api-security-best-practices', action: 'audit', reason: 'Security review' });
|
|
135
|
+
}
|
|
136
|
+
if (keywords.includes('typescript')) {
|
|
137
|
+
steps.push({ skill: 'typescript-expert', action: 'implement', reason: 'TypeScript patterns' });
|
|
138
|
+
}
|
|
139
|
+
if (keywords.includes('python')) {
|
|
140
|
+
steps.push({ skill: 'python-pro', action: 'implement', reason: 'Python patterns' });
|
|
141
|
+
}
|
|
142
|
+
if (keywords.includes('react')) {
|
|
143
|
+
steps.push({ skill: 'react-patterns', action: 'implement', reason: 'React patterns' });
|
|
144
|
+
}
|
|
145
|
+
steps.push({ skill: 'testing-patterns', action: 'test', reason: 'Testing' });
|
|
146
|
+
if (steps.length === 1) {
|
|
147
|
+
steps.unshift({ skill: 'brainstorming', action: 'plan', reason: 'Planning' });
|
|
148
|
+
}
|
|
149
|
+
return { steps };
|
|
150
|
+
}
|
|
151
|
+
// ============================================================================
|
|
152
|
+
// CREATE MCP SERVER
|
|
153
|
+
// ============================================================================
|
|
154
|
+
function createMcpServer() {
|
|
155
|
+
const server = new McpServer({
|
|
156
|
+
name: 'antigravity-skills',
|
|
157
|
+
version: '1.0.0',
|
|
158
|
+
});
|
|
159
|
+
// TOOL: list_skills
|
|
160
|
+
server.tool('list_skills', 'List skills with optional category filter', {
|
|
161
|
+
category: z.string().optional().describe('Filter by category'),
|
|
162
|
+
limit: z.number().optional().default(50),
|
|
163
|
+
offset: z.number().optional().default(0),
|
|
164
|
+
}, async ({ category, limit = 50, offset = 0 }) => {
|
|
165
|
+
let filtered = category
|
|
166
|
+
? skills.filter(s => s.category.toLowerCase().includes(category.toLowerCase()))
|
|
167
|
+
: skills;
|
|
168
|
+
const paginated = filtered.slice(offset, offset + limit);
|
|
169
|
+
return {
|
|
170
|
+
content: [{
|
|
171
|
+
type: 'text',
|
|
172
|
+
text: JSON.stringify({
|
|
173
|
+
total: filtered.length,
|
|
174
|
+
skills: paginated.map(s => ({
|
|
175
|
+
id: s.id,
|
|
176
|
+
name: s.name,
|
|
177
|
+
description: s.description.slice(0, 100),
|
|
178
|
+
category: s.category,
|
|
179
|
+
})),
|
|
180
|
+
}, null, 2)
|
|
181
|
+
}],
|
|
182
|
+
};
|
|
183
|
+
});
|
|
184
|
+
// TOOL: get_skill
|
|
185
|
+
server.tool('get_skill', 'Get full details of a skill', { skillId: z.string().describe('Skill ID') }, async ({ skillId }) => {
|
|
186
|
+
const skill = skills.find(s => s.id === skillId || s.name === skillId);
|
|
187
|
+
if (!skill) {
|
|
188
|
+
return { content: [{ type: 'text', text: `Skill "${skillId}" not found.` }], isError: true };
|
|
189
|
+
}
|
|
190
|
+
return { content: [{ type: 'text', text: JSON.stringify(skill, null, 2) }] };
|
|
191
|
+
});
|
|
192
|
+
// TOOL: search_skills
|
|
193
|
+
server.tool('search_skills', 'Search skills by keyword', {
|
|
194
|
+
query: z.string().describe('Search query'),
|
|
195
|
+
limit: z.number().optional().default(20),
|
|
196
|
+
}, async ({ query, limit = 20 }) => {
|
|
197
|
+
const results = searchSkills(query, limit);
|
|
198
|
+
return {
|
|
199
|
+
content: [{
|
|
200
|
+
type: 'text',
|
|
201
|
+
text: JSON.stringify({
|
|
202
|
+
query,
|
|
203
|
+
count: results.length,
|
|
204
|
+
skills: results.map(s => ({ id: s.id, name: s.name, category: s.category })),
|
|
205
|
+
}, null, 2)
|
|
206
|
+
}],
|
|
207
|
+
};
|
|
208
|
+
});
|
|
209
|
+
// TOOL: get_categories
|
|
210
|
+
server.tool('get_categories', 'Get all skill categories with counts', {}, async () => ({
|
|
211
|
+
content: [{
|
|
212
|
+
type: 'text',
|
|
213
|
+
text: JSON.stringify({
|
|
214
|
+
totalSkills: skills.length,
|
|
215
|
+
categories: getCategories(),
|
|
216
|
+
}, null, 2)
|
|
217
|
+
}],
|
|
218
|
+
}));
|
|
219
|
+
// TOOL: suggest_workflow
|
|
220
|
+
server.tool('suggest_workflow', 'Get a workflow suggestion for a goal', { goal: z.string().describe('What you want to accomplish') }, async ({ goal }) => {
|
|
221
|
+
const workflow = suggestWorkflow(goal);
|
|
222
|
+
return {
|
|
223
|
+
content: [{
|
|
224
|
+
type: 'text',
|
|
225
|
+
text: JSON.stringify({
|
|
226
|
+
goal,
|
|
227
|
+
steps: workflow.steps,
|
|
228
|
+
}, null, 2)
|
|
229
|
+
}],
|
|
230
|
+
};
|
|
231
|
+
});
|
|
232
|
+
// TOOL: get_skill_content
|
|
233
|
+
server.tool('get_skill_content', 'Read full SKILL.md content', { skillId: z.string().describe('Skill ID') }, async ({ skillId }) => {
|
|
234
|
+
const skill = skills.find(s => s.id === skillId);
|
|
235
|
+
if (!skill) {
|
|
236
|
+
return { content: [{ type: 'text', text: `Skill "${skillId}" not found.` }], isError: true };
|
|
237
|
+
}
|
|
238
|
+
const skillPaths = [
|
|
239
|
+
join(__dirname, '..', '..', 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
|
|
240
|
+
join(process.cwd(), 'antigravity-awesome-skills', skill.path, 'SKILL.md'),
|
|
241
|
+
];
|
|
242
|
+
for (const p of skillPaths) {
|
|
243
|
+
if (existsSync(p)) {
|
|
244
|
+
return { content: [{ type: 'text', text: readFileSync(p, 'utf-8') }] };
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
content: [{
|
|
249
|
+
type: 'text',
|
|
250
|
+
text: `Skill info:\n${JSON.stringify(skill, null, 2)}\n\nClone repo for full content: git clone https://github.com/Abderraouf-yt/antigravity-awesome-skills.git`
|
|
251
|
+
}]
|
|
252
|
+
};
|
|
253
|
+
});
|
|
254
|
+
// RESOURCE: skill://catalog
|
|
255
|
+
server.resource('skill://catalog', 'Skills catalog', async () => ({
|
|
256
|
+
contents: [{
|
|
257
|
+
uri: 'skill://catalog',
|
|
258
|
+
text: JSON.stringify({ totalSkills: skills.length, categories: getCategories() }, null, 2),
|
|
259
|
+
mimeType: 'application/json',
|
|
260
|
+
}],
|
|
261
|
+
}));
|
|
262
|
+
// ========================================================================
|
|
263
|
+
// MCP PROMPTS - Frictionless Auto-Skill Detection
|
|
264
|
+
// ========================================================================
|
|
265
|
+
// PROMPT: auto_skill - Automatically detects and returns relevant skills
|
|
266
|
+
server.prompt('auto_skill', 'Auto-detect and return relevant skills for any task. Call this at the start of any task to get expert guidance.', {
|
|
267
|
+
task: z.string().describe('The task or goal description'),
|
|
268
|
+
}, async ({ task }) => {
|
|
269
|
+
const matches = semanticSearch(task, 3);
|
|
270
|
+
if (matches.length === 0) {
|
|
271
|
+
return {
|
|
272
|
+
messages: [{
|
|
273
|
+
role: 'user',
|
|
274
|
+
content: {
|
|
275
|
+
type: 'text',
|
|
276
|
+
text: `No specific skills found for: "${task}". Proceed with general best practices.`,
|
|
277
|
+
},
|
|
278
|
+
}],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const skillContents = matches.map(skill => {
|
|
282
|
+
const content = getSkillContentSync(skill);
|
|
283
|
+
return `## ๐ฏ ${skill.name}\n\n**Category:** ${skill.category}\n**Risk Level:** ${skill.risk}\n\n${content}`;
|
|
284
|
+
});
|
|
285
|
+
return {
|
|
286
|
+
messages: [{
|
|
287
|
+
role: 'user',
|
|
288
|
+
content: {
|
|
289
|
+
type: 'text',
|
|
290
|
+
text: `# ๐ Antigravity Skills Activated\n\nBased on your task: **"${task}"**\n\nApply these expert skills:\n\n${skillContents.join('\n\n---\n\n')}\n\n---\n\n*Use these skills to guide your implementation.*`,
|
|
291
|
+
},
|
|
292
|
+
}],
|
|
293
|
+
};
|
|
294
|
+
});
|
|
295
|
+
// PROMPT: skill_workflow - Suggested workflow for complex tasks
|
|
296
|
+
server.prompt('skill_workflow', 'Get a multi-step workflow recommendation for complex goals', {
|
|
297
|
+
goal: z.string().describe('The complex goal to accomplish'),
|
|
298
|
+
}, async ({ goal }) => {
|
|
299
|
+
const workflow = suggestWorkflow(goal);
|
|
300
|
+
const skillDetails = workflow.steps.map((step, i) => {
|
|
301
|
+
const skill = skills.find(s => s.id === step.skill || s.name.toLowerCase().includes(step.skill.toLowerCase()));
|
|
302
|
+
return `### Step ${i + 1}: ${step.action.toUpperCase()}\n**Skill:** ${step.skill}\n**Reason:** ${step.reason}${skill ? `\n**Description:** ${skill.description}` : ''}`;
|
|
303
|
+
});
|
|
304
|
+
return {
|
|
305
|
+
messages: [{
|
|
306
|
+
role: 'user',
|
|
307
|
+
content: {
|
|
308
|
+
type: 'text',
|
|
309
|
+
text: `# ๐ Recommended Workflow\n\n**Goal:** ${goal}\n\n${skillDetails.join('\n\n')}\n\n---\n\n*Follow these steps in order for best results.*`,
|
|
310
|
+
},
|
|
311
|
+
}],
|
|
312
|
+
};
|
|
313
|
+
});
|
|
314
|
+
return server;
|
|
315
|
+
}
|
|
316
|
+
// ============================================================================
|
|
317
|
+
// HTTP SERVER (for Docker/remote hosting)
|
|
318
|
+
// ============================================================================
|
|
319
|
+
function startHttpServer(server) {
|
|
320
|
+
const httpServer = createServer(async (req, res) => {
|
|
321
|
+
// CORS headers
|
|
322
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
323
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
324
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
325
|
+
if (req.method === 'OPTIONS') {
|
|
326
|
+
res.writeHead(204);
|
|
327
|
+
res.end();
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
// Health check
|
|
331
|
+
if (req.url === '/health') {
|
|
332
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
333
|
+
res.end(JSON.stringify({ status: 'ok', skills: skills.length }));
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
// Info endpoint
|
|
337
|
+
if (req.url === '/' && req.method === 'GET') {
|
|
338
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
339
|
+
res.end(JSON.stringify({
|
|
340
|
+
name: 'Antigravity Skills MCP Server',
|
|
341
|
+
version: '1.0.0',
|
|
342
|
+
skills: skills.length,
|
|
343
|
+
categories: getCategories().length,
|
|
344
|
+
endpoints: {
|
|
345
|
+
health: '/health',
|
|
346
|
+
sse: '/sse',
|
|
347
|
+
messages: '/messages',
|
|
348
|
+
},
|
|
349
|
+
tools: ['list_skills', 'get_skill', 'search_skills', 'get_categories', 'suggest_workflow', 'get_skill_content'],
|
|
350
|
+
}));
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
// SSE endpoint for MCP
|
|
354
|
+
if (req.url === '/sse') {
|
|
355
|
+
const transport = new SSEServerTransport('/messages', res);
|
|
356
|
+
await server.connect(transport);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// Messages endpoint
|
|
360
|
+
if (req.url === '/messages' && req.method === 'POST') {
|
|
361
|
+
// Handle incoming MCP messages
|
|
362
|
+
let body = '';
|
|
363
|
+
req.on('data', chunk => { body += chunk; });
|
|
364
|
+
req.on('end', () => {
|
|
365
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
366
|
+
res.end(JSON.stringify({ received: true }));
|
|
367
|
+
});
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
res.writeHead(404);
|
|
371
|
+
res.end('Not Found');
|
|
372
|
+
});
|
|
373
|
+
httpServer.listen(PORT, () => {
|
|
374
|
+
console.log(`๐ Antigravity Skills MCP Server`);
|
|
375
|
+
console.log(`๐ ${skills.length} skills loaded`);
|
|
376
|
+
console.log(`๐ HTTP server: http://localhost:${PORT}`);
|
|
377
|
+
console.log(` Health: http://localhost:${PORT}/health`);
|
|
378
|
+
console.log(` SSE: http://localhost:${PORT}/sse`);
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
// ============================================================================
|
|
382
|
+
// STDIO SERVER (for local CLI integration)
|
|
383
|
+
// ============================================================================
|
|
384
|
+
async function startStdioServer(server) {
|
|
385
|
+
const transport = new StdioServerTransport();
|
|
386
|
+
await server.connect(transport);
|
|
387
|
+
console.error('๐ Antigravity Skills MCP Server (stdio)');
|
|
388
|
+
console.error(`๐ ${skills.length} skills loaded`);
|
|
389
|
+
}
|
|
390
|
+
// ============================================================================
|
|
391
|
+
// MAIN
|
|
392
|
+
// ============================================================================
|
|
393
|
+
const server = createMcpServer();
|
|
394
|
+
if (TRANSPORT === 'http') {
|
|
395
|
+
startHttpServer(server);
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
startStdioServer(server).catch(console.error);
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "skill7",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Universal MCP server for 634+ AI skills - Gemini CLI, Claude, Cursor, Copilot & more",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"skill7": "dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"start:http": "MCP_TRANSPORT=http node dist/index.js",
|
|
14
|
+
"dev": "tsx src/index.ts",
|
|
15
|
+
"inspector": "npx @modelcontextprotocol/inspector node dist/index.js",
|
|
16
|
+
"setup:gemini": "node scripts/setup.js --client gemini",
|
|
17
|
+
"setup:claude": "node scripts/setup.js --client claude",
|
|
18
|
+
"setup:cursor": "node scripts/setup.js --client cursor",
|
|
19
|
+
"setup:all": "node scripts/setup.js --client all"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"mcp",
|
|
23
|
+
"model-context-protocol",
|
|
24
|
+
"gemini-cli",
|
|
25
|
+
"claude",
|
|
26
|
+
"cursor",
|
|
27
|
+
"copilot",
|
|
28
|
+
"ai-skills",
|
|
29
|
+
"agentic"
|
|
30
|
+
],
|
|
31
|
+
"author": "Antigravity",
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"repository": {
|
|
34
|
+
"type": "git",
|
|
35
|
+
"url": "https://github.com/Abderraouf-yt/skills-mcp-server.git"
|
|
36
|
+
},
|
|
37
|
+
"homepage": "https://github.com/Abderraouf-yt/skills-mcp-server#readme",
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
40
|
+
"zod": "^3.24.0"
|
|
41
|
+
},
|
|
42
|
+
"devDependencies": {
|
|
43
|
+
"@types/node": "^22.0.0",
|
|
44
|
+
"typescript": "^5.7.0",
|
|
45
|
+
"tsx": "^4.0.0"
|
|
46
|
+
},
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=18.0.0"
|
|
49
|
+
},
|
|
50
|
+
"files": [
|
|
51
|
+
"dist",
|
|
52
|
+
"data",
|
|
53
|
+
"scripts",
|
|
54
|
+
"README.md"
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { spawn } from 'child_process';
|
|
2
|
+
import { dirname, join } from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
6
|
+
|
|
7
|
+
// Configuration
|
|
8
|
+
const SERVER_PATH = join(__dirname, '../dist/index.js');
|
|
9
|
+
const TEST_SCENARIOS = [
|
|
10
|
+
"I need to build a secure React frontend with authentication",
|
|
11
|
+
"How do I optimize my Python backend API performance?",
|
|
12
|
+
"Setup a CI/CD pipeline for a Next.js app on AWS"
|
|
13
|
+
];
|
|
14
|
+
|
|
15
|
+
console.log('๐งช Starting Antigravity Skills Sandbox Simulation...');
|
|
16
|
+
console.log('Target Server:', SERVER_PATH);
|
|
17
|
+
console.log('---------------------------------------------------\n');
|
|
18
|
+
|
|
19
|
+
const server = spawn('node', [SERVER_PATH], {
|
|
20
|
+
stdio: ['pipe', 'pipe', 'inherit']
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
let buffer = '';
|
|
24
|
+
let responseCount = 0;
|
|
25
|
+
|
|
26
|
+
server.stdout.on('data', (data) => {
|
|
27
|
+
buffer += data.toString();
|
|
28
|
+
const lines = buffer.split('\n');
|
|
29
|
+
buffer = lines.pop(); // Keep incomplete line
|
|
30
|
+
|
|
31
|
+
for (const line of lines) {
|
|
32
|
+
if (!line.trim()) continue;
|
|
33
|
+
|
|
34
|
+
try {
|
|
35
|
+
const response = JSON.parse(line);
|
|
36
|
+
|
|
37
|
+
// Handle Prompt List Response (Init)
|
|
38
|
+
if (response.id === 'init') {
|
|
39
|
+
runScenarios();
|
|
40
|
+
}
|
|
41
|
+
// Handle Scenario Responses
|
|
42
|
+
else if (response.id && typeof response.id === 'number') {
|
|
43
|
+
const scenarioIdx = response.id;
|
|
44
|
+
const scenario = TEST_SCENARIOS[scenarioIdx];
|
|
45
|
+
|
|
46
|
+
console.log(`\n๐ฃ๏ธ USER TASK: "${scenario}"`);
|
|
47
|
+
console.log('๐ค AGENT DETECTED SKILLS:');
|
|
48
|
+
|
|
49
|
+
if (response.result?.messages?.[0]?.content?.text) {
|
|
50
|
+
const text = response.result.messages[0].content.text;
|
|
51
|
+
// Parse out the skill names for a clean summary
|
|
52
|
+
const skillHeaders = text.match(/## ๐ฏ (.*)/g) || [];
|
|
53
|
+
|
|
54
|
+
if (skillHeaders.length > 0) {
|
|
55
|
+
skillHeaders.forEach(h => console.log(` โ
${h.replace('## ๐ฏ ', '')}`));
|
|
56
|
+
console.log(`\n (Plus full content injection for each skill...)`);
|
|
57
|
+
} else {
|
|
58
|
+
console.log(' โ ๏ธ No specific skills found (General fallback)');
|
|
59
|
+
}
|
|
60
|
+
} else {
|
|
61
|
+
console.log(' โ Error: Invalid response format');
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
responseCount++;
|
|
65
|
+
if (responseCount === TEST_SCENARIOS.length) {
|
|
66
|
+
console.log('\n---------------------------------------------------');
|
|
67
|
+
console.log('๐ Sandbox Test Complete!');
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
} catch (e) {
|
|
72
|
+
// Ignore non-JSON lines (logs)
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
function runScenarios() {
|
|
78
|
+
TEST_SCENARIOS.forEach((task, index) => {
|
|
79
|
+
const req = {
|
|
80
|
+
jsonrpc: '2.0',
|
|
81
|
+
id: index,
|
|
82
|
+
method: 'prompts/get',
|
|
83
|
+
params: {
|
|
84
|
+
name: 'auto_skill',
|
|
85
|
+
arguments: { task }
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
server.stdin.write(JSON.stringify(req) + '\n');
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 1. Send Init (List Prompts) to wake server
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
server.stdin.write(JSON.stringify({
|
|
95
|
+
jsonrpc: '2.0',
|
|
96
|
+
id: 'init',
|
|
97
|
+
method: 'prompts/list'
|
|
98
|
+
}) + '\n');
|
|
99
|
+
}, 1000);
|