@hubspot/cli 7.9.0 → 7.9.1-experimental.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 (214) hide show
  1. package/bin/cli.js +5 -4
  2. package/commands/__tests__/getStarted.test.js +10 -0
  3. package/commands/__tests__/project.test.js +2 -0
  4. package/commands/account/__tests__/rename.test.js +42 -0
  5. package/commands/account/auth.js +10 -14
  6. package/commands/account/clean.js +11 -19
  7. package/commands/account/createOverride.js +17 -23
  8. package/commands/account/info.js +8 -5
  9. package/commands/account/list.js +13 -18
  10. package/commands/account/remove.js +23 -22
  11. package/commands/account/removeOverride.js +8 -16
  12. package/commands/account/rename.d.ts +1 -1
  13. package/commands/account/rename.js +6 -3
  14. package/commands/account/use.js +19 -8
  15. package/commands/app/__tests__/migrate.test.js +8 -4
  16. package/commands/app/migrate.js +2 -2
  17. package/commands/auth.js +18 -14
  18. package/commands/cms/theme/preview.js +1 -4
  19. package/commands/config/migrate.js +5 -5
  20. package/commands/config/set.js +1 -2
  21. package/commands/customObject/createSchema.js +2 -3
  22. package/commands/customObject/updateSchema.js +2 -3
  23. package/commands/getStarted.js +15 -22
  24. package/commands/hubdb/__tests__/list.test.js +1 -0
  25. package/commands/hubdb/list.js +2 -2
  26. package/commands/hubdb.d.ts +1 -1
  27. package/commands/init.js +36 -32
  28. package/commands/project/__tests__/deploy.test.js +10 -5
  29. package/commands/project/__tests__/devUnifiedFlow.test.js +6 -4
  30. package/commands/project/__tests__/logs.test.js +4 -0
  31. package/commands/project/__tests__/updateDeps.test.js +142 -0
  32. package/commands/project/__tests__/validate.test.js +2 -2
  33. package/commands/project/cloneApp.js +2 -2
  34. package/commands/project/create.js +0 -1
  35. package/commands/project/deploy.js +2 -2
  36. package/commands/project/dev/deprecatedFlow.js +4 -5
  37. package/commands/project/dev/index.js +14 -4
  38. package/commands/project/dev/unifiedFlow.js +4 -5
  39. package/commands/project/listBuilds.js +7 -1
  40. package/commands/project/logs.js +2 -3
  41. package/commands/project/profile/add.js +6 -7
  42. package/commands/project/profile/delete.js +2 -2
  43. package/commands/project/updateDeps.d.ts +6 -0
  44. package/commands/project/updateDeps.js +80 -0
  45. package/commands/project/upload.js +9 -3
  46. package/commands/project/validate.js +9 -3
  47. package/commands/project/watch.js +7 -2
  48. package/commands/project.js +2 -0
  49. package/commands/sandbox/__tests__/create.test.js +14 -5
  50. package/commands/sandbox/create.js +4 -5
  51. package/commands/sandbox/delete.js +23 -20
  52. package/commands/testAccount/__tests__/create.test.js +68 -0
  53. package/commands/testAccount/create.d.ts +8 -0
  54. package/commands/testAccount/create.js +135 -45
  55. package/commands/testAccount/delete.js +9 -8
  56. package/commands/testAccount/importData.d.ts +1 -1
  57. package/lang/en.d.ts +3199 -3185
  58. package/lang/en.js +52 -14
  59. package/lib/__tests__/buildAccount.test.js +22 -30
  60. package/lib/__tests__/commonOpts.test.js +9 -13
  61. package/lib/__tests__/dependencyManagement.test.js +273 -1
  62. package/lib/__tests__/developerTestAccounts.test.js +29 -17
  63. package/lib/__tests__/importData.test.js +20 -10
  64. package/lib/__tests__/oauth.test.js +19 -8
  65. package/lib/__tests__/sandboxSync.test.js +33 -11
  66. package/lib/__tests__/sandboxes.test.js +30 -19
  67. package/lib/__tests__/usageTracking.test.js +10 -10
  68. package/lib/__tests__/validation.test.js +32 -32
  69. package/lib/accountTypes.d.ts +9 -9
  70. package/lib/accountTypes.js +2 -4
  71. package/lib/app/__tests__/migrate.test.js +15 -0
  72. package/lib/app/__tests__/migrate_legacy.test.js +9 -0
  73. package/lib/app/migrate_legacy.d.ts +2 -2
  74. package/lib/buildAccount.d.ts +4 -4
  75. package/lib/buildAccount.js +7 -14
  76. package/lib/commonOpts.js +5 -8
  77. package/lib/configMigrate.d.ts +2 -2
  78. package/lib/configMigrate.js +42 -18
  79. package/lib/configOptions.js +3 -2
  80. package/lib/constants.d.ts +1 -0
  81. package/lib/constants.js +6 -0
  82. package/lib/dependencyManagement.d.ts +8 -2
  83. package/lib/dependencyManagement.js +75 -12
  84. package/lib/developerTestAccounts.d.ts +3 -3
  85. package/lib/developerTestAccounts.js +4 -7
  86. package/lib/doctor/DiagnosticInfoBuilder.d.ts +1 -1
  87. package/lib/doctor/DiagnosticInfoBuilder.js +9 -6
  88. package/lib/doctor/Doctor.js +4 -3
  89. package/lib/doctor/__tests__/Diagnosis.test.js +4 -3
  90. package/lib/doctor/__tests__/DiagnosticInfoBuilder.test.js +17 -9
  91. package/lib/doctor/__tests__/Doctor.test.js +14 -0
  92. package/lib/importData.js +8 -7
  93. package/lib/links.js +5 -5
  94. package/lib/mcp/__tests__/setup.test.d.ts +1 -0
  95. package/lib/mcp/__tests__/setup.test.js +127 -0
  96. package/lib/mcp/setup.d.ts +4 -12
  97. package/lib/mcp/setup.js +34 -1
  98. package/lib/middleware/__test__/commandTargetingUtils.test.js +3 -3
  99. package/lib/middleware/__test__/configMiddleware.test.js +23 -22
  100. package/lib/middleware/__test__/gitMiddleware.test.js +9 -7
  101. package/lib/middleware/autoUpdateMiddleware.d.ts +3 -1
  102. package/lib/middleware/autoUpdateMiddleware.js +10 -2
  103. package/lib/middleware/commandTargetingUtils.js +2 -2
  104. package/lib/middleware/configMiddleware.d.ts +6 -1
  105. package/lib/middleware/configMiddleware.js +36 -15
  106. package/lib/middleware/gitMiddleware.js +8 -4
  107. package/lib/npm.d.ts +3 -0
  108. package/lib/npm.js +6 -0
  109. package/lib/oauth.d.ts +2 -2
  110. package/lib/oauth.js +8 -10
  111. package/lib/projects/__tests__/AppDevModeInterface.test.js +17 -6
  112. package/lib/projects/__tests__/DevServerManager.test.js +1 -0
  113. package/lib/projects/__tests__/LocalDevProcess.test.js +1 -0
  114. package/lib/projects/__tests__/components.test.js +148 -24
  115. package/lib/projects/__tests__/deploy.test.js +1 -0
  116. package/lib/projects/__tests__/platformVersion.test.js +5 -1
  117. package/lib/projects/__tests__/projects.test.js +13 -42
  118. package/lib/projects/components.js +76 -20
  119. package/lib/projects/config.js +5 -9
  120. package/lib/projects/create/__tests__/v2.test.js +11 -0
  121. package/lib/projects/localDev/AppDevModeInterface.js +2 -2
  122. package/lib/projects/localDev/DevServerManager_DEPRECATED.js +2 -2
  123. package/lib/projects/localDev/LocalDevLogger.js +4 -4
  124. package/lib/projects/localDev/LocalDevManager_DEPRECATED.js +3 -3
  125. package/lib/projects/localDev/helpers/account.d.ts +10 -10
  126. package/lib/projects/localDev/helpers/account.js +6 -11
  127. package/lib/projects/platformVersion.js +1 -1
  128. package/lib/projects/urls.js +5 -6
  129. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.d.ts +1 -0
  130. package/lib/prompts/__tests__/createDeveloperTestAccountConfigPrompt.test.js +153 -0
  131. package/lib/prompts/__tests__/downloadProjectPrompt.test.js +7 -5
  132. package/lib/prompts/accountNamePrompt.js +3 -3
  133. package/lib/prompts/accountsPrompt.d.ts +1 -1
  134. package/lib/prompts/accountsPrompt.js +6 -7
  135. package/lib/prompts/confirmImportDataPrompt.js +2 -2
  136. package/lib/prompts/createDeveloperTestAccountConfigPrompt.d.ts +5 -0
  137. package/lib/prompts/createDeveloperTestAccountConfigPrompt.js +76 -66
  138. package/lib/prompts/downloadProjectPrompt.d.ts +1 -0
  139. package/lib/prompts/downloadProjectPrompt.js +5 -2
  140. package/lib/prompts/importDataTestAccountSelectPrompt.js +4 -5
  141. package/lib/prompts/personalAccessKeyPrompt.js +2 -2
  142. package/lib/prompts/projectDevTargetAccountPrompt.d.ts +3 -3
  143. package/lib/prompts/projectDevTargetAccountPrompt.js +5 -7
  144. package/lib/prompts/sandboxesPrompt.js +7 -8
  145. package/lib/prompts/setAsDefaultAccountPrompt.js +7 -6
  146. package/lib/sandboxSync.d.ts +2 -2
  147. package/lib/sandboxSync.js +3 -9
  148. package/lib/sandboxes.d.ts +4 -4
  149. package/lib/sandboxes.js +6 -11
  150. package/lib/serverlessLogs.js +2 -2
  151. package/lib/theme/__tests__/migrate.test.js +15 -0
  152. package/lib/ui/index.js +6 -3
  153. package/lib/usageTracking.js +15 -8
  154. package/lib/validation.js +13 -11
  155. package/mcp-server/tools/cms/HsCreateFunctionTool.js +8 -2
  156. package/mcp-server/tools/cms/HsCreateModuleTool.d.ts +4 -4
  157. package/mcp-server/tools/cms/HsCreateModuleTool.js +8 -2
  158. package/mcp-server/tools/cms/HsCreateTemplateTool.js +8 -2
  159. package/mcp-server/tools/cms/HsFunctionLogsTool.d.ts +4 -4
  160. package/mcp-server/tools/cms/HsFunctionLogsTool.js +6 -2
  161. package/mcp-server/tools/cms/HsListFunctionsTool.js +5 -1
  162. package/mcp-server/tools/cms/HsListTool.js +5 -1
  163. package/mcp-server/tools/cms/__tests__/HsCreateFunctionTool.test.js +1 -0
  164. package/mcp-server/tools/index.js +4 -0
  165. package/mcp-server/tools/project/AddFeatureToProjectTool.d.ts +1 -1
  166. package/mcp-server/tools/project/AddFeatureToProjectTool.js +9 -3
  167. package/mcp-server/tools/project/CreateProjectTool.js +8 -2
  168. package/mcp-server/tools/project/CreateTestAccountTool.d.ts +41 -0
  169. package/mcp-server/tools/project/CreateTestAccountTool.js +150 -0
  170. package/mcp-server/tools/project/DeployProjectTool.d.ts +1 -1
  171. package/mcp-server/tools/project/DeployProjectTool.js +8 -2
  172. package/mcp-server/tools/project/DocFetchTool.d.ts +1 -1
  173. package/mcp-server/tools/project/DocFetchTool.js +9 -5
  174. package/mcp-server/tools/project/DocsSearchTool.d.ts +1 -1
  175. package/mcp-server/tools/project/DocsSearchTool.js +12 -8
  176. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.d.ts +1 -1
  177. package/mcp-server/tools/project/GetApiUsagePatternsByAppIdTool.js +11 -7
  178. package/mcp-server/tools/project/GetApplicationInfoTool.d.ts +1 -1
  179. package/mcp-server/tools/project/GetApplicationInfoTool.js +11 -7
  180. package/mcp-server/tools/project/GetBuildStatusTool.d.ts +26 -0
  181. package/mcp-server/tools/project/GetBuildStatusTool.js +164 -0
  182. package/mcp-server/tools/project/GetConfigValuesTool.d.ts +1 -1
  183. package/mcp-server/tools/project/GetConfigValuesTool.js +11 -7
  184. package/mcp-server/tools/project/GuidedWalkthroughTool.d.ts +1 -1
  185. package/mcp-server/tools/project/GuidedWalkthroughTool.js +7 -3
  186. package/mcp-server/tools/project/UploadProjectTools.d.ts +9 -3
  187. package/mcp-server/tools/project/UploadProjectTools.js +51 -5
  188. package/mcp-server/tools/project/ValidateProjectTool.d.ts +1 -1
  189. package/mcp-server/tools/project/ValidateProjectTool.js +7 -3
  190. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.d.ts +1 -0
  191. package/mcp-server/tools/project/__tests__/CreateTestAccountTool.test.js +454 -0
  192. package/mcp-server/tools/project/__tests__/DocFetchTool.test.js +5 -1
  193. package/mcp-server/tools/project/__tests__/DocsSearchTool.test.js +25 -13
  194. package/mcp-server/tools/project/__tests__/GetApiUsagePatternsByAppIdTool.test.js +7 -5
  195. package/mcp-server/tools/project/__tests__/GetApplicationInfoTool.test.js +7 -5
  196. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.d.ts +1 -0
  197. package/mcp-server/tools/project/__tests__/GetBuildStatusTool.test.js +240 -0
  198. package/mcp-server/tools/project/__tests__/GetConfigValuesTool.test.js +8 -6
  199. package/mcp-server/tools/project/__tests__/UploadProjectTools.test.js +56 -4
  200. package/mcp-server/utils/__tests__/content.test.js +21 -20
  201. package/mcp-server/utils/__tests__/feedbackTracking.test.js +33 -28
  202. package/mcp-server/utils/content.d.ts +1 -1
  203. package/mcp-server/utils/content.js +2 -2
  204. package/mcp-server/utils/feedbackTracking.d.ts +1 -1
  205. package/mcp-server/utils/feedbackTracking.js +3 -3
  206. package/mcp-server/utils/toolUsageTracking.js +4 -3
  207. package/package.json +8 -7
  208. package/lang/en.lyaml +0 -1508
  209. package/lib/lang.d.ts +0 -8
  210. package/lib/lang.js +0 -72
  211. package/mcp-server/utils/__tests__/cliConfig.test.js +0 -110
  212. package/mcp-server/utils/cliConfig.d.ts +0 -1
  213. package/mcp-server/utils/cliConfig.js +0 -12
  214. /package/{mcp-server/utils/__tests__/cliConfig.test.d.ts → commands/project/__tests__/updateDeps.test.d.ts} +0 -0
