@toolprint/hypertool-mcp
Version:
HyperTool MCP proxy server for routing requests between clients and multiple underlying MCP servers
153 lines • 5.53 kB
TypeScript
/**
* PersonaMcpIntegration Implementation
*
* This module implements integration with the MCP configuration system to apply
* persona-specific server configurations. When a persona is activated, its MCP
* configuration is merged with the existing MCP configuration, and when deactivated,
* the original configuration is restored.
*
* @fileoverview MCP configuration integration for persona content pack system
*/
import type { MCPConfig, ServerEntry } from "../types/config.js";
import type { PersonaAssets } from "./types.js";
/**
* MCP configuration backup for restoration
*/
export interface McpConfigBackup {
/** Original MCP configuration */
originalConfig: MCPConfig;
/** Backup timestamp */
backupTimestamp: Date;
/** Source of the backup (e.g., "file", "database") */
source: string;
/** Original config file path if applicable */
originalConfigPath?: string;
/** Additional metadata */
metadata?: Record<string, any>;
}
/**
* Configuration merge options
*/
export interface McpConfigMergeOptions {
/** How to resolve server name conflicts */
conflictResolution: "persona-wins" | "base-wins" | "user-choice" | "error";
/** Whether to preserve environment variables from base config */
preserveBaseEnv?: boolean;
/** Whether to merge environment variables or replace them */
mergeEnvironment?: boolean;
/** Custom conflict resolver function */
customResolver?: (serverName: string, baseServer: ServerEntry, personaServer: ServerEntry) => ServerEntry | null;
}
/**
* Configuration merge result
*/
export interface McpConfigMergeResult {
/** Whether merge was successful */
success: boolean;
/** Merged configuration */
mergedConfig?: MCPConfig;
/** List of conflicts encountered */
conflicts: string[];
/** Warnings during merge */
warnings: string[];
/** Errors during merge */
errors: string[];
/** Statistics about the merge */
stats: {
baseServersCount: number;
personaServersCount: number;
mergedServersCount: number;
conflictsResolved: number;
};
}
/**
* PersonaMcpIntegration class for handling MCP config operations
*
* Provides functionality to merge persona MCP configurations with existing
* configurations, handle conflicts, backup and restore configurations, and
* manage server connections during persona activation/deactivation.
*/
export declare class PersonaMcpIntegration {
private readonly getCurrentConfig;
private readonly setCurrentConfig;
private readonly restartConnections?;
private currentBackup;
private readonly parser;
private readonly defaultMergeOptions;
constructor(getCurrentConfig: () => Promise<MCPConfig | null>, setCurrentConfig: (config: MCPConfig) => Promise<void>, restartConnections?: (() => Promise<void>) | undefined, mergeOptions?: Partial<McpConfigMergeOptions>);
/**
* Apply persona MCP configuration
*
* Loads the persona's MCP configuration, merges it with the current configuration,
* and applies the result. Creates a backup for later restoration.
*
* @param mcpConfigFile - Path to persona's mcp.json file
* @param options - Merge options
* @returns Promise resolving to merge result
*/
applyPersonaConfig(mcpConfigFile: string, options?: Partial<McpConfigMergeOptions>): Promise<McpConfigMergeResult>;
/**
* Restore original MCP configuration
*
* Restores the configuration that was backed up before persona activation.
*
* @returns Promise resolving when restoration is complete
*/
restoreOriginalConfig(): Promise<void>;
/**
* Check if there's a backup available for restoration
*/
hasBackup(): boolean;
/**
* Get backup information
*/
getBackupInfo(): McpConfigBackup | null;
/**
* Load persona MCP configuration from file
*/
private loadPersonaMcpConfig;
/**
* Create backup of current configuration
*/
private createConfigBackup;
/**
* Merge base and persona MCP configurations
*/
private mergeConfigurations;
/**
* Merge two server configurations
*/
private mergeServerConfigs;
/**
* Generate a simple hash of the configuration for tracking changes
*/
private generateConfigHash;
/**
* Validate MCP configuration format
*/
static validateMcpConfig(config: unknown): config is MCPConfig;
/**
* Create a PersonaMcpIntegration instance for personas that don't have MCP configs
*/
static createNullIntegration(): PersonaMcpIntegration;
/**
* Dispose of the integration and clean up resources
*/
dispose(): void;
}
/**
* Create a PersonaMcpIntegration instance with default configuration handlers
*/
export declare function createPersonaMcpIntegration(getCurrentConfig: () => Promise<MCPConfig | null>, setCurrentConfig: (config: MCPConfig) => Promise<void>, restartConnections?: () => Promise<void>, mergeOptions?: Partial<McpConfigMergeOptions>): PersonaMcpIntegration;
/**
* Helper function to check if persona assets include MCP configuration
*/
export declare function personaHasMcpConfig(assets: PersonaAssets): boolean;
/**
* Helper function to validate persona MCP config file exists and is readable
*/
export declare function validatePersonaMcpConfigFile(filePath: string): Promise<{
isValid: boolean;
error?: string;
}>;
//# sourceMappingURL=mcp-integration.d.ts.map