Skip to main content
Glama

browse_community

Explore community persona collections from GitHub to find expert personas for AI interactions, with optional filtering by categories like Programming or Business.

Instructions

커뮤니티 페르소나 컬렉션을 탐색합니다 (GitHub에서 공유된 무료 페르소나)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
categoryNo필터링할 카테고리 (선택사항): Programming, Creative, Business, Education, Design 등

Implementation Reference

  • Main execution logic for browse_community tool: validates args, lists/filter/groups community personas, generates formatted list response.
    case 'browse_community': { const validated = browseCommunitySchema.parse(args); const personas = await listCommunityPersonas(); if (personas.length === 0) { return { content: [ { type: 'text', text: '📦 커뮤니티 페르소나가 아직 없습니다.\n\nCONTRIBUTING.md를 참조하여 첫 번째 기여자가 되어보세요!', }, ], }; } // 카테고리 필터링 let filtered = personas; if (validated.category) { filtered = personas.filter(p => p.category && p.category.toLowerCase().includes(validated.category!.toLowerCase()) ); } // 카테고리별로 그룹화 const byCategory: Record<string, CommunityPersona[]> = {}; filtered.forEach(p => { const cat = p.category || 'Other'; if (!byCategory[cat]) { byCategory[cat] = []; } byCategory[cat].push(p); }); let output = '🌟 Community Persona Collection\n\n'; output += `Found ${filtered.length} persona(s)${validated.category ? ` in category "${validated.category}"` : ''}\n\n`; for (const [category, list] of Object.entries(byCategory)) { output += `## ${category}\n\n`; list.forEach(p => { output += `### ${p.name}\n`; if (p.author) output += `👤 Author: ${p.author}\n`; if (p.difficulty) output += `📊 Difficulty: ${p.difficulty}\n`; if (p.persona) output += `📝 Description: ${p.persona}\n`; if (p['use']) output += `💡 Use Cases: ${p['use']}\n`; output += `\n📥 Install: \`install_community_persona\` with name "${p.name}"\n\n`; }); } output += '\n---\n\n'; output += '💡 **Tip**: After installing, use @persona:name to activate\n'; output += '📚 **More info**: See CONTRIBUTING.md to add your own persona\n'; output += '🎯 **Vision**: Check VISION.md for the Persona Marketplace roadmap'; return { content: [ { type: 'text', text: output, }, ], }; }
  • Zod schema for validating browse_community tool input (optional category filter).
    export const browseCommunitySchema = z.object({ category: z.string().optional(), });
  • src/index.ts:423-434 (registration)
    Tool registration in ListToolsRequestHandler, defining name, description, and inputSchema.
    name: 'browse_community', description: '커뮤니티 페르소나 컬렉션을 탐색합니다 (GitHub에서 공유된 무료 페르소나)', inputSchema: { type: 'object', properties: { category: { type: 'string', description: '필터링할 카테고리 (선택사항): Programming, Creative, Business, Education, Design 등', }, }, }, },
  • Helper function to list community personas by reading .txt files from COMMUNITY_DIR and extracting metadata.
    async function listCommunityPersonas(): Promise<CommunityPersona[]> { try { const files = await fs.readdir(COMMUNITY_DIR); const personas: CommunityPersona[] = []; for (const file of files.filter(f => f.endsWith('.txt'))) { const name = file.replace('.txt', ''); const filePath = path.join(COMMUNITY_DIR, file); const content = await fs.readFile(filePath, 'utf-8'); // 메타데이터 추출 const lines = content.split('\n'); const metadata: Record<string, string> = {}; for (const line of lines) { if (line.startsWith('# ')) { const match = line.match(/^# (\w+):\s*(.+)$/); if (match) { metadata[match[1].toLowerCase()] = match[2]; } } else if (!line.startsWith('#')) { break; // 메타데이터 섹션 끝 } } personas.push({ name, ...metadata, file }); } return personas; } catch (error) { console.error('Failed to list community personas:', error); return []; } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/seanshin0214/persona-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server