@@ -0,0 +1,150 @@
1
+ import { Tool } from '../../types.js';
2
+ import { absoluteCurrentWorkingDirectory } from './constants.js';
3
+ import { z } from 'zod';
4
+ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
5
+ import { formatTextContents, formatTextContent } from '../../utils/content.js';
6
+ import { addFlag } from '../../utils/command.js';
7
+ import { runCommandInDir } from '../../utils/project.js';
8
+ import { ACCOUNT_LEVEL_CHOICES } from '../../../lib/constants.js';
9
+ import fs from 'fs';
10
+ import { getConfigAccountByName } from '@hubspot/local-dev-lib/config';
11
+ const inputSchema = {
12
+ absoluteCurrentWorkingDirectory,
13
+ configPath: z
14
+ .string()
15
+ .optional()
16
+ .describe('Path to a test account configuration JSON file. Mutually exclusive with all other parameters.\n\n' +
17
+ 'Config file format:\n' +
18
+ '{\n' +
19
+ ' "accountName": "AllHubsProfessional",\n' +
20
+ ' "description": "Professional test account",\n' +
21
+ ' "marketingLevel": "PROFESSIONAL",\n' +
22
+ ' "opsLevel": "PROFESSIONAL",\n' +
23
+ ' "serviceLevel": "PROFESSIONAL",\n' +
24
+ ' "salesLevel": "PROFESSIONAL",\n' +
25
+ ' "contentLevel": "PROFESSIONAL"\n' +
26
+ '}'),
27
+ name: z
28
+ .string()
29
+ .optional()
30
+ .describe('Name for the test account. Required when not using configPath.'),
31
+ description: z
32
+ .string()
33
+ .optional()
34
+ .describe('Description for the test account. Required when not using configPath.'),
35
+ marketingLevel: z
36
+ .enum(ACCOUNT_LEVEL_CHOICES)
37
+ .optional()
38
+ .describe(`Marketing Hub tier level. Options: ${ACCOUNT_LEVEL_CHOICES.join(', ')}. Defaults to ENTERPRISE if not specified.`),
39
+ opsLevel: z
40
+ .enum(ACCOUNT_LEVEL_CHOICES)
41
+ .optional()
42
+ .describe(`Operations Hub tier level. Options: ${ACCOUNT_LEVEL_CHOICES.join(', ')}. Defaults to ENTERPRISE if not specified.`),
43
+ serviceLevel: z
44
+ .enum(ACCOUNT_LEVEL_CHOICES)
45
+ .optional()
46
+ .describe(`Service Hub tier level. Options: ${ACCOUNT_LEVEL_CHOICES.join(', ')}. Defaults to ENTERPRISE if not specified.`),
47
+ salesLevel: z
48
+ .enum(ACCOUNT_LEVEL_CHOICES)
49
+ .optional()
50
+ .describe(`Sales Hub tier level. Options: ${ACCOUNT_LEVEL_CHOICES.join(', ')}. Defaults to ENTERPRISE if not specified.`),
51
+ contentLevel: z
52
+ .enum(ACCOUNT_LEVEL_CHOICES)
53
+ .optional()
54
+ .describe(`CMS Hub tier level. Options: ${ACCOUNT_LEVEL_CHOICES.join(', ')}. Defaults to ENTERPRISE if not specified.`),
55
+ };
56
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
+ const createTestAccountInputSchema = z.object({ ...inputSchema });
58
+ const toolName = 'create-test-account';
59
+ export class CreateTestAccountTool extends Tool {
60
+ constructor(mcpServer) {
61
+ super(mcpServer);
62
+ }
63
+ async handler({ absoluteCurrentWorkingDirectory, name, description, marketingLevel, opsLevel, serviceLevel, salesLevel, contentLevel, configPath, }) {
64
+ await trackToolUsage(toolName);
65
+ let command = 'hs test-account create';
66
+ const content = [];
67
+ // Use config file if provided (LLM should check for config first)
68
+ if (configPath) {
69
+ let configJson;
70
+ try {
71
+ const config = fs.readFileSync(configPath, 'utf8');
72
+ configJson = JSON.parse(config);
73
+ }
74
+ catch (error) {
75
+ const errorMessage = error instanceof Error ? error.message : String(error);
76
+ return {
77
+ content: [
78
+ formatTextContent(`Failed to read or parse config file at "${configPath}": ${errorMessage}. Please ensure the file exists and contains valid JSON.`),
79
+ ],
80
+ };
81
+ }
82
+ if (configJson.accountName) {
83
+ const account = getConfigAccountByName(configJson.accountName);
84
+ if (account) {
85
+ content.push(formatTextContent(`The account name "${configJson.accountName}" already exists in the CLI config. Please use a different name.`));
86
+ }
87
+ }
88
+ command = addFlag(command, 'config-path', configPath);
89
+ }
90
+ // Use flags if name is provided (when no config used)
91
+ else if (name) {
92
+ const account = getConfigAccountByName(name);
93
+ if (account) {
94
+ content.push(formatTextContent(`The account name "${name}" already exists in the CLI config. Please use a different name.`));
95
+ }
96
+ command = addFlag(command, 'name', name);
97
+ command = addFlag(command, 'description', description || name);
98
+ command = addFlag(command, 'marketing-level', marketingLevel || 'ENTERPRISE');
99
+ command = addFlag(command, 'ops-level', opsLevel || 'ENTERPRISE');
100
+ command = addFlag(command, 'service-level', serviceLevel || 'ENTERPRISE');
101
+ command = addFlag(command, 'sales-level', salesLevel || 'ENTERPRISE');
102
+ command = addFlag(command, 'content-level', contentLevel || 'ENTERPRISE');
103
+ }
104
+ else {
105
+ content.push(formatTextContent(`Ask the user for the account config JSON path or the name of the test account to create.`));
106
+ }
107
+ if (content.length > 0) {
108
+ return {
109
+ content,
110
+ };
111
+ }
112
+ // No flags or config - command will prompt user interactively
113
+ try {
114
+ const { stdout, stderr } = await runCommandInDir(absoluteCurrentWorkingDirectory, command);
115
+ return formatTextContents(absoluteCurrentWorkingDirectory, stdout, stderr);
116
+ }
117
+ catch (error) {
118
+ return formatTextContents(absoluteCurrentWorkingDirectory, error instanceof Error ? error.message : `${error}`);
119
+ }
120
+ }
121
+ register() {
122
+ return this.mcpServer.registerTool(toolName, {
123
+ title: 'Create HubSpot Test Account',
124
+ description: 'Creates a HubSpot developer test account. Test accounts are temporary HubSpot portals used for local development, testing apps, and QA workflows.\n\n' +
125
+ 'WORKFLOW:\n' +
126
+ '1. Check the current working directory for existing test account config files (e.g., test-account.json, test-portal-config.json)\n' +
127
+ '2. If config file found:\n' +
128
+ ' - Show the user what file(s) you found\n' +
129
+ ' - Ask if they want to use the existing config\n' +
130
+ ' - If YES: Use configPath parameter only\n' +
131
+ ' - If NO: Proceed to step 3\n' +
132
+ '3. If no config file OR user declined:\n' +
133
+ ' - Ask the user for ALL account details:\n' +
134
+ ' * Account name (required)\n' +
135
+ ' * Description (optional, defaults to account name if not specified)\n' +
136
+ ' * Hub tier levels for each hub (optional, default to ENTERPRISE if not specified)\n' +
137
+ ' - Call this tool with name, description, and all tier level parameters\n' +
138
+ ' - IMPORTANT: Always provide all parameters to ensure non-interactive execution\n\n' +
139
+ 'Available Hub Tier Levels: FREE, STARTER, PROFESSIONAL, ENTERPRISE\n' +
140
+ 'Available Hubs: Marketing (marketingLevel), Sales (salesLevel), Service (serviceLevel), Operations (opsLevel), CMS (contentLevel)',
141
+ inputSchema,
142
+ annotations: {
143
+ readOnlyHint: false,
144
+ destructiveHint: false,
145
+ idempotentHint: false,
146
+ openWorldHint: true,
147
+ },
148
+ }, this.handler);
149
+ }
150
+ }
@@ -17,7 +17,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
17
17
  type InputSchemaType = z.infer<typeof inputSchemaZodObject>;
