@baitong-dev/skills-mcp 0.0.2 → 0.0.4

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.
Files changed (2) hide show
  1. package/dist/index.js +34 -127
  2. package/package.json +5 -2
package/dist/index.js CHANGED
@@ -5,38 +5,14 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
7
7
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
8
- const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
9
8
  const fs_1 = __importDefault(require("fs"));
10
- const http_1 = require("http");
11
9
  const path_1 = __importDefault(require("path"));
12
10
  const zod_1 = __importDefault(require("zod"));
13
- const commander_1 = require("commander");
14
11
  const mcp_helpers_1 = require("@baitong-dev/mcp-helpers");
15
12
  // eslint-disable-next-line @typescript-eslint/no-require-imports
16
13
  const yamlFront = require('yaml-front-matter');
17
- // 命令行参数处理
18
- const program = new commander_1.Command()
19
- .option('--transport <stdio|http|sse>', 'transport type', 'stdio')
20
- .option('--port <number>', 'port for HTTP/SSE transport', '3000')
21
- .parse(process.argv);
22
- const cliOptions = program.opts();
23
- const allowedTransports = ['stdio', 'http'];
24
- if (!allowedTransports.includes(cliOptions.transport)) {
25
- console.error(`Invalid --transport value: '${cliOptions.transport}'. Must be one of: stdio, http, sse.`);
26
- process.exit(1);
27
- }
28
14
  const MCP_NAME = 'Skills MCP';
