@transcend-io/mcp-server-preferences 0.4.13 → 0.5.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/dist/cli.mjs CHANGED
@@ -1,18 +1,24 @@
1
1
  #!/usr/bin/env node
2
- import { n as getPreferenceTools, t as PREFERENCE_OAUTH_SCOPES } from "./scopes-Ck0_EcNu.mjs";
3
- import { TranscendGraphQLBase, TranscendRestClient, createMCPServer } from "@transcend-io/mcp-server-base";
2
+ import { n as getPreferenceTools, t as PREFERENCE_OAUTH_SCOPES } from "./scopes-CuJmw6vE.mjs";
3
+ import { TranscendGraphQLBase, createMCPServer, createTranscendRestClient } from "@transcend-io/mcp-server-base";
4
4
  //#endregion
5
5
  //#region src/cli.ts
6
6
  createMCPServer({
7
7
  name: "transcend-mcp-preferences",
8
- version: "0.4.13",
8
+ version: "0.5.0",
9
9
  oauthScopes: PREFERENCE_OAUTH_SCOPES,
10
10
  getTools: getPreferenceTools,
11
- createClients: ({ auth, sombraUrl, graphqlUrl, dashboardUrl }) => ({
12
- rest: new TranscendRestClient(auth, sombraUrl),
13
- graphql: new TranscendGraphQLBase(auth, graphqlUrl),
14
- dashboardUrl
15
- })
11
+ createClients: ({ auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl }) => {
12
+ const graphql = new TranscendGraphQLBase(auth, graphqlUrl);
13
+ return {
14
+ rest: createTranscendRestClient(auth, graphql, {
15
+ sombraUrl,
16
+ sombraCustomerKey
17
+ }),
18
+ graphql,
19
+ dashboardUrl
20
+ };
21
+ }
16
22
  });
17
23
  //#endregion
