@airmcp-dev/cli 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.
Files changed (122) hide show
  1. package/LICENSE +17 -0
  2. package/dist/commands/add.d.ts +3 -0
  3. package/dist/commands/add.d.ts.map +1 -0
  4. package/dist/commands/add.js +192 -0
  5. package/dist/commands/add.js.map +1 -0
  6. package/dist/commands/check.d.ts +3 -0
  7. package/dist/commands/check.d.ts.map +1 -0
  8. package/dist/commands/check.js +218 -0
  9. package/dist/commands/check.js.map +1 -0
  10. package/dist/commands/connect.d.ts +3 -0
  11. package/dist/commands/connect.d.ts.map +1 -0
  12. package/dist/commands/connect.js +135 -0
  13. package/dist/commands/connect.js.map +1 -0
  14. package/dist/commands/create.d.ts +3 -0
  15. package/dist/commands/create.d.ts.map +1 -0
  16. package/dist/commands/create.js +150 -0
  17. package/dist/commands/create.js.map +1 -0
  18. package/dist/commands/dev.d.ts +3 -0
  19. package/dist/commands/dev.d.ts.map +1 -0
  20. package/dist/commands/dev.js +184 -0
  21. package/dist/commands/dev.js.map +1 -0
  22. package/dist/commands/disconnect.d.ts +3 -0
  23. package/dist/commands/disconnect.d.ts.map +1 -0
  24. package/dist/commands/disconnect.js +69 -0
  25. package/dist/commands/disconnect.js.map +1 -0
  26. package/dist/commands/index.d.ts +13 -0
  27. package/dist/commands/index.d.ts.map +1 -0
  28. package/dist/commands/index.js +16 -0
  29. package/dist/commands/index.js.map +1 -0
  30. package/dist/commands/inspect.d.ts +3 -0
  31. package/dist/commands/inspect.d.ts.map +1 -0
  32. package/dist/commands/inspect.js +159 -0
  33. package/dist/commands/inspect.js.map +1 -0
  34. package/dist/commands/license.d.ts +3 -0
  35. package/dist/commands/license.d.ts.map +1 -0
  36. package/dist/commands/license.js +113 -0
  37. package/dist/commands/license.js.map +1 -0
  38. package/dist/commands/list.d.ts +3 -0
  39. package/dist/commands/list.d.ts.map +1 -0
  40. package/dist/commands/list.js +101 -0
  41. package/dist/commands/list.js.map +1 -0
  42. package/dist/commands/start.d.ts +3 -0
  43. package/dist/commands/start.d.ts.map +1 -0
  44. package/dist/commands/start.js +130 -0
  45. package/dist/commands/start.js.map +1 -0
  46. package/dist/commands/status.d.ts +3 -0
  47. package/dist/commands/status.d.ts.map +1 -0
  48. package/dist/commands/status.js +83 -0
  49. package/dist/commands/status.js.map +1 -0
  50. package/dist/commands/stop.d.ts +3 -0
  51. package/dist/commands/stop.d.ts.map +1 -0
  52. package/dist/commands/stop.js +56 -0
  53. package/dist/commands/stop.js.map +1 -0
  54. package/dist/index.d.ts +3 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +46 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/templates/agent/.ai/context.md +36 -0
  59. package/dist/templates/agent/.vscode/air.code-snippets +178 -0
  60. package/dist/templates/agent/package.json +17 -0
  61. package/dist/templates/agent/src/index.ts +98 -0
  62. package/dist/templates/agent/tsconfig.json +14 -0
  63. package/dist/templates/agent-ko/.ai/context.md +36 -0
  64. package/dist/templates/agent-ko/.vscode/air.code-snippets +178 -0
  65. package/dist/templates/agent-ko/package.json +17 -0
  66. package/dist/templates/agent-ko/src/index.ts +92 -0
  67. package/dist/templates/agent-ko/tsconfig.json +14 -0
  68. package/dist/templates/api/.ai/context.md +36 -0
  69. package/dist/templates/api/.vscode/air.code-snippets +178 -0
  70. package/dist/templates/api/package.json +17 -0
  71. package/dist/templates/api/src/index.ts +76 -0
  72. package/dist/templates/api/tsconfig.json +14 -0
  73. package/dist/templates/api-ko/.ai/context.md +36 -0
  74. package/dist/templates/api-ko/.vscode/air.code-snippets +178 -0
  75. package/dist/templates/api-ko/package.json +17 -0
  76. package/dist/templates/api-ko/src/index.ts +70 -0
  77. package/dist/templates/api-ko/tsconfig.json +14 -0
  78. package/dist/templates/basic/.ai/context.md +36 -0
  79. package/dist/templates/basic/.vscode/air.code-snippets +178 -0
  80. package/dist/templates/basic/package.json +17 -0
  81. package/dist/templates/basic/src/index.ts +39 -0
  82. package/dist/templates/basic/tsconfig.json +15 -0
  83. package/dist/templates/basic-ko/.ai/context.md +36 -0
  84. package/dist/templates/basic-ko/.vscode/air.code-snippets +178 -0
  85. package/dist/templates/basic-ko/package.json +17 -0
  86. package/dist/templates/basic-ko/src/index.ts +39 -0
  87. package/dist/templates/basic-ko/tsconfig.json +14 -0
  88. package/dist/templates/crud/.ai/context.md +36 -0
  89. package/dist/templates/crud/.vscode/air.code-snippets +178 -0
  90. package/dist/templates/crud/package.json +17 -0
  91. package/dist/templates/crud/src/index.ts +82 -0
  92. package/dist/templates/crud/tsconfig.json +14 -0
  93. package/dist/templates/crud-ko/.ai/context.md +36 -0
  94. package/dist/templates/crud-ko/.vscode/air.code-snippets +178 -0
  95. package/dist/templates/crud-ko/package.json +17 -0
  96. package/dist/templates/crud-ko/src/index.ts +81 -0
  97. package/dist/templates/crud-ko/tsconfig.json +14 -0
  98. package/dist/utils/index.d.ts +7 -0
  99. package/dist/utils/index.d.ts.map +1 -0
  100. package/dist/utils/index.js +8 -0
  101. package/dist/utils/index.js.map +1 -0
  102. package/dist/utils/json-editor.d.ts +45 -0
  103. package/dist/utils/json-editor.d.ts.map +1 -0
  104. package/dist/utils/json-editor.js +122 -0
  105. package/dist/utils/json-editor.js.map +1 -0
  106. package/dist/utils/path-resolver.d.ts +30 -0
  107. package/dist/utils/path-resolver.d.ts.map +1 -0
  108. package/dist/utils/path-resolver.js +121 -0
  109. package/dist/utils/path-resolver.js.map +1 -0
  110. package/dist/utils/printer.d.ts +26 -0
  111. package/dist/utils/printer.d.ts.map +1 -0
  112. package/dist/utils/printer.js +65 -0
  113. package/dist/utils/printer.js.map +1 -0
  114. package/dist/utils/process-manager.d.ts +36 -0
  115. package/dist/utils/process-manager.d.ts.map +1 -0
  116. package/dist/utils/process-manager.js +143 -0
  117. package/dist/utils/process-manager.js.map +1 -0
  118. package/dist/utils/test-console.d.ts +8 -0
  119. package/dist/utils/test-console.d.ts.map +1 -0
  120. package/dist/utils/test-console.js +198 -0
  121. package/dist/utils/test-console.js.map +1 -0
  122. package/package.json +52 -0
