@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 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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":"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"}
@@ -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"}
@@ -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
+ }