@codemcp/agentskills-mcp 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/LICENSE +19 -0
- package/dist/bin.d.ts +12 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +78 -0
- package/dist/bin.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +161 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +361 -0
- package/dist/server.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
+
in the Software without restriction, including without limitation the rights
|
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
furnished to do so, subject to the following conditions:
|
|
9
|
+
|
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
|
11
|
+
copies or substantial portions of the Software.
|
|
12
|
+
|
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
19
|
+
SOFTWARE.
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Executable entry point for Agent Skills MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Usage: agentskills-mcp [project-directory]
|
|
6
|
+
*
|
|
7
|
+
* If no directory provided, uses current working directory.
|
|
8
|
+
* Reads package.json from project directory to load skill configuration.
|
|
9
|
+
* Skills are loaded from .agentskills/skills within the project directory.
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=bin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AAEA;;;;;;;;GAQG"}
|
package/dist/bin.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Executable entry point for Agent Skills MCP Server
|
|
4
|
+
*
|
|
5
|
+
* Usage: agentskills-mcp [project-directory]
|
|
6
|
+
*
|
|
7
|
+
* If no directory provided, uses current working directory.
|
|
8
|
+
* Reads package.json from project directory to load skill configuration.
|
|
9
|
+
* Skills are loaded from .agentskills/skills within the project directory.
|
|
10
|
+
*/
|
|
11
|
+
import { SkillRegistry, PackageConfigManager } from "@codemcp/agentskills-core";
|
|
12
|
+
import { MCPServer } from "./server.js";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import * as fs from "node:fs";
|
|
15
|
+
async function main() {
|
|
16
|
+
// Get project directory from CLI args or use current directory
|
|
17
|
+
const projectDir = process.argv[2] || process.cwd();
|
|
18
|
+
// Validate project directory exists
|
|
19
|
+
if (!fs.existsSync(projectDir)) {
|
|
20
|
+
console.error(`Project directory not found: ${projectDir}`);
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
// Validate it's a directory
|
|
24
|
+
const projectStat = fs.statSync(projectDir);
|
|
25
|
+
if (!projectStat.isDirectory()) {
|
|
26
|
+
console.error(`Not a directory: ${projectDir}`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
try {
|
|
30
|
+
// Check if package.json exists
|
|
31
|
+
const packageJsonPath = path.join(projectDir, "package.json");
|
|
32
|
+
if (!fs.existsSync(packageJsonPath)) {
|
|
33
|
+
console.error(`package.json not found in: ${projectDir}`);
|
|
34
|
+
console.error(`\nPlease create a package.json with agentskills field:`);
|
|
35
|
+
console.error(`{`);
|
|
36
|
+
console.error(` "name": "my-project",`);
|
|
37
|
+
console.error(` "agentskills": {`);
|
|
38
|
+
console.error(` "skill-name": "npm:package-name" or "file:./path"`);
|
|
39
|
+
console.error(` }`);
|
|
40
|
+
console.error(`}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
// Read package.json configuration
|
|
44
|
+
const configManager = new PackageConfigManager(projectDir);
|
|
45
|
+
const config = await configManager.loadConfig();
|
|
46
|
+
// Get skills directory from config (or use default)
|
|
47
|
+
const skillsDir = path.join(projectDir, config.config.skillsDirectory);
|
|
48
|
+
// Check if skills directory exists
|
|
49
|
+
if (!fs.existsSync(skillsDir)) {
|
|
50
|
+
console.error(`Skills directory not found: ${skillsDir}`);
|
|
51
|
+
console.error(`\nRun 'agentskills install' to install configured skills.`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// Warn if no skills are configured
|
|
55
|
+
if (Object.keys(config.skills).length === 0) {
|
|
56
|
+
console.error(`Warning: No skills configured in package.json agentskills field`);
|
|
57
|
+
console.error(`The server will start but no skills will be available.`);
|
|
58
|
+
}
|
|
59
|
+
// Create registry and load skills
|
|
60
|
+
const registry = new SkillRegistry();
|
|
61
|
+
await registry.loadSkills(skillsDir);
|
|
62
|
+
// Create and start server
|
|
63
|
+
const server = new MCPServer(registry);
|
|
64
|
+
await server.start();
|
|
65
|
+
// Server is now running via stdio
|
|
66
|
+
// Keep process alive until stdin closes
|
|
67
|
+
process.stdin.on("close", () => {
|
|
68
|
+
process.exit(0);
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// Only write to stderr if we haven't started stdio communication
|
|
73
|
+
process.stderr.write(`Failed to start MCP server: ${error}\n`);
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
main();
|
|
78
|
+
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skills MCP Server
|
|
3
|
+
*
|
|
4
|
+
* This server exposes Agent Skills functionality through the Model Context Protocol (MCP).
|
|
5
|
+
* It provides tools for discovering, validating, and installing skills.
|
|
6
|
+
*/
|
|
7
|
+
export { MCPServer } from "./server.js";
|
|
8
|
+
/**
|
|
9
|
+
* Main MCP server class for Agent Skills
|
|
10
|
+
*
|
|
11
|
+
* Minimal implementation to pass smoke tests.
|
|
12
|
+
* Will be expanded as we implement actual functionality.
|
|
13
|
+
*
|
|
14
|
+
* @deprecated Use MCPServer instead
|
|
15
|
+
*/
|
|
16
|
+
export declare class AgentSkillsServer {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
19
|
+
export default AgentSkillsServer;
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;GAOG;AACH,qBAAa,iBAAiB;;CAI7B;AAGD,eAAe,iBAAiB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Skills MCP Server
|
|
3
|
+
*
|
|
4
|
+
* This server exposes Agent Skills functionality through the Model Context Protocol (MCP).
|
|
5
|
+
* It provides tools for discovering, validating, and installing skills.
|
|
6
|
+
*/
|
|
7
|
+
// Export the core MCPServer class
|
|
8
|
+
export { MCPServer } from "./server.js";
|
|
9
|
+
/**
|
|
10
|
+
* Main MCP server class for Agent Skills
|
|
11
|
+
*
|
|
12
|
+
* Minimal implementation to pass smoke tests.
|
|
13
|
+
* Will be expanded as we implement actual functionality.
|
|
14
|
+
*
|
|
15
|
+
* @deprecated Use MCPServer instead
|
|
16
|
+
*/
|
|
17
|
+
export class AgentSkillsServer {
|
|
18
|
+
constructor() {
|
|
19
|
+
// Minimal constructor for now
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// Re-export for convenience and backward compatibility
|
|
23
|
+
export default AgentSkillsServer;
|
|
24
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,kCAAkC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,OAAO,iBAAiB;IAC5B;QACE,8BAA8B;IAChC,CAAC;CACF;AAED,uDAAuD;AACvD,eAAe,iBAAiB,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCPServer - Core MCP server implementation for Agent Skills
|
|
3
|
+
*
|
|
4
|
+
* This class implements the Model Context Protocol (MCP) server that exposes
|
|
5
|
+
* Agent Skills as tools and resources. It uses the @modelcontextprotocol/sdk
|
|
6
|
+
* with stdio transport for communication with MCP clients.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - Uses McpServer from @modelcontextprotocol/sdk for MCP protocol handling
|
|
10
|
+
* - Accepts SkillRegistry via dependency injection (separation of concerns)
|
|
11
|
+
* - Announces capabilities: tools and resources
|
|
12
|
+
* - Routes requests to appropriate handlers
|
|
13
|
+
* - Server is immediately ready after construction (no explicit lifecycle)
|
|
14
|
+
*/
|
|
15
|
+
import { SkillRegistry } from "@codemcp/agentskills-core";
|
|
16
|
+
/**
|
|
17
|
+
* MCPServer - Main server class for Agent Skills MCP integration
|
|
18
|
+
*
|
|
19
|
+
* Features:
|
|
20
|
+
* - Accepts SkillRegistry via dependency injection
|
|
21
|
+
* - Announces tools and resources capabilities
|
|
22
|
+
* - Server is "live" immediately upon construction
|
|
23
|
+
* - Routes tools/list, tools/call, resources/list, resources/read requests
|
|
24
|
+
* - Error handling without crashes
|
|
25
|
+
*/
|
|
26
|
+
export declare class MCPServer {
|
|
27
|
+
private mcpServer;
|
|
28
|
+
private registry;
|
|
29
|
+
private transport;
|
|
30
|
+
/**
|
|
31
|
+
* Creates a new MCPServer instance
|
|
32
|
+
*
|
|
33
|
+
* Note: Call start() to begin accepting MCP protocol messages.
|
|
34
|
+
*
|
|
35
|
+
* @param registry - Pre-initialized SkillRegistry instance
|
|
36
|
+
*/
|
|
37
|
+
constructor(registry: SkillRegistry);
|
|
38
|
+
/**
|
|
39
|
+
* Start the MCP server and begin accepting protocol messages
|
|
40
|
+
*
|
|
41
|
+
* This connects the server to the stdio transport. The method returns
|
|
42
|
+
* immediately after connection is established. The server will continue
|
|
43
|
+
* running until stdin is closed.
|
|
44
|
+
*/
|
|
45
|
+
start(): Promise<void>;
|
|
46
|
+
/**
|
|
47
|
+
* Register MCP request handlers
|
|
48
|
+
*
|
|
49
|
+
* Registers the use_skill tool for retrieving skill instructions.
|
|
50
|
+
* Registers resource handlers for exposing skills as MCP resources.
|
|
51
|
+
*/
|
|
52
|
+
private registerHandlers;
|
|
53
|
+
/**
|
|
54
|
+
* Get all skill names from the registry
|
|
55
|
+
*
|
|
56
|
+
* @returns Array of skill names
|
|
57
|
+
*/
|
|
58
|
+
private getSkillNames;
|
|
59
|
+
/**
|
|
60
|
+
* Get list of concrete resources (internal helper for MCP protocol)
|
|
61
|
+
*
|
|
62
|
+
* Returns all skills as concrete resources with skill:// URIs.
|
|
63
|
+
* Each skill is exposed as an individual resource for discovery.
|
|
64
|
+
*
|
|
65
|
+
* @returns Array of resource definitions for MCP protocol
|
|
66
|
+
*/
|
|
67
|
+
private getResourcesList;
|
|
68
|
+
/**
|
|
69
|
+
* Get tool description with list of available skills
|
|
70
|
+
*
|
|
71
|
+
* Generates a dynamic description that includes all loaded skills
|
|
72
|
+
* with their descriptions for better discoverability.
|
|
73
|
+
*
|
|
74
|
+
* @returns Tool description string with skill list
|
|
75
|
+
*/
|
|
76
|
+
private getToolDescription;
|
|
77
|
+
/**
|
|
78
|
+
* Handle use_skill tool execution
|
|
79
|
+
*
|
|
80
|
+
* Retrieves skill instructions for the requested skill.
|
|
81
|
+
* Returns only instructions - metadata is available via resources.
|
|
82
|
+
*
|
|
83
|
+
* @param args - Tool arguments with skill_name and optional arguments
|
|
84
|
+
* @returns MCP tool result with skill instructions
|
|
85
|
+
*/
|
|
86
|
+
private handleUseSkillTool;
|
|
87
|
+
/**
|
|
88
|
+
* Get server capabilities
|
|
89
|
+
*
|
|
90
|
+
* @returns Server capabilities object
|
|
91
|
+
*/
|
|
92
|
+
getCapabilities(): {
|
|
93
|
+
tools?: object;
|
|
94
|
+
resources?: object;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Get list of available tools
|
|
98
|
+
*
|
|
99
|
+
* Returns the use_skill tool definition with dynamic skill enumeration.
|
|
100
|
+
*
|
|
101
|
+
* @returns Array of tool definitions
|
|
102
|
+
*/
|
|
103
|
+
getTools(): unknown[];
|
|
104
|
+
/**
|
|
105
|
+
* Call a tool
|
|
106
|
+
*
|
|
107
|
+
* Handles tool execution for use_skill tool.
|
|
108
|
+
*
|
|
109
|
+
* @param toolName - Name of the tool to call
|
|
110
|
+
* @param args - Arguments object for the tool
|
|
111
|
+
* @returns Tool execution result
|
|
112
|
+
*/
|
|
113
|
+
callTool(toolName: string, args: Record<string, unknown>): Promise<unknown>;
|
|
114
|
+
/**
|
|
115
|
+
* Get list of resource templates (internal helper for MCP protocol)
|
|
116
|
+
*
|
|
117
|
+
* Returns a single template that covers all skills using the {skillName} pattern.
|
|
118
|
+
* Clients construct URIs dynamically using skill names from the tool's enum.
|
|
119
|
+
*
|
|
120
|
+
* @returns Array with single resource template for MCP protocol
|
|
121
|
+
*/
|
|
122
|
+
private getResourceTemplatesList;
|
|
123
|
+
/**
|
|
124
|
+
* Handle resource read request (internal helper for MCP protocol)
|
|
125
|
+
*
|
|
126
|
+
* Parses skill:// URIs and returns SKILL.md content.
|
|
127
|
+
*
|
|
128
|
+
* @param uri - Resource URI (skill://<name>)
|
|
129
|
+
* @returns MCP resource content response
|
|
130
|
+
*/
|
|
131
|
+
private handleReadResource;
|
|
132
|
+
/**
|
|
133
|
+
* Get list of resources
|
|
134
|
+
*
|
|
135
|
+
* Returns concrete list of all skills as resources. This method is for testing and
|
|
136
|
+
* external callers. The MCP protocol uses getResourcesList internally.
|
|
137
|
+
*
|
|
138
|
+
* @returns Array of resource definitions
|
|
139
|
+
*/
|
|
140
|
+
getResources(): unknown[];
|
|
141
|
+
/**
|
|
142
|
+
* Get list of resource templates
|
|
143
|
+
*
|
|
144
|
+
* Returns resource templates for skills. This method is for testing and
|
|
145
|
+
* external callers. The MCP protocol uses getResourceTemplatesList internally.
|
|
146
|
+
*
|
|
147
|
+
* @returns Array of resource template definitions
|
|
148
|
+
*/
|
|
149
|
+
getResourceTemplates(): unknown[];
|
|
150
|
+
/**
|
|
151
|
+
* Read a resource
|
|
152
|
+
*
|
|
153
|
+
* Reads a skill resource by URI. This method is for testing and
|
|
154
|
+
* external callers. The MCP protocol uses handleReadResource internally.
|
|
155
|
+
*
|
|
156
|
+
* @param uri - Resource URI
|
|
157
|
+
* @returns Resource content
|
|
158
|
+
*/
|
|
159
|
+
readResource(uri: string): Promise<unknown>;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAQ1D;;;;;;;;;GASG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,SAAS,CAAuB;IAExC;;;;;;OAMG;gBACS,QAAQ,EAAE,aAAa;IAwBnC;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAyExB;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAKrB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB;IAgBxB;;;;;;;OAOG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;;;;;;;OAQG;YACW,kBAAkB;IAwBhC;;;;OAIG;IACH,eAAe,IAAI;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE;IAOzD;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO,EAAE;IAwBrB;;;;;;;;OAQG;IACG,QAAQ,CACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC;IAmBnB;;;;;;;OAOG;IACH,OAAO,CAAC,wBAAwB;IA0ChC;;;;;;;OAOG;YACW,kBAAkB;IA4BhC;;;;;;;OAOG;IACH,YAAY,IAAI,OAAO,EAAE;IAIzB;;;;;;;OAOG;IACH,oBAAoB,IAAI,OAAO,EAAE;IAIjC;;;;;;;;OAQG;IACG,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAUlD"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCPServer - Core MCP server implementation for Agent Skills
|
|
3
|
+
*
|
|
4
|
+
* This class implements the Model Context Protocol (MCP) server that exposes
|
|
5
|
+
* Agent Skills as tools and resources. It uses the @modelcontextprotocol/sdk
|
|
6
|
+
* with stdio transport for communication with MCP clients.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - Uses McpServer from @modelcontextprotocol/sdk for MCP protocol handling
|
|
10
|
+
* - Accepts SkillRegistry via dependency injection (separation of concerns)
|
|
11
|
+
* - Announces capabilities: tools and resources
|
|
12
|
+
* - Routes requests to appropriate handlers
|
|
13
|
+
* - Server is immediately ready after construction (no explicit lifecycle)
|
|
14
|
+
*/
|
|
15
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
16
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
17
|
+
import { z } from "zod";
|
|
18
|
+
import { ListResourcesRequestSchema, ListResourceTemplatesRequestSchema, ReadResourceRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
19
|
+
/**
|
|
20
|
+
* MCPServer - Main server class for Agent Skills MCP integration
|
|
21
|
+
*
|
|
22
|
+
* Features:
|
|
23
|
+
* - Accepts SkillRegistry via dependency injection
|
|
24
|
+
* - Announces tools and resources capabilities
|
|
25
|
+
* - Server is "live" immediately upon construction
|
|
26
|
+
* - Routes tools/list, tools/call, resources/list, resources/read requests
|
|
27
|
+
* - Error handling without crashes
|
|
28
|
+
*/
|
|
29
|
+
export class MCPServer {
|
|
30
|
+
mcpServer;
|
|
31
|
+
registry;
|
|
32
|
+
transport;
|
|
33
|
+
/**
|
|
34
|
+
* Creates a new MCPServer instance
|
|
35
|
+
*
|
|
36
|
+
* Note: Call start() to begin accepting MCP protocol messages.
|
|
37
|
+
*
|
|
38
|
+
* @param registry - Pre-initialized SkillRegistry instance
|
|
39
|
+
*/
|
|
40
|
+
constructor(registry) {
|
|
41
|
+
this.registry = registry;
|
|
42
|
+
// Initialize MCP server with capabilities
|
|
43
|
+
this.mcpServer = new McpServer({
|
|
44
|
+
name: "agent-skills-mcp-server",
|
|
45
|
+
version: "0.1.0"
|
|
46
|
+
}, {
|
|
47
|
+
capabilities: {
|
|
48
|
+
tools: {},
|
|
49
|
+
resources: {}
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
// Register handlers BEFORE connecting (required by SDK)
|
|
53
|
+
this.registerHandlers();
|
|
54
|
+
// Create stdio transport
|
|
55
|
+
this.transport = new StdioServerTransport();
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Start the MCP server and begin accepting protocol messages
|
|
59
|
+
*
|
|
60
|
+
* This connects the server to the stdio transport. The method returns
|
|
61
|
+
* immediately after connection is established. The server will continue
|
|
62
|
+
* running until stdin is closed.
|
|
63
|
+
*/
|
|
64
|
+
async start() {
|
|
65
|
+
await this.mcpServer.connect(this.transport);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Register MCP request handlers
|
|
69
|
+
*
|
|
70
|
+
* Registers the use_skill tool for retrieving skill instructions.
|
|
71
|
+
* Registers resource handlers for exposing skills as MCP resources.
|
|
72
|
+
*/
|
|
73
|
+
registerHandlers() {
|
|
74
|
+
// Get skill names for enum
|
|
75
|
+
const skillNames = this.getSkillNames();
|
|
76
|
+
// Register use_skill tool with Zod schema
|
|
77
|
+
this.mcpServer.registerTool("use_skill", {
|
|
78
|
+
description: this.getToolDescription(),
|
|
79
|
+
inputSchema: {
|
|
80
|
+
skill_name: z
|
|
81
|
+
.enum(skillNames.length > 0
|
|
82
|
+
? skillNames
|
|
83
|
+
: ["_no_skills_available"])
|
|
84
|
+
.describe("Name of the skill to retrieve"),
|
|
85
|
+
arguments: z
|
|
86
|
+
.object({})
|
|
87
|
+
.passthrough()
|
|
88
|
+
.optional()
|
|
89
|
+
.describe("Optional arguments for skill execution context")
|
|
90
|
+
}
|
|
91
|
+
}, async (args) => {
|
|
92
|
+
return this.handleUseSkillTool(args);
|
|
93
|
+
});
|
|
94
|
+
// Access underlying server for resource capabilities
|
|
95
|
+
// Using type assertion as the SDK doesn't expose these methods directly
|
|
96
|
+
const underlyingServer = this.mcpServer.server;
|
|
97
|
+
// Register resource capabilities via the underlying server
|
|
98
|
+
underlyingServer.registerCapabilities({
|
|
99
|
+
resources: {}
|
|
100
|
+
});
|
|
101
|
+
// Register resources/list handler (concrete resources)
|
|
102
|
+
underlyingServer.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
103
|
+
resources: this.getResourcesList()
|
|
104
|
+
}));
|
|
105
|
+
// Register resources/templates/list handler via the underlying server
|
|
106
|
+
underlyingServer.setRequestHandler(ListResourceTemplatesRequestSchema, async () => ({
|
|
107
|
+
resourceTemplates: this.getResourceTemplatesList()
|
|
108
|
+
}));
|
|
109
|
+
// Register resources/read handler via the underlying server
|
|
110
|
+
underlyingServer.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
111
|
+
return this.handleReadResource(request.params.uri);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Get all skill names from the registry
|
|
116
|
+
*
|
|
117
|
+
* @returns Array of skill names
|
|
118
|
+
*/
|
|
119
|
+
getSkillNames() {
|
|
120
|
+
const metadata = this.registry.getAllMetadata();
|
|
121
|
+
return metadata.map((m) => m.name);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Get list of concrete resources (internal helper for MCP protocol)
|
|
125
|
+
*
|
|
126
|
+
* Returns all skills as concrete resources with skill:// URIs.
|
|
127
|
+
* Each skill is exposed as an individual resource for discovery.
|
|
128
|
+
*
|
|
129
|
+
* @returns Array of resource definitions for MCP protocol
|
|
130
|
+
*/
|
|
131
|
+
getResourcesList() {
|
|
132
|
+
const skills = this.registry.getAllMetadata();
|
|
133
|
+
return skills.map((skill) => ({
|
|
134
|
+
uri: `skill://${skill.name}`,
|
|
135
|
+
name: skill.name,
|
|
136
|
+
description: skill.description,
|
|
137
|
+
mimeType: "text/markdown"
|
|
138
|
+
}));
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Get tool description with list of available skills
|
|
142
|
+
*
|
|
143
|
+
* Generates a dynamic description that includes all loaded skills
|
|
144
|
+
* with their descriptions for better discoverability.
|
|
145
|
+
*
|
|
146
|
+
* @returns Tool description string with skill list
|
|
147
|
+
*/
|
|
148
|
+
getToolDescription() {
|
|
149
|
+
const skills = this.registry.getAllMetadata();
|
|
150
|
+
const instruction = "You've got skills! Use them whenever their description matches what you need to accomplish.";
|
|
151
|
+
if (skills.length === 0) {
|
|
152
|
+
return `${instruction} No skills currently loaded.`;
|
|
153
|
+
}
|
|
154
|
+
const skillList = skills
|
|
155
|
+
.map((skill) => `- ${skill.name}: ${skill.description}`)
|
|
156
|
+
.join("\n");
|
|
157
|
+
return `${instruction}
|
|
158
|
+
|
|
159
|
+
Available skills:
|
|
160
|
+
${skillList}`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Handle use_skill tool execution
|
|
164
|
+
*
|
|
165
|
+
* Retrieves skill instructions for the requested skill.
|
|
166
|
+
* Returns only instructions - metadata is available via resources.
|
|
167
|
+
*
|
|
168
|
+
* @param args - Tool arguments with skill_name and optional arguments
|
|
169
|
+
* @returns MCP tool result with skill instructions
|
|
170
|
+
*/
|
|
171
|
+
async handleUseSkillTool(args) {
|
|
172
|
+
const skillName = args.skill_name;
|
|
173
|
+
// Get skill from registry
|
|
174
|
+
const skill = this.registry.getSkill(skillName);
|
|
175
|
+
if (!skill) {
|
|
176
|
+
throw new Error(`Skill not found: ${skillName}`);
|
|
177
|
+
}
|
|
178
|
+
// Return ONLY instructions - simple and clean
|
|
179
|
+
// Metadata is available via resources for discovery
|
|
180
|
+
return {
|
|
181
|
+
content: [
|
|
182
|
+
{
|
|
183
|
+
type: "text",
|
|
184
|
+
text: JSON.stringify({ instructions: skill.body }, null, 2)
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Get server capabilities
|
|
191
|
+
*
|
|
192
|
+
* @returns Server capabilities object
|
|
193
|
+
*/
|
|
194
|
+
getCapabilities() {
|
|
195
|
+
return {
|
|
196
|
+
tools: {},
|
|
197
|
+
resources: {}
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Get list of available tools
|
|
202
|
+
*
|
|
203
|
+
* Returns the use_skill tool definition with dynamic skill enumeration.
|
|
204
|
+
*
|
|
205
|
+
* @returns Array of tool definitions
|
|
206
|
+
*/
|
|
207
|
+
getTools() {
|
|
208
|
+
return [
|
|
209
|
+
{
|
|
210
|
+
name: "use_skill",
|
|
211
|
+
description: this.getToolDescription(),
|
|
212
|
+
inputSchema: {
|
|
213
|
+
type: "object",
|
|
214
|
+
properties: {
|
|
215
|
+
skill_name: {
|
|
216
|
+
type: "string",
|
|
217
|
+
description: "Name of the skill to retrieve",
|
|
218
|
+
enum: this.getSkillNames()
|
|
219
|
+
},
|
|
220
|
+
arguments: {
|
|
221
|
+
type: "object",
|
|
222
|
+
description: "Optional arguments for skill execution context"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
225
|
+
required: ["skill_name"]
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
];
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Call a tool
|
|
232
|
+
*
|
|
233
|
+
* Handles tool execution for use_skill tool.
|
|
234
|
+
*
|
|
235
|
+
* @param toolName - Name of the tool to call
|
|
236
|
+
* @param args - Arguments object for the tool
|
|
237
|
+
* @returns Tool execution result
|
|
238
|
+
*/
|
|
239
|
+
async callTool(toolName, args) {
|
|
240
|
+
try {
|
|
241
|
+
if (toolName === "use_skill") {
|
|
242
|
+
return await this.handleUseSkillTool(args);
|
|
243
|
+
}
|
|
244
|
+
// Return error for unknown tools
|
|
245
|
+
return {
|
|
246
|
+
isError: true,
|
|
247
|
+
error: `Unknown tool: ${toolName}`
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
return {
|
|
252
|
+
isError: true,
|
|
253
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Get list of resource templates (internal helper for MCP protocol)
|
|
259
|
+
*
|
|
260
|
+
* Returns a single template that covers all skills using the {skillName} pattern.
|
|
261
|
+
* Clients construct URIs dynamically using skill names from the tool's enum.
|
|
262
|
+
*
|
|
263
|
+
* @returns Array with single resource template for MCP protocol
|
|
264
|
+
*/
|
|
265
|
+
getResourceTemplatesList() {
|
|
266
|
+
// Get skill names for enum (reuse same method as tool)
|
|
267
|
+
const skillNames = this.getSkillNames();
|
|
268
|
+
return [
|
|
269
|
+
{
|
|
270
|
+
uriTemplate: "skill://{skillName}",
|
|
271
|
+
name: "Agent Skill",
|
|
272
|
+
description: "Access skill instructions and metadata. Use skill names from the use_skill tool's skill_name parameter.",
|
|
273
|
+
mimeType: "text/markdown",
|
|
274
|
+
inputSchema: {
|
|
275
|
+
type: "object",
|
|
276
|
+
properties: {
|
|
277
|
+
skillName: {
|
|
278
|
+
type: "string",
|
|
279
|
+
enum: skillNames,
|
|
280
|
+
description: "Name of the skill to retrieve"
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
required: ["skillName"]
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
];
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Handle resource read request (internal helper for MCP protocol)
|
|
290
|
+
*
|
|
291
|
+
* Parses skill:// URIs and returns SKILL.md content.
|
|
292
|
+
*
|
|
293
|
+
* @param uri - Resource URI (skill://<name>)
|
|
294
|
+
* @returns MCP resource content response
|
|
295
|
+
*/
|
|
296
|
+
async handleReadResource(uri) {
|
|
297
|
+
// Parse URI: skill://<name> or skill://<name>/SKILL.md
|
|
298
|
+
const match = uri.match(/^skill:\/\/([^/]+)/);
|
|
299
|
+
if (!match) {
|
|
300
|
+
throw new Error(`Invalid skill URI: ${uri}`);
|
|
301
|
+
}
|
|
302
|
+
const skillName = match[1];
|
|
303
|
+
const skill = this.registry.getSkill(skillName);
|
|
304
|
+
if (!skill) {
|
|
305
|
+
throw new Error(`Skill not found: ${skillName}`);
|
|
306
|
+
}
|
|
307
|
+
// Return full SKILL.md content
|
|
308
|
+
return {
|
|
309
|
+
contents: [
|
|
310
|
+
{
|
|
311
|
+
uri: uri,
|
|
312
|
+
mimeType: "text/markdown",
|
|
313
|
+
text: skill.body
|
|
314
|
+
}
|
|
315
|
+
]
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get list of resources
|
|
320
|
+
*
|
|
321
|
+
* Returns concrete list of all skills as resources. This method is for testing and
|
|
322
|
+
* external callers. The MCP protocol uses getResourcesList internally.
|
|
323
|
+
*
|
|
324
|
+
* @returns Array of resource definitions
|
|
325
|
+
*/
|
|
326
|
+
getResources() {
|
|
327
|
+
return this.getResourcesList();
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Get list of resource templates
|
|
331
|
+
*
|
|
332
|
+
* Returns resource templates for skills. This method is for testing and
|
|
333
|
+
* external callers. The MCP protocol uses getResourceTemplatesList internally.
|
|
334
|
+
*
|
|
335
|
+
* @returns Array of resource template definitions
|
|
336
|
+
*/
|
|
337
|
+
getResourceTemplates() {
|
|
338
|
+
return this.getResourceTemplatesList();
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Read a resource
|
|
342
|
+
*
|
|
343
|
+
* Reads a skill resource by URI. This method is for testing and
|
|
344
|
+
* external callers. The MCP protocol uses handleReadResource internally.
|
|
345
|
+
*
|
|
346
|
+
* @param uri - Resource URI
|
|
347
|
+
* @returns Resource content
|
|
348
|
+
*/
|
|
349
|
+
async readResource(uri) {
|
|
350
|
+
try {
|
|
351
|
+
return await this.handleReadResource(uri);
|
|
352
|
+
}
|
|
353
|
+
catch (error) {
|
|
354
|
+
return {
|
|
355
|
+
isError: true,
|
|
356
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@codemcp/agentskills-mcp",
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "MCP server implementation for Agent Skills",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"publishConfig": {
|
|
9
|
+
"access": "public"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"agentskills-mcp": "./dist/bin.js"
|
|
13
|
+
},
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"types": "./dist/index.d.ts"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist"
|
|
22
|
+
],
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"@modelcontextprotocol/sdk": "^1.19.1",
|
|
25
|
+
"zod": "4.3.6",
|
|
26
|
+
"@codemcp/agentskills-core": "1.1.0"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "^22.10.7",
|
|
30
|
+
"@typescript-eslint/eslint-plugin": "^8.21.0",
|
|
31
|
+
"@typescript-eslint/parser": "^8.21.0",
|
|
32
|
+
"eslint": "^9.18.0",
|
|
33
|
+
"eslint-config-prettier": "^10.0.1",
|
|
34
|
+
"prettier": "^3.4.2",
|
|
35
|
+
"rimraf": "^6.0.1",
|
|
36
|
+
"typescript": "^5.7.3",
|
|
37
|
+
"typescript-eslint": "8.21.0",
|
|
38
|
+
"vitest": "^3.0.3"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"agentskills",
|
|
42
|
+
"mcp",
|
|
43
|
+
"server"
|
|
44
|
+
],
|
|
45
|
+
"author": "Oliver Jägle <github@beimir.net>",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"scripts": {
|
|
48
|
+
"build": "tsc -p tsconfig.build.json",
|
|
49
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
50
|
+
"clean:build": "rimraf dist",
|
|
51
|
+
"lint": "eslint .",
|
|
52
|
+
"lint:fix": "eslint . --fix",
|
|
53
|
+
"format": "prettier --check .",
|
|
54
|
+
"format:fix": "prettier --write .",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"test:watch": "vitest",
|
|
57
|
+
"typecheck": "tsc --noEmit"
|
|
58
|
+
}
|
|
59
|
+
}
|