Semantic map of a .NET test-automation solution for AI agents β search, impact, endpoints
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A queryable, semantic map of your .NET test-automation solution β in one SQLite file, served to your AI agent over MCP.
Zero configΒ Β·Β No AIΒ Β·Β No networkΒ Β·Β Deterministic
11 MCP tools
resolve_step Β· step_catalog Β· impact Β· search_steps Β· search_scenarios Β· get_scenario Β· get_step_definition Β· list_tags Β· list_endpoints Β· project_dependencies Β· stats
The problem Β· See it in action Β· Quick start Β· MCP Β· Commands Β· Fresh maps Β· Roadmap
Large test-automation solutions are hard to navigate β for humans and for AI agents. Asked to automate a new story, an agent can't see which steps already exist, where similar code lives, or what conventions the solution follows β so it duplicates steps and misplaces code. TestAtlas indexes the solution once into a single SQLite map and answers those questions precisely: deterministically, offline, without a model or a network call.
Index the bundled 8-project sample once β testatlas index samples/SampleShop/SampleShop.sln β then
ask it questions from the terminal. Every number below is real output from that run:
β¦or let your agent ask them over MCP. Here an agent checks whether a step it is about to write
already exists β resolve_step answers with the definitions that would bind it, or the closest
near-misses to reuse instead:
Live sample outputs, committed from that same solution:
HTML report (features, scenarios, bindings, class kinds, endpoints) Β·
dependency map (the eight projects and their edges).
(GitHub serves .html as source, so the links route through htmlpreview.github.io β or download from docs/ and open locally.)
TestAtlas statically analyses the solution and emits codemap.db β projects and their dependency
edges, Gherkin features/scenarios/steps, step definitions and their bindings (bound / unbound /
ambiguous), page objects, API clients, helpers, test classes, and the call/usage edges connecting
them β then turns that map into answers:
| Capability | What you get | |
|---|---|---|
| π§© | Reuse-first authoring | resolve_step β would this phrase bind an existing definition? step_catalog β the reusable step vocabulary with placeholders + allowed values |
| π₯ | Impact | Blast radius β the scenarios affected by changing a class, method, step, or endpoint |
| π | Search | FTS5 over step definitions + scenarios β "does a step for this already exist?" |
| π | MCP | All of it served to an AI agent over stdio β precise answers in a few hundred tokens, no context stuffing |
| π | Report & map | Self-contained HTML drill-down of the whole map + project-dependency graph |
| π | Stats | Entity counts, class-kind breakdown, binding coverage, diagnostics |
All of it offline, deterministic, and reproducible β same input, same map, every time.
Requires the .NET SDK 8.0+. On a corporate machine where
dotnet tool installfails with 401, see docs/troubleshooting.md.
1 β Install the CLI (and the MCP server, if you'll connect an agent):
2 β Index your solution. This produces the map (./codemap.db) that every query, report, and
MCP answer reads β nothing works without it:
No need to build or restore the solution first β indexing is a syntax-only pass, so an unrestored
checkout maps fine. Point index at a folder (or nothing) and it auto-discovers a single
.sln/.csproj there.
3 β Query it:
β¦and to serve it to your AI agent, continue to MCP setup.
TestAtlas ships an MCP server β testatlas-mcp β that serves the map to any MCP-aware client
(Visual Studio / VS Code Copilot, Claude Code, and others) over stdio JSON-RPC. The agent asks a
precise question and gets an exact, structured answer straight from the .db β instead of
stuffing source files into its context window.
Prerequisites: both tools installed and a map built β steps 1β2 of the Quick start. Then register the server:
Visual Studio / VS Code (GitHub Copilot agent mode) β add to your .mcp.json
(%USERPROFILE%\.mcp.json or <SolutionDir>\.mcp.json):
Pass the map path explicitly (as above, or via a TESTATLAS_DB env var) β most agents launch
the server from their own working directory, not your solution folder, so relying on auto-discovery
makes the server exit with code 2. In Visual Studio you can also use Tools picker β + β Add
custom MCP server to write this entry for you. On the .NET 10 SDK you can skip the install and
use "command": "dnx", "args": ["TestAtlas.Mcp", "--yes", "C:\\path\\to\\codemap.db"] β dnx
fetches and runs the server on demand.
Claude Code:
By default the server is registered for the current project (--scope local). Add
--scope user to make it available in every project on your machine, or --scope project to
share the registration with your team via a committed .mcp.json.
[!IMPORTANT] MCP clients load servers at session start β if you register mid-session, restart your agent session before the
testatlastools appear. To confirm it's actually being used (and not silently ignored), run the checks in docs/troubleshooting.md.
Tools exposed:
resolve_step β resolve a Gherkin phrase to the existing step definition(s) that would bind it (regex/cucumber, keyword-agnostic). exact / ambiguous / none (+ near-match suggestions ranked by shared terms). Reuse-first authoring: don't write a step that already exists.step_catalog β the reusable step vocabulary with extracted placeholders and allowed values (cucumber {type}, regex (a|b) enums). Compose scenarios from what exists.impact β blast radius of a change: the scenarios affected by a given class, method, step definition, or endpoint.search_steps β full-text search over step definitions (expression text + method + class name).search_scenarios β full-text search over scenarios (feature + scenario name + step text + tags).get_scenario β full detail of scenario(s) by name: feature, tags, kind, example-row count, and the ordered steps.get_step_definition β full detail of step definition(s) by expression: keyword, params, C# class/method/signature, and the scenarios that use it.list_tags β the tag taxonomy with per-tag scenario counts, most-used first β tag new scenarios consistently.list_endpoints β the HTTP endpoints the suite calls, each with verb, route, and scenario blast radius (highest-reach first).project_dependencies β the implied project dependency graph (depends-on / depended-on-by), e.g. "what depends on the Party project?".stats β summary counts: projects, classes, methods, class-kind breakdown, endpoints, and edge tallies.Retrieval runs locally against the SQLite file β deterministic, offline, and a few hundred tokens
per answer. Protocol details in specs/codemap-mcp.md; registration from
source and every failure mode in docs/troubleshooting.md.
| Command | What it does |
|---|---|
index [<path>] | Analyse a .sln/.csproj and write the map (default ./codemap.db). |
stats [<db>] | Entity counts per project, unbound/ambiguous steps, diagnostics. |
search [<db>] <query> | FTS5 full-text search over step definitions and scenarios. |
impact [<db>] --class|--method|--step|--endpoint <target> | Blast radius: scenarios affected by changing an entity. |
report [<db>] | Write a self-contained HTML drill-down of the map. |
map [<db>] | Write a self-contained project dependency graph (HTML). |
validate [<db>] | Check a file is a supported TestAtlas map. |
index Β --output <file> Β· --config <file> Β· --include <glob> (repeatable) Β· --exclude <glob> (repeatable) Β· --verbose Β· --quiet
search Β --steps (step definitions only) Β· --scenarios (scenarios only)
Exit codes Β 0 ok Β· 1 completed with warnings Β· 2 fatal Β· 3 bad arguments
Run testatlas --help for the full usage text.
samples/SampleShop is a self-contained 8-project solution mixing API
tests and UI tests, so the map has plenty of connected nodes β real HttpClient API clients, real
Selenium IWebDriver page objects, and Reqnroll suites driving both:
Reproduce the committed sample outputs yourself:
Answers are deterministic β but only as fresh as the map, so re-index on change, not on a timer. A full re-index is a single static pass (seconds), and its cost scales with solution size, not with how much changed:
python scripts/check-map-age.py tells you when your map drifted; a
version-controlled post-merge git hook can warn automatically after every pull..db to a shared feed
(never commit it β it's a build artifact). Then teammates and agents only need TestAtlas.Mcp
locally: download the shared map and point TESTATLAS_DB at it β no local TestAtlas.Cli or
indexing required. (Index locally only to include your own uncommitted branch work.)Details β the staleness checker, the git hook, and copy-paste CI recipes (GitHub Actions + Azure DevOps with a Universal feed) β in docs/keeping-the-map-fresh.md.
Two separate things β remove them in this order, so the editor isn't launching a server whose binary just vanished:
testatlas block from your .mcp.json
(<SolutionDir>\.mcp.json or %USERPROFILE%\.mcp.json), then restart Visual Studio / VS Code.
(Or just toggle it off in the agent's tools/wrench picker to keep it for later.)codemap.db map file β it's just data, nothing else references it.The project folders use the indexer's working name (CodeMap); the shipped tools and
packages are TestAtlas. Full specs: specs/codemap-indexer.md Β·
specs/codemap-mcp.md. Repo layout: CONTRIBUTING.md.
testatlas-mcp exposes the map to AI agents over stdio JSON-RPC (11 tools)Deliberately not planned (see design tenets): LLM-assisted analysis inside the indexer, network calls at index/query time, running or generating tests, and semantic (compilation-based) analysis that would require a restored build. Releases and per-version notes live on the releases page; current distribution channels in docs/DISTRIBUTION.md.
MIT Β© 2026 Karthik Kalaiyarasu
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/testatlas)<a href="https://allmcps.com/mcp/testatlas"><img src="https://allmcps.com/api/badge/testatlas?style=directory" alt="TestAtlas on AllMCPs" /></a>