documentation-unified.tsโข3.53 kB
/**
* Unified Coolify Documentation Tools
* Consolidated MCP tools for accessing built-in documentation
*/
import { Tool } from '@modelcontextprotocol/sdk/types.js';
import { CoolifyApiClient } from '../utils/coolify-client';
/**
* Unified Documentation Tool
* Combines search, get, API reference, and troubleshooting into one tool
*/
export const documentationTool: Tool = {
name: 'coolify_documentation',
description: 'Access Coolify documentation: search docs, get topic info, API reference, or troubleshooting guides',
inputSchema: {
type: 'object',
properties: {
action: {
type: 'string',
enum: ['search', 'get', 'api', 'troubleshoot', 'topics', 'api_reference'],
description: 'Action to perform: search docs, get topic docs, get API reference, get troubleshooting, list topics, or get API reference',
},
query: {
type: 'string',
description: 'Search query, topic name, API endpoint, or issue description',
},
category: {
type: 'string',
description: 'Optional category filter (api, guide, configuration, troubleshooting)',
},
limit: {
type: 'number',
description: 'Maximum number of results to return',
default: 10,
minimum: 1,
maximum: 50,
},
},
required: ['action', 'query'],
},
};
export async function handleDocumentation(
coolifyClient: CoolifyApiClient,
args: any
): Promise<any> {
try {
const { action, query, category, limit } = args;
let result;
let message;
switch (action) {
case 'search':
result = await coolifyClient.searchDocumentation(query, category, limit || 10);
message = `Found ${result.entries.length} documentation entries for "${query}"`;
break;
case 'get':
result = await coolifyClient.getDocumentation(query, category);
message = `Found ${result.length} documentation entries for topic "${query}"`;
break;
case 'api':
result = await coolifyClient.getApiReference(query);
message = query
? `API documentation for endpoint "${query}"`
: 'Complete Coolify API reference documentation';
break;
case 'troubleshoot':
result = await coolifyClient.getTroubleshooting(query);
message = `Found ${result.length} troubleshooting guides for "${query}"`;
break;
case 'topics':
result = await coolifyClient.getDocumentationTopics();
message = `Available documentation topics`;
break;
case 'api_reference':
result = await coolifyClient.getApiReference(query);
message = query
? `API reference for "${query}"`
: 'Complete Coolify API reference';
break;
default:
throw new Error(`Unknown documentation action: ${action}`);
}
return {
content: [
{
type: 'text',
text: JSON.stringify({
success: true,
data: result,
message: message
}, null, 2)
}
]
};
} catch (error) {
return {
content: [
{
type: 'text',
text: JSON.stringify({
success: false,
error: error instanceof Error ? error.message : 'Unknown error occurred'
}, null, 2)
}
],
isError: true
};
}
}
// Export unified tools
export const documentationTools = [documentationTool];