@codeqr/ts-mcp 0.2.1 → 0.4.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.
Files changed (139) hide show
  1. package/docs-search-tool.d.mts +44 -0
  2. package/docs-search-tool.d.mts.map +1 -0
  3. package/docs-search-tool.d.ts +44 -0
  4. package/docs-search-tool.d.ts.map +1 -0
  5. package/docs-search-tool.js +43 -0
  6. package/docs-search-tool.js.map +1 -0
  7. package/docs-search-tool.mjs +39 -0
  8. package/docs-search-tool.mjs.map +1 -0
  9. package/options.d.mts +1 -0
  10. package/options.d.mts.map +1 -1
  11. package/options.d.ts +1 -0
  12. package/options.d.ts.map +1 -1
  13. package/options.js +13 -6
  14. package/options.js.map +1 -1
  15. package/options.mjs +13 -6
  16. package/options.mjs.map +1 -1
  17. package/package.json +12 -2
  18. package/server.d.mts.map +1 -1
  19. package/server.d.ts.map +1 -1
  20. package/server.js +8 -4
  21. package/server.js.map +1 -1
  22. package/server.mjs +8 -4
  23. package/server.mjs.map +1 -1
  24. package/src/docs-search-tool.ts +48 -0
  25. package/src/options.ts +17 -7
  26. package/src/server.ts +8 -5
  27. package/src/tools/links/bulk/create-links-bulk.ts +4 -0
  28. package/src/tools/links/count-links.ts +5 -1
  29. package/src/tools/links/create-links.ts +4 -0
  30. package/src/tools/links/list-links.ts +4 -0
  31. package/src/tools/links/retrieve-info-links.ts +1 -1
  32. package/src/tools/links/update-links.ts +4 -0
  33. package/src/tools/links/upsert-links.ts +4 -0
  34. package/src/tools/projects/list-projects.ts +1 -1
  35. package/src/tools/projects/retrieve-projects.ts +1 -1
  36. package/src/tools/qrcodes/bulk/create-qrcodes-bulk.ts +5 -1
  37. package/src/tools/qrcodes/count-qrcodes.ts +5 -1
  38. package/src/tools/qrcodes/create-qrcodes.ts +5 -1
  39. package/src/tools/qrcodes/list-qrcodes.ts +4 -0
  40. package/src/tools/qrcodes/update-qrcodes.ts +4 -0
  41. package/src/tools/qrcodes/upsert-qrcodes.ts +5 -1
  42. package/src/tools/track/track-lead-track.ts +23 -9
  43. package/src/tools/track/track-sale-track.ts +38 -11
  44. package/tools/links/bulk/create-links-bulk.d.mts.map +1 -1
  45. package/tools/links/bulk/create-links-bulk.d.ts.map +1 -1
  46. package/tools/links/bulk/create-links-bulk.js +4 -0
  47. package/tools/links/bulk/create-links-bulk.js.map +1 -1
  48. package/tools/links/bulk/create-links-bulk.mjs +4 -0
  49. package/tools/links/bulk/create-links-bulk.mjs.map +1 -1
  50. package/tools/links/count-links.d.mts.map +1 -1
  51. package/tools/links/count-links.d.ts.map +1 -1
  52. package/tools/links/count-links.js +5 -1
  53. package/tools/links/count-links.js.map +1 -1
  54. package/tools/links/count-links.mjs +5 -1
  55. package/tools/links/count-links.mjs.map +1 -1
  56. package/tools/links/create-links.d.mts.map +1 -1
  57. package/tools/links/create-links.d.ts.map +1 -1
  58. package/tools/links/create-links.js +4 -0
  59. package/tools/links/create-links.js.map +1 -1
  60. package/tools/links/create-links.mjs +4 -0
  61. package/tools/links/create-links.mjs.map +1 -1
  62. package/tools/links/list-links.d.mts.map +1 -1
  63. package/tools/links/list-links.d.ts.map +1 -1
  64. package/tools/links/list-links.js +4 -0
  65. package/tools/links/list-links.js.map +1 -1
  66. package/tools/links/list-links.mjs +4 -0
  67. package/tools/links/list-links.mjs.map +1 -1
  68. package/tools/links/retrieve-info-links.js +1 -1
  69. package/tools/links/retrieve-info-links.js.map +1 -1
  70. package/tools/links/retrieve-info-links.mjs +1 -1
  71. package/tools/links/retrieve-info-links.mjs.map +1 -1
  72. package/tools/links/update-links.d.mts.map +1 -1
  73. package/tools/links/update-links.d.ts.map +1 -1
  74. package/tools/links/update-links.js +4 -0
  75. package/tools/links/update-links.js.map +1 -1
  76. package/tools/links/update-links.mjs +4 -0
  77. package/tools/links/update-links.mjs.map +1 -1
  78. package/tools/links/upsert-links.d.mts.map +1 -1
  79. package/tools/links/upsert-links.d.ts.map +1 -1
  80. package/tools/links/upsert-links.js +4 -0
  81. package/tools/links/upsert-links.js.map +1 -1
  82. package/tools/links/upsert-links.mjs +4 -0
  83. package/tools/links/upsert-links.mjs.map +1 -1
  84. package/tools/projects/list-projects.js +1 -1
  85. package/tools/projects/list-projects.js.map +1 -1
  86. package/tools/projects/list-projects.mjs +1 -1
  87. package/tools/projects/list-projects.mjs.map +1 -1
  88. package/tools/projects/retrieve-projects.js +1 -1
  89. package/tools/projects/retrieve-projects.js.map +1 -1
  90. package/tools/projects/retrieve-projects.mjs +1 -1
  91. package/tools/projects/retrieve-projects.mjs.map +1 -1
  92. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.mts.map +1 -1
  93. package/tools/qrcodes/bulk/create-qrcodes-bulk.d.ts.map +1 -1
  94. package/tools/qrcodes/bulk/create-qrcodes-bulk.js +5 -1
  95. package/tools/qrcodes/bulk/create-qrcodes-bulk.js.map +1 -1
  96. package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs +5 -1
  97. package/tools/qrcodes/bulk/create-qrcodes-bulk.mjs.map +1 -1
  98. package/tools/qrcodes/count-qrcodes.d.mts.map +1 -1
  99. package/tools/qrcodes/count-qrcodes.d.ts.map +1 -1
  100. package/tools/qrcodes/count-qrcodes.js +5 -1
  101. package/tools/qrcodes/count-qrcodes.js.map +1 -1
  102. package/tools/qrcodes/count-qrcodes.mjs +5 -1
  103. package/tools/qrcodes/count-qrcodes.mjs.map +1 -1
  104. package/tools/qrcodes/create-qrcodes.d.mts.map +1 -1
  105. package/tools/qrcodes/create-qrcodes.d.ts.map +1 -1
  106. package/tools/qrcodes/create-qrcodes.js +5 -1
  107. package/tools/qrcodes/create-qrcodes.js.map +1 -1
  108. package/tools/qrcodes/create-qrcodes.mjs +5 -1
  109. package/tools/qrcodes/create-qrcodes.mjs.map +1 -1
  110. package/tools/qrcodes/list-qrcodes.d.mts.map +1 -1
  111. package/tools/qrcodes/list-qrcodes.d.ts.map +1 -1
  112. package/tools/qrcodes/list-qrcodes.js +4 -0
  113. package/tools/qrcodes/list-qrcodes.js.map +1 -1
  114. package/tools/qrcodes/list-qrcodes.mjs +4 -0
  115. package/tools/qrcodes/list-qrcodes.mjs.map +1 -1
  116. package/tools/qrcodes/update-qrcodes.d.mts.map +1 -1
  117. package/tools/qrcodes/update-qrcodes.d.ts.map +1 -1
  118. package/tools/qrcodes/update-qrcodes.js +4 -0
  119. package/tools/qrcodes/update-qrcodes.js.map +1 -1
  120. package/tools/qrcodes/update-qrcodes.mjs +4 -0
  121. package/tools/qrcodes/update-qrcodes.mjs.map +1 -1
  122. package/tools/qrcodes/upsert-qrcodes.d.mts.map +1 -1
  123. package/tools/qrcodes/upsert-qrcodes.d.ts.map +1 -1
  124. package/tools/qrcodes/upsert-qrcodes.js +5 -1
  125. package/tools/qrcodes/upsert-qrcodes.js.map +1 -1
  126. package/tools/qrcodes/upsert-qrcodes.mjs +5 -1
  127. package/tools/qrcodes/upsert-qrcodes.mjs.map +1 -1
  128. package/tools/track/track-lead-track.d.mts.map +1 -1
  129. package/tools/track/track-lead-track.d.ts.map +1 -1
  130. package/tools/track/track-lead-track.js +18 -9
  131. package/tools/track/track-lead-track.js.map +1 -1
  132. package/tools/track/track-lead-track.mjs +18 -9
  133. package/tools/track/track-lead-track.mjs.map +1 -1
  134. package/tools/track/track-sale-track.d.mts.map +1 -1
  135. package/tools/track/track-sale-track.d.ts.map +1 -1
  136. package/tools/track/track-sale-track.js +31 -11
  137. package/tools/track/track-sale-track.js.map +1 -1
  138. package/tools/track/track-sale-track.mjs +31 -11
  139. package/tools/track/track-sale-track.mjs.map +1 -1