18
18
  export declare class DeployProjectTool extends Tool<InputSchemaType> {
19
19
  constructor(mcpServer: McpServer);
20
- handler({ absoluteProjectPath, absoluteCurrentWorkingDirectory, buildNumber, }: InputSchemaType): Promise<TextContentResponse>;
20
+ handler({ absoluteProjectPath, buildNumber, }: InputSchemaType): Promise<TextContentResponse>;
21
21
  register(): RegisteredTool;
22
22
  }
23
23
  export {};
@@ -21,7 +21,7 @@ export class DeployProjectTool extends Tool {
21
21
  constructor(mcpServer) {
22
22
  super(mcpServer);
23
23
  }
24
- async handler({ absoluteProjectPath, absoluteCurrentWorkingDirectory, buildNumber, }) {
24
+ async handler({ absoluteProjectPath, buildNumber, }) {
25
25
  await trackToolUsage(toolName);
26
26
  let command = `hs project deploy`;
27
27
  const content = [];
@@ -38,13 +38,19 @@ export class DeployProjectTool extends Tool {
38
38
  };
39
39
  }
40
40
  const { stdout, stderr } = await runCommandInDir(absoluteProjectPath, command);
41
- return formatTextContents(absoluteCurrentWorkingDirectory, stdout, stderr);
41
+ return formatTextContents(stdout, stderr);
42
42
  }
43
43
  register() {
44
44
  return this.mcpServer.registerTool(toolName, {
45
45
  title: 'Deploy a build of HubSpot Project',
46
46
  description: 'Takes a build number and a project name and deploys that build of the project. DO NOT run this tool unless the user specifies they would like to deploy the project.',
47
47
  inputSchema,
48
+ annotations: {
49
+ readOnlyHint: false,
50
+ destructiveHint: true,
51
+ idempotentHint: true,
52
+ openWorldHint: true,
53
+ },
48
54
  }, this.handler);
49
55
  }
50
56
  }
