UNPKG

tuxcare-eportal-mcp

Version:

TuxCare ePortal MCP server for integrating with TuxCare ePortal API

580 lines (458 loc) 12 kB
# TuxCare ePortal MCP Server A Model Context Protocol (MCP) server for integrating with TuxCare ePortal API. This server provides MCP tools for managing servers, feeds, registration keys, patchsets, and users through the ePortal API. ## Features - **Server Management**: List, register, and unregister servers with advanced filtering - **Feed Management**: Create, modify, and delete feeds - **Key Management**: Manage registration keys for server enrollment - **Patchset Management**: List and manage patchset deployments - **User Management**: List ePortal users - **Server Tagging**: Set and manage server tags - **Flexible Authentication**: Support for basic auth and API keys ## Installation Options ### Option 1: NPM Global Installation (Recommended) ```bash # Install globally from npm npm install -g tuxcare-eportal-mcp # Verify installation tuxcare-eportal-mcp --help ``` ### Option 2: NPX (No Installation Required) ```bash # Run directly with npx npx tuxcare-eportal-mcp --help # Use in MCP configuration with npx npx tuxcare-eportal-mcp --url https://your-eportal.com --auth-type basic --username admin --password secret ``` ### Option 3: GitHub Installation ```bash # Install directly from GitHub npm install -g github:Revmagi/tuxcare-eportal-mcp # Or clone and install locally git clone https://github.com/Revmagi/tuxcare-eportal-mcp.git cd tuxcare-eportal-mcp npm install npm run build npm link ``` ## Configuration Guide ### Configuration Methods You can configure the MCP server in three ways: 1. **Configuration File** (recommended for permanent setups) 2. **Command Line Arguments** (good for testing and Claude Code) 3. **Environment Variables** (for containerized deployments) ### Method 1: Configuration File Create a configuration file in JSON format: **Basic Authentication Example (`config.json`):** ```json { "eportal_url": "https://your-eportal.com", "auth": { "type": "basic", "username": "admin", "password": "your-password" } } ``` **API Key Authentication Example (`config.json`):** ```json { "eportal_url": "https://your-eportal.com", "auth": { "type": "api_key", "api_key": "your-api-key", "header_name": "X-Api-Key" } } ``` #### Configuration File Locations The server looks for configuration files in the following order: 1. **Specified path**: `--config /path/to/config.json` 2. **Current directory**: `./config.json` 3. **Home directory**: `~/.tuxcare-eportal-mcp/config.json` 4. **System directory**: `/etc/tuxcare-eportal-mcp/config.json` ### Method 2: Command Line Arguments You can pass all configuration via command line arguments: ```bash # Basic authentication tuxcare-eportal-mcp \ --url https://your-eportal.com \ --auth-type basic \ --username admin \ --password your-password # API key authentication tuxcare-eportal-mcp \ --url https://your-eportal.com \ --auth-type api_key \ --api-key your-api-key \ --header-name X-Api-Key ``` ### Method 3: Environment Variables Set environment variables for secure configuration: ```bash export TUXCARE_EPORTAL_URL="https://your-eportal.com" export TUXCARE_AUTH_TYPE="basic" export TUXCARE_USERNAME="admin" export TUXCARE_PASSWORD="your-password" # Or for API key export TUXCARE_AUTH_TYPE="api_key" export TUXCARE_API_KEY="your-api-key" export TUXCARE_HEADER_NAME="X-Api-Key" ``` ## MCP Client Configuration ### Claude Code Configuration #### Method 1: Using Configuration File 1. Create a config file in your project directory: ```json { "eportal_url": "https://your-eportal.com", "auth": { "type": "basic", "username": "admin", "password": "your-password" } } ``` 2. Add to your Claude Code MCP settings: ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": ["tuxcare-eportal-mcp", "--config", "./config.json"] } } } ``` #### Method 2: Using Command Line Arguments (No Config File) **Basic Authentication:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": [ "tuxcare-eportal-mcp@1.0.4", "--url", "https://your-eportal.com", "--auth-type", "basic", "--username", "admin", "--password", "your-password" ] } } } ``` **API Key Authentication:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": [ "tuxcare-eportal-mcp@1.0.4", "--url", "https://your-eportal.com", "--auth-type", "api_key", "--api-key", "your-api-key" ] } } } ``` **API Key with Custom Header:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": [ "tuxcare-eportal-mcp@1.0.4", "--url", "https://your-eportal.com", "--auth-type", "api_key", "--api-key", "your-api-key", "--header-name", "X-API-Key" ] } } } ``` #### Method 3: Using Environment Variables (Most Secure) **Basic Authentication:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": ["tuxcare-eportal-mcp@1.0.4"], "env": { "TUXCARE_EPORTAL_URL": "https://your-eportal.com", "TUXCARE_AUTH_TYPE": "basic", "TUXCARE_USERNAME": "admin", "TUXCARE_PASSWORD": "your-password" } } } } ``` **API Key Authentication:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": ["tuxcare-eportal-mcp@1.0.4"], "env": { "TUXCARE_EPORTAL_URL": "https://your-eportal.com", "TUXCARE_AUTH_TYPE": "api_key", "TUXCARE_API_KEY": "your-api-key" } } } } ``` **API Key with Custom Header:** ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": ["tuxcare-eportal-mcp@1.0.4"], "env": { "TUXCARE_EPORTAL_URL": "https://your-eportal.com", "TUXCARE_AUTH_TYPE": "api_key", "TUXCARE_API_KEY": "your-api-key", "TUXCARE_HEADER_NAME": "X-API-Key" } } } } ``` ### Continue.dev Configuration Add to your `continue.json`: ```json { "mcpServers": { "tuxcare-eportal": { "command": "npx", "args": ["tuxcare-eportal-mcp", "--config", "./config.json"] } } } ``` ### Cline Configuration Add to your MCP settings: ```json { "mcpServers": { "tuxcare-eportal": { "command": "tuxcare-eportal-mcp", "args": [ "--url", "https://your-eportal.com", "--auth-type", "basic", "--username", "admin", "--password", "your-password" ] } } } ``` ### Generic MCP Client Configuration For any MCP client, use this format: ```json { "mcpServers": { "tuxcare-eportal": { "command": "tuxcare-eportal-mcp", "args": ["--config", "/path/to/config.json"] } } } ``` ## Configuration Setup Commands ### Quick Setup Command Generate a configuration file interactively: ```bash # Create config file with prompts npx tuxcare-eportal-mcp --setup # Create config file with basic auth npx tuxcare-eportal-mcp --setup --url https://your-eportal.com --auth-type basic # Create config file with API key npx tuxcare-eportal-mcp --setup --url https://your-eportal.com --auth-type api_key ``` ### Test Configuration Verify your configuration works: ```bash # Test with config file tuxcare-eportal-mcp --config ./config.json --test # Test with command line args tuxcare-eportal-mcp --url https://your-eportal.com --auth-type basic --username admin --password secret --test ``` ## Available Tools ### Server Management - `list_servers`: List servers with filtering options - `register_host`: Register a new host - `unregister_host`: Unregister a host by hostname, IP, or server ID - `bulk_unregister_hosts`: Bulk unregister inactive hosts - `set_server_tags`: Set tags for a server ### Feed Management - `list_feeds`: List all feeds - `create_feed`: Create or modify a feed - `delete_feed`: Delete a feed ### Key Management - `list_keys`: List registration keys - `create_key`: Create or modify a registration key - `delete_key`: Delete a registration key ### Patchset Management - `list_patchsets`: List patchsets for a feed and product - `manage_patchsets`: Enable, disable, or manage patchset deployments ### User Management - `list_users`: List all ePortal users ## Tool Usage Examples ### List Servers ```typescript // List all servers await callTool("list_servers", {}); // List servers with filtering await callTool("list_servers", { hostname: "web%", tag: "env:production", limit: 50 }); // Get server count only await callTool("list_servers", { only_count: true }); ``` ### Register Host ```typescript await callTool("register_host", { key: "production-key", hostname: "web-server-01" }); ``` ### Manage Patchsets ```typescript // Enable a patchset await callTool("manage_patchsets", { patchset: "K20240101_01", feed: ["main", "staging"], action: "enable", product: "kernel" }); // Enable all patchsets up to a specific one await callTool("manage_patchsets", { patchset: "K20240101_01", feed: ["main"], action: "enable-upto", product: "kernel" }); ``` ### Set Server Tags ```typescript await callTool("set_server_tags", { server_id: "abc123", tags: "env:production;team:platform;ubuntu" }); ``` ## Authentication ### Basic Authentication ```json { "auth": { "type": "basic", "username": "your-username", "password": "your-password" } } ``` ### API Key Authentication ```json { "auth": { "type": "api_key", "api_key": "your-api-key", "header_name": "X-Api-Key" } } ``` ## Security Best Practices 1. **Never commit credentials** to version control 2. **Use environment variables** for sensitive data 3. **Restrict file permissions** on config files: `chmod 600 config.json` 4. **Use API keys** instead of passwords when possible 5. **Rotate credentials** regularly 6. **Use HTTPS** for all ePortal connections ## Troubleshooting ### Common Issues #### Connection Errors ```bash # Test connection curl -v https://your-eportal.com/api/v1/servers # Check DNS resolution nslookup your-eportal.com ``` #### Authentication Failures ```bash # Test basic auth curl -u username:password https://your-eportal.com/api/v1/servers # Test API key curl -H "X-Api-Key: your-key" https://your-eportal.com/api/v1/servers ``` #### Configuration Issues ```bash # Validate configuration file npx tuxcare-eportal-mcp --config ./config.json --validate # Show current configuration npx tuxcare-eportal-mcp --config ./config.json --show-config ``` ### Debug Mode Enable debug logging: ```bash # Debug mode DEBUG=tuxcare:* tuxcare-eportal-mcp --config ./config.json # Verbose output tuxcare-eportal-mcp --config ./config.json --verbose ``` ## Error Handling The server provides comprehensive error handling: - **Authentication errors**: Clear messages for credential issues - **API errors**: Detailed error messages from the ePortal API - **Validation errors**: Input validation with helpful error messages - **Network errors**: Timeout and connection error handling ## Development ### Setup ```bash git clone https://github.com/Revmagi/tuxcare-eportal-mcp.git cd tuxcare-eportal-mcp npm install ``` ### Build ```bash npm run build ``` ### Development Mode ```bash npm run dev ``` ### Testing ```bash npm test ``` ### Linting ```bash npm run lint npm run lint:fix ``` ## Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests if applicable 5. Run linting and tests 6. Submit a pull request ## License MIT License - see [LICENSE](LICENSE) file for details. ## Support - **Issues**: [GitHub Issues](https://github.com/Revmagi/tuxcare-eportal-mcp/issues) - **Documentation**: [TuxCare Documentation](https://tuxcare.com/docs/) - **ePortal API**: See the ePortal API documentation for detailed API reference ## Version History - **1.0.0**: Initial release with full ePortal API support