@simonecoelhosfo/optimizely-mcp-server
Version:
Optimizely MCP Server for AI assistants with integrated CLI tools
92 lines • 4.29 kB
JavaScript
/**
* Get Optimizely API Reference Tool - Individual Module
* @description Provides Optimizely API documentation and reference information
* @since 2025-08-04
* @author Tool Modularization Team
*
* Migration Status: COMPLETED
* Original Method: OptimizelyMCPTools.getOptimizelyAPIReference
* Complexity: MEDIUM
* Dependencies: logger, errorMapper, OptimizelyDocumentationHandler
*/
/**
* Creates the Get Optimizely API Reference tool with injected dependencies
* @param deps - Injected dependencies (storage, logger, errorMapper, etc.)
* @returns Tool definition with handler
*/
export function createGetOptimizelyAPIReferenceTool(deps) {
return {
name: 'get_optimizely_api_reference',
requiresCache: false,
category: 'documentation',
description: 'Provides comprehensive API documentation for Feature Experimentation SDKs, Web Experimentation platform, and Optimizely Agent microservice',
handler: async (args) => {
const { entity_type: entityType, information_type: informationType, product_type: productType, method_name: methodName, concept_name: conceptName, search_query: searchQuery } = args;
try {
deps.logger.debug({
entityType,
informationType,
productType,
methodName,
conceptName,
searchQuery
}, 'OptimizelyMCPTools.getOptimizelyAPIReference: Processing API documentation query');
// Import and use the OptimizelyDocumentationHandler
const { createRequire } = await import('module');
const require = createRequire(import.meta.url);
const OptimizelyDocumentationHandler = require('../OptimizelyDocumentationHandler.cjs');
// Create handler instance
const handler = new OptimizelyDocumentationHandler();
// Build query parameters (map product_type to sdk_name for handler compatibility)
const params = {
entity_type: entityType,
information_type: informationType,
sdk_name: productType, // Handler expects sdk_name, tool provides product_type
method_name: methodName,
concept_name: conceptName,
search_query: searchQuery
};
// Execute query
const result = await handler.handleQuery(params);
// Check if there's an error with suggestions
if (!result.success && result.error) {
let errorText = `# ${result.error.message}\n\n`;
if (result.error.suggestions && result.error.suggestions.length > 0) {
errorText += '## 💡 Suggestions\n\n';
errorText += result.error.suggestions.join('\n') + '\n';
}
return {
content: [
{
type: 'text',
text: errorText
}
]
};
}
if (!result.success) {
throw new Error(result.error?.message || 'Failed to retrieve documentation');
}
// Return formatted response
return {
content: [
{
type: 'text',
text: result.data ? deps.formatDocumentationResponse(result) : 'No documentation found for the specified query.'
}
]
};
}
catch (error) {
deps.logger.error({
entityType,
informationType,
productType,
error: error.message
}, 'OptimizelyMCPTools.getOptimizelyAPIReference: Failed to process query');
throw deps.errorMapper.toMCPError(error, 'Failed to get API reference documentation');
}
}
};
}
//# sourceMappingURL=GetOptimizelyApiReference.js.map