@mickdarling/dollhousemcp
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.
45 lines • 7.25 kB
JavaScript
/**
* Browse marketplace personas from GitHub
*/
export class MarketplaceBrowser {
githubClient;
baseUrl = 'https://api.github.com/repos/DollhouseMCP/personas/contents/personas';
constructor(githubClient) {
this.githubClient = githubClient;
}
/**
* Browse marketplace personas by category
*/
async browseMarketplace(category) {
const url = category ? `${this.baseUrl}/${category}` : this.baseUrl;
const data = await this.githubClient.fetchFromGitHub(url);
if (!Array.isArray(data)) {
throw new Error('Invalid marketplace response. Expected directory listing.');
}
const items = data.filter((item) => item.type === 'file' && item.name.endsWith('.md'));
const categories = data.filter((item) => item.type === 'dir');
return { items, categories };
}
/**
* Format marketplace browse results
*/
formatBrowseResults(items, categories, category, personaIndicator = '') {
const textParts = [`${personaIndicator}🏪 **DollhouseMCP Marketplace**\n\n`];
if (!category) {
textParts.push(`**📁 Categories (${categories.length}):**\n`);
categories.forEach((cat) => {
textParts.push(` 📂 **${cat.name}** - Browse with: \`browse_marketplace "${cat.name}"\`\n`);
});
textParts.push('\n');
}
if (items.length > 0) {
textParts.push(`**🎭 Personas in ${category || 'root'} (${items.length}):**\n`);
items.forEach((item) => {
const path = category ? `${category}/${item.name}` : item.name;
textParts.push(` ▫️ **${item.name}**\n`, ` 📥 Install: \`install_persona "${path}"\`\n`, ` 👁️ Details: \`get_marketplace_persona "${path}"\`\n\n`);
});
}
return textParts.join('');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFya2V0cGxhY2VCcm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21hcmtldHBsYWNlL01hcmtldHBsYWNlQnJvd3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUlILE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsWUFBWSxDQUFlO0lBQzNCLE9BQU8sR0FBRyxzRUFBc0UsQ0FBQztJQUV6RixZQUFZLFlBQTBCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO0lBQ25DLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFpQjtRQUN2QyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUVwRSxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTFELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQy9FLENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUM7UUFFbkUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxtQkFBbUIsQ0FBQyxLQUFZLEVBQUUsVUFBaUIsRUFBRSxRQUFpQixFQUFFLG1CQUEyQixFQUFFO1FBQ25HLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IscUNBQXFDLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixVQUFVLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztZQUM5RCxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQzlCLFNBQVMsQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSwyQ0FBMkMsR0FBRyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUM7WUFDaEcsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsU0FBUyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsUUFBUSxJQUFJLE1BQU0sS0FBSyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUMsQ0FBQztZQUNoRixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQzFCLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUMvRCxTQUFTLENBQUMsSUFBSSxDQUNaLFdBQVcsSUFBSSxDQUFDLElBQUksTUFBTSxFQUMxQix3Q0FBd0MsSUFBSSxPQUFPLEVBQ25ELGlEQUFpRCxJQUFJLFNBQVMsQ0FDL0QsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJyb3dzZSBtYXJrZXRwbGFjZSBwZXJzb25hcyBmcm9tIEdpdEh1YlxuICovXG5cbmltcG9ydCB7IEdpdEh1YkNsaWVudCB9IGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcblxuZXhwb3J0IGNsYXNzIE1hcmtldHBsYWNlQnJvd3NlciB7XG4gIHByaXZhdGUgZ2l0aHViQ2xpZW50OiBHaXRIdWJDbGllbnQ7XG4gIHByaXZhdGUgYmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9wZXJzb25hcy9jb250ZW50cy9wZXJzb25hcyc7XG4gIFxuICBjb25zdHJ1Y3RvcihnaXRodWJDbGllbnQ6IEdpdEh1YkNsaWVudCkge1xuICAgIHRoaXMuZ2l0aHViQ2xpZW50ID0gZ2l0aHViQ2xpZW50O1xuICB9XG4gIFxuICAvKipcbiAgICogQnJvd3NlIG1hcmtldHBsYWNlIHBlcnNvbmFzIGJ5IGNhdGVnb3J5XG4gICAqL1xuICBhc3luYyBicm93c2VNYXJrZXRwbGFjZShjYXRlZ29yeT86IHN0cmluZyk6IFByb21pc2U8eyBpdGVtczogYW55W10sIGNhdGVnb3JpZXM6IGFueVtdIH0+IHtcbiAgICBjb25zdCB1cmwgPSBjYXRlZ29yeSA/IGAke3RoaXMuYmFzZVVybH0vJHtjYXRlZ29yeX1gIDogdGhpcy5iYXNlVXJsO1xuICAgIFxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmdpdGh1YkNsaWVudC5mZXRjaEZyb21HaXRIdWIodXJsKTtcbiAgICBcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXJrZXRwbGFjZSByZXNwb25zZS4gRXhwZWN0ZWQgZGlyZWN0b3J5IGxpc3RpbmcuJyk7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGl0ZW1zID0gZGF0YS5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS50eXBlID09PSAnZmlsZScgJiYgaXRlbS5uYW1lLmVuZHNXaXRoKCcubWQnKSk7XG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IGRhdGEuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0udHlwZSA9PT0gJ2RpcicpO1xuICAgIFxuICAgIHJldHVybiB7IGl0ZW1zLCBjYXRlZ29yaWVzIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgbWFya2V0cGxhY2UgYnJvd3NlIHJlc3VsdHNcbiAgICovXG4gIGZvcm1hdEJyb3dzZVJlc3VsdHMoaXRlbXM6IGFueVtdLCBjYXRlZ29yaWVzOiBhbnlbXSwgY2F0ZWdvcnk/OiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCB0ZXh0UGFydHMgPSBbYCR7cGVyc29uYUluZGljYXRvcn3wn4+qICoqRG9sbGhvdXNlTUNQIE1hcmtldHBsYWNlKipcXG5cXG5gXTtcbiAgICBcbiAgICBpZiAoIWNhdGVnb3J5KSB7XG4gICAgICB0ZXh0UGFydHMucHVzaChgKirwn5OBIENhdGVnb3JpZXMgKCR7Y2F0ZWdvcmllcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgY2F0ZWdvcmllcy5mb3JFYWNoKChjYXQ6IGFueSkgPT4ge1xuICAgICAgICB0ZXh0UGFydHMucHVzaChgICAg8J+TgiAqKiR7Y2F0Lm5hbWV9KiogLSBCcm93c2Ugd2l0aDogXFxgYnJvd3NlX21hcmtldHBsYWNlIFwiJHtjYXQubmFtZX1cIlxcYFxcbmApO1xuICAgICAgfSk7XG4gICAgICB0ZXh0UGFydHMucHVzaCgnXFxuJyk7XG4gICAgfVxuICAgIFxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICB0ZXh0UGFydHMucHVzaChgKirwn46tIFBlcnNvbmFzIGluICR7Y2F0ZWdvcnkgfHwgJ3Jvb3QnfSAoJHtpdGVtcy5sZW5ndGh9KToqKlxcbmApO1xuICAgICAgaXRlbXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBjYXRlZ29yeSA/IGAke2NhdGVnb3J5fS8ke2l0ZW0ubmFtZX1gIDogaXRlbS5uYW1lO1xuICAgICAgICB0ZXh0UGFydHMucHVzaChcbiAgICAgICAgICBgICAg4par77iPICoqJHtpdGVtLm5hbWV9KipcXG5gLFxuICAgICAgICAgIGAgICAgICDwn5OlIEluc3RhbGw6IFxcYGluc3RhbGxfcGVyc29uYSBcIiR7cGF0aH1cIlxcYFxcbmAsXG4gICAgICAgICAgYCAgICAgIPCfkYHvuI8gRGV0YWlsczogXFxgZ2V0X21hcmtldHBsYWNlX3BlcnNvbmEgXCIke3BhdGh9XCJcXGBcXG5cXG5gXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHRleHRQYXJ0cy5qb2luKCcnKTtcbiAgfVxufSJdfQ==