Deep sources: docs/architecture/MCP/README.md, docs/architecture/Execution/pytest-bridge.md.
| Pipe | Server | Use |
|---|---|---|
DevToolsMcp_{Host}_{Version}_{PID} |
McpPipeServer |
MCP SDK (NDJSON) |
DevTools_{Host}_{Version}_{PID} |
DevToolsPipeServer |
pytest + control (BridgeMessage) |
Never mix NDJSON and BridgeMessage on one pipe.
Daemon (--stdio or Gateway) exposes infrastructure tools plus search_dynamic / invoke_dynamic. Host tools are indexed in ProcessCatalogs (not on daemon tools/list). In-host built-ins: execute_csharp_code, execute_python_code, open_document, navigate_history. See MCP/tools.md.
Paths: DevTools.Ipc, DevTools.Mcp.*, DevTools.Daemon, DevTools.Execution/External/.
tests/run→PytestRunner.py(PEP 723 via the active provider — uv sidecar when the host owns CPython).ipytests/run→IpyTestDriver.py(unittest, no pixi).- Contracts:
PytestContracts.cs↔ siblingRevitDevTool.PyTestmodels.py. - Write/run tests:
.agents/skills/revit-pytest/SKILL.md.
- MCP:
dotnet run --project tests/DevTools.Mcp.Server.Tests/DevTools.Mcp.Server.Tests.csproj; parsers:tests/DevTools.Mcp.Catalog.Tests(buildsamples/McpToolsetDemofirst, or tests Skip). - Pytest wire: sync contracts ↔
models.py; focused Execution tests (PytestRunRequestParseTests,DevToolsPipeServerTests, handlers). - Remaining live/opt-in and Coverlet/testhost limits:
test-matrix.mdCurrent gaps. In-hostPytestRunner.pyis not headless CI.