@debugbundle/mcp 1.13.1 → 1.14.0
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/README.md +20 -1
- package/dist/main.cjs +146 -14
- package/package.json +1 -1
- package/server.json +2 -2
package/README.md
CHANGED
|
@@ -42,7 +42,7 @@ Use `npx -y @debugbundle/mcp` in clients that require noninteractive package exe
|
|
|
42
42
|
| Claude Desktop local MCP | local MCP server config | uses local machine auth/config |
|
|
43
43
|
| Claude Code plugin | `/plugin marketplace add debugbundle/debugbundle` | installs bundled MCP config and DebugBundle skill |
|
|
44
44
|
| Codex developer plugin | `codex plugin add debugbundle-codex@debugbundle` | repository marketplace; local MCP and workflow skill |
|
|
45
|
-
| Codex direct MCP | `codex mcp add debugbundle -- npx -y @debugbundle/mcp@1.
|
|
45
|
+
| Codex direct MCP | `codex mcp add debugbundle -- npx -y @debugbundle/mcp@1.14.0 --local-auth` | app, CLI, and IDE on the same host |
|
|
46
46
|
| Cursor | MCP config with `npx @debugbundle/mcp` | stdio transport |
|
|
47
47
|
| VS Code / GitHub MCP Registry | `com.debugbundle/mcp` | official registry metadata |
|
|
48
48
|
| OpenClaw / ClawHub | DebugBundle skill plus MCP config | use the published skill for workflow guidance |
|
|
@@ -112,6 +112,14 @@ The plugin package lives at `apps/mcp/claude-code/debugbundle` and bundles a Cla
|
|
|
112
112
|
- List saved analytics funnels and, with owner/admin access, create, update, or archive reusable funnel definitions through `list_saved_analytics_funnels`, `create_saved_analytics_funnel`, `update_saved_analytics_funnel`, and `archive_saved_analytics_funnel`.
|
|
113
113
|
- Inspect hosted health checks, probes, alerts, webhooks, projects, members, billing, capture policy, and GitHub automation state.
|
|
114
114
|
- Run local and hosted verification through tools such as `verify_local`, `verify_cloud`, `doctor`, `smoke`, and `analyze`.
|
|
115
|
+
|
|
116
|
+
`verify_app_event` provides real SDK-driven app proof, matching the CLI's
|
|
117
|
+
`verify cloud --expect-app-event`. Pass `projectId` and at least one of `service`,
|
|
118
|
+
`traceId`, or `requestId`; `environment`, `maxAgeMinutes`, and `authFilePath` are
|
|
119
|
+
optional. It reads existing incidents/bundles and never sends synthetic events.
|
|
120
|
+
The existing `verify_cloud` schema and description remain unchanged. The new tool
|
|
121
|
+
is available through ordinary and local-auth stdio MCP and its OpenClaw projection;
|
|
122
|
+
hosted read-only and restricted agent catalogs remain unchanged.
|
|
115
123
|
- Resolve or reopen incidents after verification.
|
|
116
124
|
|
|
117
125
|
For analytics questions, use direct aggregate tools first and generate an AnalyticsBundle only when a bounded analysis needs a durable artifact. The product does not create one bundle per visit.
|
|
@@ -147,3 +155,14 @@ For analytics questions, use direct aggregate tools first and generate an Analyt
|
|
|
147
155
|
## License
|
|
148
156
|
|
|
149
157
|
Apache-2.0.
|
|
158
|
+
|
|
159
|
+
`disconnect_github_installation` calls the existing organization-wide disconnect
|
|
160
|
+
route. It requires the active organization's owner and removes repository assignments
|
|
161
|
+
for all its projects, including cleanup after downgrade. It does not uninstall the
|
|
162
|
+
App on GitHub. Install/reconnect uses the dashboard browser flow to retain the signed
|
|
163
|
+
state cookie. This additive tool brings the ordinary/local-auth catalog to 130 tools;
|
|
164
|
+
the hosted 23-tool and restricted five-tool profiles remain unchanged.
|
|
165
|
+
|
|
166
|
+
`test_webhook_event` accepts all eight supported webhook events through the existing
|
|
167
|
+
scoped test service. The legacy `test_webhook` schema remains verification-only.
|
|
168
|
+
Both queue a signed synthetic envelope without creating real incidents or bundles.
|
package/dist/main.cjs
CHANGED
|
@@ -75020,6 +75020,32 @@ var AnalyticsFlowCaptureSchemas = {
|
|
|
75020
75020
|
withdraw: Context.strict()
|
|
75021
75021
|
};
|
|
75022
75022
|
|
|
75023
|
+
// ../../packages/shared-types/src/analytics-query.ts
|
|
75024
|
+
var DEFAULT_LAST_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
75025
|
+
var MAX_LAST_MS = 370 * 24 * 60 * 60 * 1e3;
|
|
75026
|
+
var AnalyticsMetricsQuerySchema = external_exports.object({
|
|
75027
|
+
project_id: external_exports.string().uuid(),
|
|
75028
|
+
from: external_exports.string().datetime().optional(),
|
|
75029
|
+
to: external_exports.string().datetime().optional(),
|
|
75030
|
+
last: external_exports.string().trim().min(2).max(16).optional(),
|
|
75031
|
+
granularity: AnalyticsMetricsGranularitySchema.optional().default("day"),
|
|
75032
|
+
service: external_exports.string().trim().min(1).max(120).optional(),
|
|
75033
|
+
environment: external_exports.string().trim().min(1).max(120).optional(),
|
|
75034
|
+
route: external_exports.string().trim().min(1).max(2048).refine((value) => !value.includes("?") && !value.includes("#")).optional(),
|
|
75035
|
+
device_type: external_exports.string().trim().min(1).max(40).optional(),
|
|
75036
|
+
browser: external_exports.string().trim().min(1).max(80).optional(),
|
|
75037
|
+
os: external_exports.string().trim().min(1).max(80).optional(),
|
|
75038
|
+
language: external_exports.string().trim().min(1).max(40).optional(),
|
|
75039
|
+
country: external_exports.string().trim().min(1).max(8).optional(),
|
|
75040
|
+
auth_state: external_exports.enum(["anonymous", "authenticated", "unknown"]).optional(),
|
|
75041
|
+
referrer: external_exports.string().trim().min(1).max(255).optional(),
|
|
75042
|
+
utm_source: external_exports.string().trim().min(1).max(128).optional(),
|
|
75043
|
+
utm_medium: external_exports.string().trim().min(1).max(128).optional(),
|
|
75044
|
+
utm_campaign: external_exports.string().trim().min(1).max(128).optional(),
|
|
75045
|
+
custom_dimensions: external_exports.record(external_exports.string().regex(/^[A-Za-z][A-Za-z0-9_.-]{0,63}$/), external_exports.string().max(128)).refine((value) => Object.keys(value).length <= 8).optional(),
|
|
75046
|
+
limit: external_exports.coerce.number().int().min(1).max(100).optional().default(10)
|
|
75047
|
+
}).strict();
|
|
75048
|
+
|
|
75023
75049
|
// ../../packages/shared-types/src/index.ts
|
|
75024
75050
|
var SeveritySchema = external_exports.enum(["low", "medium", "high", "critical"]);
|
|
75025
75051
|
var BundleSdkSchema = external_exports.object({
|
|
@@ -76341,7 +76367,12 @@ var WebhookLinksSchema = external_exports.object({
|
|
|
76341
76367
|
reproduction: external_exports.string().min(1).optional()
|
|
76342
76368
|
}).strict();
|
|
76343
76369
|
var BundleLifecycleWebhookPayloadSchema = external_exports.object({
|
|
76344
|
-
event: external_exports.enum([
|
|
76370
|
+
event: external_exports.enum([
|
|
76371
|
+
"bundle.created",
|
|
76372
|
+
"bundle.updated",
|
|
76373
|
+
"bundle.resolved",
|
|
76374
|
+
"improvement_bundle.created"
|
|
76375
|
+
]),
|
|
76345
76376
|
occurred_at: external_exports.string().datetime(),
|
|
76346
76377
|
project_id: external_exports.string().min(1),
|
|
76347
76378
|
bundle_id: external_exports.string().min(1),
|
|
@@ -76381,10 +76412,15 @@ var VerificationWebhookTestPayloadSchema = external_exports.object({
|
|
|
76381
76412
|
message: external_exports.string().min(1)
|
|
76382
76413
|
}).strict()
|
|
76383
76414
|
}).strict();
|
|
76415
|
+
var SyntheticWebhookTestPayloadSchema = VerificationWebhookTestPayloadSchema.extend({
|
|
76416
|
+
event: WebhookEventTypeSchema,
|
|
76417
|
+
event_type: WebhookEventTypeSchema
|
|
76418
|
+
});
|
|
76384
76419
|
var WebhookEventPayloadSchema = external_exports.union([
|
|
76385
76420
|
BundleLifecycleWebhookPayloadSchema,
|
|
76386
76421
|
IncidentLifecycleWebhookPayloadSchema,
|
|
76387
|
-
VerificationWebhookTestPayloadSchema
|
|
76422
|
+
VerificationWebhookTestPayloadSchema,
|
|
76423
|
+
SyntheticWebhookTestPayloadSchema
|
|
76388
76424
|
]);
|
|
76389
76425
|
var WebhookFiltersSchema = external_exports.object({
|
|
76390
76426
|
environment: external_exports.array(external_exports.string()).optional(),
|
|
@@ -77319,6 +77355,15 @@ async function expectNoContent(responsePromise) {
|
|
|
77319
77355
|
}
|
|
77320
77356
|
function createGitHubManagementApi(client) {
|
|
77321
77357
|
return {
|
|
77358
|
+
async disconnectInstallation(input2) {
|
|
77359
|
+
return expectNoContent(
|
|
77360
|
+
client.request({
|
|
77361
|
+
method: "DELETE",
|
|
77362
|
+
path: "/v1/github/installation",
|
|
77363
|
+
bearerToken: input2.bearerToken
|
|
77364
|
+
})
|
|
77365
|
+
);
|
|
77366
|
+
},
|
|
77322
77367
|
async getInstallation(input2) {
|
|
77323
77368
|
const query = input2.projectId === void 0 ? "" : `?project_id=${encodeURIComponent(input2.projectId)}`;
|
|
77324
77369
|
return expectInstallation(
|
|
@@ -89101,6 +89146,14 @@ function mapMcpError9(error2) {
|
|
|
89101
89146
|
}
|
|
89102
89147
|
function createGitHubMcpTools(api) {
|
|
89103
89148
|
return {
|
|
89149
|
+
async disconnect_github_installation(input2) {
|
|
89150
|
+
try {
|
|
89151
|
+
await api.disconnectInstallation({ bearerToken: String(input2["bearerToken"]) });
|
|
89152
|
+
return { disconnected: true };
|
|
89153
|
+
} catch (error2) {
|
|
89154
|
+
mapMcpError9(error2);
|
|
89155
|
+
}
|
|
89156
|
+
},
|
|
89104
89157
|
async get_github_status(input2) {
|
|
89105
89158
|
try {
|
|
89106
89159
|
const bearerToken = String(input2["bearerToken"]);
|
|
@@ -89173,7 +89226,9 @@ function createGitHubMcpTools(api) {
|
|
|
89173
89226
|
...Array.isArray(input2["services"]) ? { services: input2["services"].map((value) => String(value)) } : {},
|
|
89174
89227
|
...typeof input2["severityMin"] === "string" ? { severityMin: input2["severityMin"] } : {},
|
|
89175
89228
|
...typeof input2["bundleType"] === "string" ? { bundleType: input2["bundleType"] } : {},
|
|
89176
|
-
...typeof input2["incidentStatus"] === "string" ? {
|
|
89229
|
+
...typeof input2["incidentStatus"] === "string" ? {
|
|
89230
|
+
incidentStatus: input2["incidentStatus"]
|
|
89231
|
+
} : {},
|
|
89177
89232
|
...typeof input2["cooldownSeconds"] === "number" ? { cooldownSeconds: input2["cooldownSeconds"] } : {},
|
|
89178
89233
|
...typeof input2["enabled"] === "boolean" ? { enabled: input2["enabled"] } : {}
|
|
89179
89234
|
})
|
|
@@ -89204,7 +89259,9 @@ function createGitHubMcpTools(api) {
|
|
|
89204
89259
|
deliveries: await api.listProjectDeliveries({
|
|
89205
89260
|
bearerToken: String(input2["bearerToken"]),
|
|
89206
89261
|
projectId: String(input2["projectId"]),
|
|
89207
|
-
...typeof input2["status"] === "string" ? {
|
|
89262
|
+
...typeof input2["status"] === "string" ? {
|
|
89263
|
+
status: input2["status"]
|
|
89264
|
+
} : {},
|
|
89208
89265
|
...typeof input2["limit"] === "number" ? { limit: input2["limit"] } : {}
|
|
89209
89266
|
})
|
|
89210
89267
|
};
|
|
@@ -118435,6 +118492,16 @@ function parseJsonOutput2(output) {
|
|
|
118435
118492
|
}
|
|
118436
118493
|
return parsed;
|
|
118437
118494
|
}
|
|
118495
|
+
function cloudVerificationOptions(input2) {
|
|
118496
|
+
return {
|
|
118497
|
+
projectId: String(input2["projectId"]),
|
|
118498
|
+
...typeof input2["service"] === "string" ? { service: input2["service"] } : {},
|
|
118499
|
+
...typeof input2["environment"] === "string" ? { environment: input2["environment"] } : {},
|
|
118500
|
+
...typeof input2["maxAgeMinutes"] === "number" ? { maxAgeMinutes: input2["maxAgeMinutes"] } : {},
|
|
118501
|
+
...typeof input2["authFilePath"] === "string" ? { authFilePath: input2["authFilePath"] } : {},
|
|
118502
|
+
json: true
|
|
118503
|
+
};
|
|
118504
|
+
}
|
|
118438
118505
|
async function runJsonCommand2(command) {
|
|
118439
118506
|
try {
|
|
118440
118507
|
const result = await command();
|
|
@@ -118472,14 +118539,19 @@ function createSetupMcpTools(commands) {
|
|
|
118472
118539
|
async verify_cloud(input2) {
|
|
118473
118540
|
return runJsonCommand2(
|
|
118474
118541
|
() => commands.verifyCloudCommand({
|
|
118475
|
-
|
|
118476
|
-
...typeof input2["service"] === "string" ? { service: input2["service"] } : {},
|
|
118477
|
-
...typeof input2["environment"] === "string" ? { environment: input2["environment"] } : {},
|
|
118478
|
-
...typeof input2["maxAgeMinutes"] === "number" ? { maxAgeMinutes: input2["maxAgeMinutes"] } : {},
|
|
118542
|
+
...cloudVerificationOptions(input2),
|
|
118479
118543
|
...input2["trigger5xx"] === true ? { trigger5xx: true } : {},
|
|
118480
|
-
...typeof input2["trigger4xxStatus"] === "number" ? { trigger4xxStatus: input2["trigger4xxStatus"] } : {}
|
|
118481
|
-
|
|
118482
|
-
|
|
118544
|
+
...typeof input2["trigger4xxStatus"] === "number" ? { trigger4xxStatus: input2["trigger4xxStatus"] } : {}
|
|
118545
|
+
})
|
|
118546
|
+
);
|
|
118547
|
+
},
|
|
118548
|
+
async verify_app_event(input2) {
|
|
118549
|
+
return runJsonCommand2(
|
|
118550
|
+
() => commands.verifyCloudCommand({
|
|
118551
|
+
...cloudVerificationOptions(input2),
|
|
118552
|
+
expectAppEvent: true,
|
|
118553
|
+
...typeof input2["traceId"] === "string" ? { traceId: input2["traceId"] } : {},
|
|
118554
|
+
...typeof input2["requestId"] === "string" ? { requestId: input2["requestId"] } : {}
|
|
118483
118555
|
})
|
|
118484
118556
|
);
|
|
118485
118557
|
},
|
|
@@ -118771,6 +118843,20 @@ function createWebhookMcpTools(api) {
|
|
|
118771
118843
|
mapMcpError21(error2);
|
|
118772
118844
|
}
|
|
118773
118845
|
},
|
|
118846
|
+
async test_webhook_event(input2) {
|
|
118847
|
+
try {
|
|
118848
|
+
return {
|
|
118849
|
+
delivery: await api.testWebhook({
|
|
118850
|
+
bearerToken: String(input2["bearerToken"]),
|
|
118851
|
+
projectId: String(input2["projectId"]),
|
|
118852
|
+
webhookId: String(input2["webhookId"]),
|
|
118853
|
+
eventType: WebhookEventTypeSchema.parse(input2["eventType"])
|
|
118854
|
+
})
|
|
118855
|
+
};
|
|
118856
|
+
} catch (error2) {
|
|
118857
|
+
mapMcpError21(error2);
|
|
118858
|
+
}
|
|
118859
|
+
},
|
|
118774
118860
|
async test_webhook(input2) {
|
|
118775
118861
|
try {
|
|
118776
118862
|
const requestInput = {
|
|
@@ -118890,6 +118976,7 @@ function createWeeklyReportMcpTools(api) {
|
|
|
118890
118976
|
|
|
118891
118977
|
// src/tool-catalog-foundation.ts
|
|
118892
118978
|
var optionalBearerTokenSchema = external_exports.string().optional();
|
|
118979
|
+
var appVerificationHintSchema = external_exports.string().min(1).refine((value) => value.trim().length > 0);
|
|
118893
118980
|
var sourceSchema = external_exports.enum(["local", "cloud"]).optional();
|
|
118894
118981
|
var listIncidentsInputSchema = external_exports.object({
|
|
118895
118982
|
bearerToken: optionalBearerTokenSchema,
|
|
@@ -118956,6 +119043,25 @@ var MCP_TOOL_CATALOG_FOUNDATION = [
|
|
|
118956
119043
|
authFilePath: external_exports.string().optional()
|
|
118957
119044
|
})
|
|
118958
119045
|
},
|
|
119046
|
+
{
|
|
119047
|
+
name: "verify_app_event",
|
|
119048
|
+
group: "setup",
|
|
119049
|
+
description: "Wait for a real SDK-driven hosted app incident and verify its bundle using service, traceId, or requestId. Read-only proof; does not create synthetic events. Requires local member authentication.",
|
|
119050
|
+
inputSchema: external_exports.object({
|
|
119051
|
+
projectId: external_exports.string().min(1),
|
|
119052
|
+
service: appVerificationHintSchema.optional(),
|
|
119053
|
+
environment: external_exports.string().optional(),
|
|
119054
|
+
maxAgeMinutes: external_exports.number().optional(),
|
|
119055
|
+
traceId: appVerificationHintSchema.optional(),
|
|
119056
|
+
requestId: appVerificationHintSchema.optional(),
|
|
119057
|
+
authFilePath: external_exports.string().optional()
|
|
119058
|
+
}).strict().refine(
|
|
119059
|
+
(input2) => input2.service !== void 0 || input2.traceId !== void 0 || input2.requestId !== void 0,
|
|
119060
|
+
{
|
|
119061
|
+
message: "App-event proof requires service, traceId, or requestId."
|
|
119062
|
+
}
|
|
119063
|
+
)
|
|
119064
|
+
},
|
|
118959
119065
|
{
|
|
118960
119066
|
name: "smoke",
|
|
118961
119067
|
group: "setup",
|
|
@@ -119212,6 +119318,12 @@ var MCP_TOOL_CATALOG_FOUNDATION = [
|
|
|
119212
119318
|
projectId: external_exports.string()
|
|
119213
119319
|
})
|
|
119214
119320
|
},
|
|
119321
|
+
{
|
|
119322
|
+
name: "disconnect_github_installation",
|
|
119323
|
+
group: "github",
|
|
119324
|
+
description: "Disconnect the GitHub installation for the active organization and remove repository assignments across all its projects. Owner only. This does not uninstall the App from GitHub; install/reconnect requires the dashboard browser handoff.",
|
|
119325
|
+
inputSchema: external_exports.object({ bearerToken: external_exports.string().min(1) }).strict()
|
|
119326
|
+
},
|
|
119215
119327
|
{
|
|
119216
119328
|
name: "list_project_tokens",
|
|
119217
119329
|
group: "tokens",
|
|
@@ -119253,13 +119365,22 @@ var MCP_TOOL_CATALOG_FOUNDATION = [
|
|
|
119253
119365
|
name: "create_agent_token",
|
|
119254
119366
|
group: "tokens",
|
|
119255
119367
|
description: "Create a single-project minimized read credential, returned once. Requires owner or project admin.",
|
|
119256
|
-
inputSchema: external_exports.object({
|
|
119368
|
+
inputSchema: external_exports.object({
|
|
119369
|
+
bearerToken: external_exports.string(),
|
|
119370
|
+
projectId: external_exports.string().uuid(),
|
|
119371
|
+
label: external_exports.string().min(1).max(120),
|
|
119372
|
+
expiresAt: external_exports.string().datetime().optional()
|
|
119373
|
+
})
|
|
119257
119374
|
},
|
|
119258
119375
|
{
|
|
119259
119376
|
name: "revoke_agent_token",
|
|
119260
119377
|
group: "tokens",
|
|
119261
119378
|
description: "Revoke a project-scoped agent credential. Requires owner or project admin.",
|
|
119262
|
-
inputSchema: external_exports.object({
|
|
119379
|
+
inputSchema: external_exports.object({
|
|
119380
|
+
bearerToken: external_exports.string(),
|
|
119381
|
+
projectId: external_exports.string().uuid(),
|
|
119382
|
+
tokenId: external_exports.string().uuid()
|
|
119383
|
+
})
|
|
119263
119384
|
},
|
|
119264
119385
|
{
|
|
119265
119386
|
name: "list_member_tokens",
|
|
@@ -119357,6 +119478,17 @@ var MCP_TOOL_CATALOG_OPERATIONS = [
|
|
|
119357
119478
|
eventType: verificationEventTypeSchema.optional()
|
|
119358
119479
|
})
|
|
119359
119480
|
},
|
|
119481
|
+
{
|
|
119482
|
+
name: "test_webhook_event",
|
|
119483
|
+
group: "webhooks",
|
|
119484
|
+
description: "Queue a signed synthetic webhook test for any supported lifecycle event. Requires endpoint creator or owner/admin authority; does not create a real incident or bundle. The legacy test_webhook verification contract is retained.",
|
|
119485
|
+
inputSchema: external_exports.object({
|
|
119486
|
+
bearerToken: external_exports.string(),
|
|
119487
|
+
projectId: external_exports.string().min(1),
|
|
119488
|
+
webhookId: external_exports.string().min(1),
|
|
119489
|
+
eventType: WebhookEventTypeSchema
|
|
119490
|
+
}).strict()
|
|
119491
|
+
},
|
|
119360
119492
|
{
|
|
119361
119493
|
name: "list_webhook_deliveries",
|
|
119362
119494
|
group: "webhooks",
|
|
@@ -120097,7 +120229,7 @@ var import_node_readline = require("node:readline");
|
|
|
120097
120229
|
var package_default = {
|
|
120098
120230
|
name: "@debugbundle/mcp",
|
|
120099
120231
|
mcpName: "com.debugbundle/mcp",
|
|
120100
|
-
version: "1.
|
|
120232
|
+
version: "1.14.0",
|
|
120101
120233
|
private: false,
|
|
120102
120234
|
description: "MCP server for runtime error reporting, incident response, health checks, debug bundles, and product analytics",
|
|
120103
120235
|
license: "Apache-2.0",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@debugbundle/mcp",
|
|
3
3
|
"mcpName": "com.debugbundle/mcp",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.14.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "MCP server for runtime error reporting, incident response, health checks, debug bundles, and product analytics",
|
|
7
7
|
"license": "Apache-2.0",
|
package/server.json
CHANGED
|
@@ -8,13 +8,13 @@
|
|
|
8
8
|
"source": "github",
|
|
9
9
|
"subfolder": "apps/mcp"
|
|
10
10
|
},
|
|
11
|
-
"version": "1.
|
|
11
|
+
"version": "1.14.0",
|
|
12
12
|
"packages": [
|
|
13
13
|
{
|
|
14
14
|
"registryType": "npm",
|
|
15
15
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
16
16
|
"identifier": "@debugbundle/mcp",
|
|
17
|
-
"version": "1.
|
|
17
|
+
"version": "1.14.0",
|
|
18
18
|
"transport": {
|
|
19
19
|
"type": "stdio"
|
|
20
20
|
},
|