{
  "name": "@dollhousemcp/mcp-server",
  "version": "2.0.35",
  "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 install && 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": "npx @modelcontextprotocol/inspector node dist/index.js",
    "inspector:dev": "npx @modelcontextprotocol/inspector tsx src/index.ts",
    "clean": "rm -rf dist",
    "rebuild": "npm run clean && npm run build",
    "setup": "npm install && 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": "npx playwright test",
    "test:playwright:headed": "npx playwright test --headed",
    "test:playwright:ui": "npx 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.0",
    "@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.16"
    },
    "form-data": "4.0.6",
    "qs": "6.15.2",
    "ws": "8.21.0"
  }
}
