@172ai/containers-mcp-server 1.0.2 → 1.0.3

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/README.md CHANGED
@@ -16,6 +16,8 @@ npm install -g @172ai/containers-mcp-server
16
16
  # Run interactive setup
17
17
  containers-mcp-server --setup
18
18
 
19
+ # Test configuration and authentication
20
+ containers-mcp-server --test
19
21
  # Start the server
20
22
  containers-mcp-server
21
23
  ```
package/README.md.bak ADDED
@@ -0,0 +1,366 @@
1
+ # 172.ai Container Management MCP Server
2
+
3
+ A **Model Context Protocol (MCP) server** that provides AI assistants with access to the 172.ai container management platform. This server exposes powerful tools for managing containers, builds, files, and capabilities through a standardized MCP interface, enabling natural language interactions with your containerized applications.
4
+
5
+ 🌐 **Live Documentation**: [https://172.ai/#/mcp](https://172.ai/#/mcp)
6
+
7
+ [![npm version](https://badge.fury.io/js/@172ai%2Fcontainers-mcp-server.svg)](https://www.npmjs.com/package/@172ai/containers-mcp-server)
8
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
9
+
10
+ ## 🚀 Quick Start
11
+
12
+ ```bash
13
+ # Install globally
14
+ npm install -g @172ai/containers-mcp-server
15
+
16
+ # Run interactive setup
17
+ containers-mcp-server --setup
18
+
19
+ # Start the server
20
+ containers-mcp-server
21
+ ```
22
+
23
+ ## ✨ Features
24
+
25
+ ### Container Management
26
+ - **List Containers**: Browse available containers with filtering options
27
+ - **Get Container Details**: Retrieve detailed information about specific containers
28
+ - **Create Container**: Create new container templates
29
+ - **Update Container**: Modify existing container configurations
30
+ - **Delete Container**: Remove containers from the system
31
+ - **Copy Container**: Create copies of existing containers
32
+
33
+ ### Build Management
34
+ - **Build Container**: Initiate container build processes
35
+ - **Get Build Status**: Monitor build progress and status
36
+ - **List Builds**: View build history for containers
37
+ - **Get Build Logs**: Access detailed build logs and output
38
+
39
+ ### File Management
40
+ - **List Container Files**: Browse files within containers
41
+ - **Get File Content**: Read file contents
42
+ - **Upload Files**: Add new files to containers
43
+ - **Update Files**: Modify existing file contents
44
+ - **Delete Files**: Remove files from containers
45
+
46
+ ### Capability Management
47
+ - **List Capabilities**: View available system capabilities
48
+ - **Get Capability Details**: Access detailed capability information
49
+ - **Search Capabilities**: Find capabilities by name or description
50
+
51
+ ## Installation
52
+
53
+ 1. **Clone or create the MCP server directory**:
54
+ ```bash
55
+ mkdir containers-mcp-server
56
+ cd containers-mcp-server
57
+ ```
58
+
59
+ 2. **Install dependencies**:
60
+ ```bash
61
+ npm install
62
+ ```
63
+
64
+ 3. **Configure environment variables**:
65
+ ```bash
66
+ cp .env.example .env
67
+ # Edit .env with your configuration
68
+ ```
69
+
70
+ 4. **Build the project**:
71
+ ```bash
72
+ npm run build
73
+ ```
74
+
75
+ ## Configuration
76
+
77
+ ### Environment Variables
78
+
79
+ The server requires configuration through environment variables. Copy `.env.example` to `.env` and configure:
80
+
81
+ #### Required Settings
82
+ - `CONTAINER_API_URL`: Base URL for the container management API
83
+ - Authentication (choose one):
84
+ - `API_KEY`: Your API key for authentication
85
+ - `OAUTH_TOKEN`: OAuth token for temporary access
86
+ - `OAUTH_CLIENT_ID` + `OAUTH_CLIENT_SECRET`: For automated token refresh
87
+
88
+ #### Optional Settings
89
+ - `NODE_ENV`: Environment (development, production, test)
90
+ - `LOG_LEVEL`: Logging verbosity (error, warn, info, debug)
91
+ - `RATE_LIMIT_PER_MINUTE`: API rate limiting
92
+ - `REQUEST_TIMEOUT`: Request timeout in milliseconds
93
+ - `MAX_RETRIES`: Number of retry attempts for failed requests
94
+
95
+ ### Authentication Methods
96
+
97
+ The server supports three authentication methods:
98
+
99
+ 1. **API Key** (Recommended for production):
100
+ ```bash
101
+ API_KEY=your_api_key_here
102
+ ```
103
+
104
+ 2. **OAuth Token** (For temporary access):
105
+ ```bash
106
+ OAUTH_TOKEN=your_oauth_token_here
107
+ ```
108
+
109
+ 3. **OAuth Client Credentials** (For automated systems):
110
+ ```bash
111
+ OAUTH_CLIENT_ID=your_client_id_here
112
+ OAUTH_CLIENT_SECRET=your_client_secret_here
113
+ ```
114
+
115
+ ## Usage
116
+
117
+ ### Running the Server
118
+
119
+ #### Development Mode
120
+ ```bash
121
+ npm run dev
122
+ ```
123
+
124
+ #### Production Mode
125
+ ```bash
126
+ npm start
127
+ ```
128
+
129
+ ### Connecting to Claude Code
130
+
131
+ 1. **Add to your Claude Code configuration**:
132
+ ```json
133
+ {
134
+ "mcpServers": {
135
+ "containers": {
136
+ "command": "node",
137
+ "args": ["/path/to/containers-mcp-server/dist/server.js"],
138
+ "env": {
139
+ "CONTAINER_API_URL": "http://localhost:3000",
140
+ "API_KEY": "your_api_key_here"
141
+ }
142
+ }
143
+ }
144
+ }
145
+ ```
146
+
147
+ 2. **Restart Claude Code** to load the new server
148
+
149
+ ### Available Tools
150
+
151
+ Once connected, you can use these tools in your AI conversations:
152
+
153
+ #### Container Operations
154
+ - `list_containers` - List available containers
155
+ - `get_container` - Get detailed container information
156
+ - `create_container` - Create new container templates
157
+ - `update_container` - Update container configurations
158
+ - `delete_container` - Remove containers
159
+ - `copy_container` - Create container copies
160
+
161
+ #### Build Operations
162
+ - `build_container` - Start container builds
163
+ - `get_build_status` - Check build progress
164
+ - `list_builds` - View build history
165
+
166
+ #### File Operations
167
+ - `list_container_files` - Browse container files
168
+ - `get_file_content` - Read file contents
169
+ - `upload_file` - Add files to containers
170
+
171
+ #### Capability Operations
172
+ - `list_capabilities` - View available capabilities
173
+
174
+ ### Example Usage
175
+
176
+ ```typescript
177
+ // List public containers
178
+ await listContainers({ scope: 'public', limit: 10 });
179
+
180
+ // Get container details
181
+ await getContainer({ containerId: 'container-123' });
182
+
183
+ // Build a container
184
+ await buildContainer({ containerId: 'container-123' });
185
+
186
+ // Upload a file
187
+ await uploadFile({
188
+ containerId: 'container-123',
189
+ filePath: 'src/app.js',
190
+ content: 'console.log("Hello, world!");',
191
+ mimeType: 'application/javascript'
192
+ });
193
+ ```
194
+
195
+ ## API Reference
196
+
197
+ ### Tool Parameters
198
+
199
+ #### `list_containers`
200
+ - `scope`: Filter by scope ('public', 'myCollection', 'all')
201
+ - `limit`: Maximum number of results (1-100)
202
+ - `offset`: Number of results to skip
203
+ - `query`: Search query for filtering
204
+
205
+ #### `get_container`
206
+ - `containerId`: Container ID to retrieve
207
+
208
+ #### `create_container`
209
+ - `name`: Container name
210
+ - `description`: Container description
211
+ - `dockerfile`: Dockerfile content
212
+ - `tags`: Array of tags (optional)
213
+ - `isPrivate`: Privacy setting (optional)
214
+ - `envVars`: Environment variables (optional)
215
+
216
+ #### `build_container`
217
+ - `containerId`: Container ID to build
218
+
219
+ #### `upload_file`
220
+ - `containerId`: Target container ID
221
+ - `filePath`: File path within container
222
+ - `content`: File content (base64 for binary files)
223
+ - `mimeType`: MIME type (optional)
224
+
225
+ ## Error Handling
226
+
227
+ The server provides comprehensive error handling with:
228
+
229
+ - **Validation errors**: Invalid input parameters
230
+ - **Authentication errors**: Invalid or missing credentials
231
+ - **Authorization errors**: Insufficient permissions
232
+ - **Network errors**: Connection issues
233
+ - **Rate limiting**: API quota exceeded
234
+ - **Timeouts**: Request timeouts
235
+
236
+ All errors include:
237
+ - Human-readable error messages
238
+ - Error codes for programmatic handling
239
+ - Request IDs for debugging
240
+ - Troubleshooting hints
241
+
242
+ ## Development
243
+
244
+ ### Project Structure
245
+ ```
246
+ containers-mcp-server/
247
+ ├── server.ts # Main server entry point
248
+ ├── auth.ts # Authentication management
249
+ ├── config.ts # Configuration management
250
+ ├── services/
251
+ │ ├── containerService.ts # Container management
252
+ │ ├── buildService.ts # Build management
253
+ │ ├── fileService.ts # File management
254
+ │ └── capabilityService.ts # Capability management
255
+ ├── utils/
256
+ │ ├── errorHandler.ts # Error handling utilities
257
+ │ └── apiError.ts # API error classes
258
+ ├── package.json
259
+ ├── tsconfig.json
260
+ ├── .env.example
261
+ └── README.md
262
+ ```
263
+
264
+ ### Available Scripts
265
+ - `npm run dev` - Development mode with hot reload
266
+ - `npm run build` - Build for production
267
+ - `npm run start` - Start production server
268
+ - `npm run test` - Run tests
269
+ - `npm run lint` - Code linting
270
+ - `npm run clean` - Clean build artifacts
271
+
272
+ ### Adding New Tools
273
+
274
+ 1. **Define the tool in `server.ts`**:
275
+ ```typescript
276
+ this.server.registerTool("my_new_tool", {
277
+ title: "My New Tool",
278
+ description: "Description of what it does",
279
+ inputSchema: z.object({
280
+ param1: z.string(),
281
+ param2: z.number().optional()
282
+ })
283
+ }, async ({ param1, param2 }) => {
284
+ // Implementation
285
+ });
286
+ ```
287
+
288
+ 2. **Add service methods** in appropriate service files
289
+
290
+ 3. **Update documentation** and examples
291
+
292
+ ## Troubleshooting
293
+
294
+ ### Common Issues
295
+
296
+ 1. **Authentication Failed**
297
+ - Check API key or OAuth credentials
298
+ - Verify the container API URL is correct
299
+ - Ensure the API key has required scopes
300
+
301
+ 2. **Connection Timeout**
302
+ - Check network connectivity
303
+ - Verify container service is running
304
+ - Increase `REQUEST_TIMEOUT` if needed
305
+
306
+ 3. **Rate Limiting**
307
+ - Reduce request frequency
308
+ - Check `RATE_LIMIT_PER_MINUTE` setting
309
+ - Consider using API key instead of OAuth
310
+
311
+ 4. **Build Failures**
312
+ - Check container configuration
313
+ - Verify Dockerfile syntax
314
+ - Review build logs for errors
315
+
316
+ ### Debug Mode
317
+
318
+ Enable debug logging:
319
+ ```bash
320
+ LOG_LEVEL=debug npm run dev
321
+ ```
322
+
323
+ This provides detailed information about:
324
+ - API requests and responses
325
+ - Authentication flow
326
+ - Error details and stack traces
327
+ - Performance metrics
328
+
329
+ ## Security
330
+
331
+ ### Best Practices
332
+
333
+ 1. **Use API Keys**: Prefer API keys over OAuth tokens for production
334
+ 2. **Secure Storage**: Store credentials securely (environment variables, secrets manager)
335
+ 3. **Network Security**: Use HTTPS endpoints when possible
336
+ 4. **Access Control**: Use minimum required scopes
337
+ 5. **Monitoring**: Monitor API usage and errors
338
+
339
+ ### Security Features
340
+
341
+ - **Request timeout protection**
342
+ - **Rate limiting**
343
+ - **Input validation**
344
+ - **Error message sanitization**
345
+ - **SSL/TLS certificate validation**
346
+
347
+ ## License
348
+
349
+ MIT License - see LICENSE file for details
350
+
351
+ ## Support
352
+
353
+ For issues and support:
354
+ 1. Check the troubleshooting section
355
+ 2. Review error messages and request IDs
356
+ 3. Enable debug logging for detailed information
357
+ 4. Create an issue with reproduction steps
358
+
359
+ ## Contributing
360
+
361
+ 1. Fork the repository
362
+ 2. Create a feature branch
363
+ 3. Make changes with tests
364
+ 4. Submit a pull request
365
+
366
+ Please follow the existing code style and include tests for new functionality.
package/dist/cli.js CHANGED
@@ -51,6 +51,44 @@ if (process.argv.includes('--setup')) {
51
51
  process.exit(1);
52
52
  });
53
53
  }
54
+ else if (process.argv.includes('--test')) {
55
+ // Test authentication without starting MCP server
56
+ console.error('🔍 Testing MCP server configuration and authentication...\n');
57
+ Promise.resolve().then(() => __importStar(require('./auth.js'))).then(({ authManager }) => {
58
+ Promise.resolve().then(() => __importStar(require('./config.js'))).then(({ config }) => {
59
+ console.error('📋 Configuration:');
60
+ console.error(` Base URL: ${config.get('baseUrl')}`);
61
+ console.error(` Environment: ${config.get('environment')}`);
62
+ console.error(` Log Level: ${config.get('logLevel')}\n`);
63
+ console.error('🔑 Testing authentication...');
64
+ return authManager.testAuthentication();
65
+ }).then((isAuthenticated) => {
66
+ if (isAuthenticated) {
67
+ console.error('✅ Authentication successful\!\n');
68
+ console.error('🎉 MCP server is properly configured and ready to use.');
69
+ console.error('\nTo start the server:');
70
+ console.error(' containers-mcp-server\n');
71
+ console.error('To reconfigure:');
72
+ console.error(' containers-mcp-server --setup\n');
73
+ process.exit(0);
74
+ }
75
+ else {
76
+ console.error('❌ Authentication failed\!');
77
+ console.error('\nPlease check your credentials and try:');
78
+ console.error(' containers-mcp-server --setup\n');
79
+ process.exit(1);
80
+ }
81
+ }).catch((error) => {
82
+ console.error('❌ Test failed:', error.message);
83
+ console.error('\nTry running setup to fix configuration:');
84
+ console.error(' containers-mcp-server --setup\n');
85
+ process.exit(1);
86
+ });
87
+ }).catch((error) => {
88
+ console.error('Failed to load test modules:', error);
89
+ process.exit(1);
90
+ });
91
+ }
54
92
  else {
55
93
  // Run normal server
56
94
  Promise.resolve().then(() => __importStar(require('./server.js'))).then(({ ContainerMCPServer }) => {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AAEA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yEAAyE;AACzE,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;IACrC,YAAY;IACZ,kDAAO,YAAY,IAAE,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAI,cAAc,EAAE,CAAC;QACnC,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1B,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC;KAAM,CAAC;IACN,oBAAoB;IACpB,kDAAO,aAAa,IAAE,IAAI,CAAC,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE;QACpD,MAAM,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7B,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACjB,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@172ai/containers-mcp-server",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "description": "MCP server for 172.ai container management platform - enables AI assistants to manage containers, builds, and files",
5
5
  "main": "dist/cli.js",
6
6
  "bin": {