Skip to main content
Glama

Flipt MCP Server

Official
by flipt-io
toolHandlers.ts7.65 kB
import { FliptClient } from '../services/fliptClient'; /** * Handlers for Flipt tools in the MCP server */ export class ToolHandlers { private fliptClient: FliptClient; constructor(fliptClient: FliptClient) { this.fliptClient = fliptClient; } /** * Handle create namespace tool */ async handleCreateNamespace({ key, name, description, }: { key: string; name: string; description?: string; }) { try { const namespace = await this.fliptClient.createNamespace(key, name, description); return { content: [ { type: 'text', text: `Successfully created namespace: ${JSON.stringify(namespace, null, 2)}`, }, ], }; } catch (error) { console.error('Error creating namespace:', error); return { content: [ { type: 'text', text: `Error creating namespace: ${error}`, }, ], isError: true, }; } } /** * Handle update namespace tool */ async handleUpdateNamespace({ key, name, description, }: { key: string; name: string; description?: string; }) { try { const namespace = await this.fliptClient.updateNamespace(key, name, description); return { content: [ { type: 'text', text: `Successfully updated namespace: ${JSON.stringify(namespace, null, 2)}`, }, ], }; } catch (error) { console.error(`Error updating namespace ${key}:`, error); return { content: [ { type: 'text', text: `Error updating namespace ${key}: ${error}`, }, ], isError: true, }; } } /** * Handle delete namespace tool */ async handleDeleteNamespace({ key }: { key: string }) { try { await this.fliptClient.deleteNamespace(key); return { content: [ { type: 'text', text: `Successfully deleted namespace: ${key}`, }, ], }; } catch (error) { console.error(`Error deleting namespace ${key}:`, error); return { content: [ { type: 'text', text: `Error deleting namespace ${key}: ${error}`, }, ], isError: true, }; } } /** * Handle create flag tool */ async handleCreateFlag({ namespaceKey, key, name, description, enabled, type, }: { namespaceKey: string; key: string; name: string; description?: string; enabled?: boolean; type: string; }) { try { const flag = await this.fliptClient.createFlag( namespaceKey, key, name, description, enabled, type ); return { content: [ { type: 'text', text: `Successfully created flag: ${JSON.stringify(flag, null, 2)}`, }, ], }; } catch (error) { console.error(`Error creating flag in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error creating flag in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } /** * Handle update flag tool */ async handleUpdateFlag({ namespaceKey, key, name, description, enabled, }: { namespaceKey: string; key: string; name: string; description?: string; enabled?: boolean; }) { try { const flag = await this.fliptClient.updateFlag(namespaceKey, key, name, description, enabled); return { content: [ { type: 'text', text: `Successfully updated flag: ${JSON.stringify(flag, null, 2)}`, }, ], }; } catch (error) { console.error(`Error updating flag ${key} in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error updating flag ${key} in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } /** * Handle delete flag tool */ async handleDeleteFlag({ namespaceKey, key }: { namespaceKey: string; key: string }) { try { await this.fliptClient.deleteFlag(namespaceKey, key); return { content: [ { type: 'text', text: `Successfully deleted flag ${key} in namespace ${namespaceKey}`, }, ], }; } catch (error) { console.error(`Error deleting flag ${key} in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error deleting flag ${key} in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } /** * Handle create segment tool */ async handleCreateSegment({ namespaceKey, key, name, description, matchType, }: { namespaceKey: string; key: string; name: string; description?: string; matchType: string; }) { try { const segment = await this.fliptClient.createSegment( namespaceKey, key, name, description, matchType ); return { content: [ { type: 'text', text: `Successfully created segment: ${JSON.stringify(segment, null, 2)}`, }, ], }; } catch (error) { console.error(`Error creating segment in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error creating segment in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } /** * Handle update segment tool */ async handleUpdateSegment({ namespaceKey, key, name, description, matchType, }: { namespaceKey: string; key: string; name: string; description?: string; matchType: string; }) { try { const segment = await this.fliptClient.updateSegment( namespaceKey, key, name, description, matchType ); return { content: [ { type: 'text', text: `Successfully updated segment: ${JSON.stringify(segment, null, 2)}`, }, ], }; } catch (error) { console.error(`Error updating segment ${key} in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error updating segment ${key} in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } /** * Handle delete segment tool */ async handleDeleteSegment({ namespaceKey, key }: { namespaceKey: string; key: string }) { try { await this.fliptClient.deleteSegment(namespaceKey, key); return { content: [ { type: 'text', text: `Successfully deleted segment ${key} in namespace ${namespaceKey}`, }, ], }; } catch (error) { console.error(`Error deleting segment ${key} in namespace ${namespaceKey}:`, error); return { content: [ { type: 'text', text: `Error deleting segment ${key} in namespace ${namespaceKey}: ${error}`, }, ], isError: true, }; } } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/flipt-io/mcp-server-flipt'

If you have feedback or need assistance with the MCP directory API, please join our Discord server