{"id":"4a38ebcd-984f-48bd-b92f-fdc954148200","slug":"test-inventory-mcp","kind":"mcp","name":"test-inventory-mcp","summary":"MCP server for test-inventory","owner":"Huldoser","repoUrl":"https://github.com/Huldoser/test-inventory-mcp","license":"MIT","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-10-21T00:34:34.000Z","addedAt":"2026-10-21T05:20:02.358Z","logoUrl":"https://avatars.githubusercontent.com/u/12258224?u=da3c4a6c5affd9f045cbd5e625bd3db3b50800f5&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","cloud-infra","browser-web"],"tags":["ai-agents","playwright","static-analysis","test-metadata","testing","typescript","vitest"],"runtime":"node","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-27T01:17:39.371Z","sample":false,"url":"https://conduits.dev/tools/test-inventory-mcp","language":"TypeScript","transports":["stdio"],"install":{"npm":"test-inventory-mcp"},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# test-inventory-mcp\n\nAn MCP server for [test-inventory](https://github.com/Huldoser/test-inventory): AI agents ask which tests a project\nhas, which are skipped and why, without running them.\n\nIt reads Playwright and Vitest test files with test-inventory and answers from their source code. Nothing runs,\nnothing is written, and nothing leaves your machine.\n\n## Setup\n\nNode.js 22.12 or newer. The client starts the server with `npx` and talks to it over standard input and output. Give\nit the globs of your test files and the framework, as you would to test-inventory's command line.\n\n**Claude Code**, in the project folder. `--scope project` writes `.mcp.json`, for everyone who works on the project:\n\n```sh\nclaude mcp add --scope project test-inventory -- npx -y test-inventory-mcp@0.2 \"tests/**/*.spec.ts\" --framework playwright\n```\n\n**Cursor**, in `.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"test-inventory\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"test-inventory-mcp@0.2\", \"tests/**/*.spec.ts\", \"--framework\", \"playwright\"]\n    }\n  }\n}\n```\n\n**VS Code**, in `.vscode/mcp.json`:\n\n```json\n{\n  \"servers\": {\n    \"test-inventory\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"test-inventory-mcp@0.2\", \"tests/**/*.spec.ts\", \"--framework\", \"playwright\"]\n    }\n  }\n}\n```\n\nWithout globs, as in a configuration shared by every project, the agent passes `framework` and `patterns` in each\ncall; the tools say so when they are missing.\n\nThe project is the folder given with `--root`, otherwise the one Claude Code names in `CLAUDE_PROJECT_DIR`, otherwise\nthe folder the client starts the server in.\n\n## Command line\n\n```text\ntest-inventory-mcp [<glob...> --framework <playwright|vitest>] [--root <dir>]\n```\n\n| Option                | Meaning                                                               |\n| --------------------- | --------------------------------------------------------------------- |\n| `<glob...>`           | The test files, relative to the project. A tool call can pass others. |\n| `--framework <name>`  | `playwright` or `vitest`, for the globs.                              |\n| `--root <dir>`        | The project. Tool calls can scan folders inside it, never outside.    |\n| `--help`, `--version` | Print the help or the version.                                        |\n\n## Tools\n\n| Tool               | Answers                                                                                               |\n| ------------------ | ----------------------------------------------------------------------------------------------------- |\n| `test_summary`     | Counts by state, tag and annotation; with `groupBy`, the counts of each file or tag.                  |\n| `find_tests`       | The tests that match `states`, `tags`, `grep`, `only` or `withoutReason`, with the `fields` you pick. |\n| `get_tests`        | Every key of up to 20 tests by id, with the scan's diagnostics about them.                            |\n| `scan_diagnostics` | The problems the scan found, such as a file that failed to parse, by level, code or path.             |\n\nEvery tool also takes `directory`, a folder inside the project to scan, and `framework` and `patterns` to override\nthe command line. Records have the keys of test-inventory's\n[output format](https://huldoser.github.io/test-inventory/reference/output).\n\nAnswers are JSON, sent both as structured content and as text. Lists come 50 items at a time (`limit` takes up to\n200), and an answer stays under about 30,000 characters; `nextCursor` gets the next page. `scanErrors` counts the\nproblems that may leave tests out, and `hint` says what to do next when there is something to say.\n\n## Security\n\nThe server reads the test files its globs match inside the project, and, for Vitest, the files that symbolic links\namong them point to, as Vitest does. It refuses a `directory` or pattern that reaches outside the project. It runs no code from the project, writes no files, and opens no network connections.\n\nAnswers hold text from the project's files, such as test titles, skip reasons and comments. A client should treat it\nas content of that project, not as instructions. To report a vulnerability, see [SECURITY.md](SECURITY.md).\n\n## Versioning\n\nTool names, their arguments and their answers are the server's API. Before 1.0, a change that breaks them raises the\nminor version, so `test-inventory-mcp@0.2` in the setup above gets fixes only.\n\n## License\n\n[MIT](LICENSE)\n"}