@taiga-ai/mcp-server 0.36.0-dev.917 → 0.36.0-dev.919

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.
Files changed (2) hide show
  1. package/dist/index.js +66 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -26183,6 +26183,31 @@ const ENVIRONMENT_TYPES = [
26183
26183
  //#endregion
26184
26184
  //#region ../../packages/types/dist/api-keys.js
26185
26185
  /**
26186
+ * API key scopes control what operations a key can perform.
26187
+ * Scopes act as a ceiling -- the effective permissions are the intersection
26188
+ * of the key's scopes and the user's role-based capabilities.
26189
+ *
26190
+ * Convention: "resource:action" matching the existing Capability type.
26191
+ */
26192
+ const API_KEY_SCOPES = [
26193
+ "products:read",
26194
+ "products:write",
26195
+ "backlog:read",
26196
+ "backlog:write",
26197
+ "factories:read",
26198
+ "factories:documents:write",
26199
+ "users:read",
26200
+ "tenant:documents:read",
26201
+ "tenant:documents:write",
26202
+ "vcs:read",
26203
+ "customDocuments:read",
26204
+ "customDocuments:write",
26205
+ "customDocuments:delete",
26206
+ "factories:write",
26207
+ "vcs:manage"
26208
+ ];
26209
+ const API_KEY_PREFIX = "taiga_sk_live_";
26210
+ /**
26186
26211
  * The groups the MCP server's tools come in (PRO-2838). A key may name the ones
26187
26212
  * its AI tool sees; null is every one. This is focus, not security: a tool the
26188
26213
  * key's role or scopes do not allow is never offered, whatever is named here.
@@ -27344,6 +27369,19 @@ strictObject({ type: productDocumentType }), object({
27344
27369
  isProtected: boolean().default(false)
27345
27370
  }).optional()
27346
27371
  });
27372
+ /**
27373
+ * The MCP toolsets a key's AI tool sees: at least one, each once, or null for
27374
+ * every one (PRO-2838). An empty list would start a server with no tools at all.
27375
+ */
27376
+ const mcpToolsets = array(_enum(MCP_TOOLSETS)).min(1).refine((sets) => new Set(sets).size === sets.length, "Name each toolset once").nullable();
27377
+ strictObject({
27378
+ key: string$2().regex(new RegExp(`^${API_KEY_PREFIX}[0-9a-f]{64}$`)),
27379
+ name: string$2().min(1).max(255),
27380
+ scopes: array(_enum(API_KEY_SCOPES)).optional(),
27381
+ expiresInDays: number$1().int().min(1).max(365).optional(),
27382
+ mcpToolsets: mcpToolsets.optional()
27383
+ }), object({ keyId: uuid });
27384
+ strictObject({ mcpToolsets });
27347
27385
  object({
27348
27386
  url: string$2().url(),
27349
27387
  expiresAt: string$2()
@@ -27424,7 +27462,16 @@ strictObject({
27424
27462
  status: _enum(GITLAB_CONNECTION_STATUSES),
27425
27463
  lastValidatedAt: string$2(),
27426
27464
  detail: string$2().nullable()
27427
- }), object({ finished: boolean() });
27465
+ }), object({ finished: boolean() }), strictObject({ search: string$2().trim().max(100).optional() }), object({
27466
+ projects: array(object({
27467
+ id: number$1().int(),
27468
+ pathWithNamespace: string$2(),
27469
+ nameWithNamespace: string$2(),
27470
+ webUrl: string$2(),
27471
+ defaultBranch: string$2().nullable()
27472
+ })).nullable(),
27473
+ truncated: boolean()
27474
+ });
27428
27475
  object({
27429
27476
  outcome: _enum([
27430
27477
  "uninstalled",
@@ -27433,6 +27480,8 @@ object({
27433
27480
  ]),
27434
27481
  manageUrl: string$2().nullable()
27435
27482
  });
27483
+ /** A value GitHub's redirect carries back: a state token, or a one-time code. */
27484
+ const githubCallbackSecret = string$2().trim().min(1).max(1024);
27436
27485
  strictObject({
27437
27486
  displayName: string$2().trim().min(1).max(255),
27438
27487
  baseUrl: string$2().trim().min(1).max(480),
@@ -27450,7 +27499,16 @@ strictObject({
27450
27499
  expiresAt: isoInstant.nullable().optional(),
27451
27500
  credential: registryCredential,
27452
27501
  testPackage: registryTestPackage.optional()
27453
- }), strictObject({ hostId: uuid.optional() }), object({ installUrl: string$2().url() }), strictObject({
27502
+ }), strictObject({ hostId: uuid.optional() }), object({ installUrl: string$2().url() }), strictObject({ state: githubCallbackSecret }), object({
27503
+ clientId: string$2(),
27504
+ authorizeUrl: string$2(),
27505
+ redirectUri: string$2().optional()
27506
+ }), strictObject({
27507
+ installationId: number$1().int().positive(),
27508
+ setupAction: _enum(["install", "update"]),
27509
+ state: githubCallbackSecret.optional(),
27510
+ code: githubCallbackSecret.optional()
27511
+ }), strictObject({
27454
27512
  subdomain: string$2().min(1).max(39).optional(),
27455
27513
  serverUrl: string$2().min(1).max(2048).optional(),
27456
27514
  caBundlePem: string$2().max(65536).optional(),
@@ -27460,6 +27518,9 @@ strictObject({
27460
27518
  manifest: record(string$2(), unknown$1()),
27461
27519
  postUrl: string$2().url(),
27462
27520
  state: string$2()
27521
+ }), strictObject({
27522
+ state: githubCallbackSecret,
27523
+ code: githubCallbackSecret
27463
27524
  }), strictObject({ type: _enum(TENANT_DOCUMENT_TYPES) }), strictObject({ type: _enum(TENANT_DOCUMENT_TYPES).refine((type) => type !== "design_standards", { message: "The design standards draft is not made through sync" }) }), strictObject({
27464
27525
  name: string$2().min(1).max(50),
27465
27526
  action: _enum(["accept", "decline"])
@@ -27505,6 +27566,9 @@ strictObject({
27505
27566
  }).refine((a) => Boolean(a.approve) !== Boolean(a.remove), { message: "Name one license to approve or remove" }), object({
27506
27567
  enrolled: number$1().int().nonnegative(),
27507
27568
  total: number$1().int().nonnegative()
27569
+ }), object({
27570
+ principalArn: string$2().nullable(),
27571
+ externalId: string$2()
27508
27572
  });
27509
27573
  strictObject({ kind: _enum(["sbom", "notices"]) }), object({
27510
27574
  url: string$2().url().nullable(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taiga-ai/mcp-server",
3
- "version": "0.36.0-dev.917",
3
+ "version": "0.36.0-dev.919",
4
4
  "description": "Taiga for AI coding assistants: read products, policies, initiatives and runs, and operate the line, over MCP",
5
5
  "mcpName": "ga.tai/mcp-server",
6
6
  "license": "UNLICENSED",