@@ -14,7 +14,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
14
14
  type InputSchemaType = z.infer<typeof inputSchemaZodObject>;
15
15
  export declare class DocFetchTool extends Tool<InputSchemaType> {
16
16
  constructor(mcpServer: McpServer);
17
- handler({ docUrl, absoluteCurrentWorkingDirectory, }: InputSchemaType): Promise<TextContentResponse>;
17
+ handler({ docUrl }: InputSchemaType): Promise<TextContentResponse>;
18
18
  register(): RegisteredTool;
19
19
  }
20
20
  export {};
@@ -18,7 +18,7 @@ export class DocFetchTool extends Tool {
18
18
  constructor(mcpServer) {
19
19
  super(mcpServer);
20
20
  }
21
- async handler({ docUrl, absoluteCurrentWorkingDirectory, }) {
21
+ async handler({ docUrl }) {
22
22
  await trackToolUsage(toolName);
23
23
  try {
24
24
  // Append .md extension to the URL
@@ -28,16 +28,16 @@ export class DocFetchTool extends Tool {
28
28
  });
29
29
  const content = response.data;
30
30
  if (!content || content.trim().length === 0) {
31
- return formatTextContents(absoluteCurrentWorkingDirectory, 'Document is empty or contains no content.');
31
+ return formatTextContents('Document is empty or contains no content.');
32
32
  }
33
- return formatTextContents(absoluteCurrentWorkingDirectory, content);
33
+ return formatTextContents(content);
34
34
  }
35
35
  catch (error) {
36
36
  if (isHubSpotHttpError(error)) {
37
- return formatTextContents(absoluteCurrentWorkingDirectory, error.toString());
37
+ return formatTextContents(error.toString());
38
38
  }
39
39
  const errorMessage = `Error fetching documentation: ${error instanceof Error ? error.message : String(error)}`;
40
- return formatTextContents(absoluteCurrentWorkingDirectory, errorMessage);
40
+ return formatTextContents(errorMessage);
41
41
  }
42
42
  }
43
43
  register() {
@@ -45,6 +45,10 @@ export class DocFetchTool extends Tool {
45
45
  title: 'Fetch HubSpot Developer Documentation (single file)',
46
46
  description: 'Always use this immediately after `search-docs` and before creating a plan, writing code, or answering technical questions. This tool retrieves the full, authoritative content of a HubSpot Developer Documentation page from its URL, ensuring responses are accurate, up-to-date, and grounded in the official docs.',
47
47
  inputSchema,
48
+ annotations: {
49
+ readOnlyHint: true,
50
+ openWorldHint: true,
51
+ },
48
52
  }, this.handler);
49
53
  }
