@dollhousemcp/mcp-server
Version:
DollhouseMCP - A Model Context Protocol (MCP) server that enables dynamic AI persona management from markdown files, allowing Claude and other compatible AI assistants to activate and switch between different behavioral personas.
108 lines • 12.5 kB
JavaScript
/**
* Central configuration for all element types
*
* This file serves as the single source of truth for element type configurations.
* When adding new element types, update this config and use the derived arrays
* to ensure consistency across the codebase.
*/
import { ElementType } from '../portfolio/types.js';
/**
* Complete configuration for each element type
*/
export const ELEMENT_TYPE_CONFIG = {
[ElementType.PERSONA]: {
plural: 'personas',
directory: 'personas',
mcpSupported: true,
hasManager: true,
icon: '👤',
description: 'Behavioral profiles that define AI personality and interaction style'
},
[ElementType.SKILL]: {
plural: 'skills',
directory: 'skills',
mcpSupported: true,
hasManager: true,
icon: '🛠️',
description: 'Discrete capabilities for specific tasks'
},
[ElementType.TEMPLATE]: {
plural: 'templates',
directory: 'templates',
mcpSupported: true,
hasManager: true,
icon: '📄',
description: 'Reusable content structures with variable substitution'
},
[ElementType.AGENT]: {
plural: 'agents',
directory: 'agents',
mcpSupported: true,
hasManager: true,
icon: '🤖',
description: 'Autonomous goal-oriented actors with decision-making capabilities'
},
[ElementType.MEMORY]: {
plural: 'memories',
directory: 'memories',
mcpSupported: false, // Hidden from MCP per Issue #144
hasManager: true, // Implemented
icon: '🧠',
description: 'Persistent context storage for continuity and learning'
},
[ElementType.ENSEMBLE]: {
plural: 'ensembles',
directory: 'ensembles',
mcpSupported: true, // Re-enabled - was working before, agent incorrectly disabled it
hasManager: true, // Implemented in this phase
icon: '🎭',
description: 'Groups of elements working together as a cohesive unit'
}
};
/**
* Derived arrays for validation and filtering
* These are automatically generated from the config above
*/
// Element types that are exposed via MCP tools
export const MCP_SUPPORTED_TYPES = Object.entries(ELEMENT_TYPE_CONFIG)
.filter(([, config]) => config.mcpSupported)
.map(([type]) => type);
// Plural forms for MCP validation (used in browseCollection validTypes array)
export const VALID_TYPES_ARRAY = MCP_SUPPORTED_TYPES.map(type => ELEMENT_TYPE_CONFIG[type].plural);
// Mapping from plural forms to ElementType values
export const PLURAL_TO_ELEMENT_TYPE_MAP = Object.fromEntries(Object.entries(ELEMENT_TYPE_CONFIG).map(([type, config]) => [
config.plural, type
]));
// Mapping from singular forms to directory names
export const SINGULAR_TO_DIRECTORY_MAP = Object.fromEntries(Object.entries(ELEMENT_TYPE_CONFIG).map(([type, config]) => [
type.toLowerCase().replace('s', ''), // Convert 'personas' -> 'persona'
config.directory
]));
/**
* Utility functions
*/
export function isElementTypeSupported(type) {
return ELEMENT_TYPE_CONFIG[type]?.mcpSupported ?? false;
}
export function getElementTypeConfig(type) {
return ELEMENT_TYPE_CONFIG[type];
}
export function getAllSupportedTypes() {
return MCP_SUPPORTED_TYPES;
}
export function getValidTypesForMCP() {
return VALID_TYPES_ARRAY;
}
/**
* Migration note: To use this centralized config:
*
* 1. Replace hardcoded arrays with imports from this file:
* - Replace validTypes in src/index.ts with VALID_TYPES_ARRAY
* - Replace MCP_SUPPORTED_TYPES in CollectionBrowser.ts with import
* - Replace mapping objects with imports from this file
*
* 2. Update components to use utility functions instead of hardcoded checks
*
* 3. When adding new types, only update ELEMENT_TYPE_CONFIG above
*/
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25maWcvZWxlbWVudC10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUNqQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUNyQixNQUFNLEVBQUUsVUFBVTtRQUNsQixTQUFTLEVBQUUsVUFBVTtRQUNyQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSxzRUFBc0U7S0FDcEY7SUFDRCxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEVBQUUsUUFBUTtRQUNoQixTQUFTLEVBQUUsUUFBUTtRQUNuQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsS0FBSztRQUNYLFdBQVcsRUFBRSwwQ0FBMEM7S0FDeEQ7SUFDRCxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUN0QixNQUFNLEVBQUUsV0FBVztRQUNuQixTQUFTLEVBQUUsV0FBVztRQUN0QixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSx3REFBd0Q7S0FDdEU7SUFDRCxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNuQixNQUFNLEVBQUUsUUFBUTtRQUNoQixTQUFTLEVBQUUsUUFBUTtRQUNuQixZQUFZLEVBQUUsSUFBSTtRQUNsQixVQUFVLEVBQUUsSUFBSTtRQUNoQixJQUFJLEVBQUUsSUFBSTtRQUNWLFdBQVcsRUFBRSxtRUFBbUU7S0FDakY7SUFDRCxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQixNQUFNLEVBQUUsVUFBVTtRQUNsQixTQUFTLEVBQUUsVUFBVTtRQUNyQixZQUFZLEVBQUUsS0FBSyxFQUFFLGlDQUFpQztRQUN0RCxVQUFVLEVBQUUsSUFBSSxFQUFLLGNBQWM7UUFDbkMsSUFBSSxFQUFFLElBQUk7UUFDVixXQUFXLEVBQUUsd0RBQXdEO0tBQ3RFO0lBQ0QsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDdEIsTUFBTSxFQUFFLFdBQVc7UUFDbkIsU0FBUyxFQUFFLFdBQVc7UUFDdEIsWUFBWSxFQUFFLElBQUksRUFBRyxpRUFBaUU7UUFDdEYsVUFBVSxFQUFFLElBQUksRUFBSyw0QkFBNEI7UUFDakQsSUFBSSxFQUFFLElBQUk7UUFDVixXQUFXLEVBQUUsd0RBQXdEO0tBQ3RFO0NBQ08sQ0FBQztBQUVYOzs7R0FHRztBQUVILCtDQUErQztBQUMvQyxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDO0tBQ25FLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztLQUMzQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFtQixDQUFDLENBQUM7QUFFeEMsOEVBQThFO0FBQzlFLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FDdEQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQ3pDLENBQUM7QUFFRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FDMUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMxRCxNQUFNLENBQUMsTUFBTSxFQUFFLElBQW1CO0NBQ25DLENBQUMsQ0FDSCxDQUFDO0FBRUYsbURBQW1EO0FBQ25ELE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQ3pELE1BQU0sQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDMUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsbUNBQW1DO0lBQ3hFLE1BQU0sQ0FBQyxTQUFTO0NBQ2pCLENBQUMsQ0FDSCxDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBaUI7SUFDdEQsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxZQUFZLElBQUksS0FBSyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBaUI7SUFDcEQsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsTUFBTSxVQUFVLG9CQUFvQjtJQUNsQyxPQUFPLG1CQUFtQixDQUFDO0FBQzdCLENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLE9BQU8saUJBQWlCLENBQUM7QUFDM0IsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDZW50cmFsIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBlbGVtZW50IHR5cGVzXG4gKiBcbiAqIFRoaXMgZmlsZSBzZXJ2ZXMgYXMgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGVsZW1lbnQgdHlwZSBjb25maWd1cmF0aW9ucy5cbiAqIFdoZW4gYWRkaW5nIG5ldyBlbGVtZW50IHR5cGVzLCB1cGRhdGUgdGhpcyBjb25maWcgYW5kIHVzZSB0aGUgZGVyaXZlZCBhcnJheXNcbiAqIHRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGNvZGViYXNlLlxuICovXG5cbmltcG9ydCB7IEVsZW1lbnRUeXBlIH0gZnJvbSAnLi4vcG9ydGZvbGlvL3R5cGVzLmpzJztcblxuLyoqXG4gKiBDb21wbGV0ZSBjb25maWd1cmF0aW9uIGZvciBlYWNoIGVsZW1lbnQgdHlwZVxuICovXG5leHBvcnQgY29uc3QgRUxFTUVOVF9UWVBFX0NPTkZJRyA9IHtcbiAgW0VsZW1lbnRUeXBlLlBFUlNPTkFdOiB7XG4gICAgcGx1cmFsOiAncGVyc29uYXMnLFxuICAgIGRpcmVjdG9yeTogJ3BlcnNvbmFzJyxcbiAgICBtY3BTdXBwb3J0ZWQ6IHRydWUsXG4gICAgaGFzTWFuYWdlcjogdHJ1ZSxcbiAgICBpY29uOiAn8J+RpCcsXG4gICAgZGVzY3JpcHRpb246ICdCZWhhdmlvcmFsIHByb2ZpbGVzIHRoYXQgZGVmaW5lIEFJIHBlcnNvbmFsaXR5IGFuZCBpbnRlcmFjdGlvbiBzdHlsZSdcbiAgfSxcbiAgW0VsZW1lbnRUeXBlLlNLSUxMXToge1xuICAgIHBsdXJhbDogJ3NraWxscycsXG4gICAgZGlyZWN0b3J5OiAnc2tpbGxzJywgXG4gICAgbWNwU3VwcG9ydGVkOiB0cnVlLFxuICAgIGhhc01hbmFnZXI6IHRydWUsXG4gICAgaWNvbjogJ/Cfm6DvuI8nLFxuICAgIGRlc2NyaXB0aW9uOiAnRGlzY3JldGUgY2FwYWJpbGl0aWVzIGZvciBzcGVjaWZpYyB0YXNrcydcbiAgfSxcbiAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXToge1xuICAgIHBsdXJhbDogJ3RlbXBsYXRlcycsXG4gICAgZGlyZWN0b3J5OiAndGVtcGxhdGVzJyxcbiAgICBtY3BTdXBwb3J0ZWQ6IHRydWUsXG4gICAgaGFzTWFuYWdlcjogdHJ1ZSxcbiAgICBpY29uOiAn8J+ThCcsXG4gICAgZGVzY3JpcHRpb246ICdSZXVzYWJsZSBjb250ZW50IHN0cnVjdHVyZXMgd2l0aCB2YXJpYWJsZSBzdWJzdGl0dXRpb24nXG4gIH0sXG4gIFtFbGVtZW50VHlwZS5BR0VOVF06IHtcbiAgICBwbHVyYWw6ICdhZ2VudHMnLFxuICAgIGRpcmVjdG9yeTogJ2FnZW50cycsXG4gICAgbWNwU3VwcG9ydGVkOiB0cnVlLFxuICAgIGhhc01hbmFnZXI6IHRydWUsXG4gICAgaWNvbjogJ/CfpJYnLFxuICAgIGRlc2NyaXB0aW9uOiAnQXV0b25vbW91cyBnb2FsLW9yaWVudGVkIGFjdG9ycyB3aXRoIGRlY2lzaW9uLW1ha2luZyBjYXBhYmlsaXRpZXMnXG4gIH0sXG4gIFtFbGVtZW50VHlwZS5NRU1PUlldOiB7XG4gICAgcGx1cmFsOiAnbWVtb3JpZXMnLFxuICAgIGRpcmVjdG9yeTogJ21lbW9yaWVzJyxcbiAgICBtY3BTdXBwb3J0ZWQ6IGZhbHNlLCAvLyBIaWRkZW4gZnJvbSBNQ1AgcGVyIElzc3VlICMxNDRcbiAgICBoYXNNYW5hZ2VyOiB0cnVlLCAgICAvLyBJbXBsZW1lbnRlZFxuICAgIGljb246ICfwn6egJyxcbiAgICBkZXNjcmlwdGlvbjogJ1BlcnNpc3RlbnQgY29udGV4dCBzdG9yYWdlIGZvciBjb250aW51aXR5IGFuZCBsZWFybmluZydcbiAgfSxcbiAgW0VsZW1lbnRUeXBlLkVOU0VNQkxFXToge1xuICAgIHBsdXJhbDogJ2Vuc2VtYmxlcycsXG4gICAgZGlyZWN0b3J5OiAnZW5zZW1ibGVzJyxcbiAgICBtY3BTdXBwb3J0ZWQ6IHRydWUsICAvLyBSZS1lbmFibGVkIC0gd2FzIHdvcmtpbmcgYmVmb3JlLCBhZ2VudCBpbmNvcnJlY3RseSBkaXNhYmxlZCBpdFxuICAgIGhhc01hbmFnZXI6IHRydWUsICAgIC8vIEltcGxlbWVudGVkIGluIHRoaXMgcGhhc2VcbiAgICBpY29uOiAn8J+OrScsXG4gICAgZGVzY3JpcHRpb246ICdHcm91cHMgb2YgZWxlbWVudHMgd29ya2luZyB0b2dldGhlciBhcyBhIGNvaGVzaXZlIHVuaXQnXG4gIH1cbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogRGVyaXZlZCBhcnJheXMgZm9yIHZhbGlkYXRpb24gYW5kIGZpbHRlcmluZ1xuICogVGhlc2UgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIGNvbmZpZyBhYm92ZVxuICovXG5cbi8vIEVsZW1lbnQgdHlwZXMgdGhhdCBhcmUgZXhwb3NlZCB2aWEgTUNQIHRvb2xzXG5leHBvcnQgY29uc3QgTUNQX1NVUFBPUlRFRF9UWVBFUyA9IE9iamVjdC5lbnRyaWVzKEVMRU1FTlRfVFlQRV9DT05GSUcpXG4gIC5maWx0ZXIoKFssIGNvbmZpZ10pID0+IGNvbmZpZy5tY3BTdXBwb3J0ZWQpXG4gIC5tYXAoKFt0eXBlXSkgPT4gdHlwZSBhcyBFbGVtZW50VHlwZSk7XG5cbi8vIFBsdXJhbCBmb3JtcyBmb3IgTUNQIHZhbGlkYXRpb24gKHVzZWQgaW4gYnJvd3NlQ29sbGVjdGlvbiB2YWxpZFR5cGVzIGFycmF5KVxuZXhwb3J0IGNvbnN0IFZBTElEX1RZUEVTX0FSUkFZID0gTUNQX1NVUFBPUlRFRF9UWVBFUy5tYXAoXG4gIHR5cGUgPT4gRUxFTUVOVF9UWVBFX0NPTkZJR1t0eXBlXS5wbHVyYWxcbik7XG5cbi8vIE1hcHBpbmcgZnJvbSBwbHVyYWwgZm9ybXMgdG8gRWxlbWVudFR5cGUgdmFsdWVzXG5leHBvcnQgY29uc3QgUExVUkFMX1RPX0VMRU1FTlRfVFlQRV9NQVAgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gIE9iamVjdC5lbnRyaWVzKEVMRU1FTlRfVFlQRV9DT05GSUcpLm1hcCgoW3R5cGUsIGNvbmZpZ10pID0+IFtcbiAgICBjb25maWcucGx1cmFsLCB0eXBlIGFzIEVsZW1lbnRUeXBlXG4gIF0pXG4pO1xuXG4vLyBNYXBwaW5nIGZyb20gc2luZ3VsYXIgZm9ybXMgdG8gZGlyZWN0b3J5IG5hbWVzICBcbmV4cG9ydCBjb25zdCBTSU5HVUxBUl9UT19ESVJFQ1RPUllfTUFQID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICBPYmplY3QuZW50cmllcyhFTEVNRU5UX1RZUEVfQ09ORklHKS5tYXAoKFt0eXBlLCBjb25maWddKSA9PiBbXG4gICAgdHlwZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ3MnLCAnJyksIC8vIENvbnZlcnQgJ3BlcnNvbmFzJyAtPiAncGVyc29uYScgXG4gICAgY29uZmlnLmRpcmVjdG9yeVxuICBdKVxuKTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uc1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnRUeXBlU3VwcG9ydGVkKHR5cGU6IEVsZW1lbnRUeXBlKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTEVNRU5UX1RZUEVfQ09ORklHW3R5cGVdPy5tY3BTdXBwb3J0ZWQgPz8gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50VHlwZUNvbmZpZyh0eXBlOiBFbGVtZW50VHlwZSkge1xuICByZXR1cm4gRUxFTUVOVF9UWVBFX0NPTkZJR1t0eXBlXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFN1cHBvcnRlZFR5cGVzKCk6IEVsZW1lbnRUeXBlW10ge1xuICByZXR1cm4gTUNQX1NVUFBPUlRFRF9UWVBFUztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbGlkVHlwZXNGb3JNQ1AoKTogc3RyaW5nW10ge1xuICByZXR1cm4gVkFMSURfVFlQRVNfQVJSQVk7XG59XG5cbi8qKlxuICogTWlncmF0aW9uIG5vdGU6IFRvIHVzZSB0aGlzIGNlbnRyYWxpemVkIGNvbmZpZzpcbiAqIFxuICogMS4gUmVwbGFjZSBoYXJkY29kZWQgYXJyYXlzIHdpdGggaW1wb3J0cyBmcm9tIHRoaXMgZmlsZTpcbiAqICAgIC0gUmVwbGFjZSB2YWxpZFR5cGVzIGluIHNyYy9pbmRleC50cyB3aXRoIFZBTElEX1RZUEVTX0FSUkFZXG4gKiAgICAtIFJlcGxhY2UgTUNQX1NVUFBPUlRFRF9UWVBFUyBpbiBDb2xsZWN0aW9uQnJvd3Nlci50cyB3aXRoIGltcG9ydFxuICogICAgLSBSZXBsYWNlIG1hcHBpbmcgb2JqZWN0cyB3aXRoIGltcG9ydHMgZnJvbSB0aGlzIGZpbGVcbiAqIFxuICogMi4gVXBkYXRlIGNvbXBvbmVudHMgdG8gdXNlIHV0aWxpdHkgZnVuY3Rpb25zIGluc3RlYWQgb2YgaGFyZGNvZGVkIGNoZWNrc1xuICogXG4gKiAzLiBXaGVuIGFkZGluZyBuZXcgdHlwZXMsIG9ubHkgdXBkYXRlIEVMRU1FTlRfVFlQRV9DT05GSUcgYWJvdmVcbiAqLyJdfQ==