skillpkg-mcp-server 0.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 +148 -0
- package/dist/cli.d.ts +10 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +40 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +55 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +162 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/index.d.ts +21 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +35 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/install-skill.d.ts +8 -0
- package/dist/tools/install-skill.d.ts.map +1 -0
- package/dist/tools/install-skill.js +233 -0
- package/dist/tools/install-skill.js.map +1 -0
- package/dist/tools/list-skills.d.ts +8 -0
- package/dist/tools/list-skills.d.ts.map +1 -0
- package/dist/tools/list-skills.js +68 -0
- package/dist/tools/list-skills.js.map +1 -0
- package/dist/tools/load-skill.d.ts +8 -0
- package/dist/tools/load-skill.d.ts.map +1 -0
- package/dist/tools/load-skill.js +93 -0
- package/dist/tools/load-skill.js.map +1 -0
- package/dist/tools/recommend-skill.d.ts +8 -0
- package/dist/tools/recommend-skill.d.ts.map +1 -0
- package/dist/tools/recommend-skill.js +133 -0
- package/dist/tools/recommend-skill.js.map +1 -0
- package/dist/tools/search-registry.d.ts +8 -0
- package/dist/tools/search-registry.d.ts.map +1 -0
- package/dist/tools/search-registry.js +72 -0
- package/dist/tools/search-registry.js.map +1 -0
- package/dist/tools/search-skills.d.ts +8 -0
- package/dist/tools/search-skills.d.ts.map +1 -0
- package/dist/tools/search-skills.js +159 -0
- package/dist/tools/search-skills.js.map +1 -0
- package/dist/tools/skill-info.d.ts +8 -0
- package/dist/tools/skill-info.d.ts.map +1 -0
- package/dist/tools/skill-info.js +83 -0
- package/dist/tools/skill-info.js.map +1 -0
- package/dist/tools/uninstall-skill.d.ts +8 -0
- package/dist/tools/uninstall-skill.d.ts.map +1 -0
- package/dist/tools/uninstall-skill.js +60 -0
- package/dist/tools/uninstall-skill.js.map +1 -0
- package/dist/tools/utils.d.ts +57 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +151 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/types.d.ts +182 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/package.json +63 -0
package/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# skillpkg-mcp-server
|
|
2
|
+
|
|
3
|
+
MCP Server for skillpkg - Enable AI agents to search, install, and manage skills via Model Context Protocol.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **7 MCP Tools** for complete skill lifecycle management
|
|
8
|
+
- **Multi-source installation** - Registry, GitHub, Gist, URL, Local
|
|
9
|
+
- **Smart recommendations** with relevance scoring
|
|
10
|
+
- **Graceful degradation** when registry unavailable
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install skillpkg-mcp-server
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Quick Start
|
|
19
|
+
|
|
20
|
+
### As standalone MCP server
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx skillpkg-mcp-server
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
### In claude_desktop_config.json
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"mcpServers": {
|
|
31
|
+
"skillpkg": {
|
|
32
|
+
"command": "npx",
|
|
33
|
+
"args": ["skillpkg-mcp-server"]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### Programmatic usage
|
|
40
|
+
|
|
41
|
+
```typescript
|
|
42
|
+
import { SkillpkgMcpServer, createAllToolHandlers } from 'skillpkg-mcp-server';
|
|
43
|
+
|
|
44
|
+
const server = new SkillpkgMcpServer({ scope: 'local' });
|
|
45
|
+
server.registerTools(createAllToolHandlers());
|
|
46
|
+
await server.start();
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Available Tools
|
|
50
|
+
|
|
51
|
+
| Tool | Description |
|
|
52
|
+
|------|-------------|
|
|
53
|
+
| `list_skills` | List all installed skills with metadata |
|
|
54
|
+
| `load_skill` | Load a skill's full content including instructions |
|
|
55
|
+
| `install_skill` | Install a skill from various sources |
|
|
56
|
+
| `uninstall_skill` | Remove an installed skill |
|
|
57
|
+
| `search_skills` | Search skills (source: all/local/registry) |
|
|
58
|
+
| `skill_info` | Get detailed info about a skill |
|
|
59
|
+
| `recommend_skill` | Get AI-powered skill recommendations |
|
|
60
|
+
|
|
61
|
+
## Tool Details
|
|
62
|
+
|
|
63
|
+
### list_skills
|
|
64
|
+
|
|
65
|
+
Lists all installed skills from local and/or global scope.
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"scope": "all" // "local" | "global" | "all"
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### load_skill
|
|
74
|
+
|
|
75
|
+
Loads a skill's full instructions. Required for AI to use the skill.
|
|
76
|
+
|
|
77
|
+
```json
|
|
78
|
+
{
|
|
79
|
+
"id": "local:commit-helper" // or just "commit-helper"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### install_skill
|
|
84
|
+
|
|
85
|
+
Installs a skill from multiple sources:
|
|
86
|
+
|
|
87
|
+
```json
|
|
88
|
+
{
|
|
89
|
+
"source": "commit-helper", // Registry
|
|
90
|
+
"source": "github:user/repo", // GitHub repo
|
|
91
|
+
"source": "gist:abc123", // GitHub Gist
|
|
92
|
+
"source": "https://example.com/skill.yaml", // URL
|
|
93
|
+
"source": "./my-skill", // Local path
|
|
94
|
+
"scope": "local" // "local" | "global"
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### recommend_skill
|
|
99
|
+
|
|
100
|
+
Get smart recommendations based on your needs:
|
|
101
|
+
|
|
102
|
+
```json
|
|
103
|
+
{
|
|
104
|
+
"query": "help me write better commit messages",
|
|
105
|
+
"criteria": "auto" // "auto" | "popular" | "highest_rated" | "newest"
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Architecture
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
┌─────────────────────────────────────────────────┐
|
|
113
|
+
│ AI Agent │
|
|
114
|
+
│ (Claude, etc.) │
|
|
115
|
+
└─────────────────┬───────────────────────────────┘
|
|
116
|
+
│ MCP Protocol (stdio)
|
|
117
|
+
┌─────────────────▼───────────────────────────────┐
|
|
118
|
+
│ SkillpkgMcpServer │
|
|
119
|
+
├─────────────────────────────────────────────────┤
|
|
120
|
+
│ ┌──────────────────────────────────────────┐ │
|
|
121
|
+
│ │ Tool Handlers │ │
|
|
122
|
+
│ ├──────────────────────────────────────────┤ │
|
|
123
|
+
│ │ search_skills │ load_skill │ install │ │
|
|
124
|
+
│ │ list_skills │ uninstall │ info │ │
|
|
125
|
+
│ │ search_registry│ recommend │ │ │
|
|
126
|
+
│ └──────────────────────────────────────────┘ │
|
|
127
|
+
├─────────────────────────────────────────────────┤
|
|
128
|
+
│ skillpkg-core │
|
|
129
|
+
│ (Store, Registry, Parser) │
|
|
130
|
+
└─────────────────────────────────────────────────┘
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Development
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
# Build
|
|
137
|
+
pnpm build
|
|
138
|
+
|
|
139
|
+
# Type check
|
|
140
|
+
pnpm typecheck
|
|
141
|
+
|
|
142
|
+
# Test
|
|
143
|
+
pnpm test
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## License
|
|
147
|
+
|
|
148
|
+
MIT
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI entry point for skillpkg MCP server
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx skillpkg-mcp-server
|
|
7
|
+
* skillpkg serve (via CLI integration)
|
|
8
|
+
*/
|
|
9
|
+
import { SkillpkgMcpServer } from './server.js';
|
|
10
|
+
import { createAllToolHandlers } from './tools/index.js';
|
|
11
|
+
async function main() {
|
|
12
|
+
// Create server with default options
|
|
13
|
+
const server = new SkillpkgMcpServer({
|
|
14
|
+
scope: 'local',
|
|
15
|
+
projectPath: process.cwd(),
|
|
16
|
+
});
|
|
17
|
+
// Register all tool handlers
|
|
18
|
+
server.registerTools(createAllToolHandlers());
|
|
19
|
+
// Handle shutdown gracefully
|
|
20
|
+
process.on('SIGINT', async () => {
|
|
21
|
+
console.error('[skillpkg-mcp] Received SIGINT, shutting down...');
|
|
22
|
+
await server.stop();
|
|
23
|
+
process.exit(0);
|
|
24
|
+
});
|
|
25
|
+
process.on('SIGTERM', async () => {
|
|
26
|
+
console.error('[skillpkg-mcp] Received SIGTERM, shutting down...');
|
|
27
|
+
await server.stop();
|
|
28
|
+
process.exit(0);
|
|
29
|
+
});
|
|
30
|
+
// Start the server
|
|
31
|
+
try {
|
|
32
|
+
await server.start();
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('[skillpkg-mcp] Failed to start server:', error);
|
|
36
|
+
process.exit(1);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
main();
|
|
40
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,KAAK,UAAU,IAAI;IACjB,qCAAqC;IACrC,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE;KAC3B,CAAC,CAAC;IAEH,6BAA6B;IAC7B,MAAM,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAE9C,6BAA6B;IAC7B,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,OAAO,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,mBAAmB;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @skillpkg/mcp-server
|
|
3
|
+
*
|
|
4
|
+
* MCP Server for skillpkg - Enable AI agents to search, install,
|
|
5
|
+
* and manage skills via Model Context Protocol.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { SkillpkgMcpServer, createAllToolHandlers } from 'skillpkg-mcp-server';
|
|
10
|
+
*
|
|
11
|
+
* const server = new SkillpkgMcpServer({ scope: 'local' });
|
|
12
|
+
* server.registerTools(createAllToolHandlers());
|
|
13
|
+
* await server.start();
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare const VERSION = "0.1.0";
|
|
17
|
+
export * from './types.js';
|
|
18
|
+
export { SkillpkgMcpServer } from './server.js';
|
|
19
|
+
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,eAAO,MAAM,OAAO,UAAU,CAAC;AAG/B,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGhD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @skillpkg/mcp-server
|
|
3
|
+
*
|
|
4
|
+
* MCP Server for skillpkg - Enable AI agents to search, install,
|
|
5
|
+
* and manage skills via Model Context Protocol.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* import { SkillpkgMcpServer, createAllToolHandlers } from 'skillpkg-mcp-server';
|
|
10
|
+
*
|
|
11
|
+
* const server = new SkillpkgMcpServer({ scope: 'local' });
|
|
12
|
+
* server.registerTools(createAllToolHandlers());
|
|
13
|
+
* await server.start();
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export const VERSION = '0.1.0';
|
|
17
|
+
// Types
|
|
18
|
+
export * from './types.js';
|
|
19
|
+
// Server
|
|
20
|
+
export { SkillpkgMcpServer } from './server.js';
|
|
21
|
+
// Tool handlers
|
|
22
|
+
export { createAllToolHandlers, createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, } from './tools/index.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,SAAS;AACT,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,gBAAgB;AAChB,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillpkgMcpServer - MCP Server implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides MCP tools for AI agents to manage skills.
|
|
5
|
+
*/
|
|
6
|
+
import type { ServerOptions, ToolHandler, ToolResult } from './types.js';
|
|
7
|
+
export declare class SkillpkgMcpServer {
|
|
8
|
+
private options;
|
|
9
|
+
private tools;
|
|
10
|
+
private server;
|
|
11
|
+
private transport;
|
|
12
|
+
private running;
|
|
13
|
+
constructor(options?: ServerOptions);
|
|
14
|
+
/**
|
|
15
|
+
* Start the MCP server
|
|
16
|
+
*/
|
|
17
|
+
start(): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Setup MCP request handlers
|
|
20
|
+
*/
|
|
21
|
+
private setupRequestHandlers;
|
|
22
|
+
/**
|
|
23
|
+
* Stop the MCP server
|
|
24
|
+
*/
|
|
25
|
+
stop(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Register a tool handler
|
|
28
|
+
*/
|
|
29
|
+
registerTool(handler: ToolHandler): void;
|
|
30
|
+
/**
|
|
31
|
+
* Register multiple tool handlers
|
|
32
|
+
*/
|
|
33
|
+
registerTools(handlers: ToolHandler[]): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get registered tools
|
|
36
|
+
*/
|
|
37
|
+
getTools(): ToolHandler[];
|
|
38
|
+
/**
|
|
39
|
+
* Check if server is running
|
|
40
|
+
*/
|
|
41
|
+
isRunning(): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get server options
|
|
44
|
+
*/
|
|
45
|
+
getOptions(): ServerOptions;
|
|
46
|
+
/**
|
|
47
|
+
* Create error result
|
|
48
|
+
*/
|
|
49
|
+
static createErrorResult(message: string): ToolResult;
|
|
50
|
+
/**
|
|
51
|
+
* Create success result
|
|
52
|
+
*/
|
|
53
|
+
static createSuccessResult(data: unknown): ToolResult;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,aAAkB;IAOvC;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC5B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAoD5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiB3B;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAIxC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,QAAQ,IAAI,WAAW,EAAE;IAIzB;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;OAEG;IACH,UAAU,IAAI,aAAa;IAI3B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU;IAOrD;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU;CAMtD"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SkillpkgMcpServer - MCP Server implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides MCP tools for AI agents to manage skills.
|
|
5
|
+
*/
|
|
6
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
7
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
8
|
+
import { ListToolsRequestSchema, CallToolRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
9
|
+
export class SkillpkgMcpServer {
|
|
10
|
+
options;
|
|
11
|
+
tools = new Map();
|
|
12
|
+
server = null;
|
|
13
|
+
transport = null;
|
|
14
|
+
running = false;
|
|
15
|
+
constructor(options = {}) {
|
|
16
|
+
this.options = {
|
|
17
|
+
scope: options.scope || 'local',
|
|
18
|
+
projectPath: options.projectPath || process.cwd(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Start the MCP server
|
|
23
|
+
*/
|
|
24
|
+
async start() {
|
|
25
|
+
if (this.running) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
// Log to stderr to avoid MCP protocol interference
|
|
29
|
+
console.error('[skillpkg-mcp] Starting MCP server...');
|
|
30
|
+
// Initialize MCP Server
|
|
31
|
+
this.server = new Server({
|
|
32
|
+
name: 'skillpkg',
|
|
33
|
+
version: '0.1.0',
|
|
34
|
+
}, {
|
|
35
|
+
capabilities: {
|
|
36
|
+
tools: { listChanged: true },
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
// Register request handlers
|
|
40
|
+
this.setupRequestHandlers();
|
|
41
|
+
// Start stdio transport
|
|
42
|
+
this.transport = new StdioServerTransport();
|
|
43
|
+
await this.server.connect(this.transport);
|
|
44
|
+
this.running = true;
|
|
45
|
+
console.error('[skillpkg-mcp] Server started');
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Setup MCP request handlers
|
|
49
|
+
*/
|
|
50
|
+
setupRequestHandlers() {
|
|
51
|
+
if (!this.server)
|
|
52
|
+
return;
|
|
53
|
+
// Handle tool listing
|
|
54
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
55
|
+
const tools = Array.from(this.tools.values()).map((handler) => ({
|
|
56
|
+
name: handler.name,
|
|
57
|
+
description: handler.description,
|
|
58
|
+
inputSchema: handler.inputSchema,
|
|
59
|
+
}));
|
|
60
|
+
return { tools };
|
|
61
|
+
});
|
|
62
|
+
// Handle tool calls
|
|
63
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
64
|
+
const { name, arguments: args } = request.params;
|
|
65
|
+
const handler = this.tools.get(name);
|
|
66
|
+
if (!handler) {
|
|
67
|
+
return {
|
|
68
|
+
content: [
|
|
69
|
+
{
|
|
70
|
+
type: 'text',
|
|
71
|
+
text: `Error: Unknown tool "${name}". Available tools: ${Array.from(this.tools.keys()).join(', ')}`,
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
isError: true,
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
const result = await handler.execute(args);
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
83
|
+
return {
|
|
84
|
+
content: [
|
|
85
|
+
{
|
|
86
|
+
type: 'text',
|
|
87
|
+
text: `Error: ${errorMessage}`,
|
|
88
|
+
},
|
|
89
|
+
],
|
|
90
|
+
isError: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Stop the MCP server
|
|
97
|
+
*/
|
|
98
|
+
async stop() {
|
|
99
|
+
if (!this.running) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
console.error('[skillpkg-mcp] Stopping server...');
|
|
103
|
+
if (this.server) {
|
|
104
|
+
await this.server.close();
|
|
105
|
+
this.server = null;
|
|
106
|
+
}
|
|
107
|
+
this.transport = null;
|
|
108
|
+
this.running = false;
|
|
109
|
+
console.error('[skillpkg-mcp] Server stopped');
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Register a tool handler
|
|
113
|
+
*/
|
|
114
|
+
registerTool(handler) {
|
|
115
|
+
this.tools.set(handler.name, handler);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Register multiple tool handlers
|
|
119
|
+
*/
|
|
120
|
+
registerTools(handlers) {
|
|
121
|
+
for (const handler of handlers) {
|
|
122
|
+
this.registerTool(handler);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Get registered tools
|
|
127
|
+
*/
|
|
128
|
+
getTools() {
|
|
129
|
+
return Array.from(this.tools.values());
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Check if server is running
|
|
133
|
+
*/
|
|
134
|
+
isRunning() {
|
|
135
|
+
return this.running;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get server options
|
|
139
|
+
*/
|
|
140
|
+
getOptions() {
|
|
141
|
+
return { ...this.options };
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Create error result
|
|
145
|
+
*/
|
|
146
|
+
static createErrorResult(message) {
|
|
147
|
+
return {
|
|
148
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
149
|
+
isError: true,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Create success result
|
|
154
|
+
*/
|
|
155
|
+
static createSuccessResult(data) {
|
|
156
|
+
const text = typeof data === 'string' ? data : JSON.stringify(data, null, 2);
|
|
157
|
+
return {
|
|
158
|
+
content: [{ type: 'text', text }],
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Handlers Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all tool handlers for the MCP server.
|
|
5
|
+
* Each tool is designed to be AI-friendly with clear descriptions and structured outputs.
|
|
6
|
+
*/
|
|
7
|
+
import type { ToolHandler } from '../types.js';
|
|
8
|
+
import { createListSkillsHandler } from './list-skills.js';
|
|
9
|
+
import { createLoadSkillHandler } from './load-skill.js';
|
|
10
|
+
import { createSearchSkillsHandler } from './search-skills.js';
|
|
11
|
+
import { createInstallSkillHandler } from './install-skill.js';
|
|
12
|
+
import { createUninstallSkillHandler } from './uninstall-skill.js';
|
|
13
|
+
import { createSkillInfoHandler } from './skill-info.js';
|
|
14
|
+
import { createRecommendSkillHandler } from './recommend-skill.js';
|
|
15
|
+
/**
|
|
16
|
+
* Create all tool handlers
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAllToolHandlers(): ToolHandler[];
|
|
19
|
+
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
20
|
+
export * from './utils.js';
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,EAAE,CAarD;AAGD,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AAGF,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Handlers Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all tool handlers for the MCP server.
|
|
5
|
+
* Each tool is designed to be AI-friendly with clear descriptions and structured outputs.
|
|
6
|
+
*/
|
|
7
|
+
// Import all tool handlers
|
|
8
|
+
import { createListSkillsHandler } from './list-skills.js';
|
|
9
|
+
import { createLoadSkillHandler } from './load-skill.js';
|
|
10
|
+
import { createSearchSkillsHandler } from './search-skills.js';
|
|
11
|
+
import { createInstallSkillHandler } from './install-skill.js';
|
|
12
|
+
import { createUninstallSkillHandler } from './uninstall-skill.js';
|
|
13
|
+
import { createSkillInfoHandler } from './skill-info.js';
|
|
14
|
+
import { createRecommendSkillHandler } from './recommend-skill.js';
|
|
15
|
+
/**
|
|
16
|
+
* Create all tool handlers
|
|
17
|
+
*/
|
|
18
|
+
export function createAllToolHandlers() {
|
|
19
|
+
return [
|
|
20
|
+
// Core skill management
|
|
21
|
+
createListSkillsHandler(),
|
|
22
|
+
createLoadSkillHandler(),
|
|
23
|
+
createInstallSkillHandler(),
|
|
24
|
+
createUninstallSkillHandler(),
|
|
25
|
+
// Search & Discovery
|
|
26
|
+
createSearchSkillsHandler(),
|
|
27
|
+
createSkillInfoHandler(),
|
|
28
|
+
createRecommendSkillHandler(),
|
|
29
|
+
];
|
|
30
|
+
}
|
|
31
|
+
// Export individual handlers for selective use
|
|
32
|
+
export { createListSkillsHandler, createLoadSkillHandler, createSearchSkillsHandler, createInstallSkillHandler, createUninstallSkillHandler, createSkillInfoHandler, createRecommendSkillHandler, };
|
|
33
|
+
// Re-export utilities
|
|
34
|
+
export * from './utils.js';
|
|
35
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,2BAA2B;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AAEnE;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,wBAAwB;QACxB,uBAAuB,EAAE;QACzB,sBAAsB,EAAE;QACxB,yBAAyB,EAAE;QAC3B,2BAA2B,EAAE;QAE7B,qBAAqB;QACrB,yBAAyB,EAAE;QAC3B,sBAAsB,EAAE;QACxB,2BAA2B,EAAE;KAC9B,CAAC;AACJ,CAAC;AAED,+CAA+C;AAC/C,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,2BAA2B,GAC5B,CAAC;AAEF,sBAAsB;AACtB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: install_skill
|
|
3
|
+
*
|
|
4
|
+
* Installs a skill from registry, GitHub, Gist, URL, or local path.
|
|
5
|
+
*/
|
|
6
|
+
import type { ToolHandler } from '../types.js';
|
|
7
|
+
export declare function createInstallSkillHandler(): ToolHandler;
|
|
8
|
+
//# sourceMappingURL=install-skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install-skill.d.ts","sourceRoot":"","sources":["../../src/tools/install-skill.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiE,MAAM,aAAa,CAAC;AA+H9G,wBAAgB,yBAAyB,IAAI,WAAW,CAwIvD"}
|