@yoonion/mimi-seed-mcp 0.3.36 → 0.3.37

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.
@@ -1,13 +1,60 @@
1
1
  import { z } from 'zod';
2
- import { requireJenkinsConfig, saveJenkinsConfig } from '../jenkins/config.js';
2
+ import { loadJenkinsConfig, requireJenkinsConfig, saveJenkinsConfig } from '../jenkins/config.js';
3
3
  import * as creds from '../jenkins/credentials.js';
4
4
  export function registerJenkinsTools(server) {
5
+ // ── 0. 상태 확인 (항상 첫 번째로 호출) ─────────────────────────────────────
6
+ server.tool('jenkins_status', [
7
+ '⭐ Jenkins 관련 작업을 시작하기 전에 반드시 이 도구를 먼저 호출하세요.',
8
+ '현재 Jenkins 연결 설정(~/.mimi-seed/jenkins.json) 유무를 확인합니다.',
9
+ '설정이 없으면 사용자에게 Jenkins URL / 사용자 ID / API Token을 물어본 뒤',
10
+ 'jenkins_save_config를 호출해 저장하세요.',
11
+ 'API Token 발급: Jenkins 대시보드 → [사용자 이름] → 설정 → API Token → "Add new Token".',
12
+ '로컬 Jenkins 없이 회사·외부 서버도 URL만 맞으면 연결 가능합니다.',
13
+ ].join(' '), {}, async () => {
14
+ const cfg = loadJenkinsConfig();
15
+ if (!cfg) {
16
+ return {
17
+ content: [{
18
+ type: 'text',
19
+ text: [
20
+ '⚠️ Jenkins 설정이 없습니다.',
21
+ '',
22
+ '다음 정보를 사용자에게 확인한 뒤 jenkins_save_config를 호출해주세요:',
23
+ '',
24
+ '1. Jenkins URL (예: https://jenkins.company.com)',
25
+ '2. Jenkins 사용자 ID (예: admin)',
26
+ '3. Jenkins API Token',
27
+ ' 발급 방법: Jenkins 대시보드 → [사용자 이름] → 설정 → API Token → "Add new Token"',
28
+ '',
29
+ '로컬 Jenkins가 없어도 회사·원격 서버의 URL을 입력하면 됩니다.',
30
+ ].join('\n'),
31
+ }],
32
+ };
33
+ }
34
+ return {
35
+ content: [{
36
+ type: 'text',
37
+ text: [
38
+ '✅ Jenkins 설정 있음',
39
+ ` URL: ${cfg.url}`,
40
+ ` 사용자: ${cfg.username}`,
41
+ ` Token: ${'*'.repeat(8)}`,
42
+ '',
43
+ 'jenkins_list_credentials 로 등록된 credential 목록을 확인하거나,',
44
+ 'jenkins_create_credential / jenkins_upload_keystore 로 credential을 추가하세요.',
45
+ ].join('\n'),
46
+ }],
47
+ };
48
+ });
49
+ // ── 1. 설정 저장 ───────────────────────────────────────────────────────────
5
50
  server.tool('jenkins_save_config', [
6
- 'Jenkins 서버 연결 설정을 저장합니다.',
7
- '저장 위치: ~/.mimi-seed/jenkins.json (mode 0600).',
8
- 'API Token은 Jenkins 대시보드 사용자 설정 API Token에서 발급할 수 있습니다.',
51
+ 'Jenkins 서버 연결 설정을 저장합니다 (~/.mimi-seed/jenkins.json, mode 0600).',
52
+ ' 도구를 호출하기 전에 사용자에게 URL / username / token을 먼저 확인하세요.',
53
+ '로컬 Jenkins 없어도 회사·원격 서버의 URL을 그대로 사용할 수 있습니다.',
54
+ 'API Token 발급: Jenkins 대시보드 → [사용자 이름] → 설정 → API Token → "Add new Token".',
55
+ '저장 후 jenkins_list_credentials 로 연결을 검증하세요.',
9
56
  ].join(' '), {
10
- url: z.string().url().describe('Jenkins 기본 URL (예: https://jenkins.example.com)'),
57
+ url: z.string().url().describe('Jenkins 기본 URL (예: https://jenkins.company.com)'),
11
58
  username: z.string().describe('Jenkins 사용자 ID'),
12
59
  token: z.string().describe('Jenkins API Token'),
13
60
  }, async ({ url, username, token }) => {
@@ -17,15 +64,19 @@ export function registerJenkinsTools(server) {
17
64
  type: 'text',
18
65
  text: [
19
66
  '✅ Jenkins 설정 저장 완료',
20
- ` URL: ${url}`,
67
+ ` URL: ${url}`,
21
68
  ` 사용자: ${username}`,
22
69
  '',
23
- 'jenkins_list_credentials 로 등록된 credential 목록을 확인하세요.',
70
+ '이제 jenkins_list_credentials 로 연결이 됐는지 확인하세요.',
24
71
  ].join('\n'),
25
72
  }],
26
73
  };
27
74
  });
28
- server.tool('jenkins_list_credentials', 'Jenkins에 등록된 credential 목록을 조회합니다 (id / displayName / type).', {}, async () => {
75
+ // ── 2. Credential 목록 ─────────────────────────────────────────────────────
76
+ server.tool('jenkins_list_credentials', [
77
+ 'Jenkins에 등록된 credential 목록을 조회합니다 (id / displayName / type).',
78
+ '설정이 없으면 jenkins_status를 먼저 호출해 연결 정보를 확인하세요.',
79
+ ].join(' '), {}, async () => {
29
80
  const cfg = requireJenkinsConfig();
30
81
  const list = await creds.listCredentials(cfg);
31
82
  if (list.length === 0) {
@@ -39,10 +90,12 @@ export function registerJenkinsTools(server) {
39
90
  }],
40
91
  };
41
92
  });
93
+ // ── 3. Secret Text ─────────────────────────────────────────────────────────
42
94
  server.tool('jenkins_create_credential', [
43
95
  'Jenkins에 Secret Text credential을 생성하거나 업데이트합니다.',
44
96
  '비밀번호, API 키, 앱 시크릿 등 문자열 값에 사용하세요.',
45
97
  '같은 id가 이미 존재하면 자동으로 업데이트합니다.',
98
+ '설정이 없으면 jenkins_status를 먼저 호출하세요.',
46
99
  ].join(' '), {
47
100
  id: z.string().describe('Credential ID (예: speakmoney-android-key-password)'),
48
101
  secret: z.string().describe('저장할 비밀값'),
@@ -57,10 +110,12 @@ export function registerJenkinsTools(server) {
57
110
  }],
58
111
  };
59
112
  });
113
+ // ── 4. Secret File (keystore) ──────────────────────────────────────────────
60
114
  server.tool('jenkins_upload_keystore', [
61
115
  'Jenkins에 Android keystore 파일을 Secret File credential로 업로드합니다.',
62
116
  'keystore_base64에 .jks/.p12 파일을 base64로 인코딩한 값을 전달하세요.',
63
117
  '같은 id가 이미 존재하면 자동으로 교체합니다.',
118
+ '설정이 없으면 jenkins_status를 먼저 호출하세요.',
64
119
  ].join(' '), {
65
120
  id: z.string().describe('Credential ID (예: speakmoney-android-keystore)'),
66
121
  keystore_base64: z.string().describe('keystore 파일 내용을 base64로 인코딩한 값'),
@@ -76,7 +131,11 @@ export function registerJenkinsTools(server) {
76
131
  }],
77
132
  };
78
133
  });
79
- server.tool('jenkins_delete_credential', 'Jenkins credential을 삭제합니다. 비가역 작업입니다.', {
134
+ // ── 5. 삭제 ───────────────────────────────────────────────────────────────
135
+ server.tool('jenkins_delete_credential', [
136
+ 'Jenkins credential을 삭제합니다. 비가역 작업입니다.',
137
+ '설정이 없으면 jenkins_status를 먼저 호출하세요.',
138
+ ].join(' '), {
80
139
  id: z.string().describe('삭제할 Credential ID'),
81
140
  }, async ({ id }) => {
82
141
  const cfg = requireJenkinsConfig();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yoonion/mimi-seed-mcp",
3
- "version": "0.3.36",
3
+ "version": "0.3.37",
4
4
  "description": "Mimi Seed MCP server — Firebase + AdMob + Google Play + App Store management for Claude Code / Codex / Cursor / any MCP client.",
5
5
  "type": "module",
6
6
  "bin": {