diff --git a/packages/mcp/.gitignore b/packages/mcp/.gitignore new file mode 100644 index 00000000..3196db7d --- /dev/null +++ b/packages/mcp/.gitignore @@ -0,0 +1,2 @@ +dist/ +data/ diff --git a/packages/mcp/package.json b/packages/mcp/package.json index 15e1e162..bddd7678 100644 --- a/packages/mcp/package.json +++ b/packages/mcp/package.json @@ -15,9 +15,11 @@ } }, "files": [ - "dist" + "dist", + "data" ], "scripts": { + "prebuild": "mkdir -p data && cp ../../marketplace/skills.json data/skills.json", "build": "tsup", "dev": "tsup --watch", "typecheck": "tsc --noEmit", diff --git a/packages/mcp/src/index.ts b/packages/mcp/src/index.ts index 7b335309..063fbd02 100644 --- a/packages/mcp/src/index.ts +++ b/packages/mcp/src/index.ts @@ -1,6 +1,7 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { fileURLToPath } from 'node:url'; +import { realpathSync } from 'node:fs'; import { CallToolRequestSchema, ListToolsRequestSchema, @@ -22,10 +23,12 @@ async function loadSkills(): Promise { const { readFileSync } = await import('node:fs'); const { join, dirname } = await import('node:path'); + const pkgDir = dirname(fileURLToPath(import.meta.url)); const possiblePaths = [ + join(pkgDir, '..', 'data', 'skills.json'), + join(pkgDir, '..', '..', '..', 'marketplace', 'skills.json'), + join(pkgDir, '..', '..', 'marketplace', 'skills.json'), join(process.cwd(), 'marketplace', 'skills.json'), - join(dirname(fileURLToPath(import.meta.url)), '..', '..', '..', 'marketplace', 'skills.json'), - join(dirname(fileURLToPath(import.meta.url)), '..', '..', 'marketplace', 'skills.json'), ]; for (const path of possiblePaths) { @@ -52,7 +55,7 @@ async function loadSkills(): Promise { const server = new Server( { name: 'skillkit-discovery', - version: '1.12.0', + version: '1.16.0', }, { capabilities: { @@ -212,7 +215,12 @@ async function main() { console.error('SkillKit Discovery MCP Server running on stdio'); } -const isMain = process.argv[1] === fileURLToPath(import.meta.url); +let isMain = false; +try { + const resolvedArgv = process.argv[1] ? realpathSync(process.argv[1]) : ''; + const resolvedModule = realpathSync(fileURLToPath(import.meta.url)); + isMain = resolvedArgv === resolvedModule; +} catch {} if (isMain) { main().catch((error) => { console.error('Fatal error:', error);