@codervisor/devlog-mcp
Version:
MCP server for managing development logs and working notes
93 lines (92 loc) • 2.99 kB
JavaScript
/**
* Factory for creating MCP adapters
* Uses HTTP API client for secure and isolated access to devlog operations
*/
import { MCPApiAdapter } from './mcp-api-adapter.js';
import { loadMCPConfig, validateMCPConfig, printConfigSummary, } from '../config/mcp-config.js';
/**
* Create an MCP adapter using HTTP API client
*/
export async function createMCPAdapter(config) {
// Load configuration if not provided
const mcpConfig = config || loadMCPConfig();
// Validate configuration
validateMCPConfig(mcpConfig);
// Print configuration summary for debugging
printConfigSummary(mcpConfig);
// Create API-based adapter
const apiConfig = {
apiClient: {
baseUrl: mcpConfig.webApi.baseUrl,
timeout: mcpConfig.webApi.timeout,
retries: mcpConfig.webApi.retries,
},
defaultProjectId: mcpConfig.defaultProjectId ? Number(mcpConfig.defaultProjectId) : undefined,
autoDiscoverWebService: mcpConfig.webApi.autoDiscover,
};
const adapter = new MCPApiAdapter(apiConfig);
console.log('Created MCP API Adapter (HTTP client mode)');
// Initialize the adapter
await adapter.initialize();
return adapter;
}
/**
* Check if web API is available for API mode
*/
export async function checkWebApiAvailability(baseUrl) {
try {
const response = await fetch(`${baseUrl}/api/projects`, {
method: 'GET',
headers: { 'Content-Type': 'application/json' },
signal: AbortSignal.timeout(5000), // 5 second timeout
});
return response.ok;
}
catch {
return false;
}
}
/**
* Auto-discover web API URL (for development)
*/
export async function discoverWebApiUrl() {
const candidates = [
'http://localhost:3200',
'http://localhost:3000',
'http://127.0.0.1:3200',
'http://127.0.0.1:3000',
];
for (const url of candidates) {
console.log(`Checking web API at ${url}...`);
if (await checkWebApiAvailability(url)) {
console.log(`Found web API at ${url}`);
return url;
}
}
return null;
}
/**
* Create MCP adapter with automatic web API discovery
*/
export async function createMCPAdapterWithDiscovery() {
const config = loadMCPConfig();
// If auto-discovery is enabled, try to find web API
if (config.webApi.autoDiscover) {
const discoveredUrl = await discoverWebApiUrl();
if (discoveredUrl) {
// Update config with discovered URL
config.webApi.baseUrl = discoveredUrl;
console.log(`Using discovered web API URL: ${discoveredUrl}`);
}
else {
console.warn('Could not discover web API, using configured URL:', config.webApi.baseUrl);
}
}
return createMCPAdapter(config);
}
/**
* Type guard for API adapter (always true now)
*/
export function isApiAdapter(adapter) {
return adapter instanceof MCPApiAdapter;
}