@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 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 **21** tools. The headline one is `check_app_in_browser`; the rest manage projects, environments, credentials, workflow execution history, and the teams/repos needed to create new projects.
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
- ### `check_app_in_browser`
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 — a localhost URL (`http://localhost:3000`) is auto-tunneled via ngrok |
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
- ### Project management
56
+ One focused check per call. The agent has a ~25-step internal budget; split broader suites across multiple calls.
53
57
 
54
- | Tool | Purpose |
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
- ### Teams and repos (prerequisites for `create_project`)
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
- | Tool | Purpose |
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
- ### Environment management (scoped to a project)
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 | Purpose |
72
- |------|---------|
73
- | `list_environments` | List envs for a project. Optional `q`, `projectUuid`. |
74
- | `create_environment` | Create a new env. Requires `name` + `url`. |
75
- | `get_environment` | Fetch an env by `uuid`. |
76
- | `update_environment` | PATCH `name` / `url` / `description`. |
77
- | `delete_environment` | Destructive delete. |
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
- ### Credential management (scoped to an environment)
74
+ ### Projects
80
75
 
81
76
  | Tool | Purpose |
82
77
  |------|---------|
83
- | `list_credentials` | List creds. Optional `environmentId`, `q`, `role` (server-side filter). **Never returns passwords.** |
84
- | `create_credential` | Create a cred. Requires `environmentId`, `label`, `username`, `password`; optional `role`. |
85
- | `get_credential` | Fetch by `uuid` + `environmentId`. |
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
- ### Workflow execution history
82
+ ### Environments (credential sub-actions folded in)
90
83
 
91
84
  | Tool | Purpose |
92
85
  |------|---------|
93
- | `list_executions` | Paginated history. Optional `status`, `limit`. |
94
- | `get_execution` | Full detail for a single execution including node-level state. |
95
- | `cancel_execution` | Cancel an in-flight execution. |
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 `list_*` tool is paginated by default. Response shape:
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) to any list tool. No tool ever silently truncates results.
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 list_projects) or invoke from a directory with a git origin.',
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
  }
@@ -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
- * list_credentials when iterating across all envs.
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 list_credentials when
302
- * iterating across envs.
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 (from list_teams), repoUuid (from list_repos). Returns {created: true, project: {uuid, name, slug, platform, repoName, ...}}. The repo must be GitHub-linked to the account. Use list_teams + list_repos first to discover valid UUIDs.`;
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 (from list_teams). Required.' },
15
- repoUuid: { type: 'string', description: 'GitHub repo UUID (from list_repos). Required repo must be GitHub-linked.' },
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', 'teamUuid', 'repoUuid'],
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.64",
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 .",