50
54
  }
@@ -23,7 +23,7 @@ export interface DocsSearchResponse {
23
23
  type InputSchemaType = z.infer<typeof inputSchemaZodObject>;
24
24
  export declare class DocsSearchTool extends Tool<InputSchemaType> {
25
25
  constructor(mcpServer: McpServer);
26
- handler({ absoluteCurrentWorkingDirectory, docsSearchQuery, }: InputSchemaType): Promise<TextContentResponse>;
26
+ handler({ docsSearchQuery, }: InputSchemaType): Promise<TextContentResponse>;
27
27
  register(): RegisteredTool;
28
28
  }
29
29
  export {};
@@ -5,7 +5,7 @@ import { formatTextContents } from '../../utils/content.js';
5
5
  import { trackToolUsage } from '../../utils/toolUsageTracking.js';
6
6
  import { absoluteCurrentWorkingDirectory, docsSearchQuery, } from './constants.js';
7
7
  import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
8
- import { getAccountIdFromCliConfig } from '../../utils/cliConfig.js';
8
+ import { getConfigDefaultAccountIfExists } from '@hubspot/local-dev-lib/config';
9
9
  const inputSchema = {
10
10
  absoluteCurrentWorkingDirectory,
11
11
  docsSearchQuery,
@@ -19,12 +19,12 @@ export class DocsSearchTool extends Tool {
19
19
  constructor(mcpServer) {
20
20
  super(mcpServer);
21
21
  }
22
- async handler({ absoluteCurrentWorkingDirectory, docsSearchQuery, }) {
22
+ async handler({ docsSearchQuery, }) {
23
23
  await trackToolUsage(toolName, { mode: docsSearchQuery });
24
- const accountId = getAccountIdFromCliConfig(absoluteCurrentWorkingDirectory);
24
+ const accountId = getConfigDefaultAccountIfExists()?.accountId;
25
25
  if (!accountId) {
26
26
  const authErrorMessage = `No account ID found. Please run \`hs account auth\` to configure an account, or set a default account with \`hs account use <account>\``;
27
- return formatTextContents(absoluteCurrentWorkingDirectory, authErrorMessage);
27
+ return formatTextContents(authErrorMessage);
28
28
  }
29
29
  try {
30
30
  const response = await http.post(accountId, {
@@ -35,21 +35,21 @@ export class DocsSearchTool extends Tool {
35
35
  });
36
36
  const results = response.data.results;
37
37
  if (!results || results.length === 0) {
38
- return formatTextContents(absoluteCurrentWorkingDirectory, 'No documentation found for your query.');
38
+ return formatTextContents('No documentation found for your query.');
39
39
  }
40
40
  const formattedResults = results
41
41
  .map(result => `**${result.title}**\n${result.description}\nURL: ${result.url}\nScore: ${result.score}\n\n${result.content}\n---\n`)
42
42
  .join('\n');
43
43
  const successMessage = `Found ${results.length} documentation results:\n\n${formattedResults}`;
44
- return formatTextContents(absoluteCurrentWorkingDirectory, successMessage);
44
+ return formatTextContents(successMessage);
45
45
  }
46
46
  catch (error) {
47
47
  if (isHubSpotHttpError(error)) {
48
48
  // Handle different status codes
49
- return formatTextContents(absoluteCurrentWorkingDirectory, error.toString());
49
+ return formatTextContents(error.toString());
50
50
  }
51
51
  const errorMessage = `Error searching documentation: ${error instanceof Error ? error.message : String(error)}`;
52
- return formatTextContents(absoluteCurrentWorkingDirectory, errorMessage);
52
+ return formatTextContents(errorMessage);
53
53
  }
54
54
  }
55
55
  register() {
@@ -57,6 +57,10 @@ export class DocsSearchTool extends Tool {
57
57
  title: 'Search HubSpot Developer Documentation',
58
58
  description: 'Use this first whenever you need details about HubSpot APIs, SDKs, integrations, or developer platform features. This searches the official HubSpot Developer Documentation and returns the most relevant pages, each with a URL for use in `fetch-doc`. Always follow this with a fetch to get the full, authoritative content before making plans or writing answers.',
59
59
  inputSchema,
60
+ annotations: {
61
+ readOnlyHint: true,
62
+ openWorldHint: true,
63
+ },
60
64
  }, this.handler);
61
65
  }
62
66
  }
@@ -20,7 +20,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
20
20
  export type GetApiUsagePatternsByAppIdInputSchema = z.infer<typeof inputSchemaZodObject>;
21
21
  export declare class GetApiUsagePatternsByAppIdTool extends Tool<GetApiUsagePatternsByAppIdInputSchema> {
22
22
  constructor(mcpServer: McpServer);
23
- handler({ absoluteCurrentWorkingDirectory, appId, startDate, endDate, }: GetApiUsagePatternsByAppIdInputSchema): Promise<TextContentResponse>;
23
+ handler({ appId, startDate, endDate, }: GetApiUsagePatternsByAppIdInputSchema): Promise<TextContentResponse>;
24
24
  register(): RegisteredTool;
25
25
  }
26
26
  export {};
@@ -4,7 +4,7 @@ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
4
4
  import { http } from '@hubspot/local-dev-lib/http';
5
5
  import { formatTextContents } from '../../utils/content.js';
6
6
  import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
7
- import { getAccountId } from '@hubspot/local-dev-lib/config';
7
+ import { getConfigDefaultAccountIfExists } from '@hubspot/local-dev-lib/config';
8
8
  import { absoluteCurrentWorkingDirectory } from './constants.js';
9
9
  const inputSchema = {
10
10
  absoluteCurrentWorkingDirectory,
@@ -30,14 +30,14 @@ export class GetApiUsagePatternsByAppIdTool extends Tool {
30
30
  constructor(mcpServer) {
31
31
  super(mcpServer);
32
32
  }
33
- async handler({ absoluteCurrentWorkingDirectory, appId, startDate, endDate, }) {
33
+ async handler({ appId, startDate, endDate, }) {
34
34
  await trackToolUsage(toolName);
35
35
  try {
36
36
  // Get account ID from CLI config
37
- const accountId = getAccountId();
37
+ const accountId = getConfigDefaultAccountIfExists()?.accountId;
38
38
  if (!accountId) {
39
39
  const authErrorMessage = `No account ID found. Please run \`hs account auth\` to configure an account, or set a default account with \`hs account use <account>\``;
40
- return formatTextContents(absoluteCurrentWorkingDirectory, authErrorMessage);
40
+ return formatTextContents(authErrorMessage);
41
41
  }
42
42
  const response = await http.get(accountId, {
43
43
  url: `app/feature/utilization/public/v3/insights/app/${appId}/usage-patterns`,
@@ -49,15 +49,15 @@ export class GetApiUsagePatternsByAppIdTool extends Tool {
49
49
  // Format the response for display
50
50
  const { data } = response;
51
51
  const formattedResult = JSON.stringify(data, null, 2);
52
- return formatTextContents(absoluteCurrentWorkingDirectory, formattedResult);
52
+ return formatTextContents(formattedResult);
53
53
  }
54
54
  catch (error) {
55
55
  if (isHubSpotHttpError(error)) {
56
56
  // Handle HubSpot-specific HTTP errors
57
- return formatTextContents(absoluteCurrentWorkingDirectory, error.toString());
57
+ return formatTextContents(error.toString());
58
58
  }
59
59
  const errorMessage = `${error instanceof Error ? error.message : String(error)}`;
60
- return formatTextContents(absoluteCurrentWorkingDirectory, errorMessage);
60
+ return formatTextContents(errorMessage);
61
61
  }
62
62
  }
63
63
  register() {
@@ -65,6 +65,10 @@ export class GetApiUsagePatternsByAppIdTool extends Tool {
65
65
  title: 'Get API Usage Patterns by App ID',
66
66
  description: 'Retrieves detailed API usage pattern analytics for a specific HubSpot application. Requires an appId (string) to identify the target application. Optionally accepts startDate and endDate parameters in YYYY-MM-DD format to filter results within a specific time range. Returns patternSummaries object containing usage statistics including portalPercentage (percentage of portals using this pattern) and numOfPortals (total count of portals) for different usage patterns. This data helps analyze how the application is being used across different HubSpot portals and can inform optimization decisions.',
67
67
  inputSchema,
68
+ annotations: {
69
+ readOnlyHint: true,
70
+ openWorldHint: true,
71
+ },
68
72
  }, this.handler);
69
73
  }
70
74
  }
@@ -11,7 +11,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
11
11
  export type GetApplicationInfoInputSchema = z.infer<typeof inputSchemaZodObject>;
12
12
  export declare class GetApplicationInfoTool extends Tool<GetApplicationInfoInputSchema> {
13
13
  constructor(mcpServer: McpServer);
14
- handler({ absoluteCurrentWorkingDirectory, }: GetApplicationInfoInputSchema): Promise<TextContentResponse>;
14
+ handler({}: GetApplicationInfoInputSchema): Promise<TextContentResponse>;
15
15
  register(): RegisteredTool;
16
16
  }
17
17
  export {};
@@ -4,7 +4,7 @@ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
4
4
  import { http } from '@hubspot/local-dev-lib/http';
5
5
  import { formatTextContents } from '../../utils/content.js';
6
6
  import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
7
- import { getAccountId } from '@hubspot/local-dev-lib/config';
7
+ import { getConfigDefaultAccountIfExists } from '@hubspot/local-dev-lib/config';
8
8
  import { absoluteCurrentWorkingDirectory } from './constants.js';
9
9
  const inputSchema = { absoluteCurrentWorkingDirectory };
10
10
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -14,14 +14,14 @@ export class GetApplicationInfoTool extends Tool {
14
14
  constructor(mcpServer) {
15
15
  super(mcpServer);
16
16
  }
17
- async handler({ absoluteCurrentWorkingDirectory, }) {
17
+ async handler({}) {
18
18
  await trackToolUsage(toolName);
19
19
  try {
20
20
  // Get account ID from CLI config
21
- const accountId = getAccountId();
21
+ const accountId = getConfigDefaultAccountIfExists()?.accountId;
22
22
  if (!accountId) {
23
23
  const authErrorMessage = `No account ID found. Please run \`hs account auth\` to configure an account, or set a default account with \`hs account use <account>\``;
24
- return formatTextContents(absoluteCurrentWorkingDirectory, authErrorMessage);
24
+ return formatTextContents(authErrorMessage);
25
25
  }
26
26
  const response = await http.get(accountId, {
27
27
  url: `app/feature/utilization/public/v3/insights/apps`,
@@ -29,15 +29,15 @@ export class GetApplicationInfoTool extends Tool {
29
29
  // Format the response for display
30
30
  const { data } = response;
31
31
  const formattedResult = JSON.stringify(data, null, 2);
32
- return formatTextContents(absoluteCurrentWorkingDirectory, formattedResult);
32
+ return formatTextContents(formattedResult);
33
33
  }
34
34
  catch (error) {
35
35
  if (isHubSpotHttpError(error)) {
36
36
  // Handle HubSpot-specific HTTP errors
37
- return formatTextContents(absoluteCurrentWorkingDirectory, error.toString());
37
+ return formatTextContents(error.toString());
38
38
  }
39
39
  const errorMessage = `${error instanceof Error ? error.message : String(error)}`;
40
- return formatTextContents(absoluteCurrentWorkingDirectory, errorMessage);
40
+ return formatTextContents(errorMessage);
41
41
  }
42
42
  }
43
43
  register() {
@@ -45,6 +45,10 @@ export class GetApplicationInfoTool extends Tool {
45
45
  title: 'Get Applications Information',
46
46
  description: 'Retrieves a list of all HubSpot applications available in the current account. Returns an array of applications, where each application contains an appId (numeric identifier) and appName (string). This information is useful for identifying available applications before using other tools that require specific application IDs, such as getting API usage patterns. No input parameters are required - this tool fetches all applications from the HubSpot Insights API.',
47
47
  inputSchema,
48
+ annotations: {
49
+ readOnlyHint: true,
50
+ openWorldHint: true,
51
+ },
48
52
  }, this.handler);
49
53
  }
50
54
  }
@@ -0,0 +1,26 @@
1
+ import { TextContentResponse, Tool } from '../../types.js';
2
+ import { McpServer, RegisteredTool } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { z } from 'zod';
4
+ declare const inputSchemaZodObject: z.ZodObject<{
5
+ absoluteProjectPath: z.ZodString;
6
+ absoluteCurrentWorkingDirectory: z.ZodString;
7
+ buildId: z.ZodOptional<z.ZodNumber>;
8
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
9
+ }, "strip", z.ZodTypeAny, {
10
+ limit: number;
11
+ absoluteProjectPath: string;
12
+ absoluteCurrentWorkingDirectory: string;
13
+ buildId?: number | undefined;
14
+ }, {
15
+ absoluteProjectPath: string;
16
+ absoluteCurrentWorkingDirectory: string;
17
+ limit?: number | undefined;
18
+ buildId?: number | undefined;
19
+ }>;
20
+ export type GetBuildStatusInputSchema = z.infer<typeof inputSchemaZodObject>;
21
+ export declare class GetBuildStatusTool extends Tool<GetBuildStatusInputSchema> {
22
+ constructor(mcpServer: McpServer);
23
+ handler({ absoluteProjectPath, absoluteCurrentWorkingDirectory, buildId, limit, }: GetBuildStatusInputSchema): Promise<TextContentResponse>;
24
+ register(): RegisteredTool;
25
+ }
26
+ export {};
@@ -0,0 +1,164 @@
1
+ import { Tool } from '../../types.js';
2
+ import { z } from 'zod';
3
+ import { trackToolUsage } from '../../utils/toolUsageTracking.js';
4
+ import { formatTextContents } from '../../utils/content.js';
5
+ import { isHubSpotHttpError } from '@hubspot/local-dev-lib/errors/index';
6
+ import { fetchProjectBuilds, getBuildStatus, } from '@hubspot/local-dev-lib/api/projects';
7
+ import { getProjectConfig, validateProjectConfig, } from '../../../lib/projects/config.js';
8
+ import moment from 'moment';
9
+ import { absoluteCurrentWorkingDirectory, absoluteProjectPath, } from './constants.js';
10
+ import { getConfigDefaultAccountIfExists } from '@hubspot/local-dev-lib/config';
11
+ const TOOL_NAME = 'get-build-status';
12
+ const inputSchema = {
13
+ absoluteProjectPath,
14
+ absoluteCurrentWorkingDirectory,
15
+ buildId: z
16
+ .number()
17
+ .optional()
18
+ .describe('Optional: Specific build ID to inspect. If omitted, shows recent builds to help identify the latest build.'),
19
+ limit: z
20
+ .number()
21
+ .optional()
22
+ .default(3)
23
+ .describe('Number of recent builds to fetch when buildId is not specified.'),
24
+ };
25
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
26
+ const inputSchemaZodObject = z.object({ ...inputSchema });
27
+ function getStatusIcon(status) {
28
+ return status === 'SUCCESS' ? '✓' : '⚠️';
29
+ }
30
+ function formatDuration(startedAt, finishedAt) {
31
+ const duration = moment.duration(moment(finishedAt).diff(moment(startedAt)));
32
+ const days = Math.floor(duration.asDays());
33
+ const hours = duration.hours();
34
+ const minutes = duration.minutes();
35
+ const seconds = duration.seconds();
36
+ const parts = [];
37
+ if (days > 0)
38
+ parts.push(`${days}d`);
39
+ if (hours > 0)
40
+ parts.push(`${hours}h`);
41
+ if (minutes > 0)
42
+ parts.push(`${minutes}m`);
43
+ if (seconds > 0 || parts.length === 0)
44
+ parts.push(`${seconds}s`);
45
+ return parts.join(' ');
46
+ }
47
+ function formatSubbuilds(subbuilds, indent = ' ') {
48
+ const lines = [];
49
+ subbuilds.forEach(sub => {
50
+ const icon = getStatusIcon(sub.status);
51
+ lines.push(`${indent}${icon} ${sub.buildName} (${sub.buildType}): ${sub.status}`);
52
+ if (sub.errorMessage) {
53
+ lines.push(`${indent} Error: ${sub.errorMessage}`);
54
+ }
55
+ });
56
+ return lines;
57
+ }
58
+ function formatBuildList(builds) {
59
+ const lines = [];
60
+ builds.forEach((build, index) => {
61
+ const icon = getStatusIcon(build.status);
62
+ const timeAgo = moment(build.finishedAt).fromNow();
63
+ const duration = formatDuration(build.startedAt, build.finishedAt);
64
+ lines.push(`Build #${build.buildId} - ${build.status} ${icon}`);
65
+ lines.push(` Finished: ${timeAgo} (Duration: ${duration})`);
66
+ if (build.uploadMessage) {
67
+ lines.push(` Message: ${build.uploadMessage}`);
68
+ }
69
+ if (build.status === 'FAILURE' && build.buildErrorMessage) {
70
+ lines.push(` Error: ${build.buildErrorMessage}`);
71
+ }
72
+ if (build.subbuildStatuses.length > 0) {
73
+ lines.push(` Subbuilds:`);
74
+ lines.push(...formatSubbuilds(build.subbuildStatuses, ' '));
75
+ }
76
+ if (index < builds.length - 1) {
77
+ lines.push('');
78
+ }
79
+ });
80
+ return lines.join('\n');
81
+ }
82
+ function formatBuildDetails(build) {
83
+ const lines = [];
84
+ const icon = getStatusIcon(build.status);
85
+ lines.push(`Build #${build.buildId} Details\n`);
86
+ lines.push(`Status: ${build.status} ${icon}`);
87
+ lines.push(`Platform Version: ${build.platformVersion}`);
88
+ lines.push(`Started: ${moment(build.startedAt).format('YYYY-MM-DD HH:mm:ss UTC')}`);
89
+ lines.push(`Finished: ${moment(build.finishedAt).format('YYYY-MM-DD HH:mm:ss UTC')}`);
90
+ lines.push(`Duration: ${formatDuration(build.startedAt, build.finishedAt)}`);
91
+ if (build.uploadMessage) {
92
+ lines.push(`\nUpload Message:\n${build.uploadMessage}`);
93
+ }
94
+ if (build.buildErrorMessage) {
95
+ lines.push(`\nBuild Error:\n${build.buildErrorMessage}`);
96
+ }
97
+ if (build.subbuildStatuses.length > 0) {
98
+ lines.push(`\nSubbuilds:`);
99
+ lines.push(...formatSubbuilds(build.subbuildStatuses));
100
+ }
101
+ else {
102
+ lines.push(`\nSubbuilds: None`);
103
+ }
104
+ return lines.join('\n');
105
+ }
106
+ export class GetBuildStatusTool extends Tool {
107
+ constructor(mcpServer) {
108
+ super(mcpServer);
109
+ }
110
+ async handler({ absoluteProjectPath, absoluteCurrentWorkingDirectory, buildId, limit, }) {
111
+ await trackToolUsage(TOOL_NAME);
112
+ try {
113
+ const accountId = getConfigDefaultAccountIfExists()?.accountId;
114
+ if (!accountId) {
115
+ return formatTextContents(absoluteCurrentWorkingDirectory, 'No account ID found. Please run `hs account auth` to configure an account, or set a default account with `hs account use <account>`');
116
+ }
117
+ const { projectConfig, projectDir } = await getProjectConfig(absoluteProjectPath);
118
+ validateProjectConfig(projectConfig, projectDir);
119
+ const projectName = projectConfig.name;
120
+ let output;
121
+ if (buildId) {
122
+ const response = await getBuildStatus(accountId, projectName, buildId);
123
+ const build = response.data;
124
+ output = formatBuildDetails(build);
125
+ }
126
+ else {
127
+ const response = await fetchProjectBuilds(accountId, projectName, {
128
+ limit,
129
+ });
130
+ const { results } = response.data;
131
+ if (!results || results.length === 0) {
132
+ return formatTextContents(absoluteCurrentWorkingDirectory, `No builds found for project '${projectName}'.`);
133
+ }
134
+ output = `Recent builds for '${projectName}':\n\n${formatBuildList(results)}`;
135
+ }
136
+ return formatTextContents(absoluteCurrentWorkingDirectory, output);
137
+ }
138
+ catch (error) {
139
+ let errorMessage;
140
+ if (isHubSpotHttpError(error)) {
141
+ errorMessage = error.toString();
142
+ }
143
+ else if (error instanceof Error) {
144
+ errorMessage = error.message;
145
+ }
146
+ else {
147
+ errorMessage = String(error);
148
+ }
149
+ return formatTextContents(absoluteCurrentWorkingDirectory, errorMessage);
150
+ }
151
+ }
152
+ register() {
153
+ return this.mcpServer.registerTool(TOOL_NAME, {
154
+ title: 'Get HubSpot Projects Build Status and Errors',
155
+ description: 'Retrieves build status and error messages for HubSpot projects. When buildId is omitted, shows recent builds with their status(default 3) - use this to find the latest builds when troubleshooting. When buildId is provided, shows detailed error information for that specific build. Displays buildErrorMessage and subbuild failures to help diagnose build issues.',
156
+ inputSchema,
157
+ annotations: {
158
+ readOnlyHint: true,
159
+ openWorldHint: true,
160
+ idempotentHint: true,
161
+ },
162
+ }, this.handler);
163
+ }
164
+ }
@@ -17,7 +17,7 @@ declare const inputSchemaZodObject: z.ZodObject<{
17
17
  type InputSchemaType = z.infer<typeof inputSchemaZodObject>;
18
18
  export declare class GetConfigValuesTool extends Tool<InputSchemaType> {
19
19
  constructor(mcpServer: McpServer);
20
- handler({ absoluteCurrentWorkingDirectory, platformVersion, featureType, }: InputSchemaType): Promise<TextContentResponse>;
20
+ handler({ platformVersion, featureType, }: InputSchemaType): Promise<TextContentResponse>;
21
21
  register(): RegisteredTool;
22
22
  }
23
23
  export {};