29
- const MCP_VERSION = '0.0.1';
30
- const PORT = parseInt(cliOptions.port, 10);
31
- const TRANSPORT_TYPE = (cliOptions.transport || 'stdio');
32
- const logInfo = (...args) => {
33
- if (TRANSPORT_TYPE === 'stdio') {
34
- console.error(...args);
35
- }
36
- else {
37
- console.log(...args);
38
- }
39
- };
15
+ const MCP_VERSION = '0.0.4';
40
16
  function getSkillsRootDir() {
41
17
  const dir = path_1.default.join(mcp_helpers_1.MCP_HOME_DIR, 'skills');
42
18
  if (!fs_1.default.existsSync(dir)) {
@@ -54,7 +30,7 @@ function loadSkillsMetadata() {
54
30
  JSON.parse(fs_1.default.readFileSync(path_1.default.join(mcp_helpers_1.MCP_HOME_DIR, 'config', 'skills_config.json'), 'utf-8'))
55
31
  .skills || [];
56
32
  }
57
- catch (error) {
33
+ catch (_) {
58
34
  skillConfigs = [];
59
35
  }
60
36
  return skillsRootDirs
@@ -114,7 +90,8 @@ Available skills:
114
90
 
115
91
  ${metadata.map(skill => `- ${skill.name}: ${skill.description}`).join('\n')}`,
116
92
  inputSchema: zod_1.default.object({
117
- skillName: zod_1.default.string().describe(`The name of the skill from available skills${hint}`)
93
+ skillName: zod_1.default.string().describe(`The name of the skill from available skills${hint}`),
94
+ toolInfo: mcp_helpers_1.Tool.Info
118
95
  })
119
96
  }, async ({ skillName }) => {
120
97
  if (metadata.length === 0) {
@@ -143,21 +120,28 @@ ${metadata.map(skill => `- ${skill.name}: ${skill.description}`).join('\n')}`,
143
120
  const skillCwd = getSkillCwd(skillName);
144
121
  const skillFilePath = getSkillFilePath(skillName);
145
122
  const json = readSkillJson(skillFilePath);
146
- return {
147
- content: [
148
- {
149
- type: 'text',
150
- text: `Base directory for this skill: ${skillCwd}
123
+ const result = {
124
+ title: `Loaded skill: ${skillName}`,
125
+ metadata: {
126
+ name: skillName,
127
+ dir: skillCwd
128
+ },
129
+ output: `Base directory for this skill: ${skillCwd}
151
130
 
152
131
  ${json.__content}`
153
- }
154
- ]
132
+ };
133
+ return {
134
+ content: [{ type: 'text', text: result.output }],
135
+ structuredContent: result
155
136
  };
156
137
  });
157
138
  }
158
139
  function registerRefreshSkills(server) {
159
140
  server.registerTool('reload_skills', {
160
- description: `Reload skills metadata. Especially after creating a new skill.` // 尤其在创建技能后要调用下重新加载技能
141
+ description: `Reload skills metadata. Especially after creating a new skill.`, // 尤其在创建技能后要调用下重新加载技能
142
+ inputSchema: zod_1.default.object({
143
+ toolInfo: mcp_helpers_1.Tool.Info
144
+ })
161
145
  }, async () => {
162
146
  return {
163
147
  content: [
@@ -170,100 +154,23 @@ function registerRefreshSkills(server) {
170
154
  });
171
155
  }
172
156
  // 创建MCP服务器实例
173
- function createServerInstance() {
174
- const server = new mcp_js_1.McpServer({
175
- name: MCP_NAME,
176
- version: MCP_VERSION
177
- }, {
178
- capabilities: {
179
- logging: {}
180
- }
181
- });
182
- // 注册所有工具
183
- registerLoadSkill(server);
184
- registerRefreshSkills(server);
185
- return server;
186
- }
187
- async function main() {
188
- if (TRANSPORT_TYPE === 'http') {
189
- const httpServer = (0, http_1.createServer)(async (req, res) => {
190
- const url = new URL(req.url || '', `http://${req.headers.host}`).pathname;
191
- // 设置 CORS 头
192
- res.setHeader('Access-Control-Allow-Origin', '*');
193
- res.setHeader('Access-Control-Allow-Methods', 'GET,POST,OPTIONS,DELETE');
194
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type, MCP-Session-Id, mcp-session-id');
195
- // 处理预检请求
196
- if (req.method === 'OPTIONS') {
197
- res.writeHead(200);
198
- res.end();
199
- return;
200
- }
201
- try {
202
- // 为每个请求创建新的服务器实例
203
- const requestServer = createServerInstance();
204
- if (url === '/mcp') {
205
- const transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
206
- sessionIdGenerator: undefined
207
- });
208
- await requestServer.connect(transport);
209
- await transport.handleRequest(req, res);
210
- }
211
- else if (url === '/health') {
212
- res.writeHead(200, { 'Content-Type': 'application/json' });
213
- res.end(JSON.stringify({ status: 'ok', transport: TRANSPORT_TYPE }));
214
- }
215
- else if (url === '/info') {
216
- res.writeHead(200, { 'Content-Type': 'application/json' });
217
- res.end(JSON.stringify({
218
- name: `${MCP_NAME} Server`,
219
- version: MCP_VERSION,
220
- transport: TRANSPORT_TYPE,
221
- endpoints: {
222
- mcp: '/mcp',
223
- health: '/health',
224
- info: '/info'
225
- }
226
- }));
227
- }
228
- else {
229
- res.writeHead(404);
230
- res.end('Not found');
231
- }
232
- }
233
- catch (error) {
234
- console.error('Error handling request: ', error);
235
- if (!res.headersSent) {
236
- res.writeHead(500);
237
- res.end('Internal Server Error');
238
- }
239
- }
240
- });
241
- httpServer.listen(PORT, () => {
242
- logInfo(`${MCP_NAME} ${TRANSPORT_TYPE.toUpperCase()} server started.`);
243
- logInfo(`MCP endpoint: http://localhost:${PORT}/mcp`);
244
- logInfo(`Health: http://localhost:${PORT}/health`);
245
- logInfo(`Info: http://localhost:${PORT}/info`);
246
- });
157
+ const server = new mcp_js_1.McpServer({
158
+ name: MCP_NAME,
159
+ version: MCP_VERSION
160
+ }, {
161
+ capabilities: {
162
+ logging: {}
247
163
  }
248
- else {
249
- // stdio 模式
250
- const server = createServerInstance();
251
- const transport = new stdio_js_1.StdioServerTransport();
252
- await server.connect(transport);
253
- logInfo(`${MCP_NAME} ${TRANSPORT_TYPE.toUpperCase()} server started.`);
254
- }
255
- }
256
- // 优雅关闭
257
- process.on('SIGINT', async () => {
258
- logInfo(`\nShutting down ${MCP_NAME} server...`);
259
- process.exit(0);
260
164
  });
261
- process.on('SIGTERM', async () => {
262
- logInfo(`\nReceived termination signal, shutting down ${MCP_NAME} server...`);
263
- process.exit(0);
264
- });
265
- // 启动服务器
165
+ // 注册所有工具
166
+ registerLoadSkill(server);
167
+ registerRefreshSkills(server);
168
+ async function main() {
169
+ const transport = new stdio_js_1.StdioServerTransport();
170
+ await server.connect(transport);
171
+ console.error(`${MCP_NAME} Server v${MCP_VERSION} running`);
172
+ }
266
173
  main().catch(error => {
267
- logInfo('Starting server failed:', error);
174
+ console.error('Fatal error in main():', error);
268
175
  process.exit(1);
269
176
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@baitong-dev/skills-mcp",
3
- "version": "0.0.2",
3
+ "version": "0.0.4",
4
4
  "main": "./dist/index.js",
5
5
  "bin": {
6
6
  "@baitong-dev/skills-mcp": "./dist/index.js"
@@ -19,7 +19,10 @@
19
19
  "commander": "^14.0.3",
20
20
  "yaml-front-matter": "^4.1.1",
21
21
  "zod": "^4.3.4",
22
- "@baitong-dev/mcp-helpers": "0.0.1"
22
+ "@baitong-dev/mcp-helpers": "0.0.5"
23
+ },
24
+ "devDependencies": {
25
+ "typescript": "^5.9.2"
23
26
  },
24
27
  "publishConfig": {
25
28
  "access": "public",