@@ -0,0 +1,198 @@
1
+ // Copyright 2026 CodePedia Labs. Licensed under Apache-2.0.
2
+ // air CLI — utils/test-console.ts
3
+ //
4
+ // 내장 인터랙티브 테스트 콘솔.
5
+ // air dev 실행 시 서버에 MCP 클라이언트로 연결하여
6
+ // 도구를 직접 호출하고 결과를 확인할 수 있다.
7
+ //
8
+ // 명령어:
9
+ // tools — 도구 목록
10
+ // call <name> [key=value ...] — 도구 호출
11
+ // resources — 리소스 목록
12
+ // status — 서버 상태
13
+ // help — 도움말
14
+ // quit — 종료
15
+ import { createInterface } from 'node:readline';
16
+ /** 파라미터 파싱: "key=value key2=value2" → { key: value, key2: value2 } */
17
+ function parseArgs(tokens) {
18
+ const args = {};
19
+ for (const token of tokens) {
20
+ const eqIdx = token.indexOf('=');
21
+ if (eqIdx === -1)
22
+ continue;
23
+ const key = token.slice(0, eqIdx);
24
+ let value = token.slice(eqIdx + 1);
25
+ // 숫자 변환
26
+ if (/^\d+(\.\d+)?$/.test(value))
27
+ value = Number(value);
28
+ // boolean
29
+ else if (value === 'true')
30
+ value = true;
31
+ else if (value === 'false')
32
+ value = false;
33
+ // 따옴표 제거
34
+ else if ((value.startsWith('"') && value.endsWith('"')) || (value.startsWith("'") && value.endsWith("'"))) {
35
+ value = value.slice(1, -1);
36
+ }
37
+ args[key] = value;
38
+ }
39
+ return args;
40
+ }
41
+ /** SSE 클라이언트로 서버에 연결하여 테스트 콘솔 제공 */
42
+ export async function startTestConsole(options) {
43
+ const { Client } = await import('@modelcontextprotocol/sdk/client/index.js');
44
+ const { SSEClientTransport } = await import('@modelcontextprotocol/sdk/client/sse.js');
45
+ let client = null;
46
+ // SSE 연결 시도 (서버가 준비될 때까지 재시도)
47
+ async function connect() {
48
+ for (let attempt = 0; attempt < 10; attempt++) {
49
+ try {
50
+ const transport = new SSEClientTransport(new URL(`${options.serverUrl}/sse`));
51
+ client = new Client({ name: 'air-dev-console', version: '1.0.0' });
52
+ await client.connect(transport);
53
+ return true;
54
+ }
55
+ catch {
56
+ await new Promise((r) => setTimeout(r, 1000));
57
+ }
58
+ }
59
+ return false;
60
+ }
61
+ console.log('\n \x1b[36m⚡ air dev console\x1b[0m — type "help" for commands\n');
62
+ console.log(' Connecting to server...');
63
+ const connected = await connect();
64
+ if (!connected || !client) {
65
+ console.log(' \x1b[31m✖ Could not connect to server\x1b[0m');
66
+ console.log(' Make sure the server is running with SSE transport.\n');
67
+ return;
68
+ }
69
+ console.log(' \x1b[32m✔ Connected!\x1b[0m\n');
70
+ const rl = createInterface({
71
+ input: process.stdin,
72
+ output: process.stdout,
73
+ prompt: ' \x1b[36mair>\x1b[0m ',
74
+ });
75
+ rl.prompt();
76
+ rl.on('line', async (line) => {
77
+ const trimmed = line.trim();
78
+ if (!trimmed) {
79
+ rl.prompt();
80
+ return;
81
+ }
82
+ const [cmd, ...rest] = trimmed.split(/\s+/);
83
+ try {
84
+ switch (cmd) {
85
+ case 'help':
86
+ case 'h':
87
+ case '?': {
88
+ console.log(`
89
+ \x1b[1mCommands:\x1b[0m
90
+ tools List all tools
91
+ call <name> [key=value ...] Call a tool with arguments
92
+ resources List resources
93
+ prompts List prompts
94
+ status Server status
95
+ help Show this help
96
+ quit Exit console
97
+ `);
98
+ break;
99
+ }
100
+ case 'tools':
101
+ case 't': {
102
+ const result = await client.listTools();
103
+ console.log(`\n 📋 Tools (${result.tools.length}):\n`);
104
+ for (const tool of result.tools) {
105
+ const params = tool.inputSchema?.properties
106
+ ? Object.keys(tool.inputSchema.properties).join(', ')
107
+ : 'none';
108
+ console.log(` \x1b[33m${tool.name}\x1b[0m (${params})`);
109
+ if (tool.description)
110
+ console.log(` ${tool.description}`);
111
+ }
112
+ console.log();
113
+ break;
114
+ }
115
+ case 'call':
116
+ case 'c': {
117
+ if (rest.length === 0) {
118
+ console.log(' Usage: call <tool_name> [key=value ...]');
119
+ break;
120
+ }
121
+ const toolName = rest[0];
122
+ const args = parseArgs(rest.slice(1));
123
+ console.log(` → ${toolName}(${JSON.stringify(args)})`);
124
+ const start = Date.now();
125
+ const result = await client.callTool({ name: toolName, arguments: args });
126
+ const elapsed = Date.now() - start;
127
+ const content = result.content;
128
+ for (const item of content) {
129
+ if (item.text) {
130
+ console.log(` \x1b[32m←\x1b[0m ${item.text} \x1b[90m(${elapsed}ms)\x1b[0m`);
131
+ }
132
+ }
133
+ if (result.isError) {
134
+ console.log(` \x1b[31m⚠ Error response\x1b[0m`);
135
+ }
136
+ console.log();
137
+ break;
138
+ }
139
+ case 'resources':
140
+ case 'r': {
141
+ const result = await client.listResources();
142
+ console.log(`\n 📁 Resources (${result.resources.length}):\n`);
143
+ for (const res of result.resources) {
144
+ console.log(` ${res.name}: ${res.uri}`);
145
+ }
146
+ console.log();
147
+ break;
148
+ }
149
+ case 'prompts':
150
+ case 'p': {
151
+ const result = await client.listPrompts();
152
+ console.log(`\n 💬 Prompts (${result.prompts.length}):\n`);
153
+ for (const p of result.prompts) {
154
+ console.log(` ${p.name}: ${p.description || ''}`);
155
+ }
156
+ console.log();
157
+ break;
158
+ }
159
+ case 'status':
160
+ case 's': {
161
+ try {
162
+ const res = await fetch(options.serverUrl);
163
+ const data = await res.json();
164
+ console.log(`\n 📊 Server Status:\n`);
165
+ for (const [k, v] of Object.entries(data)) {
166
+ console.log(` ${k}: ${v}`);
167
+ }
168
+ console.log();
169
+ }
170
+ catch {
171
+ console.log(' Could not fetch server status.\n');
172
+ }
173
+ break;
174
+ }
175
+ case 'quit':
176
+ case 'q':
177
+ case 'exit': {
178
+ rl.close();
179
+ if (client)
180
+ await client.close();
181
+ options.onQuit();
182
+ return;
183
+ }
184
+ default:
185
+ console.log(` Unknown command: "${cmd}". Type "help" for available commands.\n`);
186
+ }
187
+ }
188
+ catch (err) {
189
+ console.log(` \x1b[31m✖ ${err.message}\x1b[0m\n`);
190
+ }
191
+ rl.prompt();
192
+ });
193
+ rl.on('close', () => {
194
+ if (client)
195
+ client.close().catch(() => { });
196
+ });
197
+ }
198
+ //# sourceMappingURL=test-console.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-console.js","sourceRoot":"","sources":["../../src/utils/test-console.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@airmcp-dev/cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI for air — build, run, and manage MCP servers",
5
+ "type": "module",
6
+ "bin": {
7
+ "airmcp-dev": "./dist/index.js"
8
+ },
9
+ "main": "dist/index.js",
10
+ "files": [
11
+ "dist",
12
+ "templates"
13
+ ],
14
+ "scripts": {
15
+ "build": "tsc && rm -rf dist/templates && cp -r src/templates dist/templates",
16
+ "dev": "tsc --watch",
17
+ "test": "vitest run",
18
+ "lint": "tsc --noEmit"
19
+ },
20
+ "dependencies": {
21
+ "@airmcp-dev/core": "^0.1.0",
22
+ "@modelcontextprotocol/sdk": "^1.29.0",
23
+ "commander": "^12.1.0",
24
+ "chalk": "^5.3.0"
25
+ },
26
+ "devDependencies": {
27
+ "typescript": "^5.5.0",
28
+ "vitest": "^2.0.0",
29
+ "@types/node": "^20.0.0"
30
+ },
31
+ "engines": {
32
+ "node": ">=18.0.0"
33
+ },
34
+ "keywords": [
35
+ "mcp",
36
+ "cli",
37
+ "model-context-protocol",
38
+ "ai",
39
+ "tool-server"
40
+ ],
41
+ "author": "CodePedia Labs",
42
+ "homepage": "https://airmcp.dev",
43
+ "bugs": { "url": "https://github.com/airmcp-dev/air/issues" },
44
+ "repository": { "type": "git", "url": "https://github.com/airmcp-dev/air", "directory": "packages/cli" },
45
+ "keywords": ["mcp", "ai", "agent", "air"],
46
+ "license": "Apache-2.0",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/airmcp-dev/air",
50
+ "directory": "packages/cli"
51
+ }
52
+ }