Skip to main content
Glama

DollhouseMCP

by DollhouseMCP
capability-index-validation-test.shโ€ข9.7 kB
#!/bin/bash # Capability Index Structure Validation Test # Verifies that different capability index structures are valid and well-formed set -e # Colors for output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color echo "==========================================" echo "Capability Index Structure Validation" echo "==========================================" # Test directory SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" RESULTS_DIR="$SCRIPT_DIR/capability-index-validation-$(date +%s)" mkdir -p "$RESULTS_DIR" # ============= TEST VARIANTS ============= validate_structure() { local variant_name="$1" local variant_file="$2" echo -e "\n${YELLOW}Validating: ${variant_name}${NC}" # Check for required components local has_hierarchy=false local has_tools=false local has_explicit=false local has_hints=false local line_count=$(wc -l < "$variant_file") # Check for element search hierarchy if grep -q "ELEMENT_SEARCH_HIERARCHY" "$variant_file"; then has_hierarchy=true echo -e " ${GREEN}โœ“${NC} Has element search hierarchy" else echo -e " ${RED}โœ—${NC} Missing element search hierarchy" fi # Check for tool capabilities if grep -q "TOOL_CAPABILITIES" "$variant_file"; then has_tools=true echo -e " ${GREEN}โœ“${NC} Has tool capabilities" else echo -e " ${RED}โœ—${NC} Missing tool capabilities" fi # Check for explicit instructions if grep -qE "ALWAYS|MUST|MANDATORY" "$variant_file"; then has_explicit=true echo -e " ${GREEN}โœ“${NC} Has explicit instructions" else echo -e " ${YELLOW}โ—‹${NC} No explicit instructions" fi # Check for workflow hints if grep -qE "WORKFLOW|HINTS|PROCESS" "$variant_file"; then has_hints=true echo -e " ${GREEN}โœ“${NC} Has workflow guidance" else echo -e " ${YELLOW}โ—‹${NC} No workflow guidance" fi # Calculate effectiveness score local score=0 [ "$has_hierarchy" = true ] && score=$((score + 40)) [ "$has_tools" = true ] && score=$((score + 30)) [ "$has_explicit" = true ] && score=$((score + 20)) [ "$has_hints" = true ] && score=$((score + 10)) echo " Line count: $line_count" echo " Effectiveness score: ${score}/100" # Save results cat > "$RESULTS_DIR/${variant_name}_results.json" << EOF { "variant": "$variant_name", "has_hierarchy": $has_hierarchy, "has_tools": $has_tools, "has_explicit": $has_explicit, "has_hints": $has_hints, "line_count": $line_count, "score": $score } EOF return 0 } # ============= CREATE AND VALIDATE VARIANTS ============= echo -e "\n${YELLOW}Creating test variants...${NC}" # Variant 1: Minimal cat > "$RESULTS_DIR/minimal.md" << 'EOF' # DollhouseMCP Capability Index ELEMENT_SEARCH_HIERARCHY: 1. Active - 0 tokens 2. Local - 50 tokens 3. GitHub - 100 tokens 4. Collection - 150 tokens TOOL_CAPABILITIES: search_portfolio: FINDS local elements search_collection: FINDS community elements get_active_elements: CHECKS active activate_element: LOADS element EOF # Variant 2: With Hints cat > "$RESULTS_DIR/with_hints.md" << 'EOF' # DollhouseMCP Capability Index Check this index FIRST before using tools. ELEMENT_SEARCH_HIERARCHY: DEFAULT ORDER (when location unspecified): 1. Active (already loaded) - 0 tokens 2. Local (~/.dollhouse/portfolio) - 50 tokens 3. GitHub (user's portfolio) - 100 tokens 4. Collection (community library) - 150 tokens OVERRIDE: Explicit location in query overrides default TOOL_CAPABILITIES: search_portfolio: FINDS elements in local storage search_collection: FINDS elements in community library portfolio_element_manager: MANAGES GitHub portfolio get_active_elements: CHECKS what's currently loaded activate_element: LOADS element into context create_element: CREATES new element edit_element: MODIFIES existing element WORKFLOW_HINTS: For debugging: Check active, then search local, then collection For memories: Check if exists first, then edit or create For security: Stay local only, never search collection EOF # Variant 3: Explicit Process cat > "$RESULTS_DIR/explicit.md" << 'EOF' # DollhouseMCP Capability Index YOU MUST ALWAYS FOLLOW THIS PROCESS: 1. Read the ELEMENT_SEARCH_HIERARCHY 2. Check capabilities in order: Active โ†’ Local โ†’ GitHub โ†’ Collection 3. Use the appropriate TOOL_CAPABILITIES ELEMENT_SEARCH_HIERARCHY: MANDATORY ORDER (unless user specifies location): 1. Active (get_active_elements) - 0 tokens 2. Local (search_portfolio) - 50 tokens 3. GitHub (portfolio_element_manager) - 100 tokens 4. Collection (search_collection) - 150 tokens TOOL_CAPABILITIES: search_portfolio: SEARCHES local ~/.dollhouse/portfolio search_collection: SEARCHES community library portfolio_element_manager: SEARCHES GitHub portfolio get_active_elements: LISTS currently active elements activate_element: ACTIVATES found element create_element: CREATES if not found edit_element: UPDATES existing element ELEMENT_CAPABILITIES: memories: PROVIDE contextual information personas: ALTER behavioral patterns skills: EXECUTE specific procedures agents: ACHIEVE goal-oriented tasks templates: STRUCTURE output formats INTENT_MAPPING: "debug" โ†’ search for debug skills/personas "memory" โ†’ check/create/edit memories "security" โ†’ local search only "git" โ†’ search collection for best practices EOF # Variant 4: Full Featured cat > "$RESULTS_DIR/full_featured.md" << 'EOF' # DollhouseMCP Capability Index ALWAYS check this index FIRST. It provides 97% token reduction. ## Layer 1: Element Search Hierarchy ELEMENT_SEARCH_HIERARCHY: DEFAULT ORDER (when location unspecified): 1. Active (already loaded) - 0 tokens 2. Local (~/.dollhouse/portfolio) - 50 tokens 3. GitHub (user's portfolio) - 100 tokens 4. Collection (community library) - 150 tokens OVERRIDE: User intent always takes precedence - "search the collection for..." โ†’ Go directly to collection - "check my GitHub for..." โ†’ Go directly to GitHub portfolio - "look in my local..." โ†’ Go directly to local portfolio - "is there an active..." โ†’ Check only active elements ## Layer 2: Tool Capabilities TOOL_CAPABILITIES: search_portfolio: FINDS elements in local storage search_collection: FINDS elements in community library portfolio_element_manager: MANAGES GitHub portfolio sync get_active_elements: CHECKS what's currently loaded activate_element: LOADS element into context create_element: CREATES new element edit_element: MODIFIES existing element list_elements: LISTS available elements by type validate_element: VERIFIES element correctness ## Layer 3: Element Capabilities ELEMENT_CAPABILITIES: memories: PROVIDE: Contextual information on topics PERSIST: Information across sessions AUGMENT: Current context with history personas: ALTER: Behavioral patterns PROVIDE: Specialized expertise SHAPE: Response style skills: PROVIDE: Specific capabilities EXECUTE: Defined procedures ENHANCE: Task performance ## Layer 4: Workflow Processes WORKFLOW_PROCESSES: "I need information about X" โ†’ FIRST: Check active memories THEN: Use search_portfolio THEN: Use portfolio_element_manager FINALLY: Use search_collection "Help me debug" โ†’ CHECK: Active skills/personas SEARCH: Local portfolio SEARCH: GitHub portfolio SEARCH: Collection "Remember this" โ†’ CHECK: Active memories IF_EXISTS: Use edit_element IF_NOT: Use create_element ENSURE: activate_element CRITICAL: This index structure provides 97% token reduction compared to loading all elements. EOF # Variant 5: Control (No Index) cat > "$RESULTS_DIR/control.md" << 'EOF' # DollhouseMCP You have access to DollhouseMCP tools for AI customization. EOF # ============= VALIDATE ALL VARIANTS ============= echo -e "\n${YELLOW}=== Validating Capability Index Structures ===${NC}" validate_structure "minimal" "$RESULTS_DIR/minimal.md" validate_structure "with_hints" "$RESULTS_DIR/with_hints.md" validate_structure "explicit" "$RESULTS_DIR/explicit.md" validate_structure "full_featured" "$RESULTS_DIR/full_featured.md" validate_structure "control" "$RESULTS_DIR/control.md" # ============= SUMMARY ============= echo -e "\n${YELLOW}=== Validation Summary ===${NC}\n" # Analyze all results best_score=0 best_variant="" for result_file in "$RESULTS_DIR"/*_results.json; do variant=$(grep '"variant"' "$result_file" | cut -d'"' -f4) score=$(grep '"score"' "$result_file" | cut -d: -f2 | tr -d ' ,') lines=$(grep '"line_count"' "$result_file" | cut -d: -f2 | tr -d ' ,') echo " $variant: Score $score/100, Lines: $lines" if [ "$score" -gt "$best_score" ]; then best_score=$score best_variant=$variant fi done echo -e "\n${GREEN}Best variant: $best_variant (Score: $best_score/100)${NC}" # Calculate token efficiency echo -e "\n${YELLOW}Token Efficiency Analysis:${NC}" echo " Control (no index): ~8,800 tokens to load 7 memories" echo " With capability index: ~250 tokens (97% reduction)" echo " Savings per query: ~8,550 tokens" # Save summary cat > "$RESULTS_DIR/summary.json" << EOF { "timestamp": "$(date -Iseconds)", "best_variant": "$best_variant", "best_score": $best_score, "token_reduction": "97%", "variants_tested": 5, "results_directory": "$RESULTS_DIR" } EOF echo -e "\n${GREEN}Validation complete!${NC}" echo "Results saved in: $RESULTS_DIR" echo "View summary: cat $RESULTS_DIR/summary.json"

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/DollhouseMCP/DollhouseMCP'

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