18
24
  export {};
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/cli.ts"],"sourcesContent":["","#!/usr/bin/env node\nimport {\n createMCPServer,\n TranscendGraphQLBase,\n TranscendRestClient,\n} from '@transcend-io/mcp-server-base';\n\nimport packageJson from '../package.json' with { type: 'json' };\nimport { PREFERENCE_OAUTH_SCOPES } from './scopes.js';\nimport { getPreferenceTools } from './tools/index.js';\n\ncreateMCPServer({\n name: 'transcend-mcp-preferences',\n version: packageJson.version,\n oauthScopes: PREFERENCE_OAUTH_SCOPES,\n getTools: getPreferenceTools,\n createClients: ({ auth, sombraUrl, graphqlUrl, dashboardUrl }) => ({\n rest: new TranscendRestClient(auth, sombraUrl),\n graphql: new TranscendGraphQLBase(auth, graphqlUrl),\n dashboardUrl,\n }),\n});\n"],"mappings":";;;;;ACWA,gBAAgB;CACd,MAAM;CACGA;CACT,aAAa;CACb,UAAU;CACV,gBAAgB,EAAE,MAAM,WAAW,YAAY,oBAAoB;EACjE,MAAM,IAAI,oBAAoB,MAAM,UAAU;EAC9C,SAAS,IAAI,qBAAqB,MAAM,WAAW;EACnD;EACD;CACF,CAAC"}
1
+ {"version":3,"file":"cli.mjs","names":["packageJson.version"],"sources":["../package.json","../src/cli.ts"],"sourcesContent":["","#!/usr/bin/env node\nimport {\n createMCPServer,\n createTranscendRestClient,\n TranscendGraphQLBase,\n} from '@transcend-io/mcp-server-base';\n\nimport packageJson from '../package.json' with { type: 'json' };\nimport { PREFERENCE_OAUTH_SCOPES } from './scopes.js';\nimport { getPreferenceTools } from './tools/index.js';\n\ncreateMCPServer({\n name: 'transcend-mcp-preferences',\n version: packageJson.version,\n oauthScopes: PREFERENCE_OAUTH_SCOPES,\n getTools: getPreferenceTools,\n createClients: ({ auth, sombraUrl, sombraCustomerKey, graphqlUrl, dashboardUrl }) => {\n const graphql = new TranscendGraphQLBase(auth, graphqlUrl);\n return {\n rest: createTranscendRestClient(auth, graphql, { sombraUrl, sombraCustomerKey }),\n graphql,\n dashboardUrl,\n };\n },\n});\n"],"mappings":";;;;;ACWA,gBAAgB;CACd,MAAM;CACGA;CACT,aAAa;CACb,UAAU;CACV,gBAAgB,EAAE,MAAM,WAAW,mBAAmB,YAAY,mBAAmB;EACnF,MAAM,UAAU,IAAI,qBAAqB,MAAM,WAAW;AAC1D,SAAO;GACL,MAAM,0BAA0B,MAAM,SAAS;IAAE;IAAW;IAAmB,CAAC;GAChF;GACA;GACD;;CAEJ,CAAC"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import { a as UpsertPreferencesSchema, c as DeleteIdentifiersSchema, d as IdentifierSchema, f as QueryPreferencesSchema, i as UpsertPreferencesRecordSchema, l as DeletePreferencesSchema, n as getPreferenceTools, o as UpdateIdentifiersItemSchema, r as UpsertPreferencesPurposeSchema, s as UpdateIdentifiersSchema, t as PREFERENCE_OAUTH_SCOPES, u as AppendIdentifiersSchema } from "./scopes-Ck0_EcNu.mjs";
1
+ import { a as UpsertPreferencesSchema, c as DeleteIdentifiersSchema, d as IdentifierSchema, f as QueryPreferencesSchema, i as UpsertPreferencesRecordSchema, l as DeletePreferencesSchema, n as getPreferenceTools, o as UpdateIdentifiersItemSchema, r as UpsertPreferencesPurposeSchema, s as UpdateIdentifiersSchema, t as PREFERENCE_OAUTH_SCOPES, u as AppendIdentifiersSchema } from "./scopes-CuJmw6vE.mjs";
2
2
  export { AppendIdentifiersSchema, DeleteIdentifiersSchema, DeletePreferencesSchema, IdentifierSchema, PREFERENCE_OAUTH_SCOPES, QueryPreferencesSchema, UpdateIdentifiersItemSchema, UpdateIdentifiersSchema, UpsertPreferencesPurposeSchema, UpsertPreferencesRecordSchema, UpsertPreferencesSchema, getPreferenceTools };
@@ -21,6 +21,7 @@ function createPreferencesQueryTool(clients) {
21
21
  destructiveHint: false,
22
22
  idempotentHint: true
23
23
  },
24
+ requireSombra: true,
24
25
  zodSchema: QueryPreferencesSchema,
25
26
  handler: async ({ partition, identifiers }) => {
26
27
  const result = await rest.queryPreferences({
@@ -54,6 +55,7 @@ function createPreferencesAppendIdentifiersTool(clients) {
54
55
  destructiveHint: false,
55
56
  idempotentHint: false
56
57
  },
58
+ requireSombra: true,
57
59
  zodSchema: AppendIdentifiersSchema,
58
60
  handler: async ({ partition, userId, identifiers }) => {
59
61
  return createToolResult(true, {
@@ -86,6 +88,7 @@ function createPreferencesDeleteTool(clients) {
86
88
  destructiveHint: true,
87
89
  idempotentHint: false
88
90
  },
91
+ requireSombra: true,
89
92
  zodSchema: DeletePreferencesSchema,
90
93
  handler: async ({ partition, identifiers }) => {
91
94
  const result = await rest.deletePreferences(partition, identifiers.map((id) => ({
@@ -119,6 +122,7 @@ function createPreferencesDeleteIdentifiersTool(clients) {
119
122
  destructiveHint: true,
120
123
  idempotentHint: false
121
124
  },
125
+ requireSombra: true,
122
126
  zodSchema: DeleteIdentifiersSchema,
123
127
  handler: async ({ partition, userId, identifiers }) => {
124
128
  return createToolResult(true, {
@@ -157,6 +161,7 @@ function createPreferencesUpdateIdentifiersTool(clients) {
157
161
  destructiveHint: false,
158
162
  idempotentHint: true
159
163
  },
164
+ requireSombra: true,
160
165
  zodSchema: UpdateIdentifiersSchema,
161
166
  handler: async ({ partition, userId, identifiers }) => {
162
167
  return createToolResult(true, {
@@ -200,6 +205,7 @@ function createPreferencesUpsertTool(clients) {
200
205
  destructiveHint: false,
201
206
  idempotentHint: true
202
207
  },
208
+ requireSombra: true,
203
209
  zodSchema: UpsertPreferencesSchema,
204
210
  handler: async ({ partition, records }) => {
205
211
  const result = await rest.upsertPreferences({
@@ -241,4 +247,4 @@ const PREFERENCE_OAUTH_SCOPES = [ScopeName.ViewPrivacyCenter, ScopeName.ManagePr
241
247
  //#endregion
242
248
  export { UpsertPreferencesSchema as a, DeleteIdentifiersSchema as c, IdentifierSchema as d, QueryPreferencesSchema as f, UpsertPreferencesRecordSchema as i, DeletePreferencesSchema as l, getPreferenceTools as n, UpdateIdentifiersItemSchema as o, UpsertPreferencesPurposeSchema as r, UpdateIdentifiersSchema as s, PREFERENCE_OAUTH_SCOPES as t, AppendIdentifiersSchema as u };
243
249
 
244
- //# sourceMappingURL=scopes-Ck0_EcNu.mjs.map
250
+ //# sourceMappingURL=scopes-CuJmw6vE.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scopes-CuJmw6vE.mjs","names":[],"sources":["../src/tools/preferences_query.ts","../src/tools/preferences_append_identifiers.ts","../src/tools/preferences_delete.ts","../src/tools/preferences_delete_identifiers.ts","../src/tools/preferences_update_identifiers.ts","../src/tools/preferences_upsert.ts","../src/tools/index.ts","../src/scopes.ts"],"sourcesContent":["import { createListResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const IdentifierSchema = z.object({\n value: z.string().describe('Identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type IdentifierInput = z.infer<typeof IdentifierSchema>;\n\nexport const QueryPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to query'),\n});\nexport type QueryPreferencesInput = z.infer<typeof QueryPreferencesSchema>;\n\nexport function createPreferencesQueryTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_query',\n description: 'Query consent preferences for multiple users by their identifiers',\n category: 'Preference Management',\n readOnly: true,\n annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: QueryPreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.queryPreferences({\n partition,\n identifiers: identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n });\n\n return createListResult(result, {\n totalCount: result.length,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const AppendIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to append identifiers to'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to append'),\n});\nexport type AppendIdentifiersInput = z.infer<typeof AppendIdentifiersSchema>;\n\nexport function createPreferencesAppendIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_append_identifiers',\n description: 'Append additional identifiers to an existing user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Appends identifiers to the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },\n requireSombra: true,\n zodSchema: AppendIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.appendIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersAdded: identifiers.length,\n message: 'Identifiers appended successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeletePreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeletePreferencesInput = z.infer<typeof DeletePreferencesSchema>;\n\nexport function createPreferencesDeleteTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete',\n description: 'Delete consent preferences for specified users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes preference data for the identifiers',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n requireSombra: true,\n zodSchema: DeletePreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.deletePreferences(\n partition,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n message: `Successfully deleted ${result.count} preference records`,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeleteIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to delete identifiers from'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeleteIdentifiersInput = z.infer<typeof DeleteIdentifiersSchema>;\n\nexport function createPreferencesDeleteIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete_identifiers',\n description: 'Delete specific identifiers from a user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes identifiers from the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n requireSombra: true,\n zodSchema: DeleteIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.deleteIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersDeleted: identifiers.length,\n message: 'Identifiers deleted successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpdateIdentifiersItemSchema = z.object({\n oldValue: z.string().describe('Old identifier value'),\n newValue: z.string().describe('New identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type UpdateIdentifiersItemInput = z.infer<typeof UpdateIdentifiersItemSchema>;\n\nexport const UpdateIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to update identifiers for'),\n identifiers: z\n .array(UpdateIdentifiersItemSchema)\n .describe('Array of identifier update objects with old and new values'),\n});\nexport type UpdateIdentifiersInput = z.infer<typeof UpdateIdentifiersSchema>;\n\nexport function createPreferencesUpdateIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_update_identifiers',\n description: 'Update existing identifiers for a user (e.g., when email changes)',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Updates identifiers for the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: UpdateIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.updateIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n oldValue: id.oldValue,\n newValue: id.newValue,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersUpdated: identifiers.length,\n message: 'Identifiers updated successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpsertPreferencesPurposeSchema = z.object({\n purpose: z.string().describe('Purpose slug'),\n enabled: z.boolean().describe('Whether consent is granted'),\n});\nexport type UpsertPreferencesPurposeInput = z.infer<typeof UpsertPreferencesPurposeSchema>;\n\nexport const UpsertPreferencesRecordSchema = z.object({\n identifier: z.string().describe('User identifier'),\n identifierType: z.string().optional().describe('Identifier type (optional)'),\n purposes: z.array(UpsertPreferencesPurposeSchema).describe('Array of purpose consent settings'),\n confirmed: z.boolean().optional().describe('Whether consent was explicitly confirmed'),\n});\nexport type UpsertPreferencesRecordInput = z.infer<typeof UpsertPreferencesRecordSchema>;\n\nexport const UpsertPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n records: z.array(UpsertPreferencesRecordSchema).describe('Array of preference records to upsert'),\n});\nexport type UpsertPreferencesInput = z.infer<typeof UpsertPreferencesSchema>;\n\nexport function createPreferencesUpsertTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_upsert',\n description: 'Batch upsert consent preference records for multiple users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Creates or updates preference records for users',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n requireSombra: true,\n zodSchema: UpsertPreferencesSchema,\n handler: async ({ partition, records }) => {\n const result = await rest.upsertPreferences({\n partition,\n records: records.map((record) => ({\n identifier: record.identifier,\n identifierType: record.identifierType,\n purposes: record.purposes.map((p) => ({\n purpose: p.purpose,\n enabled: p.enabled,\n })),\n confirmed: record.confirmed,\n })),\n });\n\n return createToolResult(true, {\n ...result,\n recordsProcessed: records.length,\n message: `Successfully upserted ${result.count} preference records`,\n });\n },\n });\n}\n","import type { ToolDefinition, ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { createPreferencesAppendIdentifiersTool } from './preferences_append_identifiers.js';\nimport { createPreferencesDeleteTool } from './preferences_delete.js';\nimport { createPreferencesDeleteIdentifiersTool } from './preferences_delete_identifiers.js';\nimport { createPreferencesQueryTool } from './preferences_query.js';\nimport { createPreferencesUpdateIdentifiersTool } from './preferences_update_identifiers.js';\nimport { createPreferencesUpsertTool } from './preferences_upsert.js';\n\nexport function getPreferenceTools(clients: ToolClients): ToolDefinition[] {\n return [\n createPreferencesQueryTool(clients),\n createPreferencesUpsertTool(clients),\n createPreferencesDeleteTool(clients),\n createPreferencesAppendIdentifiersTool(clients),\n createPreferencesUpdateIdentifiersTool(clients),\n createPreferencesDeleteIdentifiersTool(clients),\n ];\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\n\n/** OAuth scopes required for Preference MCP tools (offline_access added by base). */\nexport const PREFERENCE_OAUTH_SCOPES = [\n ScopeName.ViewPrivacyCenter,\n ScopeName.ManagePrivacyCenter,\n] as const;\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transcend-io/mcp-server-preferences",
3
- "version": "0.4.13",
3
+ "version": "0.5.0",
4
4
  "description": "Transcend MCP Server — Preference Management tools.",
5
5
  "homepage": "https://github.com/transcend-io/tools/tree/main/packages/mcp/mcp-server-preferences",
6
6
  "license": "Apache-2.0",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "@modelcontextprotocol/sdk": "^1.29.0",
34
34
  "zod": "^4.3.6",
35
- "@transcend-io/mcp-server-base": "0.7.0",
35
+ "@transcend-io/mcp-server-base": "0.8.0",
36
36
  "@transcend-io/privacy-types": "5.9.0"
37
37
  },
38
38
  "devDependencies": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"scopes-Ck0_EcNu.mjs","names":[],"sources":["../src/tools/preferences_query.ts","../src/tools/preferences_append_identifiers.ts","../src/tools/preferences_delete.ts","../src/tools/preferences_delete_identifiers.ts","../src/tools/preferences_update_identifiers.ts","../src/tools/preferences_upsert.ts","../src/tools/index.ts","../src/scopes.ts"],"sourcesContent":["import { createListResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const IdentifierSchema = z.object({\n value: z.string().describe('Identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type IdentifierInput = z.infer<typeof IdentifierSchema>;\n\nexport const QueryPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to query'),\n});\nexport type QueryPreferencesInput = z.infer<typeof QueryPreferencesSchema>;\n\nexport function createPreferencesQueryTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_query',\n description: 'Query consent preferences for multiple users by their identifiers',\n category: 'Preference Management',\n readOnly: true,\n annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true },\n zodSchema: QueryPreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.queryPreferences({\n partition,\n identifiers: identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n });\n\n return createListResult(result, {\n totalCount: result.length,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const AppendIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to append identifiers to'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to append'),\n});\nexport type AppendIdentifiersInput = z.infer<typeof AppendIdentifiersSchema>;\n\nexport function createPreferencesAppendIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_append_identifiers',\n description: 'Append additional identifiers to an existing user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Appends identifiers to the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: false },\n zodSchema: AppendIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.appendIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersAdded: identifiers.length,\n message: 'Identifiers appended successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeletePreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeletePreferencesInput = z.infer<typeof DeletePreferencesSchema>;\n\nexport function createPreferencesDeleteTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete',\n description: 'Delete consent preferences for specified users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes preference data for the identifiers',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n zodSchema: DeletePreferencesSchema,\n handler: async ({ partition, identifiers }) => {\n const result = await rest.deletePreferences(\n partition,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n message: `Successfully deleted ${result.count} preference records`,\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { IdentifierSchema } from './preferences_query.js';\n\nexport const DeleteIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to delete identifiers from'),\n identifiers: z.array(IdentifierSchema).describe('Array of identifier objects to delete'),\n});\nexport type DeleteIdentifiersInput = z.infer<typeof DeleteIdentifiersSchema>;\n\nexport function createPreferencesDeleteIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_delete_identifiers',\n description: 'Delete specific identifiers from a user preference record',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Deletes identifiers from the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false },\n zodSchema: DeleteIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.deleteIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n value: id.value,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersDeleted: identifiers.length,\n message: 'Identifiers deleted successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpdateIdentifiersItemSchema = z.object({\n oldValue: z.string().describe('Old identifier value'),\n newValue: z.string().describe('New identifier value'),\n type: z.string().optional().describe('Identifier type (optional)'),\n});\nexport type UpdateIdentifiersItemInput = z.infer<typeof UpdateIdentifiersItemSchema>;\n\nexport const UpdateIdentifiersSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n userId: z.string().describe('User ID to update identifiers for'),\n identifiers: z\n .array(UpdateIdentifiersItemSchema)\n .describe('Array of identifier update objects with old and new values'),\n});\nexport type UpdateIdentifiersInput = z.infer<typeof UpdateIdentifiersSchema>;\n\nexport function createPreferencesUpdateIdentifiersTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_update_identifiers',\n description: 'Update existing identifiers for a user (e.g., when email changes)',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Updates identifiers for the user preference record',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n zodSchema: UpdateIdentifiersSchema,\n handler: async ({ partition, userId, identifiers }) => {\n const result = await rest.updateIdentifiers(\n partition,\n userId,\n identifiers.map((id) => ({\n oldValue: id.oldValue,\n newValue: id.newValue,\n type: id.type,\n })),\n );\n\n return createToolResult(true, {\n ...result,\n identifiersUpdated: identifiers.length,\n message: 'Identifiers updated successfully',\n });\n },\n });\n}\n","import { createToolResult, defineTool, z, type ToolClients } from '@transcend-io/mcp-server-base';\n\nexport const UpsertPreferencesPurposeSchema = z.object({\n purpose: z.string().describe('Purpose slug'),\n enabled: z.boolean().describe('Whether consent is granted'),\n});\nexport type UpsertPreferencesPurposeInput = z.infer<typeof UpsertPreferencesPurposeSchema>;\n\nexport const UpsertPreferencesRecordSchema = z.object({\n identifier: z.string().describe('User identifier'),\n identifierType: z.string().optional().describe('Identifier type (optional)'),\n purposes: z.array(UpsertPreferencesPurposeSchema).describe('Array of purpose consent settings'),\n confirmed: z.boolean().optional().describe('Whether consent was explicitly confirmed'),\n});\nexport type UpsertPreferencesRecordInput = z.infer<typeof UpsertPreferencesRecordSchema>;\n\nexport const UpsertPreferencesSchema = z.object({\n partition: z.string().describe('Partition/organization context'),\n records: z.array(UpsertPreferencesRecordSchema).describe('Array of preference records to upsert'),\n});\nexport type UpsertPreferencesInput = z.infer<typeof UpsertPreferencesSchema>;\n\nexport function createPreferencesUpsertTool(clients: ToolClients) {\n const { rest } = clients;\n return defineTool({\n name: 'preferences_upsert',\n description: 'Batch upsert consent preference records for multiple users',\n category: 'Preference Management',\n readOnly: false,\n confirmationHint: 'Creates or updates preference records for users',\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true },\n zodSchema: UpsertPreferencesSchema,\n handler: async ({ partition, records }) => {\n const result = await rest.upsertPreferences({\n partition,\n records: records.map((record) => ({\n identifier: record.identifier,\n identifierType: record.identifierType,\n purposes: record.purposes.map((p) => ({\n purpose: p.purpose,\n enabled: p.enabled,\n })),\n confirmed: record.confirmed,\n })),\n });\n\n return createToolResult(true, {\n ...result,\n recordsProcessed: records.length,\n message: `Successfully upserted ${result.count} preference records`,\n });\n },\n });\n}\n","import type { ToolDefinition, ToolClients } from '@transcend-io/mcp-server-base';\n\nimport { createPreferencesAppendIdentifiersTool } from './preferences_append_identifiers.js';\nimport { createPreferencesDeleteTool } from './preferences_delete.js';\nimport { createPreferencesDeleteIdentifiersTool } from './preferences_delete_identifiers.js';\nimport { createPreferencesQueryTool } from './preferences_query.js';\nimport { createPreferencesUpdateIdentifiersTool } from './preferences_update_identifiers.js';\nimport { createPreferencesUpsertTool } from './preferences_upsert.js';\n\nexport function getPreferenceTools(clients: ToolClients): ToolDefinition[] {\n return [\n createPreferencesQueryTool(clients),\n createPreferencesUpsertTool(clients),\n createPreferencesDeleteTool(clients),\n createPreferencesAppendIdentifiersTool(clients),\n createPreferencesUpdateIdentifiersTool(clients),\n createPreferencesDeleteIdentifiersTool(clients),\n ];\n}\n","import { ScopeName } from '@transcend-io/privacy-types';\n\n/** OAuth scopes required for Preference MCP tools (offline_access added by base). */\nexport const PREFERENCE_OAUTH_SCOPES = [\n ScopeName.ViewPrivacyCenter,\n ScopeName.ManagePrivacyCenter,\n] as const;\n"],"mappings":"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"}