{ "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", "files": [ "dist/**/*.js", "dist/**/*.d.ts", "dist/**/*.d.ts.map", "dist/web/public/**", "dist/seed-elements/**", "scripts/pretooluse-dollhouse.sh", "scripts/permission-port-discovery.sh", "scripts/permission-hook-config.sh", "scripts/pretooluse-vscode.sh", "scripts/pretooluse-cursor.sh", "scripts/pretooluse-windsurf.sh", "scripts/pretooluse-gemini.sh", "scripts/pretooluse-codex.sh", "data/personas/**/*.md", "data/skills/**/*.md", "data/templates/**/*.md", "data/agents/**/*.md", "data/memories/**/*.md", "data/ensembles/**/*.md", "!dist/__tests__/**", "!dist/**/*.test.*", "server.json", "oauth-helper.mjs", "README.md", "LICENSE", "CHANGELOG.md" ], "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" } }