package/server.mjs CHANGED
@@ -6,11 +6,12 @@ import Codeqr from '@codeqr/ts';
6
6
  import { applyCompatibilityTransformations, defaultClientCapabilities, knownClients, parseEmbeddedJSON, } from "./compat.mjs";
7
7
  import { dynamicTools } from "./dynamic-tools.mjs";
8
8
  import { codeTool } from "./code-tool.mjs";
9
+ import docsSearchTool from "./docs-search-tool.mjs";
9
10
  export { ClientType } from "./compat.mjs";
10
11
  export { endpoints } from "./tools.mjs";
11
12
  export const newMcpServer = () => new McpServer({
12
13
  name: 'codeqr_ts_api',
13
- version: '0.2.1',
14
+ version: '0.4.0',
14
15
  }, { capabilities: { tools: {}, logging: {} } });
15
16
  // Create server instance
16
17
  export const server = newMcpServer();
@@ -104,7 +105,7 @@ export function initMcpServer(params) {
104
105
  */
105
106
  export async function selectTools(endpoints, options) {
106
107
  const filteredEndpoints = query(options?.filters ?? [], endpoints);
107
- let includedTools = filteredEndpoints;
108
+ let includedTools = filteredEndpoints.slice();
108
109
  if (includedTools.length > 0) {
109
110
  if (options?.includeDynamicTools) {
110
111
  includedTools = dynamicTools(includedTools);
@@ -112,7 +113,7 @@ export async function selectTools(endpoints, options) {
112
113
  }
113
114
  else {
114
115
  if (options?.includeAllTools) {
115
- includedTools = endpoints;
116
+ includedTools = endpoints.slice();
116
117
  }
117
118
  else if (options?.includeDynamicTools) {
118
119
  includedTools = dynamicTools(endpoints);
@@ -121,9 +122,12 @@ export async function selectTools(endpoints, options) {
121
122
  includedTools = [await codeTool()];
122
123
  }
123
124
  else {
124
- includedTools = endpoints;
125
+ includedTools = endpoints.slice();
125
126
  }
126
127
  }
128
+ if (options?.includeDocsTools ?? true) {
129
+ includedTools.push(docsSearchTool);
130
+ }
127
131
  const capabilities = { ...defaultClientCapabilities, ...options?.capabilities };
128
132
  return applyCompatibilityTransformations(includedTools, capabilities);
129
133
  }
package/server.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","sourceRoot":"","sources":["src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { Metadata, asTextContentResult } from './tools/types';
4
+
5
+ import { Tool } from '@modelcontextprotocol/sdk/types.js';
6
+
7
+ export const metadata: Metadata = {
8
+ resource: 'all',
9
+ operation: 'read',
10
+ tags: [],
11
+ httpMethod: 'get',
12
+ };
13
+
14
+ export const tool: Tool = {
15
+ name: 'search_docs',
16
+ description:
17
+ 'Search for documentation for how to use the client to interact with the API.\nThe tool will return an array of Markdown-formatted documentation pages.',
18
+ inputSchema: {
19
+ type: 'object',
20
+ properties: {
21
+ query: {
22
+ type: 'string',
23
+ description: 'The query to search for.',
24
+ },
25
+ language: {
26
+ type: 'string',
27
+ description: 'The language for the SDK to search for.',
28
+ enum: ['http', 'python', 'go', 'typescript', 'terraform', 'ruby', 'java', 'kotlin'],
29
+ },
30
+ },
31
+ required: ['query', 'language'],
32
+ },
33
+ annotations: {
34
+ readOnlyHint: true,
35
+ },
36
+ };
37
+
38
+ const docsSearchURL =
39
+ process.env['DOCS_SEARCH_URL'] || 'https://api.stainless.com/api/projects/codeqr/docs/search';
40
+
41
+ export const handler = async (_: unknown, args: Record<string, unknown> | undefined) => {
42
+ const body = args as any;
43
+ const query = new URLSearchParams(body).toString();
44
+ const result = await fetch(`${docsSearchURL}?${query}`);
45
+ return asTextContentResult(await result.json());
46
+ };
47
+
48
+ export default { metadata, tool, handler };
package/src/options.ts CHANGED
@@ -17,6 +17,7 @@ export type McpOptions = {
17
17
  includeDynamicTools?: boolean | undefined;
18
18
  includeAllTools?: boolean | undefined;
19
19
  includeCodeTools?: boolean | undefined;
20
+ includeDocsTools?: boolean | undefined;
20
21
  filters?: Filter[] | undefined;
21
22
  capabilities?: Partial<ClientCapabilities> | undefined;
22
23
  };
@@ -55,13 +56,13 @@ export function parseCLIOptions(): CLIOptions {
55
56
  .option('tools', {
56
57
  type: 'string',
57
58
  array: true,
58
- choices: ['dynamic', 'all', 'code'],
59
+ choices: ['dynamic', 'all', 'code', 'docs'],
59
60
  description: 'Use dynamic tools or all tools',
60
61
  })
61
62
  .option('no-tools', {
62
63
  type: 'string',
63
64
  array: true,
64
- choices: ['dynamic', 'all', 'code'],
65
+ choices: ['dynamic', 'all', 'code', 'docs'],
65
66
  description: 'Do not use any dynamic or all tools',
66
67
  })
67
68
  .option('tool', {
@@ -245,13 +246,15 @@ export function parseCLIOptions(): CLIOptions {
245
246
  }
246
247
  }
247
248
 
248
- const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code') =>
249
- explicitTools ? argv.tools?.includes(toolType) && !argv.noTools?.includes(toolType) : undefined;
249
+ const shouldIncludeToolType = (toolType: 'dynamic' | 'all' | 'code' | 'docs') =>
250
+ argv.noTools?.includes(toolType) ? false
251
+ : argv.tools?.includes(toolType) ? true
252
+ : undefined;
250
253
 
251
- const explicitTools = Boolean(argv.tools || argv.noTools);
252
254
  const includeDynamicTools = shouldIncludeToolType('dynamic');
253
255
  const includeAllTools = shouldIncludeToolType('all');
254
256
  const includeCodeTools = shouldIncludeToolType('code');
257
+ const includeDocsTools = shouldIncludeToolType('docs');
255
258
 
256
259
  const transport = argv.transport as 'stdio' | 'http';
257
260
 
@@ -261,6 +264,7 @@ export function parseCLIOptions(): CLIOptions {
261
264
  includeDynamicTools,
262
265
  includeAllTools,
263
266
  includeCodeTools,
267
+ includeDocsTools,
264
268
  filters,
265
269
  capabilities: clientCapabilities,
266
270
  list: argv.list || false,
@@ -280,8 +284,8 @@ const coerceArray = <T extends z.ZodTypeAny>(zodType: T) =>
280
284
  );
281
285
 
282
286
  const QueryOptions = z.object({
283
- tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Use dynamic tools or all tools'),
284
- no_tools: coerceArray(z.enum(['dynamic', 'all'])).describe('Do not use dynamic tools or all tools'),
287
+ tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Use dynamic tools or all tools'),
288
+ no_tools: coerceArray(z.enum(['dynamic', 'all', 'docs'])).describe('Do not use dynamic tools or all tools'),
285
289
  tool: coerceArray(z.string()).describe('Include tools matching the specified names'),
286
290
  resource: coerceArray(z.string()).describe('Include tools matching the specified resources'),
287
291
  operation: coerceArray(z.enum(['read', 'write'])).describe(
@@ -376,11 +380,17 @@ export function parseQueryOptions(defaultOptions: McpOptions, query: unknown): M
376
380
  : queryOptions.tools?.includes('all') ? true
377
381
  : defaultOptions.includeAllTools;
378
382
 
383
+ let docsTools: boolean | undefined =
384
+ queryOptions.no_tools && queryOptions.no_tools?.includes('docs') ? false
385
+ : queryOptions.tools?.includes('docs') ? true
386
+ : defaultOptions.includeDocsTools;
387
+
379
388
  return {
380
389
  client: queryOptions.client ?? defaultOptions.client,
381
390
  includeDynamicTools: dynamicTools,
382
391
  includeAllTools: allTools,
383
392
  includeCodeTools: undefined,
393
+ includeDocsTools: docsTools,
384
394
  filters,
385
395
  capabilities: clientCapabilities,
386
396
  };
package/src/server.ts CHANGED
@@ -21,6 +21,7 @@ import {
21
21
  } from './compat';
22
22
  import { dynamicTools } from './dynamic-tools';
23
23
  import { codeTool } from './code-tool';
24
+ import docsSearchTool from './docs-search-tool';
24
25
  import { McpOptions } from './options';
25
26
 
26
27
  export { McpOptions } from './options';
@@ -33,7 +34,7 @@ export const newMcpServer = () =>
33
34
  new McpServer(
34
35
  {
35
36
  name: 'codeqr_ts_api',
36
- version: '0.2.1',
37
+ version: '0.4.0',
37
38
  },
38
39
  { capabilities: { tools: {}, logging: {} } },
39
40
  );
@@ -147,7 +148,7 @@ export function initMcpServer(params: {
147
148
  export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise<Endpoint[]> {
148
149
  const filteredEndpoints = query(options?.filters ?? [], endpoints);
149
150
 
150
- let includedTools = filteredEndpoints;
151
+ let includedTools = filteredEndpoints.slice();
151
152
 
152
153
  if (includedTools.length > 0) {
153
154
  if (options?.includeDynamicTools) {
@@ -155,16 +156,18 @@ export async function selectTools(endpoints: Endpoint[], options?: McpOptions):
155
156
  }
156
157
  } else {
157
158
  if (options?.includeAllTools) {
158
- includedTools = endpoints;
159
+ includedTools = endpoints.slice();
159
160
  } else if (options?.includeDynamicTools) {
160
161
  includedTools = dynamicTools(endpoints);
161
162
  } else if (options?.includeCodeTools) {
162
163
  includedTools = [await codeTool()];
163
164
  } else {
164
- includedTools = endpoints;
165
+ includedTools = endpoints.slice();
165
166
  }
166
167
  }
167
-
168
+ if (options?.includeDocsTools ?? true) {
169
+ includedTools.push(docsSearchTool);
170
+ }
168
171
  const capabilities = { ...defaultClientCapabilities, ...options?.capabilities };
169
172
  return applyCompatibilityTransformations(includedTools, capabilities);
170
173
  }
@@ -75,6 +75,10 @@ export const tool: Tool = {
75
75
  type: 'boolean',
76
76
  description: 'Whether the short link is flexible.',
77
77
  },
78
+ folderId: {
79
+ type: 'string',
80
+ description: 'The unique ID existing folder to assign the short link to.',
81
+ },
78
82
  geo: {
79
83
  type: 'object',
80
84
  description:
@@ -67,6 +67,10 @@ export const tool: Tool = {
67
67
  description: 'Expires before date (ISO string)',
68
68
  format: 'date-time',
69
69
  },
70
+ folderId: {
71
+ type: 'string',
72
+ description: 'The folder ID to filter the links by.',
73
+ },
70
74
  geo: {
71
75
  type: 'object',
72
76
  description:
@@ -827,7 +831,7 @@ export const tool: Tool = {
827
831
  groupBy: {
828
832
  type: 'string',
829
833
  description: 'The field to group the links by.',
830
- enum: ['domain', 'tagId', 'userId'],
834
+ enum: ['domain', 'tagId', 'userId', 'folderId'],
831
835
  },
832
836
  hasComments: {
833
837
  type: 'boolean',
@@ -70,6 +70,10 @@ export const tool: Tool = {
70
70
  type: 'boolean',
71
71
  description: 'Whether the short link is flexible.',
72
72
  },
73
+ folderId: {
74
+ type: 'string',
75
+ description: 'The unique ID existing folder to assign the short link to.',
76
+ },
73
77
  geo: {
74
78
  type: 'object',
75
79
  description:
@@ -67,6 +67,10 @@ export const tool: Tool = {
67
67
  description: 'Expires before date (ISO string)',
68
68
  format: 'date-time',
69
69
  },
70
+ folderId: {
71
+ type: 'string',
72
+ description: 'The folder ID to filter the links by.',
73
+ },
70
74
  geo: {
71
75
  type: 'object',
72
76
  description:
@@ -18,7 +18,7 @@ export const metadata: Metadata = {
18
18
  export const tool: Tool = {
19
19
  name: 'retrieve_info_links',
20
20
  description:
21
- "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve the info for a link.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/link',\n $defs: {\n link: {\n type: 'object',\n title: 'Link',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the short link.'\n },\n android: {\n type: 'string',\n description: 'The Android destination URL for the short link for Android device targeting.'\n },\n archived: {\n type: 'boolean',\n description: 'Whether the short link is archived.'\n },\n clicks: {\n type: 'number',\n description: 'The number of clicks on the short link.'\n },\n comments: {\n type: 'string',\n description: 'The comments for the short link.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the short link was created.'\n },\n description: {\n type: 'string',\n description: 'The description of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n doIndex: {\n type: 'boolean',\n description: 'Whether search engines can index the short link.'\n },\n domain: {\n type: 'string',\n description: 'The domain of the short link. If not provided, the main domain of the project will be used (or `codeqr.link` if the project has no domains).'\n },\n expiredUrl: {\n type: 'string',\n description: 'The URL to redirect to when the short link expires.'\n },\n expiresAt: {\n type: 'string',\n description: 'The date and time when the short link will expire in ISO-8601 format. Must be in the future.'\n },\n externalId: {\n type: 'string',\n description: 'This is the ID of the link in your database.'\n },\n filled: {\n type: 'boolean',\n description: 'Whether the link is filled or not.'\n },\n flexible: {\n type: 'boolean',\n description: 'Whether the short link is flexible.'\n },\n geo: {\n type: 'object',\n description: 'Geographic targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. Learn more: https://codeqr.link/geo',\n additionalProperties: true\n },\n image: {\n type: 'string',\n description: 'The image of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n ios: {\n type: 'string',\n description: 'The iOS destination URL for the short link for iOS device targeting.'\n },\n isFormMandatory: {\n type: 'boolean',\n description: 'If the form is mandatory for the page.'\n },\n key: {\n type: 'string',\n description: 'The slug of the short link. If not provided, a random 7-character slug will be generated.'\n },\n lastClicked: {\n type: 'string',\n description: 'The date and time when the short link was last clicked.'\n },\n leads: {\n type: 'number',\n description: 'The number of leads generated by the short link.'\n },\n notificationToken: {\n type: 'string',\n description: 'The notification token of the short link.'\n },\n password: {\n type: 'string',\n description: 'The password required to access the short link destination URL.'\n },\n preRedirection: {\n type: 'boolean',\n description: 'Whether the short link has pre-redirection.'\n },\n projectId: {\n type: 'string',\n description: 'The ID of the project of the short link.'\n },\n proxy: {\n type: 'boolean',\n description: 'Whether the short link uses the custom link preview feature.'\n },\n publicStats: {\n type: 'boolean',\n description: 'Whether the short link statistics are publicly accessible.'\n },\n rewrite: {\n type: 'boolean',\n description: 'Whether the short link uses link cloaking.'\n },\n saleAmount: {\n type: 'number',\n description: 'The amount of the sale generated by the link.'\n },\n sales: {\n type: 'number',\n description: 'The number of sales generated by the short link.'\n },\n tagId: {\n type: 'string',\n description: '[DEPRECATED (use `tags` instead)]: The unique ID of the tag assigned to the short link.'\n },\n tags: {\n type: 'array',\n description: 'The tags assigned to the short link.',\n items: {\n $ref: '#/$defs/tag'\n }\n },\n title: {\n type: 'string',\n description: 'The title of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n trackConversion: {\n type: 'boolean',\n description: '[BETA] Whether to track conversions for the short link.'\n },\n updatedAt: {\n type: 'string',\n description: 'The date and time when the short link was last updated.'\n },\n url: {\n type: 'string',\n description: 'The destination URL of the short link.'\n },\n userId: {\n type: 'string',\n description: 'The ID of the user who created the short link.'\n },\n utm_campaign: {\n type: 'string',\n description: 'The UTM campaign of the short link.'\n },\n utm_content: {\n type: 'string',\n description: 'The UTM content of the short link.'\n },\n utm_medium: {\n type: 'string',\n description: 'The UTM medium of the short link.'\n },\n utm_source: {\n type: 'string',\n description: 'The UTM source of the short link.'\n },\n utm_term: {\n type: 'string',\n description: 'The UTM term of the short link.'\n },\n video: {\n type: 'string',\n description: 'The video of the short link.'\n },\n pageId: {\n type: 'string',\n description: 'The ID of the page to redirect to before the link destination.'\n },\n pageUrl: {\n type: 'string',\n description: 'The URL of the page to redirect to before the link destination.'\n },\n qrCode: {\n type: 'string',\n description: 'The complete QR code URL for the short link (for example, `https://api.codeqr.io/qr?url=https://codeqr.link/try`).'\n },\n shortLink: {\n type: 'string',\n description: 'The complete URL of the short link, including the https protocol (for example, `https://codeqr.link/try`).'\n }\n },\n required: [ 'id',\n 'android',\n 'archived',\n 'clicks',\n 'comments',\n 'createdAt',\n 'description',\n 'doIndex',\n 'domain',\n 'expiredUrl',\n 'expiresAt',\n 'externalId',\n 'filled',\n 'flexible',\n 'geo',\n 'image',\n 'ios',\n 'isFormMandatory',\n 'key',\n 'lastClicked',\n 'leads',\n 'notificationToken',\n 'password',\n 'preRedirection',\n 'projectId',\n 'proxy',\n 'publicStats',\n 'rewrite',\n 'saleAmount',\n 'sales',\n 'tagId',\n 'tags',\n 'title',\n 'trackConversion',\n 'updatedAt',\n 'url',\n 'userId',\n 'utm_campaign',\n 'utm_content',\n 'utm_medium',\n 'utm_source',\n 'utm_term',\n 'video'\n ]\n },\n tag: {\n type: 'object',\n title: 'Tag',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the tag.'\n },\n color: {\n type: 'string',\n description: 'The color of the tag.',\n enum: [ 'red',\n 'yellow',\n 'green',\n 'blue',\n 'purple',\n 'pink',\n 'brown'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the tag.'\n }\n },\n required: [ 'id',\n 'color',\n 'name'\n ]\n }\n }\n}\n```",
21
+ "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve the info for a link.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/link',\n $defs: {\n link: {\n type: 'object',\n title: 'Link',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the short link.'\n },\n android: {\n type: 'string',\n description: 'The Android destination URL for the short link for Android device targeting.'\n },\n archived: {\n type: 'boolean',\n description: 'Whether the short link is archived.'\n },\n clicks: {\n type: 'number',\n description: 'The number of clicks on the short link.'\n },\n comments: {\n type: 'string',\n description: 'The comments for the short link.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the short link was created.'\n },\n description: {\n type: 'string',\n description: 'The description of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n doIndex: {\n type: 'boolean',\n description: 'Whether search engines can index the short link.'\n },\n domain: {\n type: 'string',\n description: 'The domain of the short link. If not provided, the main domain of the project will be used (or `codeqr.link` if the project has no domains).'\n },\n expiredUrl: {\n type: 'string',\n description: 'The URL to redirect to when the short link expires.'\n },\n expiresAt: {\n type: 'string',\n description: 'The date and time when the short link will expire in ISO-8601 format. Must be in the future.'\n },\n externalId: {\n type: 'string',\n description: 'This is the ID of the link in your database.'\n },\n filled: {\n type: 'boolean',\n description: 'Whether the link is filled or not.'\n },\n flexible: {\n type: 'boolean',\n description: 'Whether the short link is flexible.'\n },\n folderId: {\n type: 'string',\n description: 'The unique ID of the folder assigned to the short link.'\n },\n geo: {\n type: 'object',\n description: 'Geographic targeting information for the short link in JSON format `{[COUNTRY]: https://example.com }`. Learn more: https://codeqr.link/geo',\n additionalProperties: true\n },\n image: {\n type: 'string',\n description: 'The image of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n ios: {\n type: 'string',\n description: 'The iOS destination URL for the short link for iOS device targeting.'\n },\n isFormMandatory: {\n type: 'boolean',\n description: 'If the form is mandatory for the page.'\n },\n key: {\n type: 'string',\n description: 'The slug of the short link. If not provided, a random 7-character slug will be generated.'\n },\n lastClicked: {\n type: 'string',\n description: 'The date and time when the short link was last clicked.'\n },\n leads: {\n type: 'number',\n description: 'The number of leads generated by the short link.'\n },\n notificationToken: {\n type: 'string',\n description: 'The notification token of the short link.'\n },\n password: {\n type: 'string',\n description: 'The password required to access the short link destination URL.'\n },\n preRedirection: {\n type: 'boolean',\n description: 'Whether the short link has pre-redirection.'\n },\n projectId: {\n type: 'string',\n description: 'The ID of the project of the short link.'\n },\n proxy: {\n type: 'boolean',\n description: 'Whether the short link uses the custom link preview feature.'\n },\n publicStats: {\n type: 'boolean',\n description: 'Whether the short link statistics are publicly accessible.'\n },\n rewrite: {\n type: 'boolean',\n description: 'Whether the short link uses link cloaking.'\n },\n saleAmount: {\n type: 'number',\n description: 'The amount of the sale generated by the link.'\n },\n sales: {\n type: 'number',\n description: 'The number of sales generated by the short link.'\n },\n tagId: {\n type: 'string',\n description: '[DEPRECATED (use `tags` instead)]: The unique ID of the tag assigned to the short link.'\n },\n tags: {\n type: 'array',\n description: 'The tags assigned to the short link.',\n items: {\n $ref: '#/$defs/tag'\n }\n },\n title: {\n type: 'string',\n description: 'The title of the short link generated via `api.codeqr.io/metatags`. Will be used for custom link preview if `proxy` is true.'\n },\n trackConversion: {\n type: 'boolean',\n description: '[BETA] Whether to track conversions for the short link.'\n },\n updatedAt: {\n type: 'string',\n description: 'The date and time when the short link was last updated.'\n },\n url: {\n type: 'string',\n description: 'The destination URL of the short link.'\n },\n userId: {\n type: 'string',\n description: 'The ID of the user who created the short link.'\n },\n utm_campaign: {\n type: 'string',\n description: 'The UTM campaign of the short link.'\n },\n utm_content: {\n type: 'string',\n description: 'The UTM content of the short link.'\n },\n utm_medium: {\n type: 'string',\n description: 'The UTM medium of the short link.'\n },\n utm_source: {\n type: 'string',\n description: 'The UTM source of the short link.'\n },\n utm_term: {\n type: 'string',\n description: 'The UTM term of the short link.'\n },\n video: {\n type: 'string',\n description: 'The video of the short link.'\n },\n pageId: {\n type: 'string',\n description: 'The ID of the page to redirect to before the link destination.'\n },\n pageUrl: {\n type: 'string',\n description: 'The URL of the page to redirect to before the link destination.'\n },\n qrCode: {\n type: 'string',\n description: 'The complete QR code URL for the short link (for example, `https://api.codeqr.io/qr?url=https://codeqr.link/try`).'\n },\n shortLink: {\n type: 'string',\n description: 'The complete URL of the short link, including the https protocol (for example, `https://codeqr.link/try`).'\n }\n },\n required: [ 'id',\n 'android',\n 'archived',\n 'clicks',\n 'comments',\n 'createdAt',\n 'description',\n 'doIndex',\n 'domain',\n 'expiredUrl',\n 'expiresAt',\n 'externalId',\n 'filled',\n 'flexible',\n 'folderId',\n 'geo',\n 'image',\n 'ios',\n 'isFormMandatory',\n 'key',\n 'lastClicked',\n 'leads',\n 'notificationToken',\n 'password',\n 'preRedirection',\n 'projectId',\n 'proxy',\n 'publicStats',\n 'rewrite',\n 'saleAmount',\n 'sales',\n 'tagId',\n 'tags',\n 'title',\n 'trackConversion',\n 'updatedAt',\n 'url',\n 'userId',\n 'utm_campaign',\n 'utm_content',\n 'utm_medium',\n 'utm_source',\n 'utm_term',\n 'video'\n ]\n },\n tag: {\n type: 'object',\n title: 'Tag',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the tag.'\n },\n color: {\n type: 'string',\n description: 'The color of the tag.',\n enum: [ 'red',\n 'yellow',\n 'green',\n 'blue',\n 'purple',\n 'pink',\n 'brown'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the tag.'\n }\n },\n required: [ 'id',\n 'color',\n 'name'\n ]\n }\n }\n}\n```",
22
22
  inputSchema: {
23
23
  type: 'object',
24
24
  properties: {
@@ -71,6 +71,10 @@ export const tool: Tool = {
71
71
  type: 'boolean',
72
72
  description: 'Whether the short link is flexible.',
73
73
  },
74
+ folderId: {
75
+ type: 'string',
76
+ description: 'The unique ID existing folder to assign the short link to.',
77
+ },
74
78
  geo: {
75
79
  type: 'object',
76
80
  description:
@@ -71,6 +71,10 @@ export const tool: Tool = {
71
71
  type: 'boolean',
72
72
  description: 'Whether the short link is flexible.',
73
73
  },
74
+ folderId: {
75
+ type: 'string',
76
+ description: 'The unique ID existing folder to assign the short link to.',
77
+ },
74
78
  geo: {
75
79
  type: 'object',
76
80
  description:
@@ -18,7 +18,7 @@ export const metadata: Metadata = {
18
18
  export const tool: Tool = {
19
19
  name: 'list_projects',
20
20
  description:
21
- "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve a list of projects for the authenticated user.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/project'\n },\n $defs: {\n project: {\n type: 'object',\n title: 'Project',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the project.'\n },\n billingCycleStart: {\n type: 'number',\n description: 'The date and time when the billing cycle starts for the project.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the project was created.'\n },\n domains: {\n type: 'array',\n description: 'The domains of the project.',\n items: {\n type: 'object',\n properties: {\n slug: {\n type: 'string',\n description: 'The domain of the project.'\n }\n },\n required: [ 'slug'\n ]\n }\n },\n domainsLimit: {\n type: 'number',\n description: 'The domains limit of the project.'\n },\n linksLimit: {\n type: 'number',\n description: 'The links limit of the project.'\n },\n linksUsage: {\n type: 'number',\n description: 'The links usage of the project.'\n },\n logo: {\n type: 'string',\n description: 'The logo of the project.'\n },\n metadata: {\n type: 'object',\n properties: {\n defaultDomains: {\n type: 'array',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'defaultDomains'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the project.'\n },\n plan: {\n type: 'string',\n description: 'The plan of the project.',\n enum: [ 'free',\n 'starter',\n 'pro',\n 'business',\n 'business plus',\n 'business extra',\n 'business max',\n 'enterprise'\n ]\n },\n slug: {\n type: 'string',\n description: 'The slug of the project.'\n },\n stripeConnectId: {\n type: 'string',\n description: '[BETA]: The Stripe Connect ID of the project.'\n },\n stripeId: {\n type: 'string',\n description: 'The Stripe ID of the project.'\n },\n tagsLimit: {\n type: 'number',\n description: 'The tags limit of the project.'\n },\n usage: {\n type: 'number',\n description: 'The usage of the project.'\n },\n usageLimit: {\n type: 'number',\n description: 'The usage limit of the project.'\n },\n users: {\n type: 'array',\n description: 'The role of the authenticated user in the project.',\n items: {\n type: 'object',\n properties: {\n role: {\n type: 'string',\n description: 'The role of the authenticated user in the project.',\n enum: [ 'owner',\n 'member'\n ]\n }\n },\n required: [ 'role'\n ]\n }\n },\n usersLimit: {\n type: 'number',\n description: 'The users limit of the project.'\n }\n },\n required: [ 'id',\n 'billingCycleStart',\n 'createdAt',\n 'domains',\n 'domainsLimit',\n 'linksLimit',\n 'linksUsage',\n 'logo',\n 'metadata',\n 'name',\n 'plan',\n 'slug',\n 'stripeConnectId',\n 'stripeId',\n 'tagsLimit',\n 'usage',\n 'usageLimit',\n 'users',\n 'usersLimit'\n ]\n }\n }\n}\n```",
21
+ "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve a list of projects for the authenticated user.\n\n# Response Schema\n```json\n{\n type: 'array',\n items: {\n $ref: '#/$defs/project'\n },\n $defs: {\n project: {\n type: 'object',\n title: 'Project',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the project.'\n },\n billingCycleStart: {\n type: 'number',\n description: 'The date and time when the billing cycle starts for the project.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the project was created.'\n },\n domains: {\n type: 'array',\n description: 'The domains of the project.',\n items: {\n type: 'object',\n properties: {\n slug: {\n type: 'string',\n description: 'The domain of the project.'\n }\n },\n required: [ 'slug'\n ]\n }\n },\n domainsLimit: {\n type: 'number',\n description: 'The domains limit of the project.'\n },\n linksLimit: {\n type: 'number',\n description: 'The links limit of the project.'\n },\n linksUsage: {\n type: 'number',\n description: 'The links usage of the project.'\n },\n logo: {\n type: 'string',\n description: 'The logo of the project.'\n },\n metadata: {\n type: 'object',\n properties: {\n defaultDomains: {\n type: 'array',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'defaultDomains'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the project.'\n },\n plan: {\n type: 'string',\n description: 'The plan of the project.',\n enum: [ 'free',\n 'starter',\n 'pro',\n 'business',\n 'scale',\n 'enterprise'\n ]\n },\n slug: {\n type: 'string',\n description: 'The slug of the project.'\n },\n stripeConnectId: {\n type: 'string',\n description: '[BETA]: The Stripe Connect ID of the project.'\n },\n stripeId: {\n type: 'string',\n description: 'The Stripe ID of the project.'\n },\n tagsLimit: {\n type: 'number',\n description: 'The tags limit of the project.'\n },\n usage: {\n type: 'number',\n description: 'The usage of the project.'\n },\n usageLimit: {\n type: 'number',\n description: 'The usage limit of the project.'\n },\n users: {\n type: 'array',\n description: 'The role of the authenticated user in the project.',\n items: {\n type: 'object',\n properties: {\n role: {\n type: 'string',\n description: 'The role of the authenticated user in the project.',\n enum: [ 'owner',\n 'member'\n ]\n }\n },\n required: [ 'role'\n ]\n }\n },\n usersLimit: {\n type: 'number',\n description: 'The users limit of the project.'\n }\n },\n required: [ 'id',\n 'billingCycleStart',\n 'createdAt',\n 'domains',\n 'domainsLimit',\n 'linksLimit',\n 'linksUsage',\n 'logo',\n 'metadata',\n 'name',\n 'plan',\n 'slug',\n 'stripeConnectId',\n 'stripeId',\n 'tagsLimit',\n 'usage',\n 'usageLimit',\n 'users',\n 'usersLimit'\n ]\n }\n }\n}\n```",
22
22
  inputSchema: {
23
23
  type: 'object',
24
24
  properties: {
@@ -18,7 +18,7 @@ export const metadata: Metadata = {
18
18
  export const tool: Tool = {
19
19
  name: 'retrieve_projects',
20
20
  description:
21
- "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve a project for the authenticated user.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/project',\n $defs: {\n project: {\n type: 'object',\n title: 'Project',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the project.'\n },\n billingCycleStart: {\n type: 'number',\n description: 'The date and time when the billing cycle starts for the project.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the project was created.'\n },\n domains: {\n type: 'array',\n description: 'The domains of the project.',\n items: {\n type: 'object',\n properties: {\n slug: {\n type: 'string',\n description: 'The domain of the project.'\n }\n },\n required: [ 'slug'\n ]\n }\n },\n domainsLimit: {\n type: 'number',\n description: 'The domains limit of the project.'\n },\n linksLimit: {\n type: 'number',\n description: 'The links limit of the project.'\n },\n linksUsage: {\n type: 'number',\n description: 'The links usage of the project.'\n },\n logo: {\n type: 'string',\n description: 'The logo of the project.'\n },\n metadata: {\n type: 'object',\n properties: {\n defaultDomains: {\n type: 'array',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'defaultDomains'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the project.'\n },\n plan: {\n type: 'string',\n description: 'The plan of the project.',\n enum: [ 'free',\n 'starter',\n 'pro',\n 'business',\n 'business plus',\n 'business extra',\n 'business max',\n 'enterprise'\n ]\n },\n slug: {\n type: 'string',\n description: 'The slug of the project.'\n },\n stripeConnectId: {\n type: 'string',\n description: '[BETA]: The Stripe Connect ID of the project.'\n },\n stripeId: {\n type: 'string',\n description: 'The Stripe ID of the project.'\n },\n tagsLimit: {\n type: 'number',\n description: 'The tags limit of the project.'\n },\n usage: {\n type: 'number',\n description: 'The usage of the project.'\n },\n usageLimit: {\n type: 'number',\n description: 'The usage limit of the project.'\n },\n users: {\n type: 'array',\n description: 'The role of the authenticated user in the project.',\n items: {\n type: 'object',\n properties: {\n role: {\n type: 'string',\n description: 'The role of the authenticated user in the project.',\n enum: [ 'owner',\n 'member'\n ]\n }\n },\n required: [ 'role'\n ]\n }\n },\n usersLimit: {\n type: 'number',\n description: 'The users limit of the project.'\n }\n },\n required: [ 'id',\n 'billingCycleStart',\n 'createdAt',\n 'domains',\n 'domainsLimit',\n 'linksLimit',\n 'linksUsage',\n 'logo',\n 'metadata',\n 'name',\n 'plan',\n 'slug',\n 'stripeConnectId',\n 'stripeId',\n 'tagsLimit',\n 'usage',\n 'usageLimit',\n 'users',\n 'usersLimit'\n ]\n }\n }\n}\n```",
21
+ "When using this tool, always use the `jq_filter` parameter to reduce the response size and improve performance.\n\nOnly omit if you're sure you don't need the data.\n\nRetrieve a project for the authenticated user.\n\n# Response Schema\n```json\n{\n $ref: '#/$defs/project',\n $defs: {\n project: {\n type: 'object',\n title: 'Project',\n properties: {\n id: {\n type: 'string',\n description: 'The unique ID of the project.'\n },\n billingCycleStart: {\n type: 'number',\n description: 'The date and time when the billing cycle starts for the project.'\n },\n createdAt: {\n type: 'string',\n description: 'The date and time when the project was created.'\n },\n domains: {\n type: 'array',\n description: 'The domains of the project.',\n items: {\n type: 'object',\n properties: {\n slug: {\n type: 'string',\n description: 'The domain of the project.'\n }\n },\n required: [ 'slug'\n ]\n }\n },\n domainsLimit: {\n type: 'number',\n description: 'The domains limit of the project.'\n },\n linksLimit: {\n type: 'number',\n description: 'The links limit of the project.'\n },\n linksUsage: {\n type: 'number',\n description: 'The links usage of the project.'\n },\n logo: {\n type: 'string',\n description: 'The logo of the project.'\n },\n metadata: {\n type: 'object',\n properties: {\n defaultDomains: {\n type: 'array',\n items: {\n type: 'string'\n }\n }\n },\n required: [ 'defaultDomains'\n ]\n },\n name: {\n type: 'string',\n description: 'The name of the project.'\n },\n plan: {\n type: 'string',\n description: 'The plan of the project.',\n enum: [ 'free',\n 'starter',\n 'pro',\n 'business',\n 'scale',\n 'enterprise'\n ]\n },\n slug: {\n type: 'string',\n description: 'The slug of the project.'\n },\n stripeConnectId: {\n type: 'string',\n description: '[BETA]: The Stripe Connect ID of the project.'\n },\n stripeId: {\n type: 'string',\n description: 'The Stripe ID of the project.'\n },\n tagsLimit: {\n type: 'number',\n description: 'The tags limit of the project.'\n },\n usage: {\n type: 'number',\n description: 'The usage of the project.'\n },\n usageLimit: {\n type: 'number',\n description: 'The usage limit of the project.'\n },\n users: {\n type: 'array',\n description: 'The role of the authenticated user in the project.',\n items: {\n type: 'object',\n properties: {\n role: {\n type: 'string',\n description: 'The role of the authenticated user in the project.',\n enum: [ 'owner',\n 'member'\n ]\n }\n },\n required: [ 'role'\n ]\n }\n },\n usersLimit: {\n type: 'number',\n description: 'The users limit of the project.'\n }\n },\n required: [ 'id',\n 'billingCycleStart',\n 'createdAt',\n 'domains',\n 'domainsLimit',\n 'linksLimit',\n 'linksUsage',\n 'logo',\n 'metadata',\n 'name',\n 'plan',\n 'slug',\n 'stripeConnectId',\n 'stripeId',\n 'tagsLimit',\n 'usage',\n 'usageLimit',\n 'users',\n 'usersLimit'\n ]\n }\n }\n}\n```",
22
22
  inputSchema: {
23
23
  type: 'object',
24
24
  properties: {
@@ -25,6 +25,10 @@ export const tool: Tool = {
25
25
  items: {
26
26
  type: 'object',
27
27
  properties: {
28
+ folderId: {
29
+ type: 'string',
30
+ description: 'The unique ID of the folder assigned to the QR code.',
31
+ },
28
32
  type: {
29
33
  type: 'string',
30
34
  description: 'The type of content of the QR code.',
@@ -1049,7 +1053,7 @@ export const tool: Tool = {
1049
1053
  additionalProperties: true,
1050
1054
  },
1051
1055
  },
1052
- required: ['type'],
1056
+ required: ['folderId', 'type'],
1053
1057
  },
1054
1058
  },
1055
1059
  },
@@ -56,6 +56,10 @@ export const tool: Tool = {
56
56
  description: 'Filter QR codes expiring before this date',
57
57
  format: 'date-time',
58
58
  },
59
+ folderId: {
60
+ type: 'string',
61
+ description: 'The folder ID to filter the QR codes by.',
62
+ },
59
63
  format: {
60
64
  type: 'string',
61
65
  description: 'Filter by QR code format - static or dynamic',
@@ -64,7 +68,7 @@ export const tool: Tool = {
64
68
  groupBy: {
65
69
  type: 'string',
66
70
  description: 'The field to group the QR codes.',
67
- enum: ['domain', 'tagId', 'userId'],
71
+ enum: ['domain', 'tagId', 'userId', 'folderId'],
68
72
  },
69
73
  hasComments: {
70
74
  type: 'boolean',
@@ -20,6 +20,10 @@ export const tool: Tool = {
20
20
  inputSchema: {
21
21
  type: 'object',
22
22
  properties: {
23
+ folderId: {
24
+ type: 'string',
25
+ description: 'The unique ID of the folder assigned to the QR code.',
26
+ },
23
27
  type: {
24
28
  type: 'string',
25
29
  description: 'The type of content of the QR code.',
@@ -1043,7 +1047,7 @@ export const tool: Tool = {
1043
1047
  additionalProperties: true,
1044
1048
  },
1045
1049
  },
1046
- required: ['type'],
1050
+ required: ['folderId', 'type'],
1047
1051
  },
1048
1052
  annotations: {},
1049
1053
  };
@@ -54,6 +54,10 @@ export const tool: Tool = {
54
54
  description: 'Filter QR codes expiring before this date',
55
55
  format: 'date-time',
56
56
  },
57
+ folderId: {
58
+ type: 'string',
59
+ description: 'The folder ID to filter the QR codes by.',
60
+ },
57
61
  format: {
58
62
  type: 'string',
59
63
  description: 'Filter by QR code format - static or dynamic',
@@ -105,6 +105,10 @@ export const tool: Tool = {
105
105
  type: 'boolean',
106
106
  description: 'If the QR code is flexible.',
107
107
  },
108
+ folderId: {
109
+ type: 'string',
110
+ description: 'The unique ID of the folder assigned to the QR code.',
111
+ },
108
112
  frame: {
109
113
  type: 'string',
110
114
  description: 'The type of frame of the QR code.',
@@ -21,6 +21,10 @@ export const tool: Tool = {
21
21
  inputSchema: {
22
22
  type: 'object',
23
23
  properties: {
24
+ folderId: {
25
+ type: 'string',
26
+ description: 'The unique ID of the folder assigned to the QR code.',
27
+ },
24
28
  type: {
25
29
  type: 'string',
26
30
  description: 'The type of content of the QR code.',
@@ -1044,7 +1048,7 @@ export const tool: Tool = {
1044
1048
  additionalProperties: true,
1045
1049
  },
1046
1050
  },
1047
- required: ['type'],
1051
+ required: ['folderId', 'type'],
1048
1052
  },
1049
1053
  annotations: {},
1050
1054
  };
@@ -24,34 +24,48 @@ export const tool: Tool = {
24
24
  properties: {
25
25
  clickId: {
26
26
  type: 'string',
27
- description: 'The ID of the click in th CodeQR. You can read this value from `cq_id` cookie.',
27
+ description:
28
+ 'The unique ID of the click that the lead conversion event is attributed to. You can read this value from `cd_id` cookie. If an empty string is provided, CodeQR will try to find an existing customer with the provided `customerExternalId` and use the `clickId` from the customer if found.',
28
29
  },
29
- customerId: {
30
+ customerExternalId: {
30
31
  type: 'string',
31
32
  description:
32
- "This is the unique identifier for the customer in the client's app. This is used to track the customer's journey.",
33
+ 'The unique ID of the customer in your system. Will be used to identify and attribute all future events to this customer.',
33
34
  },
34
35
  eventName: {
35
36
  type: 'string',
36
- description: 'The name of the event to track.',
37
+ description:
38
+ 'The name of the lead event to track. Can also be used as a unique identifier to associate a given lead event for a customer for a subsequent sale event (via the `leadEventName` prop in `/track/sale`).',
37
39
  },
38
40
  customerAvatar: {
39
41
  type: 'string',
40
- description: "Avatar of the customer in the client's app.",
42
+ description: 'The avatar URL of the customer.',
41
43
  },
42
44
  customerEmail: {
43
45
  type: 'string',
44
- description: "Email of the customer in the client's app.",
46
+ description: 'The email address of the customer.',
45
47
  },
46
48
  customerName: {
47
49
  type: 'string',
48
- description: "Name of the customer in the client's app.",
50
+ description:
51
+ 'The name of the customer. If not passed, a random name will be generated (e.g. “Big Red Caribou”).',
52
+ },
53
+ eventQuantity: {
54
+ type: 'number',
55
+ description:
56
+ 'The numerical value associated with this lead event (e.g., number of provisioned seats in a free trial). If defined as N, the lead event will be tracked N times.',
49
57
  },
50
58
  metadata: {
51
59
  type: 'object',
52
- description: 'Additional metadata to be stored with the lead event',
60
+ description: 'Additional metadata to be stored with the lead event. Max 10,000 characters.',
53
61
  additionalProperties: true,
54
62
  },
63
+ mode: {
64
+ type: 'string',
65
+ description:
66
+ 'The mode to use for tracking the lead event. `async` will not block the request; `wait` will block the request until the lead event is fully recorded in Dub; `deferred` will defer the lead event creation to a subsequent request.',
67
+ enum: ['async', 'wait', 'deferred'],
68
+ },
55
69
  jq_filter: {
56
70
  type: 'string',
57
71
  title: 'jq Filter',
@@ -59,7 +73,7 @@ export const tool: Tool = {
59
73
  'A jq filter to apply to the response to include certain fields. Consult the output schema in the tool description to see the fields that are available.\n\nFor example: to include only the `name` field in every object of a results array, you can provide ".results[].name".\n\nFor more information, see the [jq documentation](https://jqlang.org/manual/).',
60
74
  },
61
75
  },
62
- required: ['clickId', 'customerId', 'eventName'],
76
+ required: ['clickId', 'customerExternalId', 'eventName'],
63
77
  },
64
78
  annotations: {},
65
79
  };