{"_id":"@eden_qu/ut-automation-mcp","_rev":"7-5bf4fac0a3923bee5f4a3f1f49731303","name":"@eden_qu/ut-automation-mcp","dist-tags":{"latest":"1.4.1"},"versions":{"1.0.0":{"name":"@eden_qu/ut-automation-mcp","version":"1.0.0","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.0.0","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"872a68328961789e1c8e28c8bd28eee69dcfa8be","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.0.0.tgz","fileCount":55,"integrity":"sha512-DAmRzB8MtHgnNUdApZuZjzrDJ6jLZktcfSAcX//Xd0e8F2eLAhazk1tMvve2MYzz7M9UsG/qAV62jqPgmuCD9Q==","signatures":[{"sig":"MEYCIQCGxcZ6oXM4mrp54SKTy56n1OPo92Mn03uglHsmTy3xwwIhAKM6hmVyrqWnt9KxGYPTisPKLauFeUkkhrbb8QJgU913","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230955},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"gitHead":"8562fa88be63ae79632bc5bf5a01656caabceb4e","scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.0.0_1767841842273_0.6273413439864215","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@eden_qu/ut-automation-mcp","version":"1.1.0","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.1.0","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"27487cd18627760c194f9330f9fbe5cc1c99ca9e","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.1.0.tgz","fileCount":55,"integrity":"sha512-eFx96ATH3z+SkzkK7BxWF9LuQUSN59nWzuzB6M2SSlH6+OdErT7IugrU93yXWVNXDVx6i98uyKQxMLs33+ZZgA==","signatures":[{"sig":"MEYCIQDF8LZzkJsFbdhIeDrHvTecJHtAK6VO073sUokPR/P3xgIhANR8nTGIxa8jqMjVD0JTLeSDvNV4/2Ld2WvQhaGVa2W+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235903},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.1.0_1768463095043_0.2162674238708857","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@eden_qu/ut-automation-mcp","version":"1.1.1","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.1.1","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"547077b482a56e6e9d33bb031d2978dacce01c41","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.1.1.tgz","fileCount":55,"integrity":"sha512-IxkkPiljueKUl7CsEoNqy7Gu6eU5KIPyw8lAvcdSgxvhAeIkrkTybZ9v0EowXAAZai3R3uVI1zM8i3g97NFJIA==","signatures":[{"sig":"MEUCICL/mqtilKlntzQjgJuJl1J9/esj8xgrRHT4k828j8giAiEAv02/x/zhK+Q+VgnvQYhRMWyoJBUZKueQ9zvRiexX7ns=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236296},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.1.1_1768463969269_0.7146031218538171","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@eden_qu/ut-automation-mcp","version":"1.1.2","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.1.2","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"c9a49dc45344a6aebe68fc27da1b16fccc2f94f7","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.1.2.tgz","fileCount":55,"integrity":"sha512-hzkztCUJmPMjBTM7MPLpKCm3by4JxPPAoXuQLx1TQyNueF4gOCTzVTf/XSUZt4KrG7hw9ieUKwWD0m6we6E+5A==","signatures":[{"sig":"MEYCIQCO6sYPoH2wkFI/O/EXimMC6I3tXcvHBLNFHsmQSabxOAIhAOX2lqZQiTPHI35OnG2+NtB3nk+/2rSD9N41ORH9u+a4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238216},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.1.2_1768465951666_0.42693996857271","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@eden_qu/ut-automation-mcp","version":"1.3.0","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.3.0","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"008de70d8a303524f03edf88ecd367bec03c580f","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.3.0.tgz","fileCount":55,"integrity":"sha512-ZyyRl0ESDAtYtvzmWMXcp/d83j33drWmI0CnZMmFs6JrD/qx5abmT8TUodni6lhOWGFQOX+1BCMKnbuKVrxIrg==","signatures":[{"sig":"MEQCIAe0ta03kPbFlO+2kibgIjJEJf/O8dpsSNFrPlCKM05uAiAFgB8VdFDwDL4WONnDPls96RYKSD19qjhfi2dC9zquXA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":260956},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.3.0_1768467507509_0.36863883137709696","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@eden_qu/ut-automation-mcp","version":"1.4.0","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","_id":"@eden_qu/ut-automation-mcp@1.4.0","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"bin":{"ut-automation-mcp":"dist/index.js"},"dist":{"shasum":"3862e104b47e033dbd5dcd55d1d9db44cf4df42d","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.4.0.tgz","fileCount":55,"integrity":"sha512-Uuf18DYgM7K+qU4W0+qqP39W8hXRY0BSSxI5XYyI5LHSlwQ7oZk7rYA0XMpVCTVDNqCdXvHCZbtzTkdhUy3pPQ==","signatures":[{"sig":"MEUCIAHEpmGiuM+4wCUnXrh2JOpaSnXIc7wVNvwmUa4vU/gIAiEAyI5f80CySrK0EbMRTsWr4Cp2mzRQ1MAra01PSOyrRwk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":272491},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=18.0.0"},"scripts":{"dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","build":"tsc","start":"node dist/index.js","watch":"tsc --watch","publish:npm":"npm publish --access public","prepublishOnly":"npm run build"},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"repository":{"url":"git+https://github.com/anthropic/ut-automation-mcp.git","type":"git"},"_npmVersion":"10.9.4","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","directories":{},"_nodeVersion":"22.21.1","dependencies":{"glob":"^10.3.10","yaml":"^2.3.4","simple-git":"^3.22.0","@modelcontextprotocol/sdk":"^1.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.55.0","ts-jest":"^29.1.1","ts-node":"^10.9.2","typescript":"^5.3.0","@types/glob":"^8.1.0","@types/jest":"^29.5.11","@types/node":"^20.10.0","@typescript-eslint/parser":"^6.13.0","@typescript-eslint/eslint-plugin":"^6.13.0"},"_npmOperationalInternal":{"tmp":"tmp/ut-automation-mcp_1.4.0_1768472421678_0.474808179353414","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@eden_qu/ut-automation-mcp","version":"1.4.1","description":"UT Automation MCP Server - Deterministic unit test generation based on rules","main":"dist/index.js","types":"dist/index.d.ts","bin":{"ut-automation-mcp":"dist/index.js"},"scripts":{"build":"tsc","watch":"tsc --watch","start":"node dist/index.js","dev":"ts-node src/index.ts","lint":"eslint src/**/*.ts","test":"jest","prepublishOnly":"npm run build","publish:npm":"npm publish --access public"},"keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"author":{"name":"MThor Team"},"license":"MIT","dependencies":{"@modelcontextprotocol/sdk":"^1.0.0","yaml":"^2.3.4","glob":"^10.3.10","simple-git":"^3.22.0"},"devDependencies":{"@types/node":"^20.10.0","typescript":"^5.3.0","ts-node":"^10.9.2","@types/glob":"^8.1.0","eslint":"^8.55.0","@typescript-eslint/eslint-plugin":"^6.13.0","@typescript-eslint/parser":"^6.13.0","jest":"^29.7.0","@types/jest":"^29.5.11","ts-jest":"^29.1.1"},"engines":{"node":">=18.0.0"},"repository":{"type":"git","url":"git+https://github.com/anthropic/ut-automation-mcp.git"},"publishConfig":{"access":"public"},"_id":"@eden_qu/ut-automation-mcp@1.4.1","bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"homepage":"https://github.com/anthropic/ut-automation-mcp#readme","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-A9VbDn00BmKisnYtu+2ZBJnM4OD2R5qQxVFl2U+otsku+3xDEU+uekBAscP90s99w5f7xLsUwS+7PXxz6sirGw==","shasum":"c9937781f50631f6a25b562687f1497892979181","tarball":"https://registry.npmjs.org/@eden_qu/ut-automation-mcp/-/ut-automation-mcp-1.4.1.tgz","fileCount":55,"unpackedSize":272882,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFlmytxKpc1etyMJciWy1PM8op5u/lw7rwtl+76oXI6oAiAEnAagLx8hJ35CNa4vw3K9QFsnAjgnNJ51wRreBnGQTw=="}]},"_npmUser":{"name":"eden_qu","email":"eden.qu@ringcentral.com"},"directories":{},"maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ut-automation-mcp_1.4.1_1768526322868_0.7727920620881734"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-08T03:10:42.048Z","modified":"2026-01-16T01:18:43.136Z","1.0.0":"2026-01-08T03:10:42.404Z","1.1.0":"2026-01-15T07:44:55.176Z","1.1.1":"2026-01-15T07:59:29.410Z","1.1.2":"2026-01-15T08:32:31.816Z","1.3.0":"2026-01-15T08:58:27.654Z","1.4.0":"2026-01-15T10:20:21.852Z","1.4.1":"2026-01-16T01:18:43.017Z"},"bugs":{"url":"https://github.com/anthropic/ut-automation-mcp/issues"},"author":{"name":"MThor Team"},"license":"MIT","homepage":"https://github.com/anthropic/ut-automation-mcp#readme","keywords":["mcp","unit-test","automation","cursor","ios","android","cpp"],"repository":{"type":"git","url":"git+https://github.com/anthropic/ut-automation-mcp.git"},"description":"UT Automation MCP Server - Deterministic unit test generation based on rules","maintainers":[{"name":"eden_qu","email":"eden.qu@ringcentral.com"}],"readme":"# UT Automation MCP Server\n\nA deterministic unit test automation service based on Model Context Protocol (MCP).\n\n## Features\n\n- **Deterministic**: Same input always produces same output (no AI randomness)\n- **Rule-based**: Reads rules from `.cursor/rules/unit-test/*.mdc`\n- **Multi-platform**: Supports iOS (Swift), Android (Kotlin/Java), C++\n- **100% Coverage**: Generates tests for all branches\n- **Auto-fix**: Automatically fixes common compilation errors\n- **Configurable**: Supports external workflow configuration\n\n## Installation\n\n```bash\nnpm install @eden_qu/ut-automation-mcp\n```\n\nOr install globally:\n\n```bash\nnpm install -g @eden_qu/ut-automation-mcp\n```\n\n## Usage\n\n### As MCP Server\n\nAdd to your Cursor MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"ut-automation\": {\n      \"command\": \"npx\",\n      \"args\": [\"@eden_qu/ut-automation-mcp\"]\n    }\n  }\n}\n```\n\n### Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `UT_WORKSPACE_PATH` | Override the workspace root directory | `process.cwd()` |\n\n#### Using UT_WORKSPACE_PATH\n\nWhen running the MCP server, you can set the workspace path via environment variable:\n\n```json\n{\n  \"mcpServers\": {\n    \"ut-automation\": {\n      \"command\": \"npx\",\n      \"args\": [\"@eden_qu/ut-automation-mcp\"],\n      \"env\": {\n        \"UT_WORKSPACE_PATH\": \"/path/to/your/project\"\n      }\n    }\n  }\n}\n```\n\nThis is useful when:\n- The MCP server is started from a different directory than your project\n- You want to run the server in a CI/CD environment\n- Cursor doesn't support the `cwd` configuration option\n\n### Commands\n\nThe MCP server recognizes these commands:\n\n| Command | Description | Example |\n|---------|-------------|---------|\n| `ut_changed` | Generate UT for git changed files | `ut_changed platform=ios` |\n| `ut_all` | Generate UT for all source files | `ut_all platform=android` |\n| `ut_path` | Generate UT for files in path | `ut_path path=common/ios` |\n| `ut_files` | Generate UT for specific files | `ut_files files=A.swift,B.swift` |\n\n### Parameters\n\n- `platform`: Target platform (`ios`, `android`, `cpp`, `all`)\n- `base`: Base branch for git diff (default: `develop`)\n- `path`: Path to scan for files\n- `files`: Comma-separated list of files\n\n## Architecture\n\n```\n┌─────────────────────────────────────────────────────────────────┐\n│                      ut_automation_mcp                          │\n├─────────────────────────────────────────────────────────────────┤\n│                                                                   │\n│  Tools (exposed):                                                 │\n│  ┌─────────────────────────────────────────────────────────────┐ │\n│  │ execute(command, workflow?, config?)                         │ │\n│  │ get_commands()                                               │ │\n│  │ get_rules(platform)                                          │ │\n│  └─────────────────────────────────────────────────────────────┘ │\n│                                                                   │\n│  Workflow Engine:                                                 │\n│  ┌─────────────────────────────────────────────────────────────┐ │\n│  │ load_rules → detect_files → analyze → generate → compile →  │ │\n│  │ → test → coverage → report                                   │ │\n│  └─────────────────────────────────────────────────────────────┘ │\n│                                                                   │\n│  Skills (internal):                                               │\n│  ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐         │\n│  │Command │ │Rule    │ │File    │ │Source  │ │UT      │         │\n│  │Parser  │ │Loader  │ │Detector│ │Analyzer│ │Generator│        │\n│  └────────┘ └────────┘ └────────┘ └────────┘ └────────┘         │\n│  ┌────────┐ ┌────────┐ ┌────────┐                               │\n│  │Build   │ │Test    │ │Report  │                               │\n│  │Manager │ │Runner  │ │Generator│                              │\n│  └────────┘ └────────┘ └────────┘                               │\n│                                                                   │\n└─────────────────────────────────────────────────────────────────┘\n```\n\n## Workflow\n\n### Default Workflow\n\n```yaml\nsteps:\n  1. load_rules      # Load .cursor/rules/unit-test/*.mdc\n  2. detect_files    # Detect source files\n  3. analyze_source  # Parse AST, extract branches\n  4. generate_ut     # Generate test code\n  5. compile_and_fix # Compile with auto-fix\n  6. run_tests       # Execute tests\n  7. collect_coverage # Collect coverage data\n  8. generate_reports # Output reports\n```\n\n### Custom Workflow\n\nCreate `.cursor/ut-automation/workflow.yaml`:\n\n```yaml\nname: custom_workflow\nversion: \"1.0.0\"\n\n# Override config\nconfig:\n  coverage_threshold:\n    line: 80\n    branch: 80\n\n# Custom steps\nsteps:\n  - id: load_rules\n    action: load_rules\n  - id: detect\n    action: detect_files\n  # ... more steps\n```\n\n## Output\n\nReports are generated in `.cursor/ut-reports/`:\n\n- `coverage-report.json` - Line and branch coverage\n- `branch-coverage.json` - Detailed branch coverage\n- `rule-references.json` - Applied rules\n- `ut-summary.md` - Human-readable summary\n\n## Rules\n\nThe MCP reads rules from:\n\n- `.cursor/rules/unit-test/ios-unit-test.mdc`\n- `.cursor/rules/unit-test/android-unit-test.mdc`\n- `.cursor/rules/unit-test/cpp-unit-test.mdc`\n- `.cursor/rules/unit-test/unit-testing-principles.mdc`\n\n## Determinism\n\nThis MCP guarantees deterministic output:\n\n1. **Command parsing**: Regex-based, no AI\n2. **Rule loading**: Direct file reading\n3. **File detection**: Git commands, file system\n4. **AST analysis**: Pattern-based parsing\n5. **UT generation**: Template rendering\n6. **All steps**: Reproducible\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Run locally\nnpm run dev\n\n# Test\nnpm test\n\n# Publish\nnpm run publish:npm\n```\n\n## License\n\nMIT\n\n","readmeFilename":"README.md"}