@debugg-ai/debugg-ai-mcp 1.0.64 → 1.0.65
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +177 -0
- package/README.md +49 -37
- package/dist/handlers/createEnvironmentHandler.js +1 -1
- package/dist/services/index.js +3 -3
- package/dist/tools/createProject.js +6 -4
- package/package.json +5 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the DebuggAI MCP project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [1.0.64] - 2026-04-23
|
|
11
|
+
|
|
12
|
+
> **⚠️ Semver violation — this is functionally a major release shipped as a patch.**
|
|
13
|
+
> The surface collapse below removes 14 tools. Callers pinned to `^1.0.63` will silently
|
|
14
|
+
> receive a breaking API on their next install. A republish as `2.0.0` (or a `2.0.0`
|
|
15
|
+
> bump with `1.0.64` deprecated) is recommended to restore semver discipline.
|
|
16
|
+
|
|
17
|
+
This is a **breaking release**. The MCP surface collapsed from 22 tools to 11 through a uniform `search_*` pattern plus credential-management consolidation into the environment tools. The full old→new mapping is below.
|
|
18
|
+
|
|
19
|
+
### ⚠️ BREAKING CHANGES — 14 tools removed, replaced by 11-tool surface
|
|
20
|
+
|
|
21
|
+
| Removed tool | Replacement |
|
|
22
|
+
|---|---|
|
|
23
|
+
| `list_projects` | `search_projects({q?, page?, pageSize?})` (filter mode) |
|
|
24
|
+
| `get_project` | `search_projects({uuid})` (uuid mode — returns the curated detail shape) |
|
|
25
|
+
| `list_environments` | `search_environments({projectUuid?, q?, page?, pageSize?})` — credentials inlined per env |
|
|
26
|
+
| `get_environment` | `search_environments({uuid, projectUuid})` |
|
|
27
|
+
| `list_credentials` | `search_environments(...)` — credentials are inlined on each returned env (never include password) |
|
|
28
|
+
| `get_credential` | `search_environments({uuid, projectUuid})` — pull from the env's `credentials[]` |
|
|
29
|
+
| `create_credential` | `create_environment({name, url, credentials: [...]})` (seed on env create), or `update_environment({uuid, addCredentials: [...]})` |
|
|
30
|
+
| `update_credential` | `update_environment({uuid, updateCredentials: [{uuid, ...patch}]})` |
|
|
31
|
+
| `delete_credential` | `update_environment({uuid, removeCredentialIds: [uuid]})` |
|
|
32
|
+
| `list_teams` | `create_project({teamName, ...})` — backend name-resolved with exact-match + ambiguity handling |
|
|
33
|
+
| `list_repos` | `create_project({repoName, ...})` — same pattern |
|
|
34
|
+
| `list_executions` | `search_executions({status?, projectUuid?, page?, pageSize?})` |
|
|
35
|
+
| `get_execution` | `search_executions({uuid})` — full detail with `nodeExecutions` + state |
|
|
36
|
+
| `cancel_execution` | Dropped — backend spin-down is now automatic; no client action needed |
|
|
37
|
+
|
|
38
|
+
All `search_*` tools use a dual-mode signature: pass `{uuid}` for a single-record detail response, or pass filter params for a paginated summary list. 404 from the backend surfaces as `isError: true` with `{error: 'NotFound', message, uuid}`.
|
|
39
|
+
|
|
40
|
+
Credential mutations on `update_environment` execute as `remove → update → add` in a single call, so a freed label can be re-bound in one request. Per-cred failures surface in `credentialWarnings[]` without blocking the env update.
|
|
41
|
+
|
|
42
|
+
### Added
|
|
43
|
+
|
|
44
|
+
- **`trigger_crawl` tool**: server-side browser-agent crawl to populate the project's knowledge graph. Returns `{executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?}` with `knowledgeGraph.imported` = true on successful KG ingestion. Supports localhost via automatic ngrok tunneling with per-process reuse.
|
|
45
|
+
- **`create_project` name-based resolution**: pass `teamName` instead of `teamUuid`, or `repoName` instead of `repoUuid`. Backend-side search with case-insensitive exact match. Returns `AmbiguousMatch` with candidates if multiple hits, `NotFound` if none.
|
|
46
|
+
- **`create_environment` credential seeding**: pass `credentials: [{label, username, password, role?}]` to create creds atomically with the env.
|
|
47
|
+
- **`update_environment` credential sub-actions**: `addCredentials[]`, `updateCredentials[]`, `removeCredentialIds[]` in one call.
|
|
48
|
+
- **`engines.node: ">=20.20.0"`** in `package.json`. Driven by `posthog-node@^5.26.0` requiring Node 20.20+.
|
|
49
|
+
- **Boot-smoke CI** (`.github/workflows/boot-smoke.yml`): matrix `{ubuntu, macos} × {Node 20, 22}` verifies the MCP server boots + completes `tools/list` with published-style spawn.
|
|
50
|
+
- **Eval runner tag filtering**: `--tag=<name>`, `--skip-tag=<name>`, `--flow=<csv>`; `--list` prints flows + tags. `--tag=fast` runs 12 non-browser flows in ~40s; `--tag=browser` runs heavy flows.
|
|
51
|
+
- **27 eval flows total** (up from 16 in prior unreleased work). New flows since the last published version: response-structure (20), tunnel reuse (21), long-running check (22), crawl triggers public + localhost + with-project (23/24/26), published-boot-smoke (25), localhost deep-path (27).
|
|
52
|
+
- **Response sanitization**: `check_app_in_browser` strips ngrok tunnel URLs from the full response including agent-authored `actionTrace[*].intent`.
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- **Deferred API-key validation**: missing `DEBUGGAI_API_KEY` no longer crashes the subprocess at boot (the bug that surfaced in Claude Code as "Failed to reconnect to debugg-ai"). The server starts, `tools/list` succeeds, and the error surfaces only when a tool is actually invoked — as a structured `isError: true` response pointing the caller at the missing env var.
|
|
57
|
+
- **Boot-time behavior**: `index.ts` no longer calls `resolveProjectContext()` at startup. Project context resolves lazily on first tool call that needs it.
|
|
58
|
+
- **`services/projectContext.ts`**: promise-dedup pattern replaces the failure-caching singleton. Concurrent callers share one in-flight promise; results cached on success only, so transient network errors don't permanently disable context resolution.
|
|
59
|
+
- **Pagination mandatory on every list response**: `search_projects` / `search_environments` / `search_executions` accept optional `page` (1-indexed) and `pageSize` (default 20, max 200, oversized clamped). Response shape: `{filter, pageInfo: {page, pageSize, totalCount, totalPages, hasMore}, <items>}`.
|
|
60
|
+
- **Axios error handling**: handlers map `err.statusCode` (surfaced by the transport's response interceptor) to tool-level `NotFound` errors instead of checking `err.response?.status` which the interceptor strips.
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- **Progress-notification race** (bead `0bq`) in both `testPageChangesHandler` and `triggerCrawlHandler`: a progress callback firing after the handler resolved could tear down the stdio transport. Circuit breaker suppresses subsequent callbacks after the first throw; terminal-status detection emits the final `progress === total` notification inside `onUpdate` before the poll loop exits.
|
|
65
|
+
- **"Failed to reconnect to debugg-ai" UX** (bead `cma`): missing API key now surfaces as a per-tool-call error instead of a silent subprocess exit at boot. MCP clients see the server register normally and get a readable error only when a tool is actually invoked.
|
|
66
|
+
- **Credential role filter** (bead `hpo`): backend `?role=` filter on credentials list was returning all creds regardless. MCP now applies client-side role filtering as defense-in-depth.
|
|
67
|
+
|
|
68
|
+
### Security invariants
|
|
69
|
+
|
|
70
|
+
- Passwords are write-only. No response body from any tool contains a password (verified by unit tests + eval flows 06/10/12/15).
|
|
71
|
+
- Tunnel URLs (`*.ngrok.debugg.ai`) are stripped from all `check_app_in_browser` responses including agent-authored text (verified by flow 05).
|
|
72
|
+
- 404s from the backend surface as `isError: true` with structured `{error: 'NotFound', ...}`, never as thrown exceptions.
|
|
73
|
+
|
|
74
|
+
### Tool count
|
|
75
|
+
|
|
76
|
+
The server registers **11** tools (was 22 pre-collapse, 18 in the previous unreleased snapshot). Verified by eval flow `01-protocol.mjs` which locks the roster.
|
|
77
|
+
|
|
78
|
+
## [1.0.15] - 2025-08-18
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
- **Live Session Monitoring Tools**: Added 5 new MCP tools for real-time browser session monitoring
|
|
82
|
+
- `debugg_ai_start_live_session`: Launch live remote browser sessions with real-time monitoring
|
|
83
|
+
- `debugg_ai_stop_live_session`: Stop active live sessions
|
|
84
|
+
- `debugg_ai_get_live_session_status`: Monitor session status and health
|
|
85
|
+
- `debugg_ai_get_live_session_logs`: Retrieve console logs and network requests from live sessions
|
|
86
|
+
- `debugg_ai_get_live_session_screenshot`: Capture screenshots from active sessions
|
|
87
|
+
- **Enhanced Tunnel Management**: Complete rewrite of tunnel infrastructure with improved ngrok integration
|
|
88
|
+
- New `TunnelManager` service for high-level tunnel abstraction
|
|
89
|
+
- Automatic localhost URL detection and tunnel creation
|
|
90
|
+
- Better error handling and connection stability
|
|
91
|
+
- Integrated tunnel support in live session handlers
|
|
92
|
+
- **Browser Sessions Service**: New dedicated service for managing browser automation sessions
|
|
93
|
+
- **Comprehensive Test Infrastructure**: Added extensive test suite covering unit, integration, and end-to-end scenarios
|
|
94
|
+
- Handler tests for E2E suites and live sessions
|
|
95
|
+
- Backend services integration tests
|
|
96
|
+
- Network and MCP tools validation tests
|
|
97
|
+
- Mock infrastructure for reliable testing
|
|
98
|
+
- **Enhanced Project Analysis**: New utilities for analyzing codebases and extracting context
|
|
99
|
+
- **Improved Error Handling**: Centralized error management with structured error types
|
|
100
|
+
- **URL Parser Utilities**: Robust URL parsing and localhost detection capabilities
|
|
101
|
+
- **Configuration Management**: Centralized configuration system with environment-based settings
|
|
102
|
+
- **API Specification**: Complete OpenAPI specification for backend integration
|
|
103
|
+
- **GitHub Actions Workflows**: Automated publishing, version bumping, and validation workflows
|
|
104
|
+
|
|
105
|
+
### Changed
|
|
106
|
+
- **Major Architecture Refactoring**: Reorganized services, handlers, and utilities into cleaner modular structure
|
|
107
|
+
- **Moved Tunnel Services**: Relocated tunnel management from `tunnels/` to `services/ngrok/` for better organization
|
|
108
|
+
- **Enhanced E2E Runner**: Improved test execution with better progress tracking and error handling
|
|
109
|
+
- **Updated Package Dependencies**: Upgraded to latest versions of core dependencies including MCP SDK
|
|
110
|
+
- **Improved Documentation**: Updated README with comprehensive setup and usage instructions
|
|
111
|
+
- **Enhanced Type Definitions**: Expanded type system with better validation schemas
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- **API Endpoint Updates**: Resolved compatibility issues with backend API changes
|
|
115
|
+
- **Image Support Improvements**: Enhanced handling of screenshots and visual test artifacts
|
|
116
|
+
- **Tunnel Connection Stability**: Fixed issues with ngrok tunnel reliability and reconnection
|
|
117
|
+
- **ES Module Compatibility**: Resolved module resolution issues for better Node.js compatibility
|
|
118
|
+
|
|
119
|
+
### Security
|
|
120
|
+
- **License Addition**: Added Apache 2.0 license for proper open source compliance
|
|
121
|
+
- **Environment Variable Validation**: Enhanced validation of sensitive configuration data
|
|
122
|
+
|
|
123
|
+
## [1.0.14] - 2025-06-09
|
|
124
|
+
|
|
125
|
+
### Added
|
|
126
|
+
- Final screen shot included.
|
|
127
|
+
|
|
128
|
+
## [1.0.12] - 2025-06-02
|
|
129
|
+
|
|
130
|
+
### Added
|
|
131
|
+
- Readme docs issue
|
|
132
|
+
|
|
133
|
+
## [1.0.11] - 2025-06-02
|
|
134
|
+
|
|
135
|
+
### Added
|
|
136
|
+
- New readme with instructions on install, usage, etc.
|
|
137
|
+
|
|
138
|
+
## [1.0.10] - 2025-05-29
|
|
139
|
+
|
|
140
|
+
### Fixed
|
|
141
|
+
- Most MCP clients still don't support images. removed that as a response.
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
## [1.0.7] - 2025-05-29
|
|
145
|
+
|
|
146
|
+
### Fixed
|
|
147
|
+
- Fixed tunneling issues
|
|
148
|
+
- Remove notifications when a token is not provided in the original request
|
|
149
|
+
|
|
150
|
+
## [1.0.2] - 2025-05-28
|
|
151
|
+
|
|
152
|
+
### Fixed
|
|
153
|
+
- Fixed ES module path resolution issues
|
|
154
|
+
- Added proper shebang line to executable files
|
|
155
|
+
- Ensured executable permissions are set during build
|
|
156
|
+
|
|
157
|
+
### Added
|
|
158
|
+
- Docker container support
|
|
159
|
+
- Improved error handling for E2E test runs
|
|
160
|
+
|
|
161
|
+
## [1.0.1] - 2025-05-28
|
|
162
|
+
|
|
163
|
+
### Fixed
|
|
164
|
+
- Fixed TypeScript configuration to target ES2022
|
|
165
|
+
- Resolved dependency issues with Zod library
|
|
166
|
+
|
|
167
|
+
### Added
|
|
168
|
+
- Initial implementation of E2E test runner
|
|
169
|
+
- Integration with DebuggAI server client
|
|
170
|
+
|
|
171
|
+
## [1.0.0] - 2025-05-28
|
|
172
|
+
|
|
173
|
+
### Added
|
|
174
|
+
- Initial release of DebuggAI MCP
|
|
175
|
+
- Support for running UI tests via MCP protocol
|
|
176
|
+
- Integration with ngrok for tunnel creation
|
|
177
|
+
- Basic test reporting functionality
|
package/README.md
CHANGED
|
@@ -8,6 +8,8 @@ AI-powered browser testing via the [Model Context Protocol](https://modelcontext
|
|
|
8
8
|
|
|
9
9
|
## Setup
|
|
10
10
|
|
|
11
|
+
**Requires Node.js 20.20.0 or later** (transitive requirement from `posthog-node@^5.26.0`).
|
|
12
|
+
|
|
11
13
|
Get an API key at [debugg.ai](https://debugg.ai), then add to your MCP client config:
|
|
12
14
|
|
|
13
15
|
```json
|
|
@@ -32,16 +34,18 @@ docker run -i --rm --init -e DEBUGGAI_API_KEY=your_api_key quinnosha/debugg-ai-m
|
|
|
32
34
|
|
|
33
35
|
## Tools
|
|
34
36
|
|
|
35
|
-
The server exposes **
|
|
37
|
+
The server exposes **11** tools grouped into Browser (2), Search (3), Projects (3), and Environments (3). The headline tool is `check_app_in_browser`; the rest manage projects, environments + their credentials, and execution history through a uniform `search_*` + CRUD pattern.
|
|
38
|
+
|
|
39
|
+
### Browser
|
|
36
40
|
|
|
37
|
-
|
|
41
|
+
#### `check_app_in_browser`
|
|
38
42
|
|
|
39
|
-
Runs an AI browser agent against your app. The agent navigates, interacts, and reports back with screenshots.
|
|
43
|
+
Runs an AI browser agent against your app. The agent navigates, interacts, and reports back with screenshots. Localhost URLs are auto-tunneled via ngrok.
|
|
40
44
|
|
|
41
45
|
| Parameter | Type | Description |
|
|
42
46
|
|-----------|------|-------------|
|
|
43
47
|
| `description` | string **required** | What to test (natural language) |
|
|
44
|
-
| `url` | string **required** | Target URL —
|
|
48
|
+
| `url` | string **required** | Target URL — `http://localhost:3000` is auto-tunneled |
|
|
45
49
|
| `environmentId` | string | UUID of a specific environment |
|
|
46
50
|
| `credentialId` | string | UUID of a specific credential |
|
|
47
51
|
| `credentialRole` | string | Pick a credential by role (e.g. `admin`, `guest`) |
|
|
@@ -49,54 +53,43 @@ Runs an AI browser agent against your app. The agent navigates, interacts, and r
|
|
|
49
53
|
| `password` | string | Password for login (ephemeral — not persisted) |
|
|
50
54
|
| `repoName` | string | Override auto-detected git repo name (e.g. `my-org/my-repo`) |
|
|
51
55
|
|
|
52
|
-
|
|
56
|
+
One focused check per call. The agent has a ~25-step internal budget; split broader suites across multiple calls.
|
|
53
57
|
|
|
54
|
-
|
|
55
|
-
|------|---------|
|
|
56
|
-
| `list_projects` | List projects accessible to your API key. Optional `q` for name/repo search. |
|
|
57
|
-
| `get_project` | Fetch a project by `uuid`. Simplified shape (no team/runner internals). |
|
|
58
|
-
| `create_project` | Create a new project. Needs `name`, `platform` (e.g. `web`), `teamUuid` (from `list_teams`), and `repoUuid` (from `list_repos`). |
|
|
59
|
-
| `update_project` | PATCH a project's `name` or `description`. |
|
|
60
|
-
| `delete_project` | Destructive delete. Cascades envs, creds, and history. |
|
|
58
|
+
#### `trigger_crawl`
|
|
61
59
|
|
|
62
|
-
|
|
60
|
+
Fires a server-side browser-agent crawl to populate the project's knowledge graph. Localhost URLs tunnel automatically. Returns `{executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?}` with `knowledgeGraph.imported === true` on successful ingestion.
|
|
63
61
|
|
|
64
|
-
|
|
65
|
-
|------|---------|
|
|
66
|
-
| `list_teams` | Paginated list of teams accessible to the API key; optional `q` for search. |
|
|
67
|
-
| `list_repos` | Paginated list of GitHub-linked repos; optional `q` for search. Use repos with `isGithubAuthorized: true` when creating a project. |
|
|
62
|
+
### Search (dual-mode: uuid detail OR filtered list)
|
|
68
63
|
|
|
69
|
-
|
|
64
|
+
Each `search_*` tool has two modes. Pass `{uuid}` for a single-record detail response. Pass filter params for a paginated summary list. 404 from the backend surfaces as `isError: true` with `{error: 'NotFound', message, uuid}`.
|
|
70
65
|
|
|
71
|
-
| Tool |
|
|
72
|
-
|
|
73
|
-
| `
|
|
74
|
-
| `
|
|
75
|
-
| `
|
|
76
|
-
|
|
77
|
-
|
|
66
|
+
| Tool | UUID mode | Filter mode |
|
|
67
|
+
|------|-----------|-------------|
|
|
68
|
+
| `search_projects` | `{uuid}` → curated project detail | `{q?, page?, pageSize?}` → paginated summaries |
|
|
69
|
+
| `search_environments` | `{uuid, projectUuid}` → env with credentials inlined | `{projectUuid?, q?, page?, pageSize?}` → paginated envs, each with credentials array |
|
|
70
|
+
| `search_executions` | `{uuid}` → full detail with `nodeExecutions` + state | `{status?, projectUuid?, page?, pageSize?}` → paginated summaries |
|
|
71
|
+
|
|
72
|
+
`projectUuid` is optional on `search_environments` — if omitted, it auto-resolves from the git repo. Credentials are **always** returned without passwords.
|
|
78
73
|
|
|
79
|
-
###
|
|
74
|
+
### Projects
|
|
80
75
|
|
|
81
76
|
| Tool | Purpose |
|
|
82
77
|
|------|---------|
|
|
83
|
-
| `
|
|
84
|
-
| `
|
|
85
|
-
| `
|
|
86
|
-
| `update_credential` | Partial PATCH. Pass `password` to rotate — it is never echoed back. |
|
|
87
|
-
| `delete_credential` | Destructive delete. |
|
|
78
|
+
| `create_project` | Requires `name` + `platform`. Team and repo resolve by **either** uuid **or** name: pass `teamUuid` OR `teamName`, and `repoUuid` OR `repoName`. Name resolution is case-insensitive exact match; `NotFound` if none, `AmbiguousMatch` with candidates if multiple. |
|
|
79
|
+
| `update_project` | PATCH `name`, `description`. |
|
|
80
|
+
| `delete_project` | Destructive — cascades environments, credentials, and execution history. |
|
|
88
81
|
|
|
89
|
-
###
|
|
82
|
+
### Environments (credential sub-actions folded in)
|
|
90
83
|
|
|
91
84
|
| Tool | Purpose |
|
|
92
85
|
|------|---------|
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
86
|
+
| `create_environment` | Requires `name` + `url`. Optional `credentials: [{label, username, password, role?}]` seeds credentials in the same call. Per-cred failures surface in `credentialWarnings[]` without blocking env creation. |
|
|
87
|
+
| `update_environment` | PATCH env fields (`name`, `url`, `description`) plus credential sub-actions in one call: `addCredentials[]`, `updateCredentials: [{uuid, ...patch}]`, `removeCredentialIds: [uuid]`. Execution order: **remove → update → add** (freed labels can be re-added in one request). |
|
|
88
|
+
| `delete_environment` | Destructive — cascades credentials. |
|
|
96
89
|
|
|
97
90
|
### Pagination
|
|
98
91
|
|
|
99
|
-
Every
|
|
92
|
+
Every filter-mode response is paginated. Response shape:
|
|
100
93
|
|
|
101
94
|
```json
|
|
102
95
|
{
|
|
@@ -106,13 +99,32 @@ Every `list_*` tool is paginated by default. Response shape:
|
|
|
106
99
|
}
|
|
107
100
|
```
|
|
108
101
|
|
|
109
|
-
Pass optional `page` (1-indexed, default 1) and `pageSize` (default 20, max 200; oversized values are clamped)
|
|
102
|
+
Pass optional `page` (1-indexed, default 1) and `pageSize` (default 20, max 200; oversized values are clamped). No response is ever silently truncated.
|
|
110
103
|
|
|
111
104
|
### Security invariants
|
|
112
105
|
|
|
113
106
|
- Passwords are write-only. They never appear in any response body from any tool.
|
|
114
107
|
- Tunnel URLs (`*.ngrok.debugg.ai`) are stripped from all browser-agent responses, including agent-authored text.
|
|
115
108
|
- 404s from the backend surface as `isError: true` with `{error: 'NotFound', ...}`, never as thrown exceptions.
|
|
109
|
+
- Missing `DEBUGGAI_API_KEY` surfaces as a structured tool error on first invocation — the server still registers and lists tools normally.
|
|
110
|
+
|
|
111
|
+
## Migration from v1.x (breaking change in v2.0.0)
|
|
112
|
+
|
|
113
|
+
v2 collapsed a 22-tool surface to 11. Old-tool → new-tool mapping:
|
|
114
|
+
|
|
115
|
+
| Removed | Replacement |
|
|
116
|
+
|---------|-------------|
|
|
117
|
+
| `list_projects`, `get_project` | `search_projects` (uuid mode vs filter mode) |
|
|
118
|
+
| `list_environments`, `get_environment` | `search_environments` |
|
|
119
|
+
| `list_credentials`, `get_credential` | `search_environments` — credentials inline on each env |
|
|
120
|
+
| `create_credential` | `create_environment({credentials: [...]})` seed, or `update_environment({addCredentials: [...]})` |
|
|
121
|
+
| `update_credential` | `update_environment({updateCredentials: [{uuid, ...patch}]})` |
|
|
122
|
+
| `delete_credential` | `update_environment({removeCredentialIds: [uuid]})` |
|
|
123
|
+
| `list_teams`, `list_repos` | `create_project({teamName, repoName})` — name resolution with ambiguity handling |
|
|
124
|
+
| `list_executions`, `get_execution` | `search_executions` |
|
|
125
|
+
| `cancel_execution` | **Dropped** — backend spin-down is automatic |
|
|
126
|
+
|
|
127
|
+
Response-shape changes: the bare `count` field on list responses is gone — use `pageInfo.totalCount`.
|
|
116
128
|
|
|
117
129
|
## Configuration
|
|
118
130
|
|
|
@@ -20,7 +20,7 @@ export async function createEnvironmentHandler(input, _context) {
|
|
|
20
20
|
if (!repoName) {
|
|
21
21
|
const payload = {
|
|
22
22
|
error: 'NoProjectResolved',
|
|
23
|
-
message: 'No git repo detected and no projectUuid provided. Pass projectUuid (get it from
|
|
23
|
+
message: 'No git repo detected and no projectUuid provided. Pass projectUuid (get it from search_projects) or invoke from a directory with a git origin.',
|
|
24
24
|
};
|
|
25
25
|
return { content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }], isError: true };
|
|
26
26
|
}
|
package/dist/services/index.js
CHANGED
|
@@ -191,7 +191,7 @@ export class DebuggAIServerClient {
|
|
|
191
191
|
* List environments for a project. Paginated.
|
|
192
192
|
* Optional q filters by name via backend ?search=.
|
|
193
193
|
* The bare-array variant (no pagination) is still used internally by
|
|
194
|
-
*
|
|
194
|
+
* search_environments when iterating across all envs to inline credentials.
|
|
195
195
|
*/
|
|
196
196
|
async listEnvironmentsForProject(projectUuid, q) {
|
|
197
197
|
if (!this.tx)
|
|
@@ -298,8 +298,8 @@ export class DebuggAIServerClient {
|
|
|
298
298
|
/**
|
|
299
299
|
* List credentials for a specific environment. Unpaginated (fetches up to
|
|
300
300
|
* backend max pageSize). q filters label/username server-side via ?search=;
|
|
301
|
-
* role filters server-side. Used internally by
|
|
302
|
-
*
|
|
301
|
+
* role filters server-side. Used internally by search_environments when
|
|
302
|
+
* inlining credentials on each env in a page.
|
|
303
303
|
*/
|
|
304
304
|
async listCredentialsForEnvironment(projectUuid, envUuid, q, role) {
|
|
305
305
|
if (!this.tx)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CreateProjectInputSchema } from '../types/index.js';
|
|
2
2
|
import { createProjectHandler } from '../handlers/createProjectHandler.js';
|
|
3
|
-
const DESCRIPTION = `Create a new DebuggAI project. Required: name, platform (e.g. "web"), teamUuid
|
|
3
|
+
const DESCRIPTION = `Create a new DebuggAI project. Required: name, platform (e.g. "web"), plus a team and a repo. Team and repo each accept EITHER a UUID or a name: pass teamUuid OR teamName, and repoUuid OR repoName. Name resolution does a backend search with case-insensitive exact match (returns AmbiguousMatch with candidates on multiple hits, NotFound on no hit). The repo must be GitHub-linked to the account. Returns {created: true, project: {uuid, name, slug, platform, repoName, ...}}.`;
|
|
4
4
|
export function buildCreateProjectTool() {
|
|
5
5
|
return {
|
|
6
6
|
name: 'create_project',
|
|
@@ -11,10 +11,12 @@ export function buildCreateProjectTool() {
|
|
|
11
11
|
properties: {
|
|
12
12
|
name: { type: 'string', description: 'Project name. Required.', minLength: 1 },
|
|
13
13
|
platform: { type: 'string', description: 'Platform (e.g. "web"). Required.', minLength: 1 },
|
|
14
|
-
teamUuid: { type: 'string', description: 'Team UUID
|
|
15
|
-
|
|
14
|
+
teamUuid: { type: 'string', description: 'Team UUID. Provide teamUuid OR teamName, not both.' },
|
|
15
|
+
teamName: { type: 'string', description: 'Team name (backend-resolved, case-insensitive exact match). Provide teamUuid OR teamName, not both.' },
|
|
16
|
+
repoUuid: { type: 'string', description: 'GitHub repo UUID. Provide repoUuid OR repoName, not both. Repo must be GitHub-linked.' },
|
|
17
|
+
repoName: { type: 'string', description: 'GitHub repo name, e.g. "org/repo" (backend-resolved, case-insensitive exact match). Provide repoUuid OR repoName, not both.' },
|
|
16
18
|
},
|
|
17
|
-
required: ['name', 'platform'
|
|
19
|
+
required: ['name', 'platform'],
|
|
18
20
|
additionalProperties: false,
|
|
19
21
|
},
|
|
20
22
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@debugg-ai/debugg-ai-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.65",
|
|
4
4
|
"description": "Zero-Config, Fully AI-Managed End-to-End Testing for all code gen platforms.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,7 +10,10 @@
|
|
|
10
10
|
"node": ">=20.20.0"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"dist"
|
|
13
|
+
"dist",
|
|
14
|
+
"CHANGELOG.md",
|
|
15
|
+
"README.md",
|
|
16
|
+
"LICENSE"
|
|
14
17
|
],
|
|
15
18
|
"scripts": {
|
|
16
19
|
"lint": "eslint .",
|