{"_id":"@dollhousemcp/mcp-server","_rev":"143-901fd510b6804274115c056ff1b19951","name":"@dollhousemcp/mcp-server","dist-tags":{"next":"2.0.12","rc":"2.0.27-rc.17","latest":"2.0.42"},"versions":{"1.3.0":{"name":"@dollhousemcp/mcp-server","version":"1.3.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.3.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"604e39c6acb11dccbda75527683671d9faf2a08b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.3.0.tgz","fileCount":1004,"integrity":"sha512-z+SIZAtMM49A/5fDrAy89qYUQ9yxWx3CHfLr+7EHYJgmpzX/NwXp1dUHq2DFBuh1jLjakySDjBZNtLutkWTyPg==","signatures":[{"sig":"MEQCIHvk3vX23qBgf8YPJ+3n/jo0aOJPZEPCY+OEmxkdNnG5AiBVdYDHUCAVt6K31tqqob+B+q5kmAhshQJqfGdeu//scQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7296809},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"34cce01708d49384238543648a0021078a38f14c","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.3.0_1753822790181_0.20751870811777295","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@dollhousemcp/mcp-server","version":"1.3.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.3.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"29aa78a76d95c43f65c673b18ebcc102c36bf89d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.3.2.tgz","fileCount":386,"integrity":"sha512-VRuNNl86W1XwpKFHoA/MPua88y9GgptYLIHqxQV9+L8g0+Z/CkjV1kXhSdlbEjIIsD0zdkbD4yaKpIqMBq4bHg==","signatures":[{"sig":"MEUCIQDVlOF55XANndxWlOcWYwxngOEUTJc343kUqNlW3HPlgwIgRQ/TjLGM7Q3kP9r4+wFD/B9q1Iyps4mXF0XC689CGi4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3127992},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"bb222877ba32013c0f3bc38b99fe01d9fa0fde9e","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.3.2_1754081827506_0.8166531579064458","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@dollhousemcp/mcp-server","version":"1.3.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.3.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"8e722d8cb896177a10d10759403fb5ce203c2c0a","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.3.3.tgz","fileCount":365,"integrity":"sha512-OaQ9tjZGQuNex5sVqwqWp0hML6UqzkSpvyN66prOhFznQV37UMhGWrhMdURtRmyopU8rN9xU6bXgYjhO99+t4Q==","signatures":[{"sig":"MEUCIQC5UJip76OaVdjCPR6elBG0WEM5P5J0wi19RKDvKtO9tgIgC99meqeD4/Xo5zCeSFq27NIp7LK1LTIJeY22+lOquHg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2945746},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"2e0048e072966bf4ab0884e7029bd0970b1253c4","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.3.3_1754094504596_0.1619523929319311","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@dollhousemcp/mcp-server","version":"1.4.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"04e005903531ec1aec3a0282d28245e9bde614f9","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.0.tgz","fileCount":365,"integrity":"sha512-lPhBpQMmrqCVsbwa41dJkm8aHimK745Y7kJMzycChwNxXHMU1/Y4vUl/h/+C4lygTDUlm4wX4LzRe+VQUnzHCw==","signatures":[{"sig":"MEQCIDyzddlnwMVVdIghpO8TdhzUGiAwFOWghyy1dYUMQ/hcAiAXJKdP7mIqFmbKdmWSRprBneR1n5WtsnbsWlO1pWNRuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3059673},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"adbc11e5595c2f7b1e9c4f8ddb146094d552f7c3","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.0_1754153197008_0.015119677401756793","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@dollhousemcp/mcp-server","version":"1.4.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"34f43e49148602a8c2f294e8cdad8d6296ba26dc","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.1.tgz","fileCount":365,"integrity":"sha512-PI4NkW2vszyjdw3N3eQ9bUif0PN5s7l7rvbhkwyqALp51lcNY91CTmAqm9BH2QMOQmBCWhQrxi6HqYusn0TwDg==","signatures":[{"sig":"MEUCIQCw5v/gQe35nheC1umda5z0b/OixN8yqZxspxZy3OYDlwIgVWztSYLE8bT88P/NxYGBblN8DtAiWJfuFDTiogeFshI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3059673},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"56f1bc2372c80ae63a6a4d30387f976dd61ac494","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.1_1754162450110_0.7185519688758975","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@dollhousemcp/mcp-server","version":"1.4.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"face9c114c448a778c3f201af338c2638cc35898","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.2.tgz","fileCount":380,"integrity":"sha512-ULxw2yp+xsmEoB+Nfsjx18qVS/S5AjyQhxRkFol2UdPfJYXmPcs8LoArfy5xv8QIxMy+J7dP1lCZWaFUBKg8nw==","signatures":[{"sig":"MEYCIQDGnctU40hjEkuB6LuNOtE8JxoJbFvcyw18iFiPRWC+rwIhANG1ONcLRPmzE/2ge+1sQrhIhAAJIOKBQtxDGFyB0esq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3314429},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"a6f616b1c2282e4e5ec4ffe33e1234cc24d71356","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.2_1754334902000_0.9067443010258931","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@dollhousemcp/mcp-server","version":"1.4.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"35f06cbaba17706918afd2c933e35a21132c6348","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.3.tgz","fileCount":380,"integrity":"sha512-/jGO6Pj2sA7txMlhRpXghup0v0pKfooYvJDhN7dENIfao+s81lwG3PziFj50x/2CL6OXbQ6hohUJbBkkSyfnsg==","signatures":[{"sig":"MEQCIBCiwyq6NWtE4GtVqB8kKQ0TJJ8u98YMdgPssEvwEYK7AiBlc54w70MuVVBrZ7IfvwTRoBosS5PQrReXDmqp2kREhA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3326354},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c6dad3914cc1476cd78702527931a8f1d1037f1e","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.3_1754343439098_0.830337097185035","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@dollhousemcp/mcp-server","version":"1.4.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"0bce5aed9a0ceda8339ee13389f370484d6f4103","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.4.tgz","fileCount":1025,"integrity":"sha512-Nu3CspnBmudYt1R1cHF1jfh1N3PR6J7OxkZxiuF39uzMGCp0tXWXgtpj6ZScZlT+D6Rb8VESG0hBCtPtNaibeA==","signatures":[{"sig":"MEYCIQC0pzrRpaF7KatkptTF/SM53QsNiM8ezHQ6/cA0JuAxxwIhAOt/1lndfPd6duJh2aW7WkjHjy+vSRw+1CbbNrsqlB1Q","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7857229},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"094c2bacdbf78b87dfddd6b47c9b6303a066fbb0","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.4_1754348374742_0.731190878533365","host":"s3://npm-registry-packages-npm-production"}},"1.4.5":{"name":"@dollhousemcp/mcp-server","version":"1.4.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.4.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"000342f9a7e336f2494155f43613b0ba5716985b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.4.5.tgz","fileCount":380,"integrity":"sha512-SO4gaKbmJcQBPOjPFNhO/ivkN44EOsoNGWB6V9bsoGheY8GVTt7wPWICJQ1OWRlAKohcSuH5mno7ZulhLQPSzw==","signatures":[{"sig":"MEUCIQDfg4Z5JZHI+cIy0h7gRY8kBZPykLGd7dmQ4moNP8XAEgIgQDthCmlweDrW4AUkaDN4oD9olIlOm3aHZDfc51BUC7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3351268},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e80339c208f3da027f1bcce035b11f777e927b3e","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.4.5_1754403196112_0.6301263210838224","host":"s3://npm-registry-packages-npm-production"}},"1.5.0":{"name":"@dollhousemcp/mcp-server","version":"1.5.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.5.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"2f6db038fc42ef39cbadbd41f822c496c966064a","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.5.0.tgz","fileCount":386,"integrity":"sha512-hHOGdWMRISHpfNBjw6FmKhV27OzlsuRL1FWDk1h/J8lTrgmQHkcqKlofJbtOh+HejquheqpiTRoNJ3nYM2m2VA==","signatures":[{"sig":"MEUCIGQ/KSzge9WG3syOHKNhvoPccBB6p2w+J5ZA+zKGYW+9AiEAmJYpwMYy3LSJPlm9qpgL6KR6xZvBnkYLCkU9nDJShes=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3481682},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"206e22fd59988c7df3cd0724cca2d189f648aed4","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.5.0_1754416560288_0.8224678797945231","host":"s3://npm-registry-packages-npm-production"}},"1.5.1":{"name":"@dollhousemcp/mcp-server","version":"1.5.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.5.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"956d448af92ae99e161bf4f50de53c651f0d8e40","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.5.1.tgz","fileCount":386,"integrity":"sha512-pH+fRqCTkOumFyZtahIcwEzLW3yTVUXbJxWevAoyQ9l/1oKqYva71ChumWOkWL1WWBopSz5rgd60TjWO6e0muQ==","signatures":[{"sig":"MEQCIGg7n/hgdT0fkYE0+KDare0q2M57uaKHi8Wv+aoZfxEFAiBa/4yptoMszpUeB1ljEe3A6cgtk4ute7I3nlIRzMfcpQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3483766},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6b0edcf9d15ce4d8625f91966e1b6d288334a245","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.5.1_1754423990291_0.39334573873534073","host":"s3://npm-registry-packages-npm-production"}},"1.5.2":{"name":"@dollhousemcp/mcp-server","version":"1.5.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.5.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"34467403318e133e5bb5fa04125f9d09bf91d7ec","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.5.2.tgz","fileCount":395,"integrity":"sha512-qUD+h4BXAP0wJ0MUBLZA4zZuAXSt8JpzLL2nWscDoxgBZb4EK9HZO/2glvAzIo8oHH6Srb06MNdz7k8h1IiLOA==","signatures":[{"sig":"MEYCIQCcWrZWbZMM7piC8v+J6SrR5GUSq+fTD/eLcjBfz045ygIhAO6wYorH2l0PJ/8IlPXMn80ZIaxP6gqkInKF+JFG5opW","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":3617913},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"7c7d13598aaa2aab16bfc406f84ee0528c971dd7","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","update:pull":"git pull origin main && npm install && npm run build","security:all":"jest test/__tests__/security --coverage","update:check":"echo 'Use check_for_updates MCP tool for interactive update checking'","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","update:backup":"cp -r . .backup-$(date +%s)","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","update:restore":"echo 'Use rollback_update MCP tool for interactive rollback'","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.16.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.5.2_1754512589073_0.763117623491917","host":"s3://npm-registry-packages-npm-production"}},"1.6.0":{"name":"@dollhousemcp/mcp-server","version":"1.6.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"6d1b4b42af7d2481cfc53f1ff8c0a0374a726d5e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.0.tgz","fileCount":446,"integrity":"sha512-WkFPRhWE+vJdOLkwDjCk2EIWLReiPL1e6k8qtfPAOXE6XZlenRXfBqlz5rSSIo7ohWuCf6wkvptNzbxC367HLA==","signatures":[{"sig":"MEUCIQDyLgLR70XzWVPfMCVq+DRXmx347KjqybeNKCYqUg7IfQIgPxuq86isA8KqnjfKQaYaI1en1qO3/xc7ihHZMmAbr30=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5263402},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"a9ecd33060596f60a612ee6312c546c4a9332138","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.0_1756142986078_0.32270529670686177","host":"s3://npm-registry-packages-npm-production"}},"1.6.1":{"name":"@dollhousemcp/mcp-server","version":"1.6.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"427c806f471d42420508d2ecdbedf2bdf3dd32bd","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.1.tgz","fileCount":446,"integrity":"sha512-TwjKmQuIGMmfc/Kg6ZYdnsmQBjDXF8sn1+L4jJuW7I0uynwY6Uwcqjuz6lVSpRfKagiNy7hXDpPTFh+JH0Nxeg==","signatures":[{"sig":"MEQCID93GPSzCtph7cDAFqhj+aEPFtifI2svPVO4OqAtIFKNAiAFZK288NhFIAMq6RvQo5IfnWMZLJvlPNnk0jdmfjD17A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5266453},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6803dcb6c494ead7b606e0b71fa10a0d0f04201f","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.1_1756156541812_0.8284068406599252","host":"s3://npm-registry-packages-npm-production"}},"1.6.2":{"name":"@dollhousemcp/mcp-server","version":"1.6.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"86ae3dc0eff584025b4d35e9c14547971cc5b1a6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.2.tgz","fileCount":446,"integrity":"sha512-yodD7nbbvKnHh4RZiPSfnK5IVUdPcb0//6kFra7h2tnsum2RH67FrJ78fellV4rgHZM4aqn0F9wQiy6u62HAbQ==","signatures":[{"sig":"MEUCIQDEGV0drcbxTz6kdBuYG8n2xi8XWNYLsqEnvP32HZxqugIgCc9AB82II7qjtl4XHrasi3+76TfEptQPDUdvOeDCK1k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5267871},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"73e58806c82368d482d52e1482e64b3f4591c47c","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.2_1756159840419_0.026100390903299964","host":"s3://npm-registry-packages-npm-production"}},"1.6.3":{"name":"@dollhousemcp/mcp-server","version":"1.6.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"b963d97c715e97a2a59e54e64ed9c7a618ff7fb3","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.3.tgz","fileCount":446,"integrity":"sha512-wGspbbLjQO88EAYAlP1/g1LIpco8SmHCdbLqSgLjzYEfCNDaDmxC0qsE3eup/WVbNACWryZuwzdxniUrs9FRJg==","signatures":[{"sig":"MEUCIQC8MP3QxRd/i3nSl0AL9iIgego+BpRajntJZpH6AGCSPAIgKNy+b45WCYN5wHHM/8JAd5OmQAf8OwDh2inKTX/bLEE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5288538},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"a3da37ceae90ca857e6456d063a09b483bb00a64","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.3_1756163675196_0.5936759177032838","host":"s3://npm-registry-packages-npm-production"}},"1.6.4":{"name":"@dollhousemcp/mcp-server","version":"1.6.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"9c45b1116b279504caa18aa8c2e03f38fbcb339e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.4.tgz","fileCount":447,"integrity":"sha512-HkE0CbcSbZDwVGuc1bpAtSUEPFocQt23k9E0VFlQZzA8FaLOBknCpcBX69trLSZ1pH/lj3kSXLkVWlrvcFOJ9Q==","signatures":[{"sig":"MEQCIDV/IIKyiAXvyPTiL+dnlSXZtolo4Wl8614thcDTYb9FAiBN1OwRx/3wAJpwKJA/6lhOk4boIdM8hqKg3GEnBHKRmA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5303182},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8ebe1532dc564a6c29936a839b0c82e1da050c19","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.4_1756166631072_0.37368490119589826","host":"s3://npm-registry-packages-npm-production"}},"1.6.5":{"name":"@dollhousemcp/mcp-server","version":"1.6.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"4bee0d1c7530c503690ad8a3a64cbe22f09a5942","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.5.tgz","fileCount":450,"integrity":"sha512-RaOiu7U9NJ/hZ60OE8IWhhnu+f4xuql/+Pa9FQPjZgY0lfpdGHPMJ2L2dNIw+3pEkQiAfaZNG74blklxct178w==","signatures":[{"sig":"MEQCIBLUQzdTczrXX6kRmKXw+mhq1cjeD74EV9SEXVevI6ACAiBwOtxjfp4QnyoDyC7ooR9ZxRPF7gL3FRwxN1IabwSxTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5314129},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"1985f6246c12ee567a69e3a6c4950ceab64c2eb1","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.5_1756224352410_0.1387223629633969","host":"s3://npm-registry-packages-npm-production"}},"1.6.6":{"name":"@dollhousemcp/mcp-server","version":"1.6.6","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"ac8f77fc36b4a3acfa444f17d225e615cef66390","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.6.tgz","fileCount":450,"integrity":"sha512-nllSKefV/vFeefyHkywLoP2SLjoeIwBeP+I1cgkt4jiPH+hDatlndxUj/XyhP+HYt7CO/ugk400xCVJ0xQCBrQ==","signatures":[{"sig":"MEYCIQDseqZAGMDNg2s/KvVnfnIC7RbXX4Fexr19yrpAQ0VF2wIhAMx7bqfmpcWoV2dMDqThagk56B9s4+N8JRxelUf+l8Q9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5338936},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b7650f059911a7d0ab6b5f32ddb38a380abf9c55","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.6_1756241722545_0.9691291172469503","host":"s3://npm-registry-packages-npm-production"}},"1.6.7":{"name":"@dollhousemcp/mcp-server","version":"1.6.7","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.7","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"1a94fec5def37462cdd25b3aaba3810514aea9c6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.7.tgz","fileCount":450,"integrity":"sha512-hk07j6tCpiwLlu3XV5LB2m5j46q2EbUu8K4jnPEAIa3NbZ44P8UVjhrawWS3hszWjbRLXfBpZr3jXhYz+Xb2Og==","signatures":[{"sig":"MEUCIBaQO2sLpgnInxQB32IODctp0c1xg15CYjSn0oqshjQVAiEA/KDgi8RaGZKRtS6JJ7yCI2HWHuUGc5NQhMUvpCBKAOw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5339023},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"67fbd868df6b465139c4684498d19d2e508939c7","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.7_1756246097845_0.2676448854421736","host":"s3://npm-registry-packages-npm-production"}},"1.6.8":{"name":"@dollhousemcp/mcp-server","version":"1.6.8","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.8","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"d071f0529c1d0daae6fe59bc774689409b415b91","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.8.tgz","fileCount":450,"integrity":"sha512-w8fm4YlHY7SUH4cRUcNx1QFQyFpaEYl6rt0jXcN2YYLhw1+al8CMbffxXLzUKR766id6IkcYVSW1ttuPI8DrmQ==","signatures":[{"sig":"MEUCIQDSMmPI3oKgMEi9ggNqQjiLBSXKVauPykCoYfkQb+JNegIgYXlvgrmjTJAzyd01LiAMbPf7qaWYrcPDqCWH3c3f0N8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5341732},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"d38dab8507167ce58939ae689cc2ef045ee576b5","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.8_1756250640675_0.9285669893939761","host":"s3://npm-registry-packages-npm-production"}},"1.6.9":{"name":"@dollhousemcp/mcp-server","version":"1.6.9","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.9","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"cd49e8c4038c6de7794c32ae1e348ee37ca8fa2c","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.9.tgz","fileCount":450,"integrity":"sha512-NyslSPxwVOJ+fCtQngPhCLo2TqDmJIkIm9RBqzLZkfXqX1XLD2rkkt/HOkG7CS0mSNsbisFomG7QhojnUe2n5g==","signatures":[{"sig":"MEYCIQDXFLOT6IQq0+9vTLH3db4lpsRGYAuGZDewpPT9jhaedwIhAIGtUmV6s72oINJwjv2fvkTqiMqVhn/Ja8ZimJi4XQpY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5346369},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"0f30cb90c9cb2a821ff201165f945bcea042d1a7","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.9_1756304300343_0.095088447835179","host":"s3://npm-registry-packages-npm-production"}},"1.6.10":{"name":"@dollhousemcp/mcp-server","version":"1.6.10","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.10","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"82cab8ef587a7d2a0d720c710f340ad8242f3ce4","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.10.tgz","fileCount":453,"integrity":"sha512-mAriS55+d6ByZU6omNmIUyqQ6i0CuUggl3fsSfnHoWqmArGaI7/nYfLi3Ywqq/A6kh4iMnzFZPs+Fvy+6Kz7GQ==","signatures":[{"sig":"MEUCIQCym0d2jcNPGqCkDB4pe+vJyi+5MOap86DIQ4bWCvV+mQIgSba8z/VLtDCdDJoGVVkw8YPikEjtL2hksC4ak9a66rk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5447833},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"593dfb277bdcec6b0da9a70b4be89f05063be2b0","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.10_1756410021937_0.12724851052722008","host":"s3://npm-registry-packages-npm-production"}},"1.6.11":{"name":"@dollhousemcp/mcp-server","version":"1.6.11","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.6.11","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"00ae570f9f7140c9edd1a8720181a31156bf8df4","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.6.11.tgz","fileCount":453,"integrity":"sha512-NrGY/JIZV9PcSAOCnRS74+BHrjbvbBnCPCNl9aEdBbZcUbf1ngwmvB5pUKk2FAg+76pzZIpF/z1HQCccg63B3Q==","signatures":[{"sig":"MEQCIGy3NWrIOCcGu5WOr2pF/hoG15LY3o/0vfmXQJk4ButQAiA0K3YI9QUveAbYzNS6WSCnu8yb0YZJigIJwFy73a+CdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5450112},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e8125148bc1e2f319b6b1c1933c5f67184416655","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.6.11_1756421546969_0.6851471849535085","host":"s3://npm-registry-packages-npm-production"}},"1.7.0":{"name":"@dollhousemcp/mcp-server","version":"1.7.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.7.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"e957a76e7207a925ed55b734e397981ba7c81ce1","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.7.0.tgz","fileCount":453,"integrity":"sha512-p1eCZo48Fcxn32od63dQzp5CCoZI9Xc2OuJNert1lwO+u2MXpUsUbe6+jMnH3JtloQNaySninmxFn65khC5Ufg==","signatures":[{"sig":"MEYCIQDfGVLfvM4b9Z/gkmImkJ/lGJSL5tD10XrDc53iDqjAZAIhAIa39HuO2inoISfNrqNRl28Zg7g/9lrNKRAgxiEoZbUn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5356669},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"42053d371a3e25f73a9e9c0750d2b10bedb83b96","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.7.0_1756674486167_0.483528549012602","host":"s3://npm-registry-packages-npm-production"}},"1.7.1":{"name":"@dollhousemcp/mcp-server","version":"1.7.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.7.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"24d8dc8ee2ac51b7a468b1e1be26a73443a071e3","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.7.1.tgz","fileCount":453,"integrity":"sha512-K7wukcQQ5lFjNDHcW+IHjjaBEm9dsrG9Od6iXygaNbYeJTqGpEmXAHg6xouODTOmDrsU/NCMUB4g4/NforHLZA==","signatures":[{"sig":"MEYCIQDNq74Q3ifulPL0alIk6rjMhxeulRELdnYvFWwV6aTXywIhAJj2FCENjlRe3iAkFanbpiQYiNJaKCwVE4smFS7B4ovn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5391703},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"3078b902def9fe98ce950821c9a26c4f9d08c6e4","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.7.1_1756681784706_0.40320304421521413","host":"s3://npm-registry-packages-npm-production"}},"1.7.2":{"name":"@dollhousemcp/mcp-server","version":"1.7.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.7.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"c54142318034cf488d2d5d9f3a04adcce802a53f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.7.2.tgz","fileCount":453,"integrity":"sha512-QiG0cXvmi4y77Nf4OjcovKGFlNvY9PclGKywCV58nDwclncRh/SU8cAdqq1slBii9bv/apb1QgCUFKXUTJhukA==","signatures":[{"sig":"MEUCIA/V2YROTwjIM+jX8tuvxO/II9caWUSD4U9Iw69n+Nm6AiEA5XV2g9Knp/GS2gV3o2R57KNTwjHWsHytkiWJBRdBmG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5422931},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e8c2c05d640fdce7935e46fdc034f71afb376cf9","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.4","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.7.2_1757279904483_0.8209229460710241","host":"s3://npm-registry-packages-npm-production"}},"1.7.3":{"name":"@dollhousemcp/mcp-server","version":"1.7.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.7.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"20424ceba59d1b75b1cff9f44777d253c64575d2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.7.3.tgz","fileCount":465,"integrity":"sha512-JZERF4iKdodv/JPcTjI4ddNuQhypqfIWReMJlWmYThQK9vLWjb6PFlv20Nv8rzk2PRH0BipEirPzypUfbc3hkQ==","signatures":[{"sig":"MEYCIQD/r/1f2koSBjfcGHDLXSrGuZk5S6RaP3akyxoqdabExwIhAN/3FOg9Lus7O15yc3Ewk0vZxKP62i4K3ScsHcQSo9lu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5714719},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"0c53366d48358ca915c4e8e8c8ab4d38b1cc3cff","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.7.3_1757445819262_0.3678545676122096","host":"s3://npm-registry-packages-npm-production"}},"1.7.4":{"name":"@dollhousemcp/mcp-server","version":"1.7.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.7.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"bce9351e7a59c4545e9b77a23a255c92d0f2a1df","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.7.4.tgz","fileCount":510,"integrity":"sha512-5cl6gGQyiVgG4ehuwy1VhXu2vTfEStP3dUenCxdgs24qLDPpfq1mJuWmQzPdbSi7eehqobHkBN9jv7yr00TT3Q==","signatures":[{"sig":"MEUCIAJF8Y4yKN1w3dAXmPIH5ILuiSYsOPz2GwIMrTX51JRAAiEAhabbOy8IhmUKlCLh25ApA0lQIrhGMmwzTGnTJA7brUo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6144512},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"f750716e1e9c16532509929a55e27e2d3fac550c","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.0.5","uuid":"^11.1.0","jsdom":"^26.1.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.17.3"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.0.15","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.5"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.7.4_1757692647368_0.22905372205362662","host":"s3://npm-registry-packages-npm-production"}},"1.8.0":{"name":"@dollhousemcp/mcp-server","version":"1.8.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.8.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"23a8c03d2d21c4afe289e178e0b221402f0f75d1","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.8.0.tgz","fileCount":489,"integrity":"sha512-vAltCTdIAbBdRj58rBUlhSc4TebZa0KqGpyotpBNu5u6ypsR7jonknSdrcyydcFGsEIz1I8zO3MNQlxAnPwteg==","signatures":[{"sig":"MEUCIF4ZI3nEmPQYUZvX3PSqHlS+mIjJBvGO6WPzlHrYN6bNAiEAvDz0ALd2p+GuO4AMz1e5gxScE+FcAY4Iuqc/kZCwvns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6015651},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c555a95d93d6e4d8165d50b38ed5aee719de482b","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.8.0_1757957654256_0.2587823855147364","host":"s3://npm-registry-packages-npm-production"}},"1.8.1":{"name":"@dollhousemcp/mcp-server","version":"1.8.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.8.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"dfcf778dfb7263d72a6e5d3b02c89ea3efaecd2d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.8.1.tgz","fileCount":510,"integrity":"sha512-KKTMD5lf2pXkMNJJyDHtyzSHVRhJeRwkMc/QeRsOxvfPovkXj4yXKMIDq3V8+AGq3htxdw2TVpUgl9snLdjhLQ==","signatures":[{"sig":"MEUCIAYQShhLyfCJLvTTMeleWgitjkgEwbEyORFZThKi8qCQAiEAuaBnGiWYdamttqi7cyu1yeCA8SOKBFSXchg8IEDn1Sg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6207384},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"998b3b48cd9802c07328f0c38b605d92f24a1353","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.8.1_1757977783804_0.5894704467758258","host":"s3://npm-registry-packages-npm-production"}},"1.9.0":{"name":"@dollhousemcp/mcp-server","version":"1.9.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"9be91c4b174d23dd6486f82f1fcf400511fde572","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.0.tgz","fileCount":528,"integrity":"sha512-BMFBZDizJgD2v4+mdN1Bm0KUCjoKvWKVuDcKC5SPdcEDCuQq3HQcamAt41eSrKdz0/dE2whv+gCUrpOdfa11CA==","signatures":[{"sig":"MEQCIH4HnzEZyVlIgndZcOPdr7tMzXhq1GTG8uHl1gdA9XLzAiBt5gUDaSRsgniEnIezWozi72vEJ52yVitni4kperCL8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6505638},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b2dc760b0fc986c442202566c39b5f04923868f9","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.0_1758292799049_0.5142749538433478","host":"s3://npm-registry-packages-npm-production"}},"1.9.1":{"name":"@dollhousemcp/mcp-server","version":"1.9.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"106f0c36b1cd54b9ccdc9730b43ad1aa849384e1","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.1.tgz","fileCount":507,"integrity":"sha512-KrrSs6AiAw9MEqzElB1WMVLUh6JJgF/SjVJkcD4L1Waz2jkXd+3DrM8bsXETeCh+xE24J6jO5YA9cLVlTrSb3w==","signatures":[{"sig":"MEUCIQDH8hmtwd6GGM0ItYC8YLLXUomlOEEC/KyUDKChqq5xigIgGYkzguFL6LVvbdHWupY7nV67K3A09Se6csXwBqj357o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6361037},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"be5c9a0ceb184e9d95b71c9b93d902e2bc9ec244","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.1_1758308802005_0.2982526016428959","host":"s3://npm-registry-packages-npm-production"}},"1.9.2":{"name":"@dollhousemcp/mcp-server","version":"1.9.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"4cddad7447eaa5e3244bb7904f229d598abd68c3","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.2.tgz","fileCount":507,"integrity":"sha512-2VHQSdT4XVdyQyd2xwhhYtVtPEjvETWS+Yqww9g2NB+ur/Bzuv1+hhuvzZaDaDsfGnbi5xEmj4NfxkshO3reEA==","signatures":[{"sig":"MEQCIH0XBrx/feUreoYmNI94ncbg9VyYa4CrtwCmUEEL2VefAiApuE1NioSrO65hkkHIJqReKbvbZulh8YFApOUlVUyWdQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6364050},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"7eb2040fd45036467337094313c3e216fedd0903","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.2_1758311366811_0.33603254920801384","host":"s3://npm-registry-packages-npm-production"}},"1.9.3":{"name":"@dollhousemcp/mcp-server","version":"1.9.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"da3b8cce3ace9edb296edae424983e83efffc63f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.3.tgz","fileCount":528,"integrity":"sha512-QwEGClfOCVf1gOy8e9QSivlxMm/waGhn/MdbDOXOy3nMb6YBUYAnK+Lwx80+MHeNRBZjCQUCX86GGYYkimnKxg==","signatures":[{"sig":"MEUCIQCaQv1hmP2KXTBLl1u/V0QBEAMqc3IRPShVFMlq79o6vAIgPzJ08JrLKeNokhUkQ/mEO9P7gsSuBWpRRLfIzoytwdo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6566853},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"d933c043d3ac60c71093e2843806c9809e048ce7","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.3_1758320602200_0.29108466954874546","host":"s3://npm-registry-packages-npm-production"}},"1.9.4":{"name":"@dollhousemcp/mcp-server","version":"1.9.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"67f119d518360681a6c0ee5aecf3ecd5b53bab54","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.4.tgz","fileCount":507,"integrity":"sha512-ZvokFdDxcgGb7lCe7p8cV8hxgQCWUt9L2ORszZ4r636ysN0yviaa44vLjlqtM3VvUp8wzzYXrBsXh3qIvL/VAw==","signatures":[{"sig":"MEQCIBlAcAeaDmE0qlDtoUk2bT4eKhcQ+TPAnL+ElaL1ylf1AiBCHcPUbFTK3wBf2hCjaDah284BEISkWWyIdvo8BxIJJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6391269},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"03145d6de26af0dedd6884486e2073bb53817380","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.4_1758324733363_0.06088776334406032","host":"s3://npm-registry-packages-npm-production"}},"1.9.5":{"name":"@dollhousemcp/mcp-server","version":"1.9.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"42c04e16a16facec4c93323b63cc632d5edc2dd0","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.5.tgz","fileCount":507,"integrity":"sha512-hCj+mLB0ROLnSzAsoufGgV99t5qyTgeOcy3bO4sVozPnL87uGFcXI6D2dS6mZ8d3twBaEIqKUqTi1k6nruFvwA==","signatures":[{"sig":"MEUCIC7BAWqf2kgcQUwjBcndVrIX3YObtnDLQWUuDc5jt/1RAiEAsq78xHvu0KKWBSE4B3KR6/IncY0/vGvpVV/y6sM8QG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6397747},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8cce8b78ad16f576ecdcecbdfc81805ba3424d8e","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"10.8.2","description":"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.","directories":{},"_nodeVersion":"20.19.5","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.5_1758327743926_0.7075011427817268","host":"s3://npm-registry-packages-npm-production"}},"1.9.6":{"name":"@dollhousemcp/mcp-server","version":"1.9.6","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"53beaa6554e41387b68fb0b940a25148585bcd0c","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.6.tgz","fileCount":528,"integrity":"sha512-EIyohQ5O9+wc3wGf3xZ39Mlqhj3eQsqnJeM44CVOq85q7ENok5t1NdQu02gNly2awxA4kVIAn2Wl317corW7Ag==","signatures":[{"sig":"MEUCIDed7n11LYtXYwX8UdXyGO/GKB4h1K0SBSFSQaqmk69XAiEAkjymqnDMOJ9ngVHIsZNzH34XFJvSNWXV+JH0q6xSMJU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6578988},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e5c9fea28500ca1041f585a4e70c69adb00c70ab","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.6_1758384466277_0.7431142602847167","host":"s3://npm-registry-packages-npm-production"}},"1.9.7":{"name":"@dollhousemcp/mcp-server","version":"1.9.7","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.7","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"0b71bc6a872eb5c4f8ddc57fd57eae0b2dfd6bcb","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.7.tgz","fileCount":528,"integrity":"sha512-vXoRzoYgf1GPjDXQ4HqMijkmz7bysl0D28zDK9z+RIIObObGlvwAu+idlnVzRL0+L+EA+jty9k28gaYxHPWjKg==","signatures":[{"sig":"MEYCIQCNNN9X3ZAaGpUzbwm2wfCRNUauoEOefP7Gez2QXd6K+gIhAIYYPuA3GdZhMvA/MegdfCOOMGxec4nYtsadQefAH+CK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6591293},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e197da76e0dc4e71835bbd547817e3968cd0b5dc","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.7_1758388194499_0.04205877624051846","host":"s3://npm-registry-packages-npm-production"}},"1.9.8":{"name":"@dollhousemcp/mcp-server","version":"1.9.8","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.8","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"a3704b0078d6be6edbce3bafb3bd6680fa252127","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.8.tgz","fileCount":528,"integrity":"sha512-i9g3q7aavcyQrv3Oe62mVbQL2LHsmmrMer3Vi0oMEFzr64ffclFCXra3c5Q1rP2f5FXFNKtBmBUlVOGsMjP7cA==","signatures":[{"sig":"MEYCIQDMQbKzphLgDXHY8CKSy+dVXXLgm92qlN7lm0F82P6kgQIhAKbqueS5WkotJCkm9u4AZ2BnM8DhXvi8y/VXygZtvqt+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6619527},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6280c5dea94d5d49b00bc18e4090d0e90ce3f221","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.8_1758398160811_0.26423840602538573","host":"s3://npm-registry-packages-npm-production"}},"1.9.10":{"name":"@dollhousemcp/mcp-server","version":"1.9.10","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.10","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"4379719c0692d1720d5767310d02543bad62a06a","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.10.tgz","fileCount":564,"integrity":"sha512-Y099ZBzHPtu/IHHf+XpezTOgHHdTFDceQg9pGEUIbv+wyYGxHzVK4cIxwCJy/vH6zpitBkBti12DZ7nE1hbiRg==","signatures":[{"sig":"MEUCIAGpYJS6rMIjHtdFS6VmoWWZkHXyaKEHYYgwf5lgCmWXAiEA4ACxpSRrJQ6Uhb75D31TEzv3y4CTQro/7VaxL9af5/Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7460193},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"1db01181c8b8eb69fb9999716280f462e4f37feb","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.10_1759002748569_0.05558468756667567","host":"s3://npm-registry-packages-npm-production"}},"1.9.11":{"name":"@dollhousemcp/mcp-server","version":"1.9.11","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.11","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"c7c134bc55aa1484d8345b674274f64a6972250f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.11.tgz","fileCount":564,"integrity":"sha512-iL19sjRxpt1Nd7XVWX/rqkS6NFfhhXPgrtdEe2yUlXhlGdlA/pVeItwlMMGDK74gCKPFGPe2/qMH7x3sLensTw==","signatures":[{"sig":"MEUCIQDc18ZOI8Qzcg3NGgfgbkFvDHJxd4sieV5iaOrYgp8F9gIgA8Jq/xeOauzVBsTD41ZDkq2hay3g3wjWjcmfgKUHazs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7473131},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"a3b398c2c5e246f37e9359c488ceb545e866bc4e","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.11_1759074823681_0.5843313142730329","host":"s3://npm-registry-packages-npm-production"}},"1.9.12":{"name":"@dollhousemcp/mcp-server","version":"1.9.12","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.12","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"991769b7cd2b6dfdb7a17ac4159be685ea4177c4","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.12.tgz","fileCount":570,"integrity":"sha512-OvfwK8Hw5CS9tZrXVDRQEOkgOXJpoSDwRsYE/rL5b1HzIeRnhsz2t9lxVM0WadvDxS6TIB9MTjxfB4FIAho1+A==","signatures":[{"sig":"MEYCIQD3S5EPCf84qMg4hlqLHH0C5A9tfpgv4MdhL/dmkWK4EAIhAKI2lQukBaZI7H4VxxdnmhebA3OrKbVn2TyW8l3vfeba","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7636327},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"82ea28523487b2d923ee53f279e3b7424445f038","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.12_1759168784022_0.3158087905484104","host":"s3://npm-registry-packages-npm-production"}},"1.9.13":{"name":"@dollhousemcp/mcp-server","version":"1.9.13","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.13","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"795ae6402e9c40c350c65bd2e6475e6c3be97bc9","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.13.tgz","fileCount":573,"integrity":"sha512-Iamfhguy93kaGBx9DZKI+tEjKinURn02Ibq+YUc+PDOIcYxAYxHMpyJbbqCuc4QiwTR+PEUJVVVbN5WR0wnS9g==","signatures":[{"sig":"MEUCIQCjNIDOE9lkxTVldoBQaPjSqXY0E8ZcCW61MZQD6ZLnAAIgRlToYSstAWyBN2ezeEWCIijjP7e5uAwsuMe4Res4LqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7643971},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"59d0f27d1e8882262577b3834f041035c7c7aced","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.13_1759188577024_0.8281692685070285","host":"s3://npm-registry-packages-npm-production"}},"1.9.14":{"name":"@dollhousemcp/mcp-server","version":"1.9.14","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.14","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"f3ddfbaea5823f91f5200ec06f35fc12f2f3e910","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.14.tgz","fileCount":573,"integrity":"sha512-nABCpuCpuFOPm8nghrD5YNGzxIIAZfigLyesFaOCn85Ld/dgEVzUqaF25HbVMILcPujKPzaEaUfZwnvIRNGKEA==","signatures":[{"sig":"MEYCIQCmIGBTl8WJ8zlPvsSYah88OzAtSkWS5SDlTeQuF2ZDJwIhAPVxluktme/YmmOQHP83CEREXxp76rk1Cob9PupR9O26","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7695149},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"bc2b9fafe2bc80d78ef2f5887f176260fe9904aa","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.14_1759260976811_0.09139227323714794","host":"s3://npm-registry-packages-npm-production"}},"1.9.15":{"name":"@dollhousemcp/mcp-server","version":"1.9.15","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.15","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"4daa9a48c6d8a144480fb8cfddd6c024c7634b1b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.15.tgz","fileCount":576,"integrity":"sha512-PjYKqM88/jLWeegPtRplQtCn91njBWdgC0euTZLd8BRLpCkhwJVqrsrmgCsCMZ6L7L/ROVxRj8CDCJadULLKYw==","signatures":[{"sig":"MEUCIHdpeNtAqA26/VzrzNVB+Z+clgZ5qPlCl1OGCsAberKPAiEA5u0fzQYepNTetFRWKDsiTqC3zZ+C7aj1KBH9jpInMMM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7778529},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"833ba2eed87bd61fe984909a117c851b5f429f91","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.15_1759356888055_0.9407971428630608","host":"s3://npm-registry-packages-npm-production"}},"1.9.16":{"name":"@dollhousemcp/mcp-server","version":"1.9.16","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.16","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"a67e65aac679235581f6526218e8b52d6715ce24","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.16.tgz","fileCount":579,"integrity":"sha512-7nQo2RVQbTGy/daJ5qg+KsJihHZf0v2USc158u8Vd4FxaCIL+c6uOto4DClLVSJCiqdnbYFDAKQMZEngTFLSgg==","signatures":[{"sig":"MEUCIQDHBcGnavqiDygFUM3f8Tfwe+5b3uJo5nHAHS+m1iORNQIgLJY2uX7DjZ9oUS5u+Ss789LR1kQ/6N2dVV7+ipwSJcM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7806238},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b2a9100001bf4d492dcfcfa92cafa3f373721c1f","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.18.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.0.0","jest":"^30.0.4","dotenv":"^17.2.1","ts-jest":"^29.4.0","cross-env":"^7.0.3","typescript":"^5.8.3","@types/jest":"^30.0.0","@types/node":"^24.4.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.0.4","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.16_1759532999238_0.09209612258815358","host":"s3://npm-registry-packages-npm-production"}},"1.9.17":{"name":"@dollhousemcp/mcp-server","version":"1.9.17","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@mickdarling.com"},"license":"AGPL-3.0","_id":"@dollhousemcp/mcp-server@1.9.17","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"e45ae2ac63044f642b4b03e39e013f3b74f949e2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.17.tgz","fileCount":580,"integrity":"sha512-8AHHs3q40iSwD9O2U8avQqXFcviJDSFgGQxj4s9ccTPzJHwwSUcq0JZ9NgYEykuxMd1/Qipi1/A4W8WenZ4nJg==","signatures":[{"sig":"MEUCIQCZjGqsvyaQ2IjnOT8gHfIRUj5kZwE881dhDiGZrPL7sQIgevB5IJ1txrux4GAwuLGte97AI3YROMxeQztJ7WKgZaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7815727},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"09a387f76e6987499016a7b4515f3f96c9733060","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.8","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.19.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.4","cross-env":"^7.0.3","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.7.0","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.16.7"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.17_1759960257868_0.9957386689614811","host":"s3://npm-registry-packages-npm-production"}},"1.9.18":{"name":"@dollhousemcp/mcp-server","version":"1.9.18","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.18","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"8059e9e1e06c600c3c7f4669a1437408557029df","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.18.tgz","fileCount":613,"integrity":"sha512-weosBweoG8iBag1u38ebAPmLix9bH6IUchrfpsVgioIFvRX+OhQh3+NavqNR9vM9/dAVlVoPDAbf5+rYxq0gTQ==","signatures":[{"sig":"MEUCIDGfRoEcOSygERnnRA1PyO8IQhD0UR6vVRy9QzNHSzuPAiEAsygNMbAtqCyFlLWaR2i2kfyv3YGjVonD61chBf/DMEo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8217755},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"2a896acb15963b29e6ab02eb994f95f487dabf1e","mcpName":"io.github.dollhousemcp/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","posthog-node":"^5.10.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.4","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.7.2","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.18_1760719469253_0.5505093328675803","host":"s3://npm-registry-packages-npm-production"}},"1.9.19":{"name":"@dollhousemcp/mcp-server","version":"1.9.19","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.19","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"51b20d347abc648bfe72c3d2bdda6f8400a3261d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.19.tgz","fileCount":614,"integrity":"sha512-lAl5pIdFhWSIUh2UeF6DiLLWwJ6gZB+mYCkItr/saowLOMfMYzSYNzrFvBnY3MHNjwsyt5HXrqlvQNKhaO+hnw==","signatures":[{"sig":"MEUCIQDbARRM9m5UJpf+geu2ls/zhQk/KAx1chVRBO6mmNa7wwIgE6jBJKaoDh4JJoi7HyBC9gB1QjQ5w+HcwsqokLANMd8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8227427},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c057800c273e63474bc2d864b1538abf0a0e1725","mcpName":"io.github.dollhousemcp/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","posthog-node":"^5.10.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.4","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.7.2","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.19_1760736668918_0.019439024373484992","host":"s3://npm-registry-packages-npm-production"}},"1.9.20":{"name":"@dollhousemcp/mcp-server","version":"1.9.20","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.20","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"00d1fe7ddb90bdac1305fd91b2dee4d8bb8fbf44","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.20.tgz","fileCount":614,"integrity":"sha512-hK2udOeGznK9+0PuXvZ46JvBpVAcN8xyyBkbVopl0xJwy0k3mxIk0KX2dJ3lDs1q5Wxj5Utl+V5ovZxxsUVRtQ==","signatures":[{"sig":"MEQCIFlUXk93Oye9WRC+nU6uofEytPKa5B9/d/k0rJgDob6aAiA3ipm/iiroa+Y28kHKXSTk5G9oieM91Fa6pJLaz0kumg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8228304},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b6fa46a536e7b0cda6b3bdfb584deeac1b97233d","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.3.0","description":"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.","directories":{},"_nodeVersion":"24.1.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","posthog-node":"^5.10.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.0"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.4","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.7.2","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.0"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.20_1760742716917_0.5772781023989129","host":"s3://npm-registry-packages-npm-production"}},"1.9.22":{"name":"@dollhousemcp/mcp-server","version":"1.9.22","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.22","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"394684001073ae5d9835af75c4d952fd1c0866ff","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.22.tgz","fileCount":614,"integrity":"sha512-YYIegoC8dhspl0ZADcHUlg2ey6s+Sfi/r9+SYT1RL8j28m9lQjv9PLJ5yenXmI+cErk1jzp6KWLopspJo2QpXw==","signatures":[{"sig":"MEUCIQDpcQx2zGGzRuBjqwzaNBXSBpuSMvAFVJ4rvDMcI3TfnQIgLeqZyyXUtfUG54Nk48Jp/Ks964AXwQKza6NGCg0Cg0s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8252037},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"7e83bc163e103e4820838ad6c30c05018237ebfe","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.0","description":"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.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","gray-matter":"^4.0.3","posthog-node":"^5.10.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.8.1","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.22_1761216480850_0.8091661709375979","host":"s3://npm-registry-packages-npm-production"}},"1.9.23":{"name":"@dollhousemcp/mcp-server","version":"1.9.23","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.23","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"df0a32bae9b4b369eb0f3ce800a0de7ad1ba89d4","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.23.tgz","fileCount":632,"integrity":"sha512-USvAGMjZaqyuFpDQ/g2QySka7OMCWJiTEJ3JVqMrD3TqnOUVlcpWGnJqTZN7ie4QQR/46z/u93JNcLwlQkOqwA==","signatures":[{"sig":"MEUCIQCP+Sj5t0lU+HIPYX6jaPWU6YF0bwzHcTv94YeajQocRgIgMiKy7AOa83Vvaq1ni9U36uz41pTweChclqQsNjQz3+0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8524815},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6d503e64b2d9ea0a3cc7d8cf6b6dc7c66f88fe1e","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.0","description":"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.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","gray-matter":"^4.0.3","posthog-node":"^5.10.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.1"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.8.1","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","@types/archiver":"^6.0.4","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.1"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.23_1761568379502_0.7995785166622233","host":"s3://npm-registry-packages-npm-production"}},"1.9.24":{"name":"@dollhousemcp/mcp-server","version":"1.9.24","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"SEE LICENSE IN LICENSE","_id":"@dollhousemcp/mcp-server@1.9.24","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"0aedf140c7a04c01f840937ca3408c26ec8f6f09","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.24.tgz","fileCount":632,"integrity":"sha512-WaXtOhlVuJ+4AeX9jUFX2HmL5n8PiqmtZucQP4Kx4xMiVimL9VM+uXxAHvR6+sc+P8Ik+5dtwubOWQ8ppJFCRA==","signatures":[{"sig":"MEYCIQD3jzx8+3cxe42ez5gaIcTMtfZBQNbEwZ06mXHAIBaPjAIhAJqDTyxe6G+oMiBtY6jMGVBC9LBD1Rre8AqyzpJJZYf8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":8530037},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"81842c7713f2f4272ea6f49868d9dfb699ab64fd","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.0","description":"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.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.0.1","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","gray-matter":"^4.0.3","posthog-node":"^5.10.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.2"},"publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","@types/archiver":"^6.0.4","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.24_1761581448251_0.5860780712799054","host":"s3://npm-registry-packages-npm-production"}},"1.9.25":{"name":"@dollhousemcp/mcp-server","version":"1.9.25","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@1.9.25","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"4c57cbb1723915e99b6136d1f1714137cced5aee","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.25.tgz","fileCount":1244,"integrity":"sha512-Ey2a5J1DtPeJaOibBijSkAYB9Ptc6q8KghTNmrAf4g+aMEjJLqkebPet4oDDYTvrqZRGDSsFjgE+aCRCHUkw9Q==","signatures":[{"sig":"MEUCIQD8wciCPyi9WW8kxJJpPLnd18Z5Ff9TbpO2NBQ4X4cQrwIgY3ZyN9x39zZskquVU8+GIdCssjztSKCpRAc4kr/gQPQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16771248},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6aac73b7fefcbcfe3b77608c832f2de16fb54feb","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.0","description":"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.","directories":{},"_nodeVersion":"24.10.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","gray-matter":"^4.0.3","posthog-node":"^5.10.3","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.20.2"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.9.1","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","@types/archiver":"^6.0.4","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.25_1761865307580_0.06720504012209161","host":"s3://npm-registry-packages-npm-production"}},"1.9.26":{"name":"@dollhousemcp/mcp-server","version":"1.9.26","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@1.9.26","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"5f6c110af2989cf7437b6efa7475c91c47b11e01","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.26.tgz","fileCount":1247,"integrity":"sha512-ecL90XeQzYHJOCQgwIH6fI6Kzh+02uAn2jjEPV9ArVc9G8RXwrRBKTd0kWe82Nge8a0fJeo12YMkZ0akNj8CSQ==","signatures":[{"sig":"MEYCIQDIlX+wF0lUqTBnyjU5yn1LN7BTaiHjdr9sT97zG+gRmgIhAIOSHVpM+maeisB06VbLwKou0XFPOjcqB03z6f36Lrve","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16990582},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"bdb60f8c71f610654db61934341ff2de36de7117","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.1.12","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.0.0","express":"^5.1.0","js-yaml":"^4.1.0","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","gray-matter":"^4.0.3","posthog-node":"^5.11.0","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.21.0"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.26_1762552957987_0.6806009576093808","host":"s3://npm-registry-packages-npm-production"}},"1.9.27":{"name":"@dollhousemcp/mcp-server","version":"1.9.27","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@1.9.27","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"039a94ae45fc2e2f989f1dfe426e72d1b4bfba03","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-1.9.27.tgz","fileCount":614,"integrity":"sha512-eHKx61pbDOs4LCSoDy3jsoyc7+pJzjQyIYEYo8yTDGo9Yd05c9HJHl0YYfLk4ZqJJL/RnP8tIgRDWA56zuYKPg==","signatures":[{"sig":"MEUCIGf/V8Hhg3SZMKvvqmi/WDiVFrVlLBpAeBtJXkVUJJl2AiEAmqvi0f7kdRznbPoT8JoTEU4wKg8AnQ0sSAhZTi4jrL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@1.9.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8748319},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"17372ac6489224e1cd1ee2d5a7fb772507e32050","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","test":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --ci --coverage --watchAll=false","prebuild":"node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","build:test":"tsc -p test/tsconfig.test.json","pre-commit":"npm run security:rapid && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:readme":"node scripts/build-readme.js","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"jest test/__tests__/security --coverage","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"npm run build:readme:npm && cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","build:readme:npm":"node scripts/build-readme.js --target=npm","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config test/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.performance.config.cjs","security:critical":"jest test/__tests__/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","build:readme:github":"node scripts/build-readme.js --target=github","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"jest test/__tests__/security/regression --maxWorkers=4","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config test/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.4","description":"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.","directories":{},"_nodeVersion":"22.21.1","dependencies":{"zod":"^4.1.13","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"27.2.0","express":"^5.1.0","js-yaml":"^4.1.1","dompurify":"^3.2.6","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","gray-matter":"^4.0.3","posthog-node":"^5.14.1","@types/dompurify":"^3.0.5","@modelcontextprotocol/sdk":"^1.24.0"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","dotenv":"^17.2.3","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.1","@types/jsdom":"^27.0.0","@jest/globals":"^30.2.0","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","ts-jest-resolver":"^2.0.1","@modelcontextprotocol/inspector":"^0.17.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_1.9.27_1764972947563_0.0761656621357456","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.1":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"e7c409fee2e9a80ac7f2e73ca5716d782b40fa55","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.1.tgz","fileCount":1102,"integrity":"sha512-F17dkLLpgW2YhUDjoGPVZb3ola5Yj0XwFr0r3IuFqrbNSlC/YTFT6fYWUv93270XmLTItlF2GkRyD4s/se8iQA==","signatures":[{"sig":"MEQCIAfmKz51LlD/WJEw9X6yvXL9C8tgasHw341ezXGrMLGqAiBPZw0uv+RUzWrGrLElwv53m9uCx2FVQ4zTbnevzhnHvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16257876},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8a0c428c5b340e8186c8e00aed9575188cbaff4c","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"file:packages/safety","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.0.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.2.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.20.0","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.1_1774014173081_0.5970239563077744","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.2":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"dab4aca5069f8131429b9016085d8ad75e6841f4","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.2.tgz","fileCount":1102,"integrity":"sha512-44dKHRlA+P6WEFMEmiDQxkbLGxZdieClXvj5HR7CPzUKYdP1XDBVDSbfypgNUqONoSa1/C7pX1HU8846rNw9hg==","signatures":[{"sig":"MEUCIGdc7pbAyZBkbDd2ii1xx6Raa7tdkmKP9z9tbiV0tAViAiEAyx8KLsSoOLChk5jOPvteU3mS0PZb8Bnw+dC4smQKCWw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16293765},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"9779dcc5caea33b8b7369b6deb12d47c46e90937","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"file:packages/safety","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.0.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.2.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.20.0","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.2_1774155622945_0.36112723226562404","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.3":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"9a11588c5320e3e193b33f16afa5cef6e788b0fe","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.3.tgz","fileCount":1102,"integrity":"sha512-H3U4eugK4KVn5LjpbPOP4bxoDEAtV+wpL55lrctrg4RwYQKMZ0LQd+vi64iCIN+3h2r1M6MXsONvD/HN7gSFtg==","signatures":[{"sig":"MEUCIB/EgmkwBEtP8QAklXSK0XIr5e9kgEQ4e6YozctDfXXMAiEA6gKnKLMiLyjOqfehRvicCee2JZ+1OAtk1m//yyZR6w8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16295428},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"95fb8b2b04ea4cb983d2b8c9e0aa1ef8a72e1d2e","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.0.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.2.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.20.0","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.3_1774210906016_0.6032482529841987","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.4":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"ad814e38d8b7ca70c3d69ff0712fcee607b6cadd","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.4.tgz","fileCount":1102,"integrity":"sha512-1aP0BeUQpKCmtJANCscKXQVciS2KGudspdAJ7smpGXweK3+Hy642cgdNfo1bFTrt5AKEi/GOzHl1yHfH95O0qQ==","signatures":[{"sig":"MEYCIQDA0vdw+urgrDJJ/mWXli1xs1SKY5svASoVg558mHJDzQIhANHpK4c0tZKWgHaVirBkLAgGR+ABcwWPKlN8JlduYBhy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16300792},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"53113327052cb9a8edf8012e16954a91b27a6e33","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.4_1774301492752_0.4762576444223887","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.5":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"38c42dd01ccce1e9a084218f94f00e342abd8200","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.5.tgz","fileCount":1102,"integrity":"sha512-QZ9RBzmT+qhVayvZ+uuvHCaFeDrG5x0eQyegljIeDhTpdKqVQxx53jRvxltsNxLG+yrPX1/kfRp/9yXFHT813Q==","signatures":[{"sig":"MEUCIEN4ksg9P/WUhR8dNAcWjKPecVEtmowLPLTVTwX2bA7zAiEAuLzDxrc4nTL0H4e7FfpbkvjdF5pw2YqJh42WVimXYjI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16307999},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8ef9abed01ee6a5000afaa676084dcb7089cb006","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.5_1774308168391_0.09869186095076632","host":"s3://npm-registry-packages-npm-production"}},"2.0.0-rc.6":{"name":"@dollhousemcp/mcp-server","version":"2.0.0-rc.6","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0-rc.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"d6c1862605979f952615181712fc21813a4836be","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0-rc.6.tgz","fileCount":1102,"integrity":"sha512-9ZBEC/nSMyOFbXoCuB59E4Xitk3sLkTxG8YFfND3kEqFP8MwDknVjG1F97iH73l8+vXduWRlikbv7OoXbWrdnw==","signatures":[{"sig":"MEYCIQCCdK0BhvDnwGDTE0m/eoxho2T4Fpd3h9ZvaeS68Gd7KgIhAK7LzoKIJ4Z4buzCW/MQ/Tp8WfgdFi1OSaMjVTaGv4MF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16372417},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"d28c4db4f4c29eb622a40f8c35622868fb12b618","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"cp -r src/seed-elements dist/ && cp -r src/web/public dist/web/public","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0-rc.6_1774557873779_0.028827715962673306","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@dollhousemcp/mcp-server","version":"2.0.0","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.0","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"fb1919584b66234263b3e6373a09f76e2ad56cb6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.0.tgz","fileCount":1192,"integrity":"sha512-iHvPcfqVRUXX6x2OlZsSXfJjl00vRmxEYKjMbZYEc8BCo73On2t3Jl/dwMmlHga146CMsM3l9e+SOCjzAYuSHQ==","signatures":[{"sig":"MEUCIQD8ZLg7b4lh43Ee1U0FzjM4zPMmA2mfX+smnXp3hmhe/QIgAkpTKu1SpcDmXc7ylorC7dPhJnZLzgELbFAk7rKlHR4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16913477},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"e52af738a0a8d929aa19846a55275e3973e1bdbf","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.12.1","description":"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.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.0_1775085908930_0.4235499844337065","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@dollhousemcp/mcp-server","version":"2.0.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"213ff67a551b54ed9793394724bf1589f81097a0","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.1.tgz","fileCount":1201,"integrity":"sha512-nxxURvBZSc4Aj2wbKnIeR8uB4AYJ2/iytvyGojfVYhrWJO+tn4ihhBaN8ZNzwDtqY+sEja0+OhmHrnaIuUis/g==","signatures":[{"sig":"MEUCIEJJBe8jrfZgEfpHpv/L7Z+zkklzAlsbiFPWMw9BzTklAiEA3qmdq8/JjrCWrjDd5Ar8oMiw649VF2Y5zylwYMp97a0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16992435},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"091c6fb8131e8d16dbefb2fead3849d682698190","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","@types/uuid":"^10.0.0","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@types/dompurify":"^3.2.0","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.1_1775088061576_0.23489857185228047","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@dollhousemcp/mcp-server","version":"2.0.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"60816760e19da920b7d0f77e80b8ef3574624f97","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.2.tgz","fileCount":1192,"integrity":"sha512-cnna5awcS/Xa9KClQZiZontdqJDkqBJMuDCRBhV6OkcixaMA41C22fV9zcKJGeLsbu0yg7+a9E/1gWYhAisMAg==","signatures":[{"sig":"MEYCIQDCEMqi6ErmiJmRMzTzWsOGUkrwQEZYTOJpa16UhMaSkQIhANJMqjLj5d5bO+Vplrq63lo7l8PAu/nLBOCyblywlxLu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":16947783},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"4d14de1871fc92109abbf80e8ef7246ace3389d8","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.12.1","description":"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.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.2_1775102734333_0.7176399756159799","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@dollhousemcp/mcp-server","version":"2.0.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"02384642ab9548b6b006167a5017488abee97e0f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.3.tgz","fileCount":1205,"integrity":"sha512-CSrmAUTP0w1S5lxeWht8YfV3St0fls8JtCSeasTM29uZ2Bq00EQ4p8OWhenvPWnnqO1vZv8/VJOWr3fzSfWbiQ==","signatures":[{"sig":"MEYCIQC49eiOtwAHhEhh4Mp9Rufy116eQWC2I8uuv04ksRH6rwIhALMNChXCT6K5me29kn8tE2heaaZue3rDreX7WcorUf/D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17084529},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"73b0ba89f3159017171ef8b913c661981cceb1ca","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.3_1775153477945_0.8406288906460093","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@dollhousemcp/mcp-server","version":"2.0.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"66ccbfca1ff1768c66d644551c601ed084c5077d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.4.tgz","fileCount":1237,"integrity":"sha512-7a7C1DlIZEwnV18720L5G55Fjwx8VGfAjyfgROAbPljUKm7rukS0SCvETZjrpFwJgf/Y7RkQsaLQTSNkbijBow==","signatures":[{"sig":"MEYCIQDXdxh9szF4lrFv7PId/vbAwoy5oTU+rksWU7IpFVZ0rAIhAJ46/brWlLCDNGzREnBcKUgVV/vrkTc258qN78fOCkYf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17450582},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"eafdf97428f603df14b2f7894df191e19468957b","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.4_1775154841108_0.16729306920272302","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@dollhousemcp/mcp-server","version":"2.0.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"f15e5f2cca5cee2d35e824c8d1c3bd38688f9018","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.5.tgz","fileCount":1237,"integrity":"sha512-4/nkaC9yCDSDWlZkyPvt7//mjpopKgvwKqRk1sx5dZJ2VoQNL6KUtLYnNYlMtxdsAruqvMWyEGmHjfm693OmXQ==","signatures":[{"sig":"MEUCIFWc9Rc+4fw01tU/vZy2FmeVKkGFdFB4/tRjzYi4YgRSAiEAxpagJnbnbgP8LPZn5x3JP1iMG6fcNuCOLr/sbbWZh3k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17464868},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"3ef98d440d8145ea0be337f7f855c6381c4ad6c4","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.5_1775156370494_0.5620918765198124","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"@dollhousemcp/mcp-server","version":"2.0.6","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"9e88b967d2e44465f3a407e62dca0f9b0765de9e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.6.tgz","fileCount":1228,"integrity":"sha512-XhGf2IxiFA2L8vL8kLK+Rd0fumt0ZJ7/tnZ/k+fK3pXKVNv3sXZvVzguO21hi/zbj2o8UiK1FepWysZzH9mNEw==","signatures":[{"sig":"MEUCIAlgxSrCAgPPXzqOIXYOnrLro1GIkZNBDqQhWua+j8bRAiEAygueITHuKsDhLS5q6KnFiOJzpIUrs4mzNkp5xTeLkXI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":17443019},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"fd763f03f211b75588e4dfa6ab576b4298245c36","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.12.1","description":"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.","directories":{},"_nodeVersion":"22.22.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.6_1775162966649_0.06839159924151694","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"@dollhousemcp/mcp-server","version":"2.0.7","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.7","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"7f287afefce563fbbce3a43ee99cbf2d26e496f9","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.7.tgz","fileCount":1237,"integrity":"sha512-GdLoblg4EQJALFjhUmf2I8Qb9CM3Bp8iSJLgZOc5EfJMWpONmeSziM2WQeibQL4kcQFbCI8tb1/NPDp25NcBJg==","signatures":[{"sig":"MEYCIQDsozKTRTwVvxk6CUysxyDpy05NEHdyCVXAKtcM28enoAIhAKW+hgaMuTPoB4zyBPIfg1Xuw8XX2x36WnCMzbgiURHn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17493474},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"5a27f73ce10f2d95744ad036c1cc0e048cfc9f67","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.7_1775166349790_0.08189985382936826","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"@dollhousemcp/mcp-server","version":"2.0.8","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.8","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"e71f20d060de95e500e966fe18c053d8882a95f2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.8.tgz","fileCount":1237,"integrity":"sha512-5hzdQfGtt2u1K2qbWRpm50PjYLMfbhS7hwSbHzbmGDeJiSgSRLlr8DAkk7/YELqblz/NajYbJKqVKOl39abaIg==","signatures":[{"sig":"MEUCIGLFJF8yRFlzUGDtb/1Fvp49Y8SjoZXYCQ97rB7QmzpiAiEAsjtf853Dkeyx3tT7IEObFSfxSS4NN9kV550gusKgqoo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17501838},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=20.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"7ab4966410c832a149e06595ae915c45c1afefb8","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.8_1775170969307_0.7562900069275706","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"@dollhousemcp/mcp-server","version":"2.0.9","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.9","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"c62db3ab8e55325302f5f301b21cd3724abb4c34","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.9.tgz","fileCount":1237,"integrity":"sha512-jJ8pnIv44BamIDwcHr96lCtBgaqITxTviKpSOMfdIIn1+bHRH/7cmYqp/CP88ef9DjMqI8ldAH5THNcxKvweQA==","signatures":[{"sig":"MEUCIClqYOOkT81N4q7QPEpCTKi7Ph3IeVPdngfTurMSmHU0AiEAy4U7VNiC/ZOpc7DGV5ApyXk5N5bbDxBk06XD9kKfc7M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17501667},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"f83fea7d7e128a44b49fccb6369cd1bbb75a7810","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.5","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.9_1775232136982_0.16909490822090656","host":"s3://npm-registry-packages-npm-production"}},"2.0.10":{"name":"@dollhousemcp/mcp-server","version":"2.0.10","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.10","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"58032ae27fd4d53e6234dceb5775bcfefa1788c7","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.10.tgz","fileCount":1238,"integrity":"sha512-oJgeigZLitVccZ7mY2XZGCNL7LsTj4BhZDwUb9cyJWxm1THwpS/D2lPAzT9vARwbIquMKTHzajnIBHSdYRj+Rg==","signatures":[{"sig":"MEYCIQDtdgIQ78HlgFqoSFlQ9jWudqPTkc4qra9q2kzgT2giMQIhAKHmf8Vzrde8mWHt3imUy0qsb0u1tliZ1BS2+yyLkQa3","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17591797},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"11d332a50c7fee5e7e786f40088371bf92c14ad0","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.10_1775249183082_0.6169845519955093","host":"s3://npm-registry-packages-npm-production"}},"2.0.11-rc.1":{"name":"@dollhousemcp/mcp-server","version":"2.0.11-rc.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.11-rc.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"20cf6c429ff5abb61f3a67758700ae08a196fcc2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.11-rc.1.tgz","fileCount":1253,"integrity":"sha512-CdyidQ4RbswI8EwnfltDM8UMwli1BOcP6ha4ThXa9Tvx+GWGLCosRmwmIXEjnVjtXM5RS6bbObVu18L+higSPg==","signatures":[{"sig":"MEQCIGidpxkAANFBn8lY3wBDrYaweEGIM7AiD2A9BDUFo253AiAmImhd4e87UWjM0F2sxW+zD+VDJXl53ZKLi8c1w8gP9g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18083477},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"2a0bea1ba2bbd1d4c4eeb93cf76d2bf5ebcf0479","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.11-rc.1_1775629130461_0.09651191877166743","host":"s3://npm-registry-packages-npm-production"}},"2.0.11":{"name":"@dollhousemcp/mcp-server","version":"2.0.11","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.11","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js"},"dist":{"shasum":"336383253e680520490394eaadc5aa920a5f1c78","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.11.tgz","fileCount":1250,"integrity":"sha512-Bvtt3obDRH8dKs9/ZzpQjKWsc489h5SlrwFGgGeTUD8yUB6ewnXs/jUVRFIdAtwW+tfFRdwLPfJB5xQPXisXcw==","signatures":[{"sig":"MEUCIQDTWd6PxnswBz+xz7o/lXFzapDWwgCIz2tghqsTBQ0d3QIgdEUkrKqjA6BCpQW9XG7L/k5fYL594NVNiGpI0DS7HGw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17816902},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"cc4880ea26ca8b35e1e25d346cea2bd8361d05ef","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.11_1775669657609_0.7985003180741461","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.1":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.1","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"c970e6a01c12ecf3f04c3f04c3b065942c9e18bc","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.1.tgz","fileCount":1253,"integrity":"sha512-/ptFzwK1FabTMTYLbPaxnxWYUOtaiYu/av0XaYtGzn1MaNO7sIL5WS7zkRfVnR4T7Zf5Pfue8MOvZxANQ8kMCQ==","signatures":[{"sig":"MEUCIG1JTxRhRaeCNrf3UaxhbvyTa+3IWkCNifvI9FEs10s5AiEAtI/LBSM1bhXEiKeRFKZP8TBlxSkAC3O7tANdfxcFoPU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18086075},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6802be323384e86a6a6c5374042a07f8d8e218ae","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.1_1775671038053_0.26112957636016","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.2":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.2","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"a2b6d2438590ce503b7423604e383e9c70ce49db","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.2.tgz","fileCount":1256,"integrity":"sha512-F2M1gk5jq0cXSg7AlS2QCD1jsczLfihF2CLZfuOJhf3ebkVX3dGoukSfMwhO9E+0KcYFP8sJAVLpvSESpx36YA==","signatures":[{"sig":"MEYCIQDYj/kxuhJPkgtHeDKSQRUutcN+UgN80O2WUTO1RAFbhAIhAKgtcYUU/hCXpzCEkMZ8uQSUPSRgzkn9sUa9Drz7Jia9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18129455},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8a5b694a7131745451bb97444a45836537054b18","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.2_1775682259303_0.7883359381247099","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.3":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.3","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"576681327a2585e41251194563e4386c0c123a97","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.3.tgz","fileCount":1259,"integrity":"sha512-DdqOCkzDPWWAt3ljiG90fUykFgZ9Q7G0yOsRxZXOY+jIU944LZGCazCRVg0Y0jS0Ec++MU2JjLhnNoHU2K6BeA==","signatures":[{"sig":"MEQCIED8zuBot8mAlDG07O8YIIAwm225m72DPE+RWkjr/ghhAiBsXUawsaZClyjPs7I/26by0Oh8j9WKQ8W24WvEHAVYKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18151541},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8fe1367d91c5d51fb54334c8d1599da0fc4b26a0","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.3_1775702240234_0.32636299687339165","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.4":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.4","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"c317e0a2c15d351261e1bbb7708a0c8f392aa720","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.4.tgz","fileCount":1259,"integrity":"sha512-Kgk3C9smtQe9EISnEShJTynhUejmi8L9fpFWvyATeLaP6g8x++8bqJhag+OL6GNybhOPrjiQQRXnY+1s5vtmBg==","signatures":[{"sig":"MEQCIFKi2JQT4ZyqwxfqdQ5HFOHozxu4vO0dIaPC2npTMCBmAiBFyo2q6H/L3Z6xX99GtufPG+VrNev/iUoisZUcaU6qjg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18166687},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"5996762ec38092519110e3f8c076c8e3595479d4","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.4_1775704550791_0.7242599150928475","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.5":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.5","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"85defafee92c602f934a253277e546ea7255e5d2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.5.tgz","fileCount":1259,"integrity":"sha512-sS4b89vDHbxi8aGtG/vvmJSnuSVS0TyriKZK/YoEttlWcXqyp2Lkbduuqk7kjfDVCauA8XBm601L0ShBkTVLAg==","signatures":[{"sig":"MEUCICvSRJAL/8PuAkDN3hsM9ruclBQcgXWEdhKkjUhUdzDcAiEAniC/efnY9yfYJiaHTzyRhczoyJrxO02kHMD8Ya7Gi48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18168826},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8af0ce2a56f14c9762b3b9d895734937a0eab0c3","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.5_1775705036068_0.40053878178941815","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.6":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.6","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"5118903b76402d9be2e6a1be614d3fb4f8fd3640","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.6.tgz","fileCount":1259,"integrity":"sha512-26QwMXnEHIKDdOGwf89ACYx9jPJWXd3GYjuT9WJC1KFlnFpnQQvLenJ98gwuYIR3i8Py2GtGKo367DvL7L6NTA==","signatures":[{"sig":"MEUCIQCl90C/oVsmOgyzYShgqg+6AEN2FX1E+CwF1k40QmXn5gIgLXlLIXhmsYvBvv6Av3y9yXdA7Fsai9SB4dgsCB/Mf3Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18171103},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"7555ca43440ac702e8ceb1344c27633d93532d77","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.6_1775707253039_0.5496548309978937","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.7":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.7","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.7","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"14f8a48b60ac47a36640bc8b5f94d3a9b08d2d3e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.7.tgz","fileCount":1259,"integrity":"sha512-KQGZnTLxO/Pzyti6Fz1VkJTznK7cUUAy7C4+pYFoFuYWuye+PvmEA1AlHgBSbxcnbGPf1c9czP/9Orz+a6X5ww==","signatures":[{"sig":"MEUCIQCOi7V8VPHZQ3GDHrtFxdDwFjhqsjW8GTtkiUtvHWGQAgIgCQZcU7EDnxibBmbg1Rrwnw7WzUyUtKfmxQG8X8bygNo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18172591},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"efc9d83e02716112843060b9a0045be5c58c7357","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.7_1775709891627_0.5294858183491051","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.8":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.8","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.8","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"74402436b6acba0247f76828232eba225d033ba0","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.8.tgz","fileCount":1259,"integrity":"sha512-xeZqW2K+6lqluRS1FE66Eg7k0ew6oc1evCI48VSNFY1RZexKpC0VpK8H7foU/Ra4AqFTugRuATKjvvkZW3c7gg==","signatures":[{"sig":"MEQCIAfWROssqlb58v8peOQeW/F/Z02tKuWkV43o9JVlYBW0AiAWVdnw+g9pXoKpoxCUSkOB4k88RD8tD3sYsfLZOXX+MQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18172693},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"d021ac786cc212fd0bbf95654c68b51e9741dbf9","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.8_1775710222474_0.9554939971627221","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.9":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.9","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.9","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"af1601296b163f8a3f50b1e3a5b12ef058b32044","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.9.tgz","fileCount":1259,"integrity":"sha512-kgqNpieRqYNT0Pa134DXQGFeCHt5bYBhAITIc5Bqv4CT6OKeQsNr8TFSb0YM8JKaSvyd/EXuCoh3EU7dxu/ipg==","signatures":[{"sig":"MEYCIQD+PBth1XOdsVooSL5bDJ8xYLbNkTXuoi8iv9pPUSqlNAIhAN4jhZwBJ9cp1DGNFVgwOtkO9HlNaY1LzpByWVM1daPJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18172987},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"66dfaf65adf2a771266ecab0a438d6be3ee20e79","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.9_1775710675590_0.03875701402707943","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.11":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.11","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.11","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"de59075a14c4c0b531ae81db1019dd6d1a34ace9","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.11.tgz","fileCount":1259,"integrity":"sha512-TPCD4SnXvEkGbvE52ZLpVqPdW7rdgKnEvqSIwLCe1JPVnJkxQqzv9mxBwYKUn+1QpvzJG9x21s1sGlf3B2ff6w==","signatures":[{"sig":"MEYCIQDPrM+1U6vFoBK3hNjJ8E66J1CMZH6we9rntgx20yp5sgIhAOnlRasYVVA8BK2Ai8Utx6bYZJ72N7Hep34WZprQeIc9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18173420},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"ea6610e16117db89b6e6debbc3949cf091b044d5","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.11_1775712652652_0.532389092943141","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.12":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.12","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.12","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"0474133e0a73348bbb2b6afbdd7758d451ecf6cc","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.12.tgz","fileCount":1259,"integrity":"sha512-+4OEr1Izv4PmtMIZ3fXaDj8R7I4tLko4OJVh3A/T5BqEIH9xzAzOieTZ6/RFPfQpER5lix3LXz/xHhxk2VuDYQ==","signatures":[{"sig":"MEYCIQDH5hhYgFj1orZHnHORZtOm5SuDqpFJM7sDator/rF71QIhALWbyOkQEKvPrRfvC/rps3xQgeX9FdzJHwA5CxDrUua8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18178021},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8e96e5673f1ccd6f1438654d9d1c284c052b7e70","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.12_1775741536755_0.5852020309125303","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.13":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.13","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.13","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"0c4faf114113aa34fdaa46d92ca32b8c4eed21f6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.13.tgz","fileCount":1259,"integrity":"sha512-JFKU37UeCu5vYTXaFQnVn+HwPwwj0TQbLEjuihHKNSoxWNBrZ1JmiKZxpiAE4w3nSr4z+pt8fGRmRyEx+X5WfQ==","signatures":[{"sig":"MEUCIQCxKJHB8yK8FXxnVNDq7SMBYH3sJmbLQqaL7NA/YXafNAIgG83owrTXOvo3D6h+4ackzymCpzsURbN5DPlxqRv8yII=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18198391},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c91640c209768b2471872b8186a76776f9c4def8","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.13_1775751048972_0.12431911362819092","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.14":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.14","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.14","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"001c392073845ec19f91370c95c8c6c5c29c307b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.14.tgz","fileCount":1259,"integrity":"sha512-ebYj3+gmtrbybpwxfMBBVfJ1WlZ1sIWtCov/WNPdyqn9gY9U4wLlhycYVtxC4KmQm8Tca7WM6DdhkUTy/QToRg==","signatures":[{"sig":"MEQCIB3oLM/iJKzUJiqbNQR/C5y6bZOFBoYxqwqBtPhzx+LWAiACDxMyP1GgiLECGNsjigvsg6evyIVBBbR6KxT5FCghcQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18209791},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"2b745419dcafb2ab73db52e705afef00e6fc46e6","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.14_1775767414220_0.5121746316241635","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.15":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.15","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.15","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"30961fc7e86000c97bf5a24f91f818dd3200c435","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.15.tgz","fileCount":1259,"integrity":"sha512-ow7i9vOhRIEWJbwCBGEJbUDD4o1GqUAaVWoUY3x1oAV9VoPBLtLDzv9fbr3b5DDjEbXbQJzB08FJ2zFCSL8xfg==","signatures":[{"sig":"MEQCIAKfFK+HIzzv3B6JtDtRJjLGMI3dQcXf6to67aqIDa/0AiArUH9RV6/ctKusQfXI9G8894tlSkCypWBDi6jU/0aFEw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18213977},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.15_1775776913200_0.08453949421940044","host":"s3://npm-registry-packages-npm-production"}},"2.0.12-rc.16":{"name":"@dollhousemcp/mcp-server","version":"2.0.12-rc.16","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12-rc.16","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"4791c9d309954214a59571641a0341d298dcae4c","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12-rc.16.tgz","fileCount":1259,"integrity":"sha512-mNqoxz4gxlZJnP3013CrL55wgDKJNtmAS0V+atwg2X+BjczUz+QHJ+FV9J4iquxcltKtVEgWLQ7RuGWwTqr8Iw==","signatures":[{"sig":"MEUCIQD1eRvauq+wb3p2ILuPWH75tYFiGOH6Jw2iXrLAtSC9PAIgCCffWQYaHAEqpXB6ttc4bI7+7mu0RdvxvuznBFMf6UE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18290249},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"30efbca1da1bc2d45e119d9ebe8a85bd14050d01","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12-rc.16_1776012083384_0.37035784066323596","host":"s3://npm-registry-packages-npm-production"}},"2.0.12":{"name":"@dollhousemcp/mcp-server","version":"2.0.12","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.12","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"4ce9db2bbd70d0afb633030ff3f41a118b43e480","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.12.tgz","fileCount":1259,"integrity":"sha512-tOEbGrgRrsN/tW7D7FYtwNmFokaH529MgEj2pN99GtZtmjuIIgM5abAxz+VouV+0W4rmwAOulz14F4JaTuKRNA==","signatures":[{"sig":"MEUCIQDG4Zcx0XA6GI21DBLA5Oe8W1Liyjd1xJtkvUbxNuz+DAIgOoCtqEZHUdjUbZkuXtUzHGSoX1UercjlnFs9ySMaCGU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18295061},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"1570968d539d1b2f277e0c44a1b459c85a35897d","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"mickdarling","email":"mick@mickdarling.com"},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.6.2","description":"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.","directories":{},"_nodeVersion":"25.1.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.12_1776017957469_0.7248936676087512","host":"s3://npm-registry-packages-npm-production"}},"2.0.13":{"name":"@dollhousemcp/mcp-server","version":"2.0.13","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.13","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"abfd4a78db08648492c63080c2f43d4bfa8ad305","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.13.tgz","fileCount":1259,"integrity":"sha512-eYp/owrK0HqX+vnN2Q1udWous++ZatovyUK7wtVQEAfG/jJp6nR5sg112j/QNeXZNs1nBJm9g9WXMgNjrh2YGQ==","signatures":[{"sig":"MEUCIQDWqt6optwDMBnDwq//4qNYAvORyZbQ6t4Qs6XDmpek6AIgEvGH3JAPI5mq4oynf4owSAoYaVcb6dw/2S7Ko/7M3UI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18309894},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c4a0154bc4f910ca4d1e4ae06e045886424b3a54","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.13_1776097997986_0.0889305825775688","host":"s3://npm-registry-packages-npm-production"}},"2.0.14":{"name":"@dollhousemcp/mcp-server","version":"2.0.14","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.14","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"295265ee44b626eeddfcdf819145da7ede01a216","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.14.tgz","fileCount":1259,"integrity":"sha512-KhbXoJF44D7WPcy0DBf5QlsbtU4rD0fNs8CYti9YY89NHCi35zrUayiZsthGZeSMyW3oB2PZayfoFBWsZ4xE7w==","signatures":[{"sig":"MEUCIQDmZgfDhwokxhlqhhONogI3NInOBajp6sWUHALFeMYAsQIgBTb/KktaKPcf65AbmWOEXcGitOZvoIYxNtzxv1vUBqI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18381680},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8a4b2dccc2b891c5214c57a9bfdd5a7a026275f6","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.14_1776136726695_0.8093214119388723","host":"s3://npm-registry-packages-npm-production"}},"2.0.15":{"name":"@dollhousemcp/mcp-server","version":"2.0.15","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.15","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"9616bb4a230cb18297a99136370798ea5ebed66a","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.15.tgz","fileCount":1259,"integrity":"sha512-Jjz/eQWRFrc9w8j0URJ+BgEnIXlknooVyQGVRKKTiStYOeQY6vUwYtbcZg2v2yFXGg1JiI5OAkCD+3dP+kFj3Q==","signatures":[{"sig":"MEUCIQC+MuntKEIgSuzgrzeCtyekUJYxhjQtkh8cTF66M16nswIgaSNSQ+LQq9sDnw1/ZuGh2Del1BfZx41i9lMPC1olEWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18381943},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"760939a57e32a0098af6e76a25360ed954a1c774","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.15_1776140403259_0.2438671290609391","host":"s3://npm-registry-packages-npm-production"}},"2.0.16":{"name":"@dollhousemcp/mcp-server","version":"2.0.16","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.16","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"8ddd7e303ddb848a78d255d2c61031dfbecd6a23","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.16.tgz","fileCount":1267,"integrity":"sha512-0pV1FMZ+BThcM5+9xC4tD0mkxZ9NsQCH/cvwUsD88nyyquhURgjUdkVHpIS9PlEWSTJrmu/mTDxbMu9/FZfLtA==","signatures":[{"sig":"MEQCIC4IeppO++kjt8bj9OaoxxfHZwXxJeuIQZs0YGJIHBgKAiBY6EjNwTfHvpne3YLroYRNQMpCxwZRF1sTMg20PUpCbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18455400},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b74fc76225fa6c7956b9ae2809802eae99da1d96","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.16_1776191367539_0.2617983934419923","host":"s3://npm-registry-packages-npm-production"}},"2.0.17":{"name":"@dollhousemcp/mcp-server","version":"2.0.17","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.17","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"4df25c71e65b346be4f46bf2a9cd76ce1f8bb0c2","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.17.tgz","fileCount":1268,"integrity":"sha512-e+qS0Jcy1AcKMWTOYelVHJvKEjP0OyzfqEY80tcL+ENKJc0rZ+7hPqt4CaKkt/4OYvO3W8wPCh5xFE6IEMHjYA==","signatures":[{"sig":"MEYCIQCcPC9kRjHnp8iDDOxMNFaqrR4C6UtaXNzytf3ZFLjpXwIhAIDa1HHb3rrgxdcWkAaNE4gX6VtbYSxpi+O/LfYTLX0C","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18604859},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"f7eef24f1ac47f54fb9b4b5cea01d45996ee2171","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.17_1776263980147_0.5123150027172283","host":"s3://npm-registry-packages-npm-production"}},"2.0.18":{"name":"@dollhousemcp/mcp-server","version":"2.0.18","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.18","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"b1a14c6bab14265031374e2e3029d20e1207fc91","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.18.tgz","fileCount":1268,"integrity":"sha512-2V/iUbvJznD1Qo1LP9FQEG8j4OT79Bzv/KEFEyPprWN806hUX8RbpL0e7xyvWllo4FyHA8W6p6My7BgODeTt4Q==","signatures":[{"sig":"MEQCIEgIzmYO+2y9aTfxEhRxL5BjGrg/zylJASinw4GvTYFNAiBwpIK8n5fnG5akqZZ4h0VPIVXnm0heXXTs6hIM82ldKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.18","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18656777},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"45c78dd2b3560798176cef0ea6d755cb0c523032","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.18_1776298282045_0.8246948344220482","host":"s3://npm-registry-packages-npm-production"}},"2.0.19":{"name":"@dollhousemcp/mcp-server","version":"2.0.19","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.19","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"b9d39686d8933103813bbd81bfed503f7c2cf6ae","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.19.tgz","fileCount":1268,"integrity":"sha512-xVM8h5Ije8qUkQN3S/KbcoJB4Yu1xbBMB4qt1PvJymeJUld+VLu8VBD+iOqzYBZxu6msKruClw35v23RSYlY+A==","signatures":[{"sig":"MEQCIHtIzwJfmI4rWagCKsTYn4UEUQ3qgEXiEHtJg3nvxkRaAiBKYVBBMB/a/iNq9jO41VI/y4+UBSm4kJ5H0z3u0tIMIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.19","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18733892},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"45f8407e299543d54adc0acd71793c0df2c1b8a1","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.19_1776346363406_0.33366283584918643","host":"s3://npm-registry-packages-npm-production"}},"2.0.20":{"name":"@dollhousemcp/mcp-server","version":"2.0.20","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.20","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"651b978224863f2bd5e18eee1b38a679e6eac47b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.20.tgz","fileCount":1268,"integrity":"sha512-+EbWYEm2g48F95XPzrTyN6odZQaBjtnzkPW9hHOaBzwoO7EGEjSgQscrRqkE/YAU2nLU0cDc4WoBuST2ZKBbvA==","signatures":[{"sig":"MEYCIQDKntfVubR12E3YqwKsRcZ12i+fL+QEre7zGNs77Lg00wIhAI2cltXEfY1Nr+BHLGMwxVjoHoLF1xLm+6xNUiIEokFA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.20","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18785501},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"a10da655704a6450707e860cce607e3280bde414","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.20_1776351234095_0.9174166366400165","host":"s3://npm-registry-packages-npm-production"}},"2.0.21":{"name":"@dollhousemcp/mcp-server","version":"2.0.21","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.21","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"77161f2db5ff7cd74aceffe8e44f6418ee641651","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.21.tgz","fileCount":1268,"integrity":"sha512-fC3Tra0okthQdzXeifGr1caJb1v5KzLN7eE/+fjM6InvTjuUMdq0ywjiV6YIakoEKYE/A8X4j8/iiPAUsvax5Q==","signatures":[{"sig":"MEYCIQDhSxhthT6K7uKUIyuTceru5TViMwxPRZDmx+uJtKtGUAIhALFabd/0UyqyZsSByaC+oLfB1PAm/0D2kQt2Ty41qaKR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.21","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18785380},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"6b10eec78dd9879de298f4e2ed63a7380ae4b149","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.21_1776353730894_0.426798923675785","host":"s3://npm-registry-packages-npm-production"}},"2.0.22":{"name":"@dollhousemcp/mcp-server","version":"2.0.22","keywords":["mcp","model-context-protocol","ai","persona","prompt","claude","ai-assistant","roleplay","character","behavioral-profiles","dynamic-prompting","typescript","dollhouse","marketplace"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.22","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"8bcec894aaf92e2c23e0c41598475a5ddef6190e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.22.tgz","fileCount":1268,"integrity":"sha512-867+QmCTy4qNN2vhpNmz/fgPGK+NKWqaKpB0JQgq71LbwNWGpvsli65ZkoUJAuNNRyv4kQ2D8//fNc/r8tBXcg==","signatures":[{"sig":"MEUCIDqyMWDU+GIC9yutpDC5wg4t2/zUTEgd0yqNsOnZwRy4AiEA+25roNiF8+vL36PWICUpms1M6ZC3x2jOpY3HalewH0k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.22","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18809824},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"0360f0767c824e3eed7e3dc08c4c34caad487740","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.22_1776356072322_0.19303067866012413","host":"s3://npm-registry-packages-npm-production"}},"2.0.23":{"name":"@dollhousemcp/mcp-server","version":"2.0.23","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.23","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"cc756dcfb0b4cafa42fb01f04d35c821147b0251","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.23.tgz","fileCount":1268,"integrity":"sha512-IijXtkpTyOV8xai1l8u9n06Gn4AnTXFdQ8HuKmUW+LpaCLVyIOc8mLj4H2JkPsHEJ1ytPk03OUnzPSqFGM6T6Q==","signatures":[{"sig":"MEUCICeoW/Y5HAjBQrg3sdnfjqOiObcFVyWMCeYOhA9GLFoyAiEAoxi+92C5r+rM4H3/p0t7wrkI7tVHDiNi4esqAiT1FE0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.23","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18810055},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"3d1314d55cc8b631d1c79ea012923adf21b5c059","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.23_1776356383885_0.5771088102522395","host":"s3://npm-registry-packages-npm-production"}},"2.0.24":{"name":"@dollhousemcp/mcp-server","version":"2.0.24","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.24","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"3f42e1d6d20de9ebd8c21dd5c8fbea1e1984666b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.24.tgz","fileCount":1268,"integrity":"sha512-RRrz1B/RdLQWoNvXbqEbKgflZCk7LDAlk19LAbo6yJzsTVMFONGoschxW4z5I7hMfV4AWJAqrKDIzrTQL5czwA==","signatures":[{"sig":"MEUCIQD6UN7EbDWCtRx4NhDQaeIhrQnmCopYyhqQFh9Dsr/AtgIgSa6TcPVduZjehTL7EsEKwUyhWrGEX45QSiXFw1kgTOs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.24","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18825541},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c9b0170361e70aff71a1128e35b56c1d4ca4c2fd","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.24_1776361534212_0.7944779100443191","host":"s3://npm-registry-packages-npm-production"}},"2.0.25":{"name":"@dollhousemcp/mcp-server","version":"2.0.25","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.25","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"5afce91cfbd3f99e612c123999cff6dead327320","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.25.tgz","fileCount":1268,"integrity":"sha512-G4vK9quZ6A1AuMhRLE85XrNw7y2fxBaKZGUrhfsXJcBAYjkyG+KOZOJw9ktQj+i5YEu5T2QVcJ0yviCMh8yI5Q==","signatures":[{"sig":"MEUCIQDQoFGpkxl6qrBRAt51s0hGRCV5EGbJ0TPrHip5bYH7SAIgOvTbajGqLaX41jXiTgZ1tjeHfT/qL7c14au//9N4RCQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.25","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":18836861},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8bc4f9bb94280a18db1bac214e1c065dd60d3c37","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.12","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.3.1","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.25_1776371097676_0.9840775384543554","host":"s3://npm-registry-packages-npm-production"}},"2.0.26":{"name":"@dollhousemcp/mcp-server","version":"2.0.26","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.26","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"5cc5bd0b8d7097643807c336d348c1d53b2c49d1","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.26.tgz","fileCount":1274,"integrity":"sha512-jZOCpj3CSGSPMvJJYPmx4opl7Z+b83N+kJtwCnPe14uhCwxbSU8xiC1vthKCv7q3n+PvIgkMLyRodU5wNxwLHw==","signatures":[{"sig":"MEUCIBFgLyo5d9Ar6ke1Atqvv0gbKKCOc0P0b0GdOSX/Y2leAiEAhu6HiOk3mXexU0IT9jLncVOONsvdXsGTyQ5P1ovkg6M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.26","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19000988},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"fe09d9501e7c2552a975af9f44c7c4f9c2ed5936","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.26_1776455902547_0.5170364814611683","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.1":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.1","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.1","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"0cd6e801004a7cb277d65ad93b3914ac040d8005","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.1.tgz","fileCount":1274,"integrity":"sha512-wZGLqgGuu5TLmCCXgjd/76f07AtKEpfQbewt3x07Dvl8FU2ydeyq7nuPIMkSE/3r2C5mxewXp+AGJbtma1gaNA==","signatures":[{"sig":"MEYCIQDWxVeGgMWlblO9UYC5p/yYITmte7wdvE50Yjh1NVb1RgIhAKZD2JZVgW7kUsdpWsmvcbQEiv2MIOiDMc0xrQuFzGt1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19037638},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"95cd90cf5472d08aecf5ccf21a535d780a4d8546","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.1_1776614763622_0.1518197812693849","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.2":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.2","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.2","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"04c0e1233bac482a87a0be71b01954cf47578a6e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.2.tgz","fileCount":1274,"integrity":"sha512-KDsW2vxKZM/0xQYdvHDkjeL+IHN9b2b4ziNX5U2X1k+fGjouq6hNETJ97vfoXwPNMU4ESVV3S2ipIazeByjDpg==","signatures":[{"sig":"MEYCIQD971UZfoa/fNhzvwwoS7DnmhGOWFvqqSxAudz8HwUBIQIhAKnwr6ITsRjE9Y8lyoFRgHDR6KkodrYseVo3T0N2zLjg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19037638},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"12e65108c9d3f728183feab3f650a884e1436c22","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.2_1776615670351_0.9983884014005011","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.3":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.3","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.3","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"13f3e55b091133997a1e67b8321b97cf9b73e53e","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.3.tgz","fileCount":1274,"integrity":"sha512-Wevd6SR66MlGG7T/+18WxTzm3cAz1oZzFsb41seeNS4SxrXMZqIxqMbIg+Sr4xvIbjfU8kPRVQeuYCgRwZPr/g==","signatures":[{"sig":"MEQCICZYg7A7Odz2X6tutA4BZwx1pcRCXMrYEOUYjGZAZpyKAiAN7c/Mr8nRp/ScTLRx5Bk63L3JV4exz/TBhpgANoyUHg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19038104},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"cf724c3d68a907dbf121d8bacd9f1bcda24b0f19","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.3_1776616802099_0.9377004809761551","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.4":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.4","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.4","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"d4ef6db51765d0149abd6f56b80b84c782567578","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.4.tgz","fileCount":1274,"integrity":"sha512-EiaWyhROh8P3tXgX5IhGbGwVeaisr77XvDqqfkxLF96dk7e+A6nE7axVgPqqQON6HOfCLPaOHmxJX3HQd4Z8iQ==","signatures":[{"sig":"MEUCIAXhp0Fneeyt86xAXigW4IJHwbMfmXy+AjG3Sm0kmYHEAiEA0GF0fM8lipkvXGYjTfAH13FM96f+P8Fen282plPJl2M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19061470},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"94bed285b141599e867bbc606a8a267fac5fcfb6","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.4_1776619654016_0.037456062488255615","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.5":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.5","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.5","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"3d4c82e7228dc2f8f79417da90ffd85e49eb1725","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.5.tgz","fileCount":1274,"integrity":"sha512-1zZocVhVQPipsbsYoTySwQG+OCOPYWqk5CvqmkM6qecs/dnSMrMb3p4g3/JOZnWCxMnGuw2Ej/YZy5IuNUQlKg==","signatures":[{"sig":"MEQCIBokZmI4BgiUQ9Cp9sYBgQGV6NLkSNI9ZgxTXlCRkX/uAiB7JOPFpqpse7ynp8gjS9WE9esKV9214V0jW81bhAxaTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19078569},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"88de1a9df4fad592abacd180232b54da7872bf84","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.5_1776621861508_0.6256298548268726","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.6":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.6","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.6","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"9b2149cb8fda574154edb54a9388fe5d328227b5","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.6.tgz","fileCount":1274,"integrity":"sha512-Z7zHVvcy/aVnB458gB7+G1JTvUCD1gHjN2ElF5fF2PAFvFGNzDKYOrVsPOBOCrAvCFhLmPjUKpTZMY1Eu6kEOg==","signatures":[{"sig":"MEQCIBEkU1qVssFdqTA+H2on1sPjHMgrW5nuUpA0omCGCDRQAiAFHcd/h5hU2RqEkHd9hYbJct6sEWtDW5JF+wo5XhEL6A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19093593},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"244bdbf5ea93148dc3b2e4a571ba350c7d82dfbd","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.6_1776628082009_0.042828548601147265","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.7":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.7","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.7","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"e0c69697676df4a826772a846e423911938816da","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.7.tgz","fileCount":1274,"integrity":"sha512-OJbIFOblnM0+1rjqISQoWRjElhSdiyUSYyZnyaZWCmbRhtDgKneR6x4S4LdtzOwyNxUmHjkJbs44ikeLjGnP2g==","signatures":[{"sig":"MEQCIC2SXQ9J0o1UP4eUWd3Ncaa4WAUDbWI4Z1UzuYVzXKpMAiAT7EOsVpIHMlfMflGeIvXuk4uMS1TC/I71ODsQ3t66xA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19105007},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c7ca733d77522cfdb983dd0fbf56b09d31582d90","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.7_1776637869561_0.522225234423882","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.8":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.8","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.8","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"89115364612a45e41a723aa20170232a8613b759","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.8.tgz","fileCount":1274,"integrity":"sha512-GpPNqWnG6otWaa7eQr6n6bQpK6cpSMpJ7poL+wE+kpipuro4MhELuTuoShKnZhfltAzYCMhJx3oTinzXu0SLbw==","signatures":[{"sig":"MEUCIQDdLQeUVXiaISt7B5OtKsQcXxFZr118oT3RMJS6XNb/QgIgdEN/XFC4aFO/SjDfuL0GdVFMgdwXbbmN7CfXP0pZgog=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.8","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19119313},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"89a649db4932fffbee3e8e4d26fd6ea197eb83dc","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.8_1776652067669_0.8126026058797922","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.9":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.9","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.9","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"e1a03eaff85af23b1be45a56f09939c8bb7b6c16","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.9.tgz","fileCount":1274,"integrity":"sha512-4TTKX5xPFxVJ/dS24/e+GuKwk2Z2Qi+lVW4SKGvkJyGqfhNtUfzeI8SUcHLVHKFIna6TSnqFDqWmU0rT6bHW2Q==","signatures":[{"sig":"MEUCIQCpmzFkzP+gd9WwUUK2X7GjlmOWOZQC8iflk8S+kP7MIwIgXTSnSBNZQQlU18BSwptiPREFhtgImMhYuqeGItXsGrU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.9","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19187359},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"63203d2c0126e262de016bba7b2efbfaf1909e1a","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.9_1776660246759_0.2928505991358259","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.10":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.10","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.10","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"49a1dd1690a3c48f92ed571c651c4742f4e7bd6b","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.10.tgz","fileCount":1274,"integrity":"sha512-K3Ix4s9BfKEWDlPnVCSrZ1i386B677SuPQxre2lb7rwipz6Q/FfddyTNBXagiKpL/dzqguZ+svMDwy/k5wyQAg==","signatures":[{"sig":"MEUCICJYWynKPr6NxdUsc2ExQ9b3LsP+hpQD7bgG6nIlsNChAiEAvreBfrFuNX9fi9O3kQ8kQBjNFpbVGXdafoP86pesFfY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.10","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19193626},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"02a7052590422381b8e0e8dd64dab4bf46381c38","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.10_1776662682638_0.30337197000420657","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.11":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.11","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.11","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"4a0ebefe6f468ba84e9582e8ff8da69a61d2b4ab","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.11.tgz","fileCount":1274,"integrity":"sha512-PgOzXlKiIb0obpyHBXzy+xq6QbvpRZFn2h7+ngHvbG6c08VPhsx5zDP3ylpk7LwJzpmVcAUyn45qQwHdY7uvsA==","signatures":[{"sig":"MEUCIDz1TsuniMXyOOQsVCAiUOMnj/9UmoiDlwoQUDt3Px4gAiEAlJXC8qhpl/X4sXc5JmSmAOm/QEyhkgLxWfiImdCeyZs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.11","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19197145},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"81b94e4fb2b85dc81995a7cf36d439bd5509ada0","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.11_1776695972367_0.04716193127683299","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.12":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.12","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.12","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"a2688d206e219d26bf6d2dfeb3279d799a661e89","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.12.tgz","fileCount":1274,"integrity":"sha512-JYHs/yKi28pRRPu1mKaG3KDOI7f3bhq67MJjRLhs97pcHZAOqX0dxEoYq/3lHQpsX99FgVMS7m3wy/cum7x2Mg==","signatures":[{"sig":"MEYCIQCTI2iCHlTGFVlaaoUSAzautqu0eEAogfSr+GUMn6iYswIhAPOZohFMMN2FFwSj2yhzcttokv8DsJUY+hU4FpbckhfS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.12","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19199780},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"d96e3dbee69c9e88eb61327419333d38841e79b2","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.12_1776698266438_0.36503495377504946","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.13":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.13","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.13","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"c35fe59ff6ed379542826f726d921303c38f74ae","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.13.tgz","fileCount":1274,"integrity":"sha512-V31I/QF+yc6AFRB2xkCfWEwIPeeqwWDb2t0gFuPAq9TBXoV3eAhgXCmVcN+EkW5nuKLO4C82ulxhRUMgKCiKnA==","signatures":[{"sig":"MEYCIQDlENsr60k9vBWU8VBqeZsePcxywGESFJHiBTKJ1LhqmgIhAP7LLBtuMW/xfP5EONC8UHQJjLDZrc6Y1wkwbNCmDUDD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.13","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19229314},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"09ea03b7f9afd7d697390d5d27dd3601d8d92d55","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.13_1776700720121_0.530574617903304","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.14":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.14","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.14","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"27ae9b42634bc01adcdd0e6b04db1a57d7ef3977","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.14.tgz","fileCount":1275,"integrity":"sha512-lhEfM3ed+ehx+SF+m85KRwF/NofEypJVIlpADKPq1kTIKtnOqeM0xzC/a2hOdS4HdyOFE/k02pTMI4CtXu2s6w==","signatures":[{"sig":"MEUCIFZU5/64ODybqAr17V3PpcLlyIO7eoK/IyhQ7yGLJM8aAiEAiybECtzll2PPkqN1nf47uXEQq3w6fMMri0CB+Ub/TsU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.14","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19231653},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"b750aec7395fd94b7ce5f83e9438851a62fb43df","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.14_1776706094001_0.6621257070455357","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.15":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.15","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.15","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"1554ee8168888cf9ff9c16df263437b3e51c71db","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.15.tgz","fileCount":1278,"integrity":"sha512-wseoH9zdnYlRfLmF7sM/aNbdchsoD19YeHP6wX8didJKW9gk2jljUv0AoJwQraWEBeyxufC31NEWnCP3mEfkGA==","signatures":[{"sig":"MEUCIDC+MH1Zif8XqBQAmd8u3JYOK9rhEr49f4aAi5+d7yzkAiEA2xZFiXj00/q1WutNFnaz1nTh5kBhVoct4WeOI95gdgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.15","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19243677},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"bc426082c455a2614bb9d9a5396d2d6a5e758e80","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.15_1776709674620_0.6676574262463828","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.16":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.16","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.16","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"042016bb03b870199f959078c4593d34c130d601","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.16.tgz","fileCount":1278,"integrity":"sha512-r/8po9MQdLBQKyez05pSBlifwxV+BWYLUzJorA0e+mVLTK1s5UNP4bZHAE40yqYJAStKV9pJZyxAvbT9mf7hzA==","signatures":[{"sig":"MEYCIQDwfB/w2Jz0hNWQZ1OCtEjiPbNsOqRQnoA/+TSIphocbwIhAJY5acbl5zD4BDxoStZaoFq7UmmTKbYTz6JaI12ENKPS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.16","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19244283},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"74758a04fc551009e4543065ec5ca188461a7889","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.16_1776710519968_0.7314599591735189","host":"s3://npm-registry-packages-npm-production"}},"2.0.27-rc.17":{"name":"@dollhousemcp/mcp-server","version":"2.0.27-rc.17","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27-rc.17","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"d298da2d7326dcc02128e8eeb4977765c6084d0d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27-rc.17.tgz","fileCount":1278,"integrity":"sha512-pjNourCXEOYBTIqEYeynaRybmEMgrpgOusVyV1/m0HgEiLJVFUEB4gQ8GupW6IlIgnDbO3lqjTKoQVHHyMshgQ==","signatures":[{"sig":"MEUCIQCMhmO9Ekw3VO6UUFbX8S7tvY9hGpDJ6iHeoCWNvrW+xAIgckCRSRu6EsZ4Y8M8aO4F9hFf8NVr0FBVLBKb2V0xgfo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27-rc.17","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19250883},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"ffd9f82e112b8d54c1783926fe839a65ae55d95d","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"readmeFilename":"README.npm.md","devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27-rc.17_1776713735455_0.07404869706068018","host":"s3://npm-registry-packages-npm-production"}},"2.0.27":{"name":"@dollhousemcp/mcp-server","version":"2.0.27","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.27","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"cb31e2d224942009891e9058805c23ec19a9478f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.27.tgz","fileCount":1275,"integrity":"sha512-fzaL0hnjH47FQSxSa/Ezalt6BuvgGl94YzME6JGTr+rJQCGo/gCw0lGumwf3iWX1Auizhi9PwiwtNzjRHxdY2w==","signatures":[{"sig":"MEUCIF+yNl2HB0yQiXG5kVvaLUcJEt9y4dsFe4fq5npwaf14AiEAmvHwzLwjF5vYnY7OSgVosErHoA8vN+rsEPxREEPQoRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.27","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19004582},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"0752fa8f57ececdccb8ddce28c6f6f16cb9de98c","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.27_1776722404048_0.3405623809489209","host":"s3://npm-registry-packages-npm-production"}},"2.0.28":{"name":"@dollhousemcp/mcp-server","version":"2.0.28","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.28","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"ffd64b108b2fa7d8bf27c079291c9704bb5dda9d","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.28.tgz","fileCount":1278,"integrity":"sha512-ib4vve7D4O/RTxutev3eVfMkTIVawgZmQc1S3H4E1uX15sNntqVylyHX1aAIrsl9WCXI5K1JlCl33ftXUS990w==","signatures":[{"sig":"MEUCIQCOho+fgXvt/eNeUeQ/YxzZkKCyM2bxWc9PEcZ9hN+nHQIgJwsBpZIhsz4fM8b7uQsZQAdfcG6xOww7/gxBjr/8zSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.28","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19036612},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"4cfe868402b4031a02511220a3d49dab8b18cdd5","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.28_1776788282309_0.5457053481042244","host":"s3://npm-registry-packages-npm-production"}},"2.0.29":{"name":"@dollhousemcp/mcp-server","version":"2.0.29","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.29","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"48887f87d396634856c3c1bdcd7f85a511e1fab6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.29.tgz","fileCount":1278,"integrity":"sha512-mAnP25mnSPbNw3kOCeG8lCO102PYplsEWXXmYBCM9oPjbpvwb+PX/NzHgDRWcUqwM0cmnyhVR34UCtLnpqIj1A==","signatures":[{"sig":"MEUCIDJOimbm60Y6yAnjUOAz1JCOWZGJpPJb1ZvD/pKqEKudAiEA1yp9FMwm5hAm2jduY9HjZi5BirGCAzcwjoMIkCtAl5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.29","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19079244},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8030de425a950b4b6fd86668c69b7e031b1dc35b","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.29_1776799809046_0.4586962956243965","host":"s3://npm-registry-packages-npm-production"}},"2.0.30":{"name":"@dollhousemcp/mcp-server","version":"2.0.30","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.30","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"7de4f4532bc074e429d7990b6c110e1a3158b296","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.30.tgz","fileCount":1288,"integrity":"sha512-/+xfbW9Eei8xvmhYc+8Xc0Sz1YbFoUMXiDs5F9m2a3h/Mq7fXrhRC6uJEzKh3lhHk+xyxUjYCGjxbyy7MICjSw==","signatures":[{"sig":"MEYCIQCeV9MkI62w54GqcVlpsJfmu1FHP0joHZgLcyFBBk0NgQIhAJ9iP77osFjNtX8rLMwXQZ98o8OUt3dnbeCBp//UpBTG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.30","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19136593},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"54b7a2aaca33f7cb4edde344b9a92195c32b667f","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.30_1776807890321_0.5562118316335878","host":"s3://npm-registry-packages-npm-production"}},"2.0.31":{"name":"@dollhousemcp/mcp-server","version":"2.0.31","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.31","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"69b499185979a393fecc9a57c12dbe807e6b9c11","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.31.tgz","fileCount":1288,"integrity":"sha512-P1TVXje1GQLcZxP7TltpVNtloVeY88h9ceQ7srCWwVwkLYtiWplBbRcu4a5gFbT+EQLkNtFkwBpdKufUCEQzWw==","signatures":[{"sig":"MEYCIQCVPA+8LiREfvp0t2fIdmR93AQTte1V5bo7bb+4JJbSngIhALDOy57fxl2OkBACdUWah1QfC9GvubJ/FW4rFED28aLw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.31","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19159608},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"93e06ee7a20e2a4500841d206a83fb4ceaa0b65b","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.31_1776859917766_0.22183043189208407","host":"s3://npm-registry-packages-npm-production"}},"2.0.32":{"name":"@dollhousemcp/mcp-server","version":"2.0.32","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.32","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"3f3a8b5756f6dd9ab3b07d11fdcb4b8faa1f804c","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.32.tgz","fileCount":1290,"integrity":"sha512-VqNpOiw87sZI69yg4XxSsJ0evX3eRe+sRZFW3rLxPp67pGlBrnKXZqSG1I2O1RQP78I5gQH5HotnisXJiuwHZg==","signatures":[{"sig":"MEUCIDYuZlLAy/WDT1rHi2LvyCt78e0UYi0iNPlel9l57iRgAiEAnbMsEIKHxQZwbPRzNlgrcu5pnqRfkNRFcOedbThv8x0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.32","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19213011},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c4c1d164cc9dba600c389ecf1e40a6ad9e4b93bb","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"hono":"4.12.14","gray-matter":{"js-yaml":"3.14.2"},"@hono/node-server":"1.19.13","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"}},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.11.0","description":"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.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.3.6","uuid":"^11.1.0","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.0","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.32_1776922662023_0.19165315650700676","host":"s3://npm-registry-packages-npm-production"}},"2.0.34":{"name":"@dollhousemcp/mcp-server","version":"2.0.34","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.34","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"71f8e58a0574e1492acef5efe9a84570b7679003","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.34.tgz","fileCount":1290,"integrity":"sha512-aIa5hKim3vLwtHbV7cUXa7obhTiuOPnFMyotM4pBZ1t1mQYs9YKiuBO29exsgVTObVMTN4pJmMW1POcBA+5lQQ==","signatures":[{"sig":"MEUCID7dFxC0lyZJhcBf4ThThdFKDPkjh3x9VkKnbspS9Gc0AiEAkWxOLHvkwQd9gvg664hv2LIVbaCjI7DLj7FZ51YP0O0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.34","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19235719},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"69a6306d9f862baa1ff6e52c963c7147cf539369","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.13.0","description":"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.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.34_1782245927530_0.9114748246731381","host":"s3://npm-registry-packages-npm-production"}},"2.0.35":{"name":"@dollhousemcp/mcp-server","version":"2.0.35","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.35","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"a377350e587f6fd9e827ec89deee6172ee5f10b7","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.35.tgz","fileCount":1293,"integrity":"sha512-TKWfZDv0ArUFt7EF/4cEYBkne+nptmNKBKMeSyoVf/8phramoKk8CRz7P1UWHxbZsrSKFD9LlBKPHNW9HhWJ+g==","signatures":[{"sig":"MEUCIHx7bWm+UbwBqYnWBT8eMVkKRT2pHSPGEQHPQyBkoaqBAiEAs45LiGmkPwdVa9iqrrU72iE1S+q7kCDbgnhroHfefOg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.35","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19241982},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"96092b89c7221fd4e65538dfd3dcf2e8d0b06db9","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.13.0","description":"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.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.35_1782254733552_0.022544191286696602","host":"s3://npm-registry-packages-npm-production"}},"2.0.36":{"name":"@dollhousemcp/mcp-server","version":"2.0.36","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.36","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"5bb1fa3dc483a47f8c4d3a0baba1a90c59db4d70","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.36.tgz","fileCount":1293,"integrity":"sha512-cp/bh/IQybVxy/xqp/gTapRTgLNCTTVNFWI2DsYmTdo+C/d0cnX66SS+CQcuZZRxYI80aF8oc1LaZI1kGFmG7g==","signatures":[{"sig":"MEUCIAgy4hHADNuZJ1oLQs04bDJqO0nUEItK1t7j10ITpdRLAiEAyTJaOvPgIUZ7FM2VOzXYImOrj8TRMHwA/8wD2o0VGqw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.36","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19331404},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"c7f12659d6ae2dce50bb579199210613fe91b114","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.16.0","description":"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.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.36_1783118823865_0.4063581730497936","host":"s3://npm-registry-packages-npm-production"}},"2.0.37":{"name":"@dollhousemcp/mcp-server","version":"2.0.37","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.37","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"9e6a33c53549c7f7d71fc272e883bdef7a129633","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.37.tgz","fileCount":1293,"integrity":"sha512-gDMD1pzElrx4hjNG8XWqGvElYxsD8CHwrBBEo5eAAG9Jhg/lu5rtxofIWeMbyvigyOk8aHIaXh232pFhwLQaeQ==","signatures":[{"sig":"MEUCIQDk4nptQqX/HHG+kEd4tZp46VHDJ5wgrE0/HweCQyRdQAIgPcwj7X5TPeXllMCp3R4hQjcuS8GO8R6lF6W0XsbfyU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.37","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19360081},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"1f2a6373164f27bce903af176a9477f311dd49de","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.16.0","description":"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.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.37_1783184807891_0.2352575832572832","host":"s3://npm-registry-packages-npm-production"}},"2.0.38":{"name":"@dollhousemcp/mcp-server","version":"2.0.38","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.38","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"8ba0af1846b042fa4adfce3d8ab9e75ffc41725f","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.38.tgz","fileCount":1293,"integrity":"sha512-DZgcYpRRQ0RavE4KVcONuosmITM81HejsqIjWbimzh/W8s5yUYBrc8FbmFhJBh7MVmbs+VO00ZhqO1yqGerl0Q==","signatures":[{"sig":"MEUCIHoFwPhNhF/M+rwCwfs9PgD3vroe4Bg/ZltIrEf0PjgtAiEAt+Kgo7ckFzA15+UKwGJCMcXYEaPweYm+FU1oIp+mmaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.38","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19383511},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"0bbd0c19bc357780724fba3d46f91318872558be","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.16.0","description":"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.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.38_1783191044009_0.17294627915068594","host":"s3://npm-registry-packages-npm-production"}},"2.0.39":{"name":"@dollhousemcp/mcp-server","version":"2.0.39","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.39","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"e0623907e6da3b2a725d770f399654714cf79d0c","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.39.tgz","fileCount":1293,"integrity":"sha512-cWSnx5UoWQClsGx2on6nNzG98eTouQPWAdmVKBfxHVARqoea+PDE3rqJrQDzi4OuJLf1DR7e7PU/STV5OxaXwQ==","signatures":[{"sig":"MEYCIQCagMV7DoTNxhsWg6a2/WUrP4sC3yi7s/1ZhRbyQiwXBwIhAKtmyxY0P5gpkDrmzMJgusirdhff4ExXxpV43eSqs1pN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.39","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19388865},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"10c66c6feec7295d621ee99788f05d4479b4bc07","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm install && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"npx @modelcontextprotocol/inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm install && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"npx @modelcontextprotocol/inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"npx playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"npx playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"npx playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.16"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.16.0","description":"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.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.39_1785514095348_0.7904625003121923","host":"s3://npm-registry-packages-npm-production"}},"2.0.40":{"name":"@dollhousemcp/mcp-server","version":"2.0.40","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.40","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"16c9b21e1ac92f11ad961c731233f8060b1c6d88","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.40.tgz","fileCount":1299,"integrity":"sha512-Ak+g+KxWmFxWbN1c1FJFDVl13BFUlL4aRQWwhdXJZXlJOhh/S9Z29EfGVko9ed+Bax1vDgx2WX0DUEuXIEDF3A==","signatures":[{"sig":"MEUCIQD83GdHGKcM4agGoUrWukCcXt06NAUsz54EeCqsJUvHDwIgO1mp6+9t0zB9YudKW4PAjs9VEHUSPZnoLMs6BkA5Jjc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.40","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19462370},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"8695a0a11504696a181238efdbf8ed8a215a90a5","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm ci --ignore-scripts && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"mcp-inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm ci --ignore-scripts --workspaces=false && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"mcp-inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.22"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.16.0","description":"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.","directories":{},"_nodeVersion":"24.18.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.40_1785957643179_0.5819368609860001","host":"s3://npm-registry-packages-npm-production"}},"2.0.41":{"name":"@dollhousemcp/mcp-server","version":"2.0.41","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"url":"https://github.com/mickdarling","name":"Mick Darling","email":"mick@dollhousemcp.com"},"license":"AGPL-3.0-or-later","_id":"@dollhousemcp/mcp-server@2.0.41","maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"contributors":[{"url":"https://github.com/insomnolence","name":"Todd Dibble"},{"url":"https://github.com/jeetsingh008","name":"Jeet Singh"}],"homepage":"https://dollhousemcp.com","bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"bin":{"mcp-server":"dist/index.js","dollhousemcp":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"dist":{"shasum":"38298b4f6cae9d148f4db98600c5bd580512cfb0","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.41.tgz","fileCount":1299,"integrity":"sha512-cOAF+3BCrdATI2JICMtnQG8gGwCUGxMKCpOJezWfJErb3w9u4xN5r3uxIE+IWIQ/pmmrHBMmBvQ18Jzycbb96A==","signatures":[{"sig":"MEUCIDPeGMPHqrnqwjXBfMnT4geMtYuMWRnP5pakcMCwKT7+AiEAgg9RRNodu4kSLKxTzGAGb3CNqhBPj0ohfEYK12RAPLc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.41","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19532942},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"npm":">=10.0.0","node":">=18.0.0"},"funding":{"url":"https://github.com/sponsors/mickdarling","type":"github"},"gitHead":"5b0050bfc9f2dc42e114f61c80604f7bd1344d84","mcpName":"io.github.DollhouseMCP/mcp-server","scripts":{"dev":"tsx watch src/index.ts","web":"node dist/index.js --web","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","build":"tsc","clean":"rm -rf dist","setup":"npm ci --ignore-scripts && npm run build","start":"node dist/index.js","qa:all":"npm run qa:direct && npm run qa:inspector","rebuild":"npm run clean && npm run build","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","lint:fix":"eslint --ext .ts src tests scripts --fix","prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","test:all":"npm test && npm run test:performance && npm run test:integration","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","inspector":"mcp-inspector node dist/index.js","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","qa:direct":"node scripts/qa-direct-test.js","qa:simple":"node scripts/qa-simple-test.js","test:crud":"npm run test:integration:crud","build:test":"tsc -p tests/tsconfig.test.json","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","tools:list":"node scripts/count-tools.js --json","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","tools:count":"node scripts/count-tools.js","build:safety":"cd packages/safety && npm ci --ignore-scripts --workspaces=false && npm run build","qa:inspector":"node scripts/qa-inspector-cli-test.js","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","version:bump":"node scripts/update-version.mjs","inspector:dev":"mcp-inspector tsx src/index.ts","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","version:check":"node scripts/update-version.mjs --dry-run","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","security:audit":"tsx scripts/run-security-audit.ts","security:rapid":"npm run security:critical -- --testTimeout=30000","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:roundtrip":"npm run test:e2e","update:version":"node scripts/update-version.mjs","security:report":"node scripts/security-test-runner.js all --report","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:playwright":"playwright test","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:totp:manual":"tsx scripts/totp-manual-test.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean","calibration:local":"tsx tests/calibration/run-local.ts","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:generate":"node scripts/generate-security-tests.js","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","calibration:docker":"./scripts/run-calibration.sh docker","test:playwright:ui":"playwright test --ui","calibration:compare":"tsx tests/calibration/compare-results.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:playwright:headed":"playwright test --headed","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"overrides":{"qs":"6.15.2","ws":"8.21.0","hono":"4.12.27","giget":{"tar":"7.5.22"},"lodash":"4.18.1","express":{"path-to-regexp":"8.4.2"},"fast-uri":"3.1.2","form-data":"4.0.6","ip-address":"10.1.1","gray-matter":{"js-yaml":"3.14.2"},"picomatch@<2.3.2":"2.3.2","@hono/node-server":"1.19.13","brace-expansion@<1.1.13":"1.1.13","picomatch@>=4.0.0 <4.0.4":"4.0.4","@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"brace-expansion@>=2.0.0 <2.0.3":"2.0.3"},"repository":{"url":"git+https://github.com/DollhouseMCP/mcp-server.git","type":"git"},"workspaces":["packages/safety"],"_npmVersion":"11.17.0","description":"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.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"zod":"^4.3.6","uuid":"^11.1.1","chalk":"^5.6.2","jsdom":"^24.1.3","dotenv":"^17.2.3","qrcode":"^1.5.4","express":"^5.2.1","graphql":"^16.12.0","js-yaml":"^4.1.1","otpauth":"^9.5.0","dompurify":"^3.4.11","smol-toml":"^1.6.1","node-fetch":"^3.3.2","extract-zip":"^2.0.1","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","posthog-node":"^5.24.17","@dollhousemcp/safety":"^1.0.0","@modelcontextprotocol/sdk":"^1.25.1"},"licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","jest":"^30.2.0","eslint":"^9.38.0","globals":"^17.4.0","ts-jest":"^29.4.9","archiver":"^7.0.1","cross-env":"^10.1.0","supertest":"^7.2.2","@eslint/js":"^9.38.0","typescript":"^5.9.3","@types/jest":"^30.0.0","@types/node":"^24.10.0","@types/uuid":"^10.0.0","@types/jsdom":"^21.1.7","@jest/globals":"^30.3.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/express":"^5.0.6","@types/js-yaml":"^4.0.9","@types/archiver":"^7.0.0","@playwright/test":"^1.59.1","@types/dompurify":"^3.2.0","@types/supertest":"^7.2.0","ts-jest-resolver":"^2.0.1","@typescript-eslint/parser":"^8.48.1","@modelcontextprotocol/inspector":"^0.21.1","@typescript-eslint/eslint-plugin":"^8.46.2"},"_npmOperationalInternal":{"tmp":"tmp/mcp-server_2.0.41_1787772179282_0.6665062880651222","host":"s3://npm-registry-packages-npm-production"}},"2.0.42":{"name":"@dollhousemcp/mcp-server","version":"2.0.42","description":"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.","type":"module","main":"dist/index.js","bin":{"dollhousemcp":"dist/index.js","mcp-server":"dist/index.js","dollhouse-console-token":"dist/cli/console-token.js"},"scripts":{"prebuild":"npm run build:safety && node scripts/generate-version.js && node scripts/generate-hashes.mjs","build:safety":"cd packages/safety && npm ci --ignore-scripts --workspaces=false && npm run build","build":"tsc","postbuild":"node -e \"const fs=require('fs'),p=require('path');function rm(d){if(fs.existsSync(d)){for(const e of fs.readdirSync(d)){const f=p.join(d,e);fs.statSync(f).isDirectory()?rm(f):fs.unlinkSync(f)}fs.rmdirSync(d)}}function cpR(s,d){fs.mkdirSync(d,{recursive:true});for(const e of fs.readdirSync(s)){const sp=p.join(s,e),dp=p.join(d,e);fs.statSync(sp).isDirectory()?cpR(sp,dp):fs.copyFileSync(sp,dp)}}cpR('src/seed-elements','dist/seed-elements');rm('dist/web/public');cpR('src/web/public','dist/web/public')\"","web":"node dist/index.js --web","start":"node dist/index.js","dev":"tsx watch src/index.ts","inspector":"mcp-inspector node dist/index.js","inspector:dev":"mcp-inspector tsx src/index.ts","clean":"rm -rf dist","rebuild":"npm run clean && npm run build","setup":"npm ci --ignore-scripts && npm run build","prepublishOnly":"cp README.md README.md.backup 2>/dev/null || true && cp README.npm.md README.md && BUILD_TYPE=npm npm run build","postpublish":"if [ -f README.md.backup ]; then mv README.md.backup README.md; else echo 'No backup found, README.md unchanged'; fi","test":"cross-env \"NODE_OPTIONS=$NODE_OPTIONS --experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs","test:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --watch","test:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --coverage","test:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs --ci --coverage --watchAll=false","build:test":"tsc -p tests/tsconfig.test.json","test:compiled":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs","test:compiled:ci":"npm run build:test && cross-env NODE_OPTIONS='--experimental-vm-modules' jest --config tests/jest.config.compiled.cjs --ci --watchAll=false","test:integration":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs","test:integration:hooks:docker":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs tests/integration/hooks/permission-hook-docker.test.ts","test:integration:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --watch","test:integration:coverage":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.integration.config.cjs --coverage","test:integration:crud":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage","test:crud":"npm run test:integration:crud","test:crud:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --watch","test:crud:ci":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/integration/crud/ --no-coverage --ci --watchAll=false","test:performance":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.performance.config.cjs","test:cross-platform":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/unit/cross-platform","test:all":"npm test && npm run test:performance && npm run test:integration","test:all:coverage":"npm run test:coverage && npm run test:integration:coverage","lint":"eslint --max-warnings=0 --ext .ts src tests scripts","lint:shell":"shellcheck -x scripts/pretooluse-dollhouse.sh scripts/pretooluse-codex.sh scripts/pretooluse-cursor.sh scripts/pretooluse-gemini.sh scripts/pretooluse-vscode.sh scripts/pretooluse-windsurf.sh scripts/permission-port-discovery.sh scripts/permission-hook-config.sh","lint:fix":"eslint --ext .ts src tests scripts --fix","security:critical":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/tests --testNamePattern=\"(Command Injection|Path Traversal|YAML)\" --maxWorkers=4","security:rapid":"npm run security:critical -- --testTimeout=30000","security:all":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security --coverage","security:regression":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.config.cjs tests/security/regression --maxWorkers=4","security:report":"node scripts/security-test-runner.js all --report","security:generate":"node scripts/generate-security-tests.js","security:audit":"tsx scripts/run-security-audit.ts","security:audit:json":"tsx scripts/run-security-audit.ts --json","security:audit:verbose":"tsx scripts/run-security-audit.ts --verbose","typecheck:scripts":"tsc --noEmit --project tsconfig.scripts.json","pre-commit":"npm run security:rapid && npm run typecheck:scripts && npm audit --audit-level=high","test:playwright":"playwright test","test:playwright:headed":"playwright test --headed","test:playwright:ui":"playwright test --ui","test:e2e":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs","test:e2e:watch":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --watch","test:e2e:verbose":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest --config tests/jest.e2e.config.cjs --verbose","test:roundtrip":"npm run test:e2e","test:roundtrip:manual":"./scripts/test-roundtrip-workflow.sh","test:roundtrip:cleanup":"./scripts/test-roundtrip-workflow.sh cleanup","test:totp:manual":"tsx scripts/totp-manual-test.ts","qa:direct":"node scripts/qa-direct-test.js","test:e2e:real":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/real-github-integration.test.ts --verbose","test:e2e:real:mcp":"cross-env \"NODE_OPTIONS=--experimental-vm-modules --no-warnings\" jest test/e2e/mcp-tool-flow.test.ts --verbose","test:e2e:real:all":"npm run test:e2e:real && npm run test:e2e:real:mcp","test:e2e:cleanup":"tsx test/e2e/cleanup-test-data.ts","qa:inspector":"node scripts/qa-inspector-cli-test.js","qa:all":"npm run qa:direct && npm run qa:inspector","qa:simple":"node scripts/qa-simple-test.js","update:version":"node scripts/update-version.mjs","version:bump":"node scripts/update-version.mjs","version:check":"node scripts/update-version.mjs --dry-run","verify:package-assets":"node scripts/verify-npm-package-assets.mjs","tools:count":"node scripts/count-tools.js","tools:list":"node scripts/count-tools.js --json","memory:cleanup:duplicates":"tsx src/utils/cleanup-duplicate-memories.ts","calibration:local":"tsx tests/calibration/run-local.ts","calibration:docker":"./scripts/run-calibration.sh docker","calibration:compare":"tsx tests/calibration/compare-results.ts","calibration:build":"./scripts/run-calibration.sh build","calibration:clean":"./scripts/run-calibration.sh clean"},"keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"author":{"name":"Mick Darling","email":"mick@dollhousemcp.com","url":"https://github.com/mickdarling"},"contributors":[{"name":"Todd Dibble","url":"https://github.com/insomnolence"},{"name":"Jeet Singh","url":"https://github.com/jeetsingh008"}],"license":"AGPL-3.0-or-later","licenseNotice":"SUBJECT TO ADDITIONAL TERMS - See LICENSE file for complete terms including dual licensing, platform stability commitments, and creator protections. All terms are binding under AGPL Section 7.","repository":{"type":"git","url":"git+https://github.com/DollhouseMCP/mcp-server.git"},"bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"homepage":"https://dollhousemcp.com","mcpName":"io.github.DollhouseMCP/mcp-server","publishConfig":{"access":"public","registry":"https://registry.npmjs.org/","provenance":true},"funding":{"type":"github","url":"https://github.com/sponsors/mickdarling"},"dependencies":{"@dollhousemcp/safety":"^1.0.2","@modelcontextprotocol/sdk":"^1.25.1","chalk":"^5.6.2","dompurify":"^3.4.11","dotenv":"^17.2.3","express":"^5.2.1","extract-zip":"^2.0.1","graphql":"^16.12.0","graphql-tag":"^2.12.6","gray-matter":"^4.0.3","install-mcp":"^1.10.2","js-yaml":"^4.1.1","jsdom":"^24.1.3","node-fetch":"^3.3.2","otpauth":"^9.5.0","posthog-node":"^5.24.17","qrcode":"^1.5.4","smol-toml":"^1.6.1","uuid":"^11.1.1","zod":"^4.3.6"},"devDependencies":{"@eslint/js":"^9.38.0","@jest/globals":"^30.3.0","@modelcontextprotocol/inspector":"^0.21.1","@playwright/test":"^1.59.1","@types/archiver":"^7.0.0","@types/dompurify":"^3.2.0","@types/express":"^5.0.6","@types/jest":"^30.0.0","@types/js-yaml":"^4.0.9","@types/jsdom":"^21.1.7","@types/node":"^24.10.0","@types/qrcode":"^1.5.6","@types/semver":"^7.7.1","@types/supertest":"^7.2.0","@types/uuid":"^10.0.0","@typescript-eslint/eslint-plugin":"^8.46.2","@typescript-eslint/parser":"^8.48.1","archiver":"^7.0.1","cross-env":"^10.1.0","eslint":"^9.38.0","globals":"^17.4.0","jest":"^30.2.0","supertest":"^7.2.2","ts-jest":"^29.4.9","ts-jest-resolver":"^2.0.1","tsx":"^4.21.0","typescript":"^5.9.3"},"workspaces":["packages/safety"],"engines":{"node":">=18.0.0","npm":">=10.0.0"},"overrides":{"gray-matter":{"js-yaml":"3.14.2"},"@istanbuljs/load-nyc-config":{"js-yaml":"3.14.2"},"hono":"4.12.27","@hono/node-server":"1.19.13","fast-uri":"3.1.2","ip-address":"10.1.1","lodash":"4.18.1","picomatch@<2.3.2":"2.3.2","picomatch@>=4.0.0 <4.0.4":"4.0.4","brace-expansion@<1.1.13":"1.1.13","brace-expansion@>=2.0.0 <2.0.3":"2.0.3","express":{"path-to-regexp":"8.4.2"},"giget":{"tar":"7.5.22"},"form-data":"4.0.6","qs":"6.15.2","ws":"8.21.0"},"gitHead":"f1c0c3860ee80b7d3f6669306589b38e89db7a3a","types":"./dist/index.d.ts","_id":"@dollhousemcp/mcp-server@2.0.42","_nodeVersion":"24.20.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-PKAhYBP9ZKQDaNVhHmi3rcMt65G1Xcqo1Aw+uF7ovYAu6DpX97MgMcuJk1Mp39EiYF4ua7YyVm5LOiOMwRG4Pg==","shasum":"d477f209c1e01cb5cd18def57f6c41cbafa554a6","tarball":"https://registry.npmjs.org/@dollhousemcp/mcp-server/-/mcp-server-2.0.42.tgz","fileCount":1299,"unpackedSize":19533742,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dollhousemcp%2fmcp-server@2.0.42","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGlmojx8EvV1REf2desRRB6hNSCmkthhjsJOLrN7+GPjAiAozOBGUh6x4QMe6zFucLnaOYrheIMjvw1a4KxLjentOg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:cd4bfd7a-9109-4f6e-b9cd-d0e77468a3cf"}},"directories":{},"maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/mcp-server_2.0.42_1788569218764_0.07985509661008439"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-29T20:59:50.082Z","modified":"2026-09-05T00:46:59.462Z","1.3.0":"2025-07-29T20:59:50.427Z","1.3.2":"2025-08-01T20:57:07.790Z","1.3.3":"2025-08-02T00:28:24.832Z","1.4.0":"2025-08-02T16:46:37.395Z","1.4.1":"2025-08-02T19:20:50.351Z","1.4.2":"2025-08-04T19:15:02.265Z","1.4.3":"2025-08-04T21:37:19.344Z","1.4.4":"2025-08-04T22:59:35.047Z","1.4.5":"2025-08-05T14:13:16.368Z","1.5.0":"2025-08-05T17:56:00.569Z","1.5.1":"2025-08-05T19:59:50.570Z","1.5.2":"2025-08-06T20:36:29.390Z","1.6.0":"2025-08-25T17:29:46.355Z","1.6.1":"2025-08-25T21:15:42.194Z","1.6.2":"2025-08-25T22:10:40.710Z","1.6.3":"2025-08-25T23:14:35.438Z","1.6.4":"2025-08-26T00:03:51.331Z","1.6.5":"2025-08-26T16:05:52.648Z","1.6.6":"2025-08-26T20:55:22.919Z","1.6.7":"2025-08-26T22:08:18.125Z","1.6.8":"2025-08-26T23:24:00.915Z","1.6.9":"2025-08-27T14:18:20.588Z","1.6.10":"2025-08-28T19:40:22.324Z","1.6.11":"2025-08-28T22:52:27.203Z","1.7.0":"2025-08-31T21:08:06.454Z","1.7.1":"2025-08-31T23:09:44.985Z","1.7.2":"2025-09-07T21:18:24.756Z","1.7.3":"2025-09-09T19:23:39.532Z","1.7.4":"2025-09-12T15:57:27.636Z","1.8.0":"2025-09-15T17:34:14.675Z","1.8.1":"2025-09-15T23:09:44.175Z","1.9.0":"2025-09-19T14:39:59.281Z","1.9.1":"2025-09-19T19:06:42.274Z","1.9.2":"2025-09-19T19:49:27.059Z","1.9.3":"2025-09-19T22:23:22.437Z","1.9.4":"2025-09-19T23:32:13.713Z","1.9.5":"2025-09-20T00:22:24.472Z","1.9.6":"2025-09-20T16:07:46.536Z","1.9.7":"2025-09-20T17:09:54.803Z","1.9.8":"2025-09-20T19:56:01.059Z","1.9.10":"2025-09-27T19:52:28.819Z","1.9.11":"2025-09-28T15:53:43.968Z","1.9.12":"2025-09-29T17:59:44.250Z","1.9.13":"2025-09-29T23:29:37.309Z","1.9.14":"2025-09-30T19:36:17.065Z","1.9.15":"2025-10-01T22:14:48.408Z","1.9.16":"2025-10-03T23:09:59.534Z","1.9.17":"2025-10-08T21:50:58.100Z","1.9.18":"2025-10-17T16:44:29.466Z","1.9.19":"2025-10-17T21:31:09.148Z","1.9.20":"2025-10-17T23:11:57.126Z","1.9.22":"2025-10-23T10:48:01.119Z","1.9.23":"2025-10-27T12:32:59.736Z","1.9.24":"2025-10-27T16:10:48.480Z","1.9.25":"2025-10-30T23:01:47.928Z","1.9.26":"2025-11-07T22:02:38.357Z","1.9.27":"2025-12-05T22:15:47.894Z","2.0.0-rc.1":"2026-03-20T13:42:53.468Z","2.0.0-rc.2":"2026-03-22T05:00:23.242Z","2.0.0-rc.3":"2026-03-22T20:21:46.349Z","2.0.0-rc.4":"2026-03-23T21:31:33.197Z","2.0.0-rc.5":"2026-03-23T23:22:48.709Z","2.0.0-rc.6":"2026-03-26T20:44:34.070Z","2.0.0":"2026-04-01T23:25:09.284Z","2.0.1":"2026-04-02T00:01:01.898Z","2.0.2":"2026-04-02T04:05:34.649Z","2.0.3":"2026-04-02T18:11:18.291Z","2.0.4":"2026-04-02T18:34:01.429Z","2.0.5":"2026-04-02T18:59:30.857Z","2.0.6":"2026-04-02T20:49:26.955Z","2.0.7":"2026-04-02T21:45:50.128Z","2.0.8":"2026-04-02T23:02:49.683Z","2.0.9":"2026-04-03T16:02:17.355Z","2.0.10":"2026-04-03T20:46:23.419Z","2.0.11-rc.1":"2026-04-08T06:18:50.792Z","2.0.11":"2026-04-08T17:34:17.948Z","2.0.12-rc.1":"2026-04-08T17:57:18.366Z","2.0.12-rc.2":"2026-04-08T21:04:19.600Z","2.0.12-rc.3":"2026-04-09T02:37:20.630Z","2.0.12-rc.4":"2026-04-09T03:15:51.083Z","2.0.12-rc.5":"2026-04-09T03:23:56.479Z","2.0.12-rc.6":"2026-04-09T04:00:53.372Z","2.0.12-rc.7":"2026-04-09T04:44:51.931Z","2.0.12-rc.8":"2026-04-09T04:50:22.828Z","2.0.12-rc.9":"2026-04-09T04:57:55.914Z","2.0.12-rc.11":"2026-04-09T05:30:52.999Z","2.0.12-rc.12":"2026-04-09T13:32:17.059Z","2.0.12-rc.13":"2026-04-09T16:10:49.346Z","2.0.12-rc.14":"2026-04-09T20:43:34.546Z","2.0.12-rc.15":"2026-04-09T23:21:53.507Z","2.0.12-rc.16":"2026-04-12T16:41:23.711Z","2.0.12":"2026-04-12T18:19:17.811Z","2.0.13":"2026-04-13T16:33:18.278Z","2.0.14":"2026-04-14T03:18:47.041Z","2.0.15":"2026-04-14T04:20:03.661Z","2.0.16":"2026-04-14T18:29:27.865Z","2.0.17":"2026-04-15T14:39:40.540Z","2.0.18":"2026-04-16T00:11:22.498Z","2.0.19":"2026-04-16T13:32:43.728Z","2.0.20":"2026-04-16T14:53:54.494Z","2.0.21":"2026-04-16T15:35:31.205Z","2.0.22":"2026-04-16T16:14:32.637Z","2.0.23":"2026-04-16T16:19:44.175Z","2.0.24":"2026-04-16T17:45:34.608Z","2.0.25":"2026-04-16T20:24:58.025Z","2.0.26":"2026-04-17T19:58:22.875Z","2.0.27-rc.1":"2026-04-19T16:06:03.931Z","2.0.27-rc.2":"2026-04-19T16:21:10.760Z","2.0.27-rc.3":"2026-04-19T16:40:02.494Z","2.0.27-rc.4":"2026-04-19T17:27:34.356Z","2.0.27-rc.5":"2026-04-19T18:04:21.847Z","2.0.27-rc.6":"2026-04-19T19:48:02.366Z","2.0.27-rc.7":"2026-04-19T22:31:09.978Z","2.0.27-rc.8":"2026-04-20T02:27:48.009Z","2.0.27-rc.9":"2026-04-20T04:44:07.083Z","2.0.27-rc.10":"2026-04-20T05:24:42.936Z","2.0.27-rc.11":"2026-04-20T14:39:32.719Z","2.0.27-rc.12":"2026-04-20T15:17:46.844Z","2.0.27-rc.13":"2026-04-20T15:58:40.478Z","2.0.27-rc.14":"2026-04-20T17:28:14.301Z","2.0.27-rc.15":"2026-04-20T18:27:55.077Z","2.0.27-rc.16":"2026-04-20T18:42:00.345Z","2.0.27-rc.17":"2026-04-20T19:35:35.844Z","2.0.27":"2026-04-20T22:00:04.447Z","2.0.28":"2026-04-21T16:18:02.701Z","2.0.29":"2026-04-21T19:30:09.458Z","2.0.30":"2026-04-21T21:44:50.631Z","2.0.31":"2026-04-22T12:11:58.111Z","2.0.32":"2026-04-23T05:37:42.376Z","2.0.34":"2026-06-23T20:18:47.796Z","2.0.35":"2026-06-23T22:45:33.922Z","2.0.36":"2026-07-03T22:47:04.118Z","2.0.37":"2026-07-04T17:06:48.158Z","2.0.38":"2026-07-04T18:50:44.269Z","2.0.39":"2026-07-31T16:08:15.625Z","2.0.40":"2026-08-05T19:20:43.487Z","2.0.41":"2026-08-26T19:22:59.602Z","2.0.42":"2026-09-05T00:46:59.012Z"},"bugs":{"url":"https://github.com/DollhouseMCP/mcp-server/issues"},"author":{"name":"Mick Darling","email":"mick@dollhousemcp.com","url":"https://github.com/mickdarling"},"license":"AGPL-3.0-or-later","homepage":"https://dollhousemcp.com","keywords":["mcp","mcp-server","model-context-protocol","personas","skills","agents","memory","templates","ensembles","prompt","claude","cursor","vscode","codex","windsurf","ai","ai-assistant","llm","ai-tools","typescript","dollhousemcp"],"repository":{"type":"git","url":"git+https://github.com/DollhouseMCP/mcp-server.git"},"description":"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.","contributors":[{"name":"Todd Dibble","url":"https://github.com/insomnolence"},{"name":"Jeet Singh","url":"https://github.com/jeetsingh008"}],"maintainers":[{"name":"mickdarling","email":"mick@mickdarling.com"}],"readme":"# DollhouseMCP\n\n[![npm version](https://img.shields.io/npm/v/@dollhousemcp/mcp-server.svg)](https://www.npmjs.com/package/@dollhousemcp/mcp-server)\n[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)\n[![MCP Compatible](https://img.shields.io/badge/MCP-Compatible-green)](https://modelcontextprotocol.io)\n[![Core Build & Test](https://github.com/DollhouseMCP/mcp-server/actions/workflows/core-build-test.yml/badge.svg)](https://github.com/DollhouseMCP/mcp-server/actions/workflows/core-build-test.yml)\n[![9600+ Tests](https://img.shields.io/badge/Tests-9600%2B-brightgreen)](https://github.com/DollhouseMCP/mcp-server)\n[![GitHub Views](https://komarev.com/ghpvc/?username=DollhouseMCP&repo=mcp-server&label=Views&style=flat)](https://github.com/DollhouseMCP/mcp-server)\n\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=DollhouseMCP_mcp-server&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=DollhouseMCP_mcp-server)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=DollhouseMCP_mcp-server&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=DollhouseMCP_mcp-server)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=DollhouseMCP_mcp-server&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=DollhouseMCP_mcp-server)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=DollhouseMCP_mcp-server&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=DollhouseMCP_mcp-server)\n[![Windows](https://img.shields.io/badge/Windows-✓-0078D4?logo=windows&logoColor=white)](https://github.com/DollhouseMCP/mcp-server/actions/workflows/core-build-test.yml)\n[![macOS](https://img.shields.io/badge/macOS-✓-000000?logo=apple&logoColor=white)](https://github.com/DollhouseMCP/mcp-server/actions/workflows/core-build-test.yml)\n[![Linux](https://img.shields.io/badge/Linux-✓-FCC624?logo=linux&logoColor=black)](https://github.com/DollhouseMCP/mcp-server/actions/workflows/core-build-test.yml)\n\n<div align=\"center\">\n  <img src=\"docs/assets/dollhouse-logo.png\" alt=\"DollhouseMCP\" width=\"200\" />\n\n  **Open-source AI customization through modular elements.**\n\n  [Website](https://dollhousemcp.com) · [Browse the Collection](https://dollhousemcp.github.io/collection/) · [NPM Package](https://www.npmjs.com/package/@dollhousemcp/mcp-server) · [Discord](https://discord.gg/bzY2tkT6rQ)\n</div>\n\n---\n\n## How It Works\n\n```\n CREATE or EDIT                    PORTFOLIO                   ACTIVATE → USE\n ─────────────────────────────────────────────────────────────────────────────\n\n \"Create a skill for            📁 ~/.dollhouse/portfolio/    \"Activate the Dollhouse\n  writing blog posts\"                                              Expert ensemble\"\n                                 37 starter elements:\n \"Edit the code review      ──▶  personas · skills ·       ──▶  Your AI now has\n  persona to add security\"       templates · agents ·           new behavior,\n                                 memories · ensembles           capabilities, and\n  persona · skill · template                                    permission policies\n  agent · memory · ensemble      + everything you create\n                                 + community installs\n```\n\n**Pick any path to start:**\n- **Activate** a starter element from your portfolio — your AI immediately changes\n- **Create** any element type (persona, skill, template, agent, memory, ensemble) by describing what you want in plain English\n- **Edit** any existing element to refine it\n- **Browse** the [community collection](https://dollhousemcp.github.io/collection/) and install elements made by other users\n\nYour **portfolio** (`~/.dollhouse/portfolio/`) is a local folder that holds all your Dollhouse elements. It ships with 37 starters — including the **dollhouse-expert-suite** ensemble (persona + knowledge base) you can activate for guided help. Everything you create or install lands here. Share back to the community or sync to GitHub whenever you're ready.\n\n---\n\n## Quick Start\n\n> **v2.0.0 is now available.** DollhouseMCP v2 is the default release. [Release notes](https://github.com/DollhouseMCP/mcp-server/releases/tag/v2.0.0) | [Migration guide](docs/guides/v2-migration-guide.md) | [Report issues](https://github.com/DollhouseMCP/mcp-server/issues)\n\nDollhouseMCP installs on any MCP-compatible AI client — Claude Code, Claude Desktop, Cursor, Gemini, Codex, and local LLMs. Core element management (create, activate, search, browse) works across all platforms. Advanced features (Gatekeeper confirmation flows, agentic loop execution) have been tested extensively on Claude Code and should work on any client that supports standard MCP tool call/response patterns.\n\n**Interactive Setup** (any platform):\n\n```bash\nnpx @dollhousemcp/mcp-server@latest --web\n```\n\nOpens a browser-based setup wizard with one-click install for Claude Desktop, Claude Code, Cursor, VS Code, Codex, Gemini CLI, Windsurf, Cline, and LM Studio. Detects existing installations, supports auto-updating and pinned versions.\n\n**Claude Code** (one command):\n\n```bash\nclaude mcp add -s user dollhousemcp -- npx -y @dollhousemcp/mcp-server\n```\n\n**Claude Desktop** (one-click install):\n\nDownload the [DollhouseMCP Desktop Extension](https://github.com/DollhouseMCP/mcp-server/releases/latest) (`.mcpb` file) and double-click it. Claude Desktop handles the rest — no terminal required.\n\n**Other platforms** — see the [Quick Start Guide](docs/guides/quick-start.md) or run the interactive setup above.\n\nThen start a conversation:\n\n```\n\"What DollhouseMCP tools do you have available?\"\n\"List all available Dollhouse personas\"\n\"Activate the Dollhouse debug detective persona\"\n```\n\nDollhouseMCP ships with 38 Dollhouse elements across all 6 types. Just describe what you want in natural language.\n\n> **First time?** The [Public Beta Onboarding Guide](docs/guides/public-beta-onboarding.md) walks you from install to your first activated Dollhouse persona in under 10 minutes.\n\n---\n\n## Dollhouse Elements: Behavior, Capabilities, and Permissions\n\nDollhouse elements are modular building blocks that customize your AI. When you activate a Dollhouse element, you're not just changing a prompt — you're changing what tools the AI can access, what commands it can run, and what operations require your approval.\n\n| Dollhouse Element | What It Does |\n|---|---|\n| **Dollhouse Personas** | Shape behavior, tone, expertise, and priorities. <br> Act as security principals with permission policies that control what the AI can do. |\n| **Dollhouse Skills*** | Add discrete capabilities the AI can activate on demand. <br> Code review, data analysis, penetration testing, translation, and more. |\n| **Dollhouse Templates** | Standardize outputs with variable substitution. <br> Reports, emails, briefs, documentation — consistent structure every time. Variables are auto-derived from `{{placeholder}}` tokens in content — no manual schema needed. |\n| **Dollhouse Agents** | Execute multi-step goals autonomously. <br> State tracking, resilience policies, autonomy evaluation, and an execution lifecycle. |\n| **Dollhouse Memories** | Persist structured context across sessions. <br> Facts, preferences, project state. Can auto-load on startup. |\n| **Dollhouse Ensembles** | Bundle multiple elements into one activatable unit. <br> Activation strategies, conflict resolution, and coordinated permission policies. |\n\n> **\\*Skills Compatibility**\n>\n> Dollhouse Skills (introduced July 2025) predate the agent skills format later adopted by Claude/Anthropic. DollhouseMCP includes a built-in lossless bidirectional converter between the two formats.\n>\n> - **Import**: Convert agent skills → Dollhouse Skills via `convert_skill_format`. Once converted, they're first-class Dollhouse elements — combinable with Personas, Templates, and other Skills inside Ensembles, managed by Dollhouse Agents, and protected by Gatekeeper policies.\n> - **Export**: Convert Dollhouse Skills → agent skills for platforms that don't have DollhouseMCP installed.\n> - **Roundtrip**: The converter supports a lossless mode that preserves everything in both directions. A safe mode is also available that sanitizes potentially risky patterns during conversion.\n>\n> [Full Skills Converter documentation](docs/guides/skills-converter.md)\n\nAll Dollhouse elements are readable markdown or YAML files stored in your local portfolio. You own them, you control them. When interacting with your AI, use \"Dollhouse\" to disambiguate — say \"activate the Dollhouse code review persona\" or \"run the Dollhouse research agent\" to ensure the AI uses DollhouseMCP elements rather than native platform features.\n\n---\n\n## MCP-AQL: How Your AI Talks to DollhouseMCP\n\nMost MCP servers expose dozens of individual tools, each consuming context tokens and forcing the LLM to pick the right one from a flat list. DollhouseMCP takes a different approach.\n\n**MCP-AQL** (Model Context Protocol – **A**dvanced **A**gent **A**PI **A**dapter **Q**uery **L**anguage) organizes all operations into 5 semantic endpoints — **CRUDE**: Create, Read, Update, Delete, Execute. The A pulls quadruple duty: **A**dvanced query capabilities, **A**gent-first design, **A**PI consolidation, and **A**dapter layer to bridge other MCP servers and APIs to work directly with LLMs. Each endpoint groups operations by what they do to state, giving the LLM clear semantic signals about the consequences of each action:\n\n| Endpoint | Purpose | Permission Level |\n|----------|---------|-----------------|\n| **Create** | Add new elements, install from collection, add memory entries | Confirm once per session |\n| **Read** | List, search, get details, activate, introspect | Auto-approved (safe, no side effects) |\n| **Update** | Edit existing elements | Confirm each time |\n| **Delete** | Remove elements, clear entries | Confirm each time |\n| **Execute** | Run agents, manage execution lifecycle, confirm operations | Confirm each time |\n\n### Why This Matters\n\n- **Semantic clarity** — The LLM knows that calling `mcp_aql_read` is always safe. Calling `mcp_aql_delete` is always destructive. No guessing.\n- **Host-level permission control** — MCP clients like Claude Code can set different approval policies per endpoint (auto-approve reads, require confirmation for deletes).\n- **Progressive disclosure through introspection** — The LLM starts with just 5 tool endpoints. It discovers operations, parameters, element formats, and usage examples at runtime by asking the server:\n\n  ```json\n  { \"operation\": \"introspect\", \"params\": { \"query\": \"operations\" } }\n  { \"operation\": \"introspect\", \"params\": { \"query\": \"format\", \"name\": \"persona\" } }\n  ```\n\n  This is progressive disclosure built into the protocol — the LLM only loads what it needs, when it needs it. Unlike client-side solutions that require special harness support (like Claude Code's deferred tool loading), MCP-AQL's introspection works on any MCP client because it's just a standard tool call that returns structured data. No fancy client features required. The server describes itself.\n\n  Elements use the same principle: YAML frontmatter provides metadata for quick scanning, full markdown content loads only when activated. The LLM can list 200 elements at a glance and deep-dive into the ones it needs.\n\n- **Token efficiency** — 5 endpoints at ~4,300 tokens vs ~29,600 for ~40 discrete tools (85% reduction). Single mode reduces further to ~350 tokens.\n\n> [Full MCP-AQL documentation](docs/architecture/mcp-aql/README.md) — protocol design, CRUDE pattern rationale, introspection system, endpoint modes, and debugging.\n\n---\n\n## The Gatekeeper: Elements Control Permissions\n\nEvery MCP-AQL operation passes through the Gatekeeper — a server-side permission system that Dollhouse elements directly control. When you activate a Dollhouse Persona, Skill, or Ensemble, its permission policies take effect immediately.\n\n```\n Example: Activate a \"read-only analyst\" persona\n\n ┌─────────────────────────────────────────────────────────────────┐\n │  Persona: read-only-analyst                                     │\n │                                                                 │\n │  gatekeeper:                                                    │\n │    allow:  [list_elements, search, get_element, introspect]     │\n │    deny:   [create_element, edit_element, delete_element,       │\n │             execute_agent, confirm_operation]                    │\n └─────────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n ┌─────────────────────────────────────────────────────────────────┐\n │  What the LLM CAN do:           What the LLM CANNOT do:        │\n │                                                                 │\n │  ✓ List and search elements     ✗ Create new elements           │\n │  ✓ Read element details         ✗ Edit existing elements        │\n │  ✓ Introspect operations        ✗ Delete anything               │\n │  ✓ Activate/deactivate          ✗ Run agents                    │\n │                                 ✗ Confirm any gated operation   │\n └─────────────────────────────────────────────────────────────────┘\n```\n\n**This works even if the MCP client has \"Always Allow\" enabled.** The Gatekeeper runs server-side — after the client approves the tool call, the Gatekeeper still enforces the active element's policies. A deny from any active element cannot be overridden by the LLM or the client.\n\n### How Policy Resolution Works\n\n```\n deny  >  confirm  >  allow  >  route default\n (highest priority)              (lowest priority)\n```\n\n1. **Element deny** — hard-blocked, cannot be confirmed or bypassed\n2. **Element confirm** — requires user confirmation even if the route default is auto-approve\n3. **Element allow** — auto-approves operations that would normally require confirmation\n4. **Route default** — the endpoint's built-in permission level (reads auto-approve, deletes confirm)\n\nPolicies stack across all active elements. If one persona allows an operation but another denies it, deny wins. This lets you compose elements with confidence — a security-focused persona can lock down operations while a skill adds capabilities.\n\n### What This Means in Practice\n\n- **Activate a read-only persona** → the LLM can only browse and search, even if you've given the MCP client full access\n- **Activate a security analyst ensemble** → `delete_element` and `rm -rf *` are denied, but code review tools work normally\n- **Deactivate the restrictive element** → full access returns immediately\n- **Nuclear sandbox** → `deny: ['confirm_operation']` blocks ALL confirmations, making the session completely read-only until the element is deactivated\n\n> **Platform compatibility**: The Gatekeeper enforces policies server-side — deny and allow decisions work on any MCP client. The confirmation flow (where the LLM calls `confirm_operation` in response to a block) has been tested extensively on Claude Code and the DollhouseMCP Bridge. It should work on any MCP client where the LLM can interpret structured tool responses and make follow-up tool calls, but has not been rigorously verified on all platforms.\n\n> [Gatekeeper documentation](docs/security/gatekeeper-confirmation-model.md) — confirmation flows, element policy syntax, sandbox model, external tool restrictions, and the session-allow problem.\n\n---\n\n## Portfolio\n\nYour Dollhouse elements live in a local portfolio at `~/.dollhouse/portfolio/`. Ask your AI to \"open the portfolio browser\" (or call `open_portfolio_browser` via MCP-AQL) to browse them visually. Activation is done through the LLM — ask it to \"activate the Dollhouse code review persona\" and it handles the rest.\n\n<div align=\"center\">\n  <img src=\"docs/assets/portfolio-browser.png\" alt=\"DollhouseMCP Portfolio Browser\" width=\"700\" />\n</div>\n\n- **Local-first** — Everything works offline. No account required.\n- **37 bundled elements** — 7 personas, 7 skills, 8 templates, 7 agents, 3 memories, 5 ensembles ship with the server as starter content. Includes the **dollhouse-expert-suite** ensemble (persona + knowledge base memory) for guided help, and a **Session Monitor** agent that keeps your LLM synchronized with server state changes.\n- **GitHub sync** — Optionally back up your portfolio to a GitHub repository and share elements with others.\n- **Community Collection** — [Browse the collection](https://dollhousemcp.github.io/collection/) to see what's available, then install elements directly from your AI. Or [submit your own](https://github.com/DollhouseMCP/collection).\n\n> [GitHub Portfolio Sync Guide](docs/guides/portfolio-setup-guide.md) — back up to GitHub, sync between machines, submit to the community.\n\n---\n\n## Dollhouse Agent Execution\n\nDollhouse Agents don't just run — every step passes through the MCP server, back to the LLM, and through the Gatekeeper. The LLM makes semantic decisions; the server handles programmatic enforcement. Neither side operates alone.\n\n```\n ┌───────────────┐\n │   HUMAN       │\n │  (optional)   │◄──── LLM asks for guidance\n │               │      when autonomy evaluator\n │ Approve, deny,│      says \"pause\"\n │ or guide      │\n └───────┬───────┘\n         │ responds to LLM\n         ▼\n ┌─────────────┐     ┌─────────────────────────────┐     ┌─────────────┐\n │             │     │  DollhouseMCP MCP Server     │     │             │\n │    LLM      │────▶│                              │────▶│    LLM      │\n │             │     │  1. Gatekeeper checks policy  │     │             │\n │  Decides    │     │  2. Autonomy Evaluator scores │     │  Records    │\n │  next       │     │  3. Danger Zone enforcement   │     │  step and   │\n │  action     │     │  4. Execute or block          │     │  continues  │\n │             │     │  5. Return result + autonomy  │     │  or pauses  │\n │             │◀────│     guidance to LLM           │◀────│             │\n └─────────────┘     └─────────────────────────────┘     └─────────────┘\n        │                                                       │\n        └──────────────── repeats every step ───────────────────┘\n```\n\nEach step in the loop:\n- **Gatekeeper** checks every operation against active element policies — deny, confirm, or allow\n- **Autonomy Evaluator** scores whether the agent should continue autonomously or pause for human input\n- **Danger Zone** enforces hard blocks on high-risk operations (file deletion, external API calls, system commands)\n- **Step recording** creates an audit trail of every decision and outcome\n- **The LLM receives autonomy guidance** with each response — continue, pause, or escalate — so it never operates unmonitored\n\nThis means a Dollhouse Agent can't silently escalate. Every action is visible, every step is evaluated, and active element policies are enforced throughout the entire execution.\n\n> **Platform note**: The agentic loop relies on the LLM making sequential MCP tool calls and interpreting structured responses — standard MCP behavior. It has been tested extensively on Claude Code and the DollhouseMCP Bridge. The server-side enforcement (Gatekeeper, Danger Zone, step recording) is platform-independent. The LLM's ability to follow autonomy guidance (continue/pause/escalate) depends on the LLM's capability to interpret structured tool responses, which may vary across platforms.\n\n> [Full Agent Execution documentation](docs/guides/agent-execution.md) — the agentic loop, security enforcement, human-in-the-loop control, agent composition, resilience policies, and execution lifecycle operations.\n\n---\n\n## More Features\n\n- **Web Portfolio Browser** — Built-in web console for browsing and managing your portfolio visually. Ask your AI to \"open the portfolio browser\" or run `npm run web` standalone.\n- **Batch Operations** — Execute multiple operations in a single MCP-AQL request for efficient workflows\n- **Activation Persistence** — Elements activated in a session are restored on server restart. No re-activation needed.\n- **Universal Backup** — Built-in backup service for portfolio elements with restore capability\n- **Cache Memory Budget** — Configurable memory budget for collection and index caches to control resource usage\n- **NLP Discovery** — Jaccard similarity and Shannon entropy scoring for intelligent element search and discovery\n- **Cross-Element Relationships** — GraphRAG-style mapping between elements for finding related content\n- **Security Hardened** — Input sanitization, path traversal prevention, YAML injection protection, file locking, DOMPurify sanitization, content validation against hundreds of attack vectors. [Security docs](docs/security/README.md)\n- **Cross-Platform** — Tested on Windows, macOS, and Linux across Node.js 20+\n\n---\n\n## Installation Options\n\nThe [Quick Start](#quick-start) above covers the fastest path. For more control:\n\n### Local Install (Recommended for Multiple Configs)\n\n```bash\nmkdir -p ~/mcp-servers && cd ~/mcp-servers\nnpm install @dollhousemcp/mcp-server\n```\n\nThen point your MCP client at `node <path>/node_modules/@dollhousemcp/mcp-server/dist/index.js`.\n\n### MCP-AQL Endpoint Modes\n\n| Mode | Endpoints | Tokens | Env Variable | Best For |\n|------|-----------|--------|-------------|----------|\n| **CRUDE** (default) | 5 | ~4,300 | `MCP_AQL_ENDPOINT_MODE=crude` | Most users. Semantic grouping with host-level permission control |\n| **Single** | 1 | ~350 | `MCP_AQL_ENDPOINT_MODE=single` | Multi-server setups with constrained context windows |\n| **Discrete** | ~40 | ~29,600 | `MCP_INTERFACE_MODE=discrete` | Backward compatibility with v1 tool names |\n\n> **Note**: CRUDE and Single are controlled by `MCP_AQL_ENDPOINT_MODE`. Discrete mode uses a different variable: `MCP_INTERFACE_MODE=discrete`.\n\n### Common Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `MCP_AQL_ENDPOINT_MODE` | `crude` | Endpoint mode: `crude`, `single` |\n| `MCP_INTERFACE_MODE` | `mcpaql` | Interface style: `mcpaql`, `discrete` |\n| `DOLLHOUSE_PORTFOLIO_DIR` | `~/.dollhouse/portfolio/` | Custom portfolio location |\n| `GITHUB_TOKEN` | — | Personal access token for GitHub operations |\n\n> [Full environment variable reference](docs/guides/environment-variables.md) · [MCP client setup for other platforms](docs/guides/mcp-client-setup.md)\n\n---\n\n## Documentation\n\n| Guide | Description |\n|-------|-------------|\n| [Quick Start Guide](docs/guides/quick-start.md) | Platform-specific install for Claude Code, Desktop, Cursor, Gemini, Codex, local LLMs |\n| [Public Beta Onboarding](docs/guides/public-beta-onboarding.md) | Install to first persona in 10 minutes |\n| [LLM Quick Reference](docs/guides/llm-quick-reference.md) | Operation cheat sheet written for AI assistants |\n| [MCP-AQL Architecture](docs/architecture/mcp-aql/README.md) | CRUDE protocol, introspection, endpoint modes |\n| [Gatekeeper Security Model](docs/security/gatekeeper-confirmation-model.md) | Permission layers, element policies, sandbox model |\n| [GitHub Portfolio Sync](docs/guides/portfolio-setup-guide.md) | Back up to GitHub, sync between machines, community submission |\n| [Memory System](docs/guides/memory-system.md) | Persistent context storage and retrieval |\n| [Skills Converter](docs/guides/skills-converter.md) | Bidirectional agent skills conversion |\n| [Agent Execution](docs/guides/agent-execution.md) | Agentic loop, security enforcement, human-in-the-loop, composition |\n| [Architecture Overview](docs/architecture/overview.md) | System design, DI container, data flow |\n| [Security](docs/security/README.md) | Threat model, testing, and vulnerability reporting |\n| [API Reference](docs/reference/api-reference.md) | Complete MCP tool catalog and payload schemas |\n| [V2 Migration Guide](docs/guides/v2-migration-guide.md) | Upgrading from v1.x |\n| [Troubleshooting](docs/guides/troubleshooting.md) | Common issues and solutions |\n\n---\n\n## Contributing\n\nWe welcome contributions — bug reports, feature requests, documentation, code, and community elements.\n\n```bash\ngit clone https://github.com/DollhouseMCP/mcp-server.git\ncd mcp-server\nnpm install && npm run build && npm test\n```\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for the full development workflow, branch strategy, and code style guide.\n\n---\n\n## Community\n\n- [GitHub Discussions](https://github.com/DollhouseMCP/mcp-server/discussions) — Questions, ideas, and showcase\n- [GitHub Issues](https://github.com/DollhouseMCP/mcp-server/issues) — Bug reports and feature requests\n- [Discord](https://discord.gg/bzY2tkT6rQ) — Real-time chat\n- [Browse the Collection](https://dollhousemcp.github.io/collection/) — Community-contributed Dollhouse elements you can install\n- [Collection Repository](https://github.com/DollhouseMCP/collection) — Source repo for submissions and contributions\n\n---\n\n## License\n\n[AGPL-3.0-or-later](LICENSE) — free to use, modify, and distribute. Network use requires source disclosure. See [LICENSE](LICENSE) for full terms.\n\n---\n\n*Copyright 2024-2026 Mick Darling / DollhouseMCP*\n","readmeFilename":"README.npm.md"}