UNPKG

php-universal-mcp-server

Version:

Servidor MCP universal para desenvolvimento PHP e criação de sites em qualquer provedor de hospedagem

429 lines (323 loc) 9.94 kB
# PHP Universal MCP Server - Documentação da API Este documento descreve detalhadamente a API do PHP Universal MCP Server. ## Índice 1. [MCPServer](#mcpserver) 2. [Providers](#providers) 3. [Configuração](#configuração) 4. [Comandos MCP](#comandos-mcp) 5. [Streams](#streams) 6. [Extensibilidade](#extensibilidade) ## MCPServer ### Criação do Servidor ```javascript const { createServer } = require('php-universal-mcp-server'); const server = createServer({ mode: 'auto', apiKey: 'sua-api-key', // Opcional fallbackEnabled: true, simulateResponses: true, providerType: 'auto' }); ``` ### Métodos Principais #### `start()` Inicia o servidor MCP. ```javascript const status = server.start(); // { status: 'running', provider: 'mock-provider', mode: 'offline', timestamp: '2025-03-22T15:30:00.000Z' } ``` #### `stop()` Para o servidor MCP e finaliza todas as sessões ativas. ```javascript const status = server.stop(); // { status: 'stopped', timestamp: '2025-03-22T15:35:00.000Z' } ``` #### `processCommand(command)` Processa um comando do protocolo MCP. ```javascript const result = server.processCommand({ type: 'execute', payload: { action: 'createSite', domain: 'example.com' } }); ``` #### `registerHandler(commandType, handler)` Registra um handler personalizado para um tipo de comando MCP. ```javascript server.registerHandler('customCommand', (command) => { // Processa o comando personalizado return { status: 'success', message: 'Custom command processed' }; }); ``` ## Providers ### Providers Disponíveis - **MockProvider**: Provider simulado para desenvolvimento offline. - **cPanel**: Provider para integração com servidores cPanel. - **PleskProvider**: Provider para integração com servidores Plesk. - **AWSProvider**: Provider para integração com Amazon Web Services. - **AzureProvider**: Provider para integração com Microsoft Azure. - **GCPProvider**: Provider para integração com Google Cloud Platform. ### Métodos Comuns Todos os providers implementam a seguinte interface: #### `getName()` Retorna o nome do provider. #### `execute(payload)` Executa uma operação síncrona. #### `createStream(payload)` Inicia uma operação assíncrona com eventos. #### `closeStream(stream)` Fecha um stream ativo. #### `cancel(sessionId)` Cancela uma operação em andamento. #### `isAvailable()` Verifica se o provider está disponível no ambiente atual. #### `checkStatus()` Retorna o status atual do provider. ## Configuração O servidor MCP aceita as seguintes opções de configuração: | Opção | Tipo | Descrição | Valor padrão | |-------|------|-----------|--------------| | `mode` | String | Modo de operação ('online', 'offline', 'auto') | `'auto'` | | `apiKey` | String | Chave de API do provedor | `''` | | `fallbackEnabled` | Boolean | Habilita fallback para mock quando APIs falham | `true` | | `simulateResponses` | Boolean | Habilita respostas simuladas | `true` | | `providerType` | String | Tipo de provedor ('cpanel', 'plesk', 'aws', 'azure', 'gcp', 'mock', 'auto') | `'auto'` | | `mockDataDir` | String | Diretório para dados simulados | Process CWD + `/mock-data` | ### Configurações Específicas por Provider #### cPanel - `cpanelUsername`: Nome de usuário do cPanel - `cpanelPassword`: Senha do cPanel - `cpanelDomain`: Domínio do servidor cPanel - `cpanelApiToken`: Token de API do cPanel (alternativa a username/password) - `cpanelPort`: Porta do cPanel (padrão: 2083) - `cpanelUseSSL`: Usar SSL para conexões (padrão: true) #### Plesk - `pleskHost`: Host do servidor Plesk (padrão: localhost) - `pleskPort`: Porta do servidor Plesk (padrão: 8443) - `pleskUsername`: Nome de usuário do Plesk - `pleskPassword`: Senha do Plesk - `pleskApiKey`: Chave de API do Plesk (alternativa a username/password) #### AWS - `awsAccessKeyId`: ID da chave de acesso da AWS - `awsSecretAccessKey`: Chave de acesso secreta da AWS - `awsRegion`: Região da AWS (padrão: us-east-1) #### Azure - `azureSubscriptionId`: ID da assinatura do Azure - `azureTenantId`: ID do tenant do Azure - `azureClientId`: ID do cliente/aplicativo do Azure - `azureClientSecret`: Segredo do cliente do Azure - `azureResourceGroup`: Nome do grupo de recursos do Azure - `azureRegion`: Região do Azure (padrão: eastus) #### GCP - `gcpProjectId`: ID do projeto do GCP - `gcpKeyFilePath`: Caminho para o arquivo de credenciais do GCP - `gcpCredentials`: Credenciais do GCP como objeto (alternativa ao arquivo) - `gcpRegion`: Região do GCP (padrão: us-central1) - `gcpZone`: Zona do GCP (padrão: us-central1-a) ## Comandos MCP O servidor implementa os seguintes comandos do protocolo MCP: ### `status` Retorna o status atual do servidor. **Payload:** Nenhum **Resposta:** ```javascript { status: 'success', serverStatus: 'running', provider: 'mock-provider', mode: 'offline', activeSessions: 0, timestamp: '2025-03-22T15:30:00.000Z' } ``` ### `execute` Executa uma operação síncrona. **Payload:** ```javascript { action: String, // Ação a ser executada // Outros parâmetros específicos da ação } ``` **Resposta:** ```javascript { status: 'success', sessionId: 'session-id', result: { // Resultado da execução }, timestamp: '2025-03-22T15:30:00.000Z' } ``` ### `stream` Inicia uma operação assíncrona com eventos. **Payload:** ```javascript { action: String, // Ação a ser executada // Outros parâmetros específicos da ação } ``` **Resposta:** ```javascript { status: 'success', sessionId: 'session-id', timestamp: '2025-03-22T15:30:00.000Z' } ``` ### `cancel` Cancela uma operação em andamento. **Payload:** ```javascript { sessionId: String // ID da sessão a ser cancelada } ``` **Resposta:** ```javascript { status: 'success', message: 'Session session-id canceled', timestamp: '2025-03-22T15:30:00.000Z' } ``` ### `terminate` Finaliza o servidor. **Payload:** Nenhum **Resposta:** ```javascript { status: 'stopped', timestamp: '2025-03-22T15:30:00.000Z' } ``` ## Streams Os streams permitem operações assíncronas com eventos. ### Eventos de Stream - **start**: Emitido quando o stream inicia. - **data**: Emitido quando há novos dados disponíveis. - **end**: Emitido quando o stream termina com sucesso. - **close**: Emitido quando o stream é fechado pelo usuário. - **cancel**: Emitido quando o stream é cancelado. ### Exemplo de Uso de Stream ```javascript const streamResult = server.processCommand({ type: 'stream', payload: { action: 'deployFiles', siteId: 'site_123', files: ['index.php', 'style.css'] } }); const { sessionId } = streamResult; const stream = streamResult.stream; stream.emitter.on('start', (data) => { console.log('Stream iniciado:', data); }); stream.emitter.on('data', (data) => { console.log('Progresso:', data.progress + '%'); }); stream.emitter.on('end', (data) => { console.log('Stream finalizado:', data); }); ``` ## Ações Suportadas O servidor suporta as seguintes ações em todos os providers: | Ação | Descrição | Parâmetros | Disponível em | |------|-----------|------------|--------------| | `createSite` | Cria um novo site | `domain`, `template`, `options` | Todos os providers | | `uploadFile` | Envia um arquivo para o servidor | `path`, `content`, `options` | Todos os providers | | `getDomainInfo` | Obtém informações de um domínio | `domain` | Todos os providers | | `deployFiles` | Implanta arquivos em um site | `siteId`, `files` | Todos os providers | | `setupDatabase` | Cria e configura um banco de dados | `name`, `type`, `options` | Todos exceto Mock | | `createVM` | Cria uma máquina virtual | `name`, `size`, `options` | AWS, Azure, GCP | ### Ações Específicas do Provider #### cPanel - `createEmailAccount`: Cria uma conta de e-mail - `setupSSL`: Configura SSL para um domínio #### Plesk - `createSubscription`: Cria uma assinatura Plesk - `manageDNS`: Gerencia registros DNS #### AWS - `createS3Bucket`: Cria um bucket S3 - `setupCloudFront`: Configura uma distribuição CloudFront #### Azure - `createAppService`: Cria um serviço de aplicativo - `setupAzureCDN`: Configura CDN do Azure #### GCP - `setupGCEInstance`: Configura uma instância do GCE - `deployToAppEngine`: Implanta para o App Engine ## Extensibilidade ### Criando um Provider Personalizado ```javascript const { providers } = require('php-universal-mcp-server'); const { BaseProvider } = providers; class MyCustomProvider extends BaseProvider { constructor(config) { super(config); } getName() { return 'my-custom-provider'; } execute(payload) { // Implementação da execução return { success: true, data: { // Dados do resultado } }; } createStream(payload) { // Implementação do stream const streamId = crypto.randomUUID(); const emitter = new EventEmitter(); // Lógica de stream return { id: streamId, emitter: emitter }; } // Implementar os outros métodos da interface closeStream(stream) { /* ... */ } cancel(sessionId) { /* ... */ } isAvailable() { /* ... */ } } // Usar o provider personalizado const server = createServer({ providerType: 'custom' }); // Registrar o provider personalizado server._initProvider = function() { return new MyCustomProvider(this.config); }; ``` ### Criando Comandos Personalizados ```javascript server.registerHandler('customCommand', (command) => { // Processar o comando personalizado const { payload } = command; // Lógica de processamento return { status: 'success', message: 'Custom command processed', data: { // Dados da resposta } }; }); // Usar o comando personalizado const result = server.processCommand({ type: 'customCommand', payload: { // Dados específicos do comando } }); ```