@hed-hog/core 0.0.350 → 0.0.353

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 (284) hide show
  1. package/dist/access-log/access-log.controller.d.ts +16 -0
  2. package/dist/access-log/access-log.controller.d.ts.map +1 -0
  3. package/dist/access-log/access-log.controller.js +44 -0
  4. package/dist/access-log/access-log.controller.js.map +1 -0
  5. package/dist/access-log/access-log.interceptor.d.ts +9 -0
  6. package/dist/access-log/access-log.interceptor.d.ts.map +1 -0
  7. package/dist/access-log/access-log.interceptor.js +46 -0
  8. package/dist/access-log/access-log.interceptor.js.map +1 -0
  9. package/dist/access-log/access-log.module.d.ts +3 -0
  10. package/dist/access-log/access-log.module.d.ts.map +1 -0
  11. package/dist/access-log/access-log.module.js +29 -0
  12. package/dist/access-log/access-log.module.js.map +1 -0
  13. package/dist/access-log/access-log.service.d.ts +47 -0
  14. package/dist/access-log/access-log.service.d.ts.map +1 -0
  15. package/dist/access-log/access-log.service.js +113 -0
  16. package/dist/access-log/access-log.service.js.map +1 -0
  17. package/dist/access-log/dto/query-access-log.dto.d.ts +8 -0
  18. package/dist/access-log/dto/query-access-log.dto.d.ts.map +1 -0
  19. package/dist/access-log/dto/query-access-log.dto.js +42 -0
  20. package/dist/access-log/dto/query-access-log.dto.js.map +1 -0
  21. package/dist/auth/auth.controller.d.ts +9 -9
  22. package/dist/auth/auth.service.d.ts +19 -19
  23. package/dist/auth/auth.service.d.ts.map +1 -1
  24. package/dist/auth/auth.service.js +0 -4
  25. package/dist/auth/auth.service.js.map +1 -1
  26. package/dist/challenge/challenge.service.d.ts +2 -2
  27. package/dist/challenge/challenge.service.d.ts.map +1 -1
  28. package/dist/challenge/challenge.service.js +0 -1
  29. package/dist/challenge/challenge.service.js.map +1 -1
  30. package/dist/core/system.module.d.ts.map +1 -1
  31. package/dist/core/system.module.js +1 -0
  32. package/dist/core/system.module.js.map +1 -1
  33. package/dist/core.module.d.ts.map +1 -1
  34. package/dist/core.module.js +12 -0
  35. package/dist/core.module.js.map +1 -1
  36. package/dist/dashboard/dashboard-user/dashboard-user.controller.d.ts +3 -3
  37. package/dist/dashboard/dashboard-user/dashboard-user.service.d.ts +3 -3
  38. package/dist/dashboard/dashboard.module.d.ts.map +1 -1
  39. package/dist/dashboard/dashboard.module.js +4 -1
  40. package/dist/dashboard/dashboard.module.js.map +1 -1
  41. package/dist/file/file.controller.js +0 -1
  42. package/dist/file/file.controller.js.map +1 -1
  43. package/dist/file/file.service.d.ts +65 -0
  44. package/dist/file/file.service.d.ts.map +1 -1
  45. package/dist/file/file.service.js +151 -3
  46. package/dist/file/file.service.js.map +1 -1
  47. package/dist/file/provider/abstract.provider.d.ts +8 -0
  48. package/dist/file/provider/abstract.provider.d.ts.map +1 -1
  49. package/dist/file/provider/abstract.provider.js.map +1 -1
  50. package/dist/file/provider/azure.provider.d.ts +4 -0
  51. package/dist/file/provider/azure.provider.d.ts.map +1 -1
  52. package/dist/file/provider/azure.provider.js +14 -0
  53. package/dist/file/provider/azure.provider.js.map +1 -1
  54. package/dist/file/provider/gcs.provider.d.ts +4 -0
  55. package/dist/file/provider/gcs.provider.d.ts.map +1 -1
  56. package/dist/file/provider/gcs.provider.js +14 -0
  57. package/dist/file/provider/gcs.provider.js.map +1 -1
  58. package/dist/file/provider/local.provider.d.ts +4 -0
  59. package/dist/file/provider/local.provider.d.ts.map +1 -1
  60. package/dist/file/provider/local.provider.js +19 -0
  61. package/dist/file/provider/local.provider.js.map +1 -1
  62. package/dist/file/provider/provider.factory.d.ts.map +1 -1
  63. package/dist/file/provider/provider.factory.js +3 -0
  64. package/dist/file/provider/provider.factory.js.map +1 -1
  65. package/dist/file/provider/s3.provider.d.ts +4 -0
  66. package/dist/file/provider/s3.provider.d.ts.map +1 -1
  67. package/dist/file/provider/s3.provider.js +17 -0
  68. package/dist/file/provider/s3.provider.js.map +1 -1
  69. package/dist/mcp/mcp-audit.service.d.ts +3 -1
  70. package/dist/mcp/mcp-audit.service.d.ts.map +1 -1
  71. package/dist/mcp/mcp-audit.service.js +14 -2
  72. package/dist/mcp/mcp-audit.service.js.map +1 -1
  73. package/dist/mcp/mcp.controller.d.ts +3 -1
  74. package/dist/mcp/mcp.controller.d.ts.map +1 -1
  75. package/dist/mcp/mcp.controller.js +10 -2
  76. package/dist/mcp/mcp.controller.js.map +1 -1
  77. package/dist/mcp/mcp.module.d.ts.map +1 -1
  78. package/dist/mcp/mcp.module.js +72 -0
  79. package/dist/mcp/mcp.module.js.map +1 -1
  80. package/dist/mcp/tools/core-ai.mcp-tools.d.ts +45 -0
  81. package/dist/mcp/tools/core-ai.mcp-tools.d.ts.map +1 -0
  82. package/dist/mcp/tools/core-ai.mcp-tools.js +214 -0
  83. package/dist/mcp/tools/core-ai.mcp-tools.js.map +1 -0
  84. package/dist/mcp/tools/core-dashboard-items.mcp-tools.d.ts +21 -0
  85. package/dist/mcp/tools/core-dashboard-items.mcp-tools.d.ts.map +1 -0
  86. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js +89 -0
  87. package/dist/mcp/tools/core-dashboard-items.mcp-tools.js.map +1 -0
  88. package/dist/mcp/tools/core-dashboard.mcp-tools.d.ts +29 -0
  89. package/dist/mcp/tools/core-dashboard.mcp-tools.d.ts.map +1 -0
  90. package/dist/mcp/tools/core-dashboard.mcp-tools.js +149 -0
  91. package/dist/mcp/tools/core-dashboard.mcp-tools.js.map +1 -0
  92. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts +30 -0
  93. package/dist/mcp/tools/core-event-webhooks.mcp-tools.d.ts.map +1 -0
  94. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js +185 -0
  95. package/dist/mcp/tools/core-event-webhooks.mcp-tools.js.map +1 -0
  96. package/dist/mcp/tools/core-files.mcp-tools.d.ts +26 -0
  97. package/dist/mcp/tools/core-files.mcp-tools.d.ts.map +1 -0
  98. package/dist/mcp/tools/core-files.mcp-tools.js +140 -0
  99. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -0
  100. package/dist/mcp/tools/core-integration-events.mcp-tools.d.ts +26 -0
  101. package/dist/mcp/tools/core-integration-events.mcp-tools.d.ts.map +1 -0
  102. package/dist/mcp/tools/core-integration-events.mcp-tools.js +168 -0
  103. package/dist/mcp/tools/core-integration-events.mcp-tools.js.map +1 -0
  104. package/dist/mcp/tools/core-mail-profile.mcp-tools.d.ts +32 -0
  105. package/dist/mcp/tools/core-mail-profile.mcp-tools.d.ts.map +1 -0
  106. package/dist/mcp/tools/core-mail-profile.mcp-tools.js +178 -0
  107. package/dist/mcp/tools/core-mail-profile.mcp-tools.js.map +1 -0
  108. package/dist/mcp/tools/core-mail-sent.mcp-tools.d.ts +14 -0
  109. package/dist/mcp/tools/core-mail-sent.mcp-tools.d.ts.map +1 -0
  110. package/dist/mcp/tools/core-mail-sent.mcp-tools.js +106 -0
  111. package/dist/mcp/tools/core-mail-sent.mcp-tools.js.map +1 -0
  112. package/dist/mcp/tools/core-mail.mcp-tools.d.ts +36 -0
  113. package/dist/mcp/tools/core-mail.mcp-tools.d.ts.map +1 -0
  114. package/dist/mcp/tools/core-mail.mcp-tools.js +184 -0
  115. package/dist/mcp/tools/core-mail.mcp-tools.js.map +1 -0
  116. package/dist/mcp/tools/core-mcp-chat.mcp-tools.d.ts +21 -0
  117. package/dist/mcp/tools/core-mcp-chat.mcp-tools.d.ts.map +1 -0
  118. package/dist/mcp/tools/core-mcp-chat.mcp-tools.js +118 -0
  119. package/dist/mcp/tools/core-mcp-chat.mcp-tools.js.map +1 -0
  120. package/dist/mcp/tools/core-menus.mcp-tools.d.ts +40 -0
  121. package/dist/mcp/tools/core-menus.mcp-tools.d.ts.map +1 -0
  122. package/dist/mcp/tools/core-menus.mcp-tools.js +268 -0
  123. package/dist/mcp/tools/core-menus.mcp-tools.js.map +1 -0
  124. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts +31 -0
  125. package/dist/mcp/tools/core-notifications.mcp-tools.d.ts.map +1 -0
  126. package/dist/mcp/tools/core-notifications.mcp-tools.js +178 -0
  127. package/dist/mcp/tools/core-notifications.mcp-tools.js.map +1 -0
  128. package/dist/mcp/tools/core-profile.mcp-tools.d.ts +20 -0
  129. package/dist/mcp/tools/core-profile.mcp-tools.d.ts.map +1 -0
  130. package/dist/mcp/tools/core-profile.mcp-tools.js +111 -0
  131. package/dist/mcp/tools/core-profile.mcp-tools.js.map +1 -0
  132. package/dist/mcp/tools/core-roles.mcp-tools.d.ts +70 -0
  133. package/dist/mcp/tools/core-roles.mcp-tools.d.ts.map +1 -0
  134. package/dist/mcp/tools/core-roles.mcp-tools.js +355 -0
  135. package/dist/mcp/tools/core-roles.mcp-tools.js.map +1 -0
  136. package/dist/mcp/tools/core-routes.mcp-tools.d.ts +52 -0
  137. package/dist/mcp/tools/core-routes.mcp-tools.d.ts.map +1 -0
  138. package/dist/mcp/tools/core-routes.mcp-tools.js +254 -0
  139. package/dist/mcp/tools/core-routes.mcp-tools.js.map +1 -0
  140. package/dist/mcp/tools/core-screens.mcp-tools.d.ts +47 -0
  141. package/dist/mcp/tools/core-screens.mcp-tools.d.ts.map +1 -0
  142. package/dist/mcp/tools/core-screens.mcp-tools.js +250 -0
  143. package/dist/mcp/tools/core-screens.mcp-tools.js.map +1 -0
  144. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts +20 -0
  145. package/dist/mcp/tools/core-sessions.mcp-tools.d.ts.map +1 -0
  146. package/dist/mcp/tools/core-sessions.mcp-tools.js +128 -0
  147. package/dist/mcp/tools/core-sessions.mcp-tools.js.map +1 -0
  148. package/dist/mcp/tools/core-settings.mcp-tools.d.ts +25 -0
  149. package/dist/mcp/tools/core-settings.mcp-tools.d.ts.map +1 -1
  150. package/dist/mcp/tools/core-settings.mcp-tools.js +138 -0
  151. package/dist/mcp/tools/core-settings.mcp-tools.js.map +1 -1
  152. package/dist/mcp/tools/core-system.mcp-tools.d.ts +8 -0
  153. package/dist/mcp/tools/core-system.mcp-tools.d.ts.map +1 -0
  154. package/dist/mcp/tools/core-system.mcp-tools.js +40 -0
  155. package/dist/mcp/tools/core-system.mcp-tools.js.map +1 -0
  156. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts +46 -0
  157. package/dist/mcp/tools/core-webhooks.mcp-tools.d.ts.map +1 -0
  158. package/dist/mcp/tools/core-webhooks.mcp-tools.js +266 -0
  159. package/dist/mcp/tools/core-webhooks.mcp-tools.js.map +1 -0
  160. package/dist/mcp-chat/mcp-chat.controller.d.ts +1 -1
  161. package/dist/mcp-chat/mcp-chat.service.d.ts +25 -2
  162. package/dist/mcp-chat/mcp-chat.service.d.ts.map +1 -1
  163. package/dist/mcp-chat/mcp-chat.service.js +666 -36
  164. package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
  165. package/dist/notification/notification.controller.d.ts +8 -4
  166. package/dist/notification/notification.controller.d.ts.map +1 -1
  167. package/dist/notification/notification.controller.js +12 -0
  168. package/dist/notification/notification.controller.js.map +1 -1
  169. package/dist/notification/notification.service.d.ts +19 -5
  170. package/dist/notification/notification.service.d.ts.map +1 -1
  171. package/dist/notification/notification.service.js +155 -9
  172. package/dist/notification/notification.service.js.map +1 -1
  173. package/dist/pdf/pdf.service.js +1 -1
  174. package/dist/pdf/pdf.service.js.map +1 -1
  175. package/dist/profile/profile.controller.d.ts +3 -3
  176. package/dist/profile/profile.controller.js +0 -1
  177. package/dist/profile/profile.controller.js.map +1 -1
  178. package/dist/profile/profile.module.d.ts.map +1 -1
  179. package/dist/profile/profile.module.js +1 -0
  180. package/dist/profile/profile.module.js.map +1 -1
  181. package/dist/profile/profile.service.d.ts +3 -3
  182. package/dist/session/session.controller.d.ts +2 -2
  183. package/dist/session/session.service.d.ts +6 -6
  184. package/dist/setting/setting.controller.d.ts +1 -1
  185. package/dist/setting/setting.service.d.ts +1 -1
  186. package/dist/setting/setting.service.d.ts.map +1 -1
  187. package/dist/setting/setting.service.js +1 -4
  188. package/dist/setting/setting.service.js.map +1 -1
  189. package/dist/task/task.service.d.ts +1 -0
  190. package/dist/task/task.service.d.ts.map +1 -1
  191. package/dist/task/task.service.js +25 -0
  192. package/dist/task/task.service.js.map +1 -1
  193. package/dist/token/token.service.d.ts.map +1 -1
  194. package/dist/token/token.service.js +0 -1
  195. package/dist/token/token.service.js.map +1 -1
  196. package/dist/user/user.controller.d.ts +9 -9
  197. package/dist/user/user.service.d.ts +21 -21
  198. package/dist/webhook-integration/dto/webhook-action.dto.d.ts +22 -0
  199. package/dist/webhook-integration/dto/webhook-action.dto.d.ts.map +1 -0
  200. package/dist/webhook-integration/dto/webhook-action.dto.js +120 -0
  201. package/dist/webhook-integration/dto/webhook-action.dto.js.map +1 -0
  202. package/dist/webhook-integration/webhook-integration.controller.d.ts +7 -5
  203. package/dist/webhook-integration/webhook-integration.controller.d.ts.map +1 -1
  204. package/dist/webhook-integration/webhook-integration.controller.js +18 -5
  205. package/dist/webhook-integration/webhook-integration.controller.js.map +1 -1
  206. package/dist/webhook-integration/webhook-integration.service.d.ts +14 -5
  207. package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
  208. package/dist/webhook-integration/webhook-integration.service.js +174 -41
  209. package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
  210. package/hedhog/data/menu.yaml +15 -0
  211. package/hedhog/data/route.yaml +1304 -0
  212. package/hedhog/data/setting_group.yaml +67 -0
  213. package/hedhog/data/setting_subgroup.yaml +16 -0
  214. package/hedhog/frontend/app/access-log/page.tsx.ejs +772 -0
  215. package/hedhog/frontend/app/ai_agent/page.tsx.ejs +10 -3
  216. package/hedhog/frontend/app/dashboard/dashboard-home-tabs.tsx.ejs +33 -13
  217. package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +12 -5
  218. package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +12 -5
  219. package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +1817 -356
  220. package/hedhog/frontend/app/mcp_chat/chat-components.tsx.ejs +43 -5
  221. package/hedhog/frontend/app/mcp_chat/page.tsx.ejs +35 -7
  222. package/hedhog/frontend/app/menu/page.tsx.ejs +9 -3
  223. package/hedhog/frontend/app/roles/page.tsx.ejs +18 -6
  224. package/hedhog/frontend/app/routes/page.tsx.ejs +9 -3
  225. package/hedhog/frontend/app/setting-list/page.tsx.ejs +344 -171
  226. package/hedhog/frontend/app/users/user-access-sheet.tsx.ejs +310 -304
  227. package/hedhog/frontend/app/users/user-sheet.tsx.ejs +25 -7
  228. package/hedhog/frontend/messages/en.json +104 -3
  229. package/hedhog/frontend/messages/pt.json +104 -3
  230. package/hedhog/table/access_log.yaml +31 -0
  231. package/package.json +4 -3
  232. package/src/access-log/access-log.controller.ts +29 -0
  233. package/src/access-log/access-log.interceptor.ts +38 -0
  234. package/src/access-log/access-log.module.ts +16 -0
  235. package/src/access-log/access-log.service.ts +129 -0
  236. package/src/access-log/dto/query-access-log.dto.ts +23 -0
  237. package/src/auth/auth.service.ts +0 -7
  238. package/src/challenge/challenge.service.ts +0 -2
  239. package/src/core/system.module.ts +1 -0
  240. package/src/core.module.ts +12 -0
  241. package/src/dashboard/dashboard.module.ts +4 -1
  242. package/src/file/file.controller.ts +14 -14
  243. package/src/file/file.service.ts +198 -4
  244. package/src/file/provider/abstract.provider.ts +10 -0
  245. package/src/file/provider/azure.provider.ts +24 -0
  246. package/src/file/provider/gcs.provider.ts +20 -0
  247. package/src/file/provider/local.provider.ts +30 -2
  248. package/src/file/provider/provider.factory.ts +3 -0
  249. package/src/file/provider/s3.provider.ts +22 -0
  250. package/src/mcp/mcp-audit.service.ts +47 -36
  251. package/src/mcp/mcp.controller.ts +40 -30
  252. package/src/mcp/mcp.module.ts +72 -0
  253. package/src/mcp/tools/core-ai.mcp-tools.ts +156 -0
  254. package/src/mcp/tools/core-dashboard-items.mcp-tools.ts +63 -0
  255. package/src/mcp/tools/core-dashboard.mcp-tools.ts +103 -0
  256. package/src/mcp/tools/core-event-webhooks.mcp-tools.ts +134 -0
  257. package/src/mcp/tools/core-files.mcp-tools.ts +105 -0
  258. package/src/mcp/tools/core-integration-events.mcp-tools.ts +118 -0
  259. package/src/mcp/tools/core-mail-profile.mcp-tools.ts +128 -0
  260. package/src/mcp/tools/core-mail-sent.mcp-tools.ts +76 -0
  261. package/src/mcp/tools/core-mail.mcp-tools.ts +130 -0
  262. package/src/mcp/tools/core-mcp-chat.mcp-tools.ts +81 -0
  263. package/src/mcp/tools/core-menus.mcp-tools.ts +197 -0
  264. package/src/mcp/tools/core-notifications.mcp-tools.ts +128 -0
  265. package/src/mcp/tools/core-profile.mcp-tools.ts +74 -0
  266. package/src/mcp/tools/core-roles.mcp-tools.ts +288 -0
  267. package/src/mcp/tools/core-routes.mcp-tools.ts +196 -0
  268. package/src/mcp/tools/core-screens.mcp-tools.ts +186 -0
  269. package/src/mcp/tools/core-sessions.mcp-tools.ts +97 -0
  270. package/src/mcp/tools/core-settings.mcp-tools.ts +171 -53
  271. package/src/mcp/tools/core-system.mcp-tools.ts +19 -0
  272. package/src/mcp/tools/core-webhooks.mcp-tools.ts +199 -0
  273. package/src/mcp-chat/mcp-chat.service.ts +887 -38
  274. package/src/notification/notification.controller.ts +20 -8
  275. package/src/notification/notification.service.ts +209 -9
  276. package/src/pdf/pdf.service.ts +1 -1
  277. package/src/profile/profile.controller.ts +1 -1
  278. package/src/profile/profile.module.ts +1 -0
  279. package/src/setting/setting.service.ts +8 -11
  280. package/src/task/task.service.ts +31 -0
  281. package/src/token/token.service.ts +0 -2
  282. package/src/webhook-integration/dto/webhook-action.dto.ts +96 -0
  283. package/src/webhook-integration/webhook-integration.controller.ts +124 -103
  284. package/src/webhook-integration/webhook-integration.service.ts +267 -64
@@ -1,30 +1,40 @@
1
- import { NoRole } from '@hed-hog/api';
2
- import { All, Controller, Req, Res, UseGuards } from '@nestjs/common';
3
- import { Request, Response } from 'express';
4
- import { McpAuthGuard } from './guards/mcp-auth.guard';
5
- import { McpPermissionGuard } from './guards/mcp-permission.guard';
6
- import { McpServerService } from './mcp-server.service';
7
-
8
- @NoRole()
9
- @UseGuards(McpAuthGuard, McpPermissionGuard)
10
- @Controller('mcp')
11
- export class McpController {
12
- constructor(private readonly mcpServer: McpServerService) {}
13
-
14
- @All()
15
- async handle(@Req() req: Request, @Res() res: Response): Promise<void> {
16
- const auth = (req as any).auth;
17
- const locale =
18
- req.headers['accept-language']?.split(',')[0]?.split('-')[0] ?? 'en';
19
- const body = req.body as any;
20
- const toolName: string =
21
- body?.method === 'tools/call' ? (body?.params?.name ?? '') : '';
22
-
23
- await this.mcpServer.handleRequest(req, res, {
24
- userId: auth.sub,
25
- sessionId: String(auth.sessionId),
26
- locale,
27
- toolName,
28
- });
29
- }
30
- }
1
+ import { NoRole } from '@hed-hog/api';
2
+ import { All, Controller, Req, Res, UseGuards } from '@nestjs/common';
3
+ import { Request, Response } from 'express';
4
+ import { SettingService } from '../setting/setting.service';
5
+ import { McpAuthGuard } from './guards/mcp-auth.guard';
6
+ import { McpPermissionGuard } from './guards/mcp-permission.guard';
7
+ import { McpServerService } from './mcp-server.service';
8
+
9
+ @NoRole()
10
+ @UseGuards(McpAuthGuard, McpPermissionGuard)
11
+ @Controller('mcp')
12
+ export class McpController {
13
+ constructor(
14
+ private readonly mcpServer: McpServerService,
15
+ private readonly setting: SettingService,
16
+ ) {}
17
+
18
+ @All()
19
+ async handle(@Req() req: Request, @Res() res: Response): Promise<void> {
20
+ const settings = await this.setting.getSettingValues(['mcp-enabled']);
21
+ if (settings['mcp-enabled'] === false) {
22
+ res.status(503).json({ message: 'MCP server is disabled.' });
23
+ return;
24
+ }
25
+
26
+ const auth = (req as any).auth;
27
+ const locale =
28
+ req.headers['accept-language']?.split(',')[0]?.split('-')[0] ?? 'en';
29
+ const body = req.body as any;
30
+ const toolName: string =
31
+ body?.method === 'tools/call' ? (body?.params?.name ?? '') : '';
32
+
33
+ await this.mcpServer.handleRequest(req, res, {
34
+ userId: auth.sub,
35
+ sessionId: String(auth.sessionId),
36
+ locale,
37
+ toolName,
38
+ });
39
+ }
40
+ }
@@ -2,10 +2,26 @@ import { PaginationModule } from '@hed-hog/api-pagination';
2
2
  import { PrismaModule } from '@hed-hog/api-prisma';
3
3
  import { Module, forwardRef } from '@nestjs/common';
4
4
  import { DiscoveryModule } from '@nestjs/core';
5
+ import { AiModule } from '../ai/ai.module';
6
+ import { SystemModule } from '../core/system.module';
7
+ import { DashboardModule } from '../dashboard/dashboard.module';
8
+ import { FileModule } from '../file/file.module';
9
+ import { MailModule } from '../mail/mail.module';
10
+ import { MailProfileModule } from '../mail-profile/mail-profile.module';
11
+ import { MailSentModule } from '../mail-sent/mail-sent.module';
12
+ import { McpChatService } from '../mcp-chat/mcp-chat.service';
13
+ import { MenuModule } from '../menu/menu.module';
14
+ import { NotificationModule } from '../notification/notification.module';
15
+ import { ProfileModule } from '../profile/profile.module';
16
+ import { RoleModule } from '../role/role.module';
17
+ import { RouteModule } from '../route/route.module';
18
+ import { ScreenModule } from '../screen/screen.module';
5
19
  import { SecurityModule } from '../security/security.module';
20
+ import { SessionModule } from '../session/session.module';
6
21
  import { SettingModule } from '../setting/setting.module';
7
22
  import { TokenModule } from '../token/token.module';
8
23
  import { UserModule } from '../user/user.module';
24
+ import { WebhookIntegrationModule } from '../webhook-integration/webhook-integration.module';
9
25
  import { McpAuthGuard } from './guards/mcp-auth.guard';
10
26
  import { McpPermissionGuard } from './guards/mcp-permission.guard';
11
27
  import { McpApiKeyController } from './mcp-api-key.controller';
@@ -14,18 +30,54 @@ import { McpAuditService } from './mcp-audit.service';
14
30
  import { McpRegistryService } from './mcp-registry.service';
15
31
  import { McpServerService } from './mcp-server.service';
16
32
  import { McpController } from './mcp.controller';
33
+ import { CoreAiMcpTools } from './tools/core-ai.mcp-tools';
34
+ import { CoreDashboardItemsMcpTools } from './tools/core-dashboard-items.mcp-tools';
35
+ import { CoreDashboardMcpTools } from './tools/core-dashboard.mcp-tools';
36
+ import { CoreEventWebhooksMcpTools } from './tools/core-event-webhooks.mcp-tools';
37
+ import { CoreFilesMcpTools } from './tools/core-files.mcp-tools';
38
+ import { CoreIntegrationEventsMcpTools } from './tools/core-integration-events.mcp-tools';
39
+ import { CoreMailMcpTools } from './tools/core-mail.mcp-tools';
40
+ import { CoreMailProfileMcpTools } from './tools/core-mail-profile.mcp-tools';
41
+ import { CoreMailSentMcpTools } from './tools/core-mail-sent.mcp-tools';
42
+ import { CoreMcpChatMcpTools } from './tools/core-mcp-chat.mcp-tools';
43
+ import { CoreMenusMcpTools } from './tools/core-menus.mcp-tools';
44
+ import { CoreNotificationsMcpTools } from './tools/core-notifications.mcp-tools';
45
+ import { CoreProfileMcpTools } from './tools/core-profile.mcp-tools';
46
+ import { CoreRolesMcpTools } from './tools/core-roles.mcp-tools';
47
+ import { CoreRoutesMcpTools } from './tools/core-routes.mcp-tools';
48
+ import { CoreScreensMcpTools } from './tools/core-screens.mcp-tools';
49
+ import { CoreSessionsMcpTools } from './tools/core-sessions.mcp-tools';
17
50
  import { CoreSettingsMcpTools } from './tools/core-settings.mcp-tools';
51
+ import { CoreSystemMcpTools } from './tools/core-system.mcp-tools';
18
52
  import { CoreUsersMcpTools } from './tools/core-users.mcp-tools';
53
+ import { CoreWebhooksMcpTools } from './tools/core-webhooks.mcp-tools';
54
+ import { AccessLogModule } from '../access-log/access-log.module';
19
55
 
20
56
  @Module({
21
57
  imports: [
22
58
  DiscoveryModule,
23
59
  forwardRef(() => PrismaModule),
60
+ forwardRef(() => AccessLogModule),
24
61
  forwardRef(() => PaginationModule),
25
62
  forwardRef(() => TokenModule),
26
63
  forwardRef(() => SettingModule),
27
64
  forwardRef(() => UserModule),
28
65
  forwardRef(() => SecurityModule),
66
+ forwardRef(() => RoleModule),
67
+ forwardRef(() => RouteModule),
68
+ forwardRef(() => MenuModule),
69
+ forwardRef(() => ScreenModule),
70
+ forwardRef(() => FileModule),
71
+ forwardRef(() => MailModule),
72
+ forwardRef(() => MailProfileModule),
73
+ forwardRef(() => MailSentModule),
74
+ forwardRef(() => SessionModule),
75
+ forwardRef(() => NotificationModule),
76
+ forwardRef(() => DashboardModule),
77
+ forwardRef(() => WebhookIntegrationModule),
78
+ forwardRef(() => AiModule),
79
+ forwardRef(() => ProfileModule),
80
+ forwardRef(() => SystemModule),
29
81
  ],
30
82
  controllers: [McpController, McpApiKeyController],
31
83
  providers: [
@@ -35,8 +87,28 @@ import { CoreUsersMcpTools } from './tools/core-users.mcp-tools';
35
87
  McpAuthGuard,
36
88
  McpPermissionGuard,
37
89
  McpApiKeyService,
90
+ McpChatService,
38
91
  CoreSettingsMcpTools,
39
92
  CoreUsersMcpTools,
93
+ CoreRolesMcpTools,
94
+ CoreRoutesMcpTools,
95
+ CoreMenusMcpTools,
96
+ CoreScreensMcpTools,
97
+ CoreProfileMcpTools,
98
+ CoreSessionsMcpTools,
99
+ CoreFilesMcpTools,
100
+ CoreMailMcpTools,
101
+ CoreMailProfileMcpTools,
102
+ CoreMailSentMcpTools,
103
+ CoreNotificationsMcpTools,
104
+ CoreDashboardMcpTools,
105
+ CoreDashboardItemsMcpTools,
106
+ CoreWebhooksMcpTools,
107
+ CoreEventWebhooksMcpTools,
108
+ CoreIntegrationEventsMcpTools,
109
+ CoreAiMcpTools,
110
+ CoreMcpChatMcpTools,
111
+ CoreSystemMcpTools,
40
112
  ],
41
113
  exports: [McpRegistryService, McpServerService],
42
114
  })
@@ -0,0 +1,156 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { AiService } from '../../ai/ai.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreAiMcpTools {
8
+ constructor(private readonly aiService: AiService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.ai.chat',
12
+ description: 'Sends a message to the AI and returns a response.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ message: { type: 'string', description: 'Message to send to the AI' },
17
+ context: { type: 'string', description: 'Additional context for the AI' },
18
+ },
19
+ required: ['message'],
20
+ },
21
+ })
22
+ async chat(args: { message: string; context?: string }, _context: McpContext): Promise<any> {
23
+ return this.aiService.chat({ message: args.message, context: args.context } as any);
24
+ }
25
+
26
+ @McpTool({
27
+ name: 'core.ai.agents.list',
28
+ description: 'Lists AI agents with optional pagination. Admin only.',
29
+ inputSchema: {
30
+ type: 'object',
31
+ properties: {
32
+ page: { type: 'number', description: 'Page number (default: 1)' },
33
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
34
+ search: { type: 'string', description: 'Search term' },
35
+ sortField: { type: 'string', description: 'Field to sort by' },
36
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
37
+ },
38
+ },
39
+ readOnly: true,
40
+ })
41
+ async listAgents(
42
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
43
+ _context: McpContext,
44
+ ): Promise<any> {
45
+ return this.aiService.listAgents({
46
+ page: args.page ?? 1,
47
+ pageSize: args.pageSize ?? 20,
48
+ search: args.search ?? '',
49
+ sortField: args.sortField ?? 'id',
50
+ sortOrder: (args.sortOrder as any) ?? 'asc',
51
+ fields: '',
52
+ });
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.ai.agents.get',
57
+ description: 'Returns a single AI agent by ID. Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ agentId: { type: 'number', description: 'Agent ID' },
62
+ },
63
+ required: ['agentId'],
64
+ },
65
+ readOnly: true,
66
+ })
67
+ async getAgent(args: { agentId: number }, _context: McpContext): Promise<any> {
68
+ return this.aiService.getAgentById(args.agentId);
69
+ }
70
+
71
+ @McpTool({
72
+ name: 'core.ai.agents.get-by-slug',
73
+ description: 'Returns a single AI agent by slug.',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ slug: { type: 'string', description: 'Agent slug' },
78
+ },
79
+ required: ['slug'],
80
+ },
81
+ readOnly: true,
82
+ })
83
+ async getAgentBySlug(args: { slug: string }, _context: McpContext): Promise<any> {
84
+ return this.aiService.getAgentBySlug(args.slug);
85
+ }
86
+
87
+ @McpTool({
88
+ name: 'core.ai.agents.create',
89
+ description: 'Creates a new AI agent. Admin only.',
90
+ inputSchema: {
91
+ type: 'object',
92
+ properties: {
93
+ slug: { type: 'string', description: 'Agent slug (unique identifier)' },
94
+ provider: { type: 'string', description: 'AI provider (e.g. openai, gemini)' },
95
+ model: { type: 'string', description: 'AI model identifier' },
96
+ instructions: { type: 'string', description: 'System instructions for the agent' },
97
+ },
98
+ required: ['slug'],
99
+ },
100
+ })
101
+ async createAgent(args: { slug: string; provider?: string; model?: string; instructions?: string }, _context: McpContext): Promise<any> {
102
+ return this.aiService.createAgent(args as any);
103
+ }
104
+
105
+ @McpTool({
106
+ name: 'core.ai.agents.update',
107
+ description: 'Updates an existing AI agent by ID. Admin only.',
108
+ inputSchema: {
109
+ type: 'object',
110
+ properties: {
111
+ agentId: { type: 'number', description: 'Agent ID' },
112
+ slug: { type: 'string', description: 'New slug' },
113
+ provider: { type: 'string', description: 'New AI provider' },
114
+ model: { type: 'string', description: 'New AI model' },
115
+ instructions: { type: 'string', description: 'New system instructions' },
116
+ },
117
+ required: ['agentId'],
118
+ },
119
+ })
120
+ async updateAgent(args: { agentId: number; slug?: string; provider?: string; model?: string; instructions?: string }, _context: McpContext): Promise<any> {
121
+ const { agentId, ...data } = args;
122
+ return this.aiService.updateAgent(agentId, data as any);
123
+ }
124
+
125
+ @McpTool({
126
+ name: 'core.ai.agents.delete',
127
+ description: 'Deletes one or more AI agents by their IDs. Admin only.',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {
131
+ ids: { type: 'array', items: { type: 'number' }, description: 'Agent IDs to delete' },
132
+ },
133
+ required: ['ids'],
134
+ },
135
+ })
136
+ async deleteAgents(args: { ids: number[] }, _context: McpContext): Promise<any> {
137
+ return this.aiService.deleteAgents({ ids: args.ids });
138
+ }
139
+
140
+ @McpTool({
141
+ name: 'core.ai.agents.chat',
142
+ description: 'Sends a message to a specific AI agent and returns a response.',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {
146
+ slug: { type: 'string', description: 'Agent slug' },
147
+ message: { type: 'string', description: 'Message to send to the agent' },
148
+ context: { type: 'string', description: 'Additional context for the agent' },
149
+ },
150
+ required: ['slug', 'message'],
151
+ },
152
+ })
153
+ async chatWithAgent(args: { slug: string; message: string; context?: string }, _context: McpContext): Promise<any> {
154
+ return this.aiService.chatWithAgent(args.slug, { message: args.message, context: args.context } as any);
155
+ }
156
+ }
@@ -0,0 +1,63 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { DashboardItemService } from '../../dashboard/dashboard-item/dashboard-item.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreDashboardItemsMcpTools {
8
+ constructor(private readonly dashboardItemService: DashboardItemService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.dashboard-items.list',
12
+ description: 'Lists dashboard items, optionally filtered by dashboard ID. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ dashboardId: { type: 'number', description: 'Filter by dashboard ID' },
19
+ },
20
+ },
21
+ readOnly: true,
22
+ })
23
+ async listDashboardItems(args: { page?: number; pageSize?: number; dashboardId?: number }, context: McpContext): Promise<any> {
24
+ return this.dashboardItemService.getAllDashboardItems(
25
+ { page: args.page ?? 1, pageSize: args.pageSize ?? 20, search: '', sortField: 'id', sortOrder: 'asc', fields: '' },
26
+ context.locale,
27
+ args.dashboardId,
28
+ );
29
+ }
30
+
31
+ @McpTool({
32
+ name: 'core.dashboard-items.create',
33
+ description: 'Creates a new dashboard item (widget placement). Admin only.',
34
+ inputSchema: {
35
+ type: 'object',
36
+ properties: {
37
+ dashboardId: { type: 'number', description: 'Dashboard ID' },
38
+ componentId: { type: 'number', description: 'Component ID' },
39
+ position: { type: 'object', description: 'Position/layout config (x, y, w, h)' },
40
+ config: { type: 'object', description: 'Component configuration' },
41
+ },
42
+ required: ['dashboardId', 'componentId'],
43
+ },
44
+ })
45
+ async createDashboardItem(args: { dashboardId: number; componentId: number; position?: any; config?: any }, context: McpContext): Promise<any> {
46
+ return this.dashboardItemService.createDashboardItem(args as any, context.locale);
47
+ }
48
+
49
+ @McpTool({
50
+ name: 'core.dashboard-items.delete',
51
+ description: 'Deletes a dashboard item by ID. Admin only.',
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {
55
+ id: { type: 'number', description: 'Dashboard item ID' },
56
+ },
57
+ required: ['id'],
58
+ },
59
+ })
60
+ async deleteDashboardItem(args: { id: number }, context: McpContext): Promise<any> {
61
+ return this.dashboardItemService.deleteDashboardItem(args.id, context.locale);
62
+ }
63
+ }
@@ -0,0 +1,103 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { DashboardService } from '../../dashboard/dashboard/dashboard.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreDashboardMcpTools {
8
+ constructor(private readonly dashboardService: DashboardService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.dashboard.list',
12
+ description: 'Lists all dashboards with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listDashboards(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ _context: McpContext,
28
+ ): Promise<any> {
29
+ return this.dashboardService.getAllDashboards({
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'id',
34
+ sortOrder: args.sortOrder ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.dashboard.get',
41
+ description: 'Returns a single dashboard by ID. Admin only.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ id: { type: 'number', description: 'Dashboard ID' },
46
+ },
47
+ required: ['id'],
48
+ },
49
+ readOnly: true,
50
+ })
51
+ async getDashboard(args: { id: number }, context: McpContext): Promise<any> {
52
+ return this.dashboardService.getDashboard(args.id, context.locale);
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.dashboard.create',
57
+ description: 'Creates a new dashboard. Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ name: { type: 'string', description: 'Dashboard name' },
62
+ description: { type: 'string', description: 'Dashboard description' },
63
+ },
64
+ required: ['name'],
65
+ },
66
+ })
67
+ async createDashboard(args: { name: string; description?: string }, context: McpContext): Promise<any> {
68
+ return this.dashboardService.createDashboard(args as any, context.locale);
69
+ }
70
+
71
+ @McpTool({
72
+ name: 'core.dashboard.update',
73
+ description: 'Updates an existing dashboard by ID. Admin only.',
74
+ inputSchema: {
75
+ type: 'object',
76
+ properties: {
77
+ id: { type: 'number', description: 'Dashboard ID' },
78
+ name: { type: 'string', description: 'New name' },
79
+ description: { type: 'string', description: 'New description' },
80
+ },
81
+ required: ['id'],
82
+ },
83
+ })
84
+ async updateDashboard(args: { id: number; name?: string; description?: string }, context: McpContext): Promise<any> {
85
+ const { id, ...data } = args;
86
+ return this.dashboardService.updateDashboard(id, data as any, context.locale);
87
+ }
88
+
89
+ @McpTool({
90
+ name: 'core.dashboard.delete',
91
+ description: 'Deletes a dashboard by ID. Admin only.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ id: { type: 'number', description: 'Dashboard ID' },
96
+ },
97
+ required: ['id'],
98
+ },
99
+ })
100
+ async deleteDashboard(args: { id: number }, context: McpContext): Promise<any> {
101
+ return this.dashboardService.deleteDashboard(args.id, context.locale);
102
+ }
103
+ }
@@ -0,0 +1,134 @@
1
+ import { Injectable } from '@nestjs/common';
2
+ import { EventWebhookService } from '../../webhook-integration/event-webhook.service';
3
+ import { McpTool } from '../decorators/mcp-tool.decorator';
4
+ import { McpContext } from '../types/mcp-context.type';
5
+
6
+ @Injectable()
7
+ export class CoreEventWebhooksMcpTools {
8
+ constructor(private readonly eventWebhookService: EventWebhookService) {}
9
+
10
+ @McpTool({
11
+ name: 'core.event-webhooks.list',
12
+ description: 'Lists event-driven webhooks with optional pagination. Admin only.',
13
+ inputSchema: {
14
+ type: 'object',
15
+ properties: {
16
+ page: { type: 'number', description: 'Page number (default: 1)' },
17
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
18
+ search: { type: 'string', description: 'Search term' },
19
+ sortField: { type: 'string', description: 'Field to sort by' },
20
+ sortOrder: { type: 'string', enum: ['asc', 'desc'], description: 'Sort direction' },
21
+ },
22
+ },
23
+ readOnly: true,
24
+ })
25
+ async listEventWebhooks(
26
+ args: { page?: number; pageSize?: number; search?: string; sortField?: string; sortOrder?: string },
27
+ _context: McpContext,
28
+ ): Promise<any> {
29
+ return this.eventWebhookService.list({
30
+ page: args.page ?? 1,
31
+ pageSize: args.pageSize ?? 20,
32
+ search: args.search ?? '',
33
+ sortField: args.sortField ?? 'id',
34
+ sortOrder: (args.sortOrder as any) ?? 'asc',
35
+ fields: '',
36
+ });
37
+ }
38
+
39
+ @McpTool({
40
+ name: 'core.event-webhooks.get',
41
+ description: 'Returns a single event webhook by ID. Admin only.',
42
+ inputSchema: {
43
+ type: 'object',
44
+ properties: {
45
+ id: { type: 'number', description: 'Event webhook ID' },
46
+ },
47
+ required: ['id'],
48
+ },
49
+ readOnly: true,
50
+ })
51
+ async getEventWebhook(args: { id: number }, _context: McpContext): Promise<any> {
52
+ return this.eventWebhookService.get(args.id);
53
+ }
54
+
55
+ @McpTool({
56
+ name: 'core.event-webhooks.create',
57
+ description: 'Creates a new event webhook. Admin only.',
58
+ inputSchema: {
59
+ type: 'object',
60
+ properties: {
61
+ name: { type: 'string', description: 'Webhook name' },
62
+ slug: { type: 'string', description: 'Webhook slug' },
63
+ url: { type: 'string', description: 'Target URL to POST events to' },
64
+ method: { type: 'string', description: 'HTTP method (default: POST)' },
65
+ status: { type: 'string', description: 'Status (active, inactive)' },
66
+ events: { type: 'array', items: { type: 'string' }, description: 'Event slugs to subscribe to' },
67
+ },
68
+ required: ['name', 'url'],
69
+ },
70
+ })
71
+ async createEventWebhook(args: Record<string, any>, _context: McpContext): Promise<any> {
72
+ return this.eventWebhookService.create(args);
73
+ }
74
+
75
+ @McpTool({
76
+ name: 'core.event-webhooks.update',
77
+ description: 'Updates an existing event webhook by ID. Admin only.',
78
+ inputSchema: {
79
+ type: 'object',
80
+ properties: {
81
+ id: { type: 'number', description: 'Event webhook ID' },
82
+ name: { type: 'string', description: 'New name' },
83
+ url: { type: 'string', description: 'New target URL' },
84
+ status: { type: 'string', description: 'New status (active, inactive)' },
85
+ events: { type: 'array', items: { type: 'string' }, description: 'New event slugs to subscribe to' },
86
+ },
87
+ required: ['id'],
88
+ },
89
+ })
90
+ async updateEventWebhook(args: { id: number; [key: string]: any }, _context: McpContext): Promise<any> {
91
+ const { id, ...data } = args;
92
+ return this.eventWebhookService.update(id, data);
93
+ }
94
+
95
+ @McpTool({
96
+ name: 'core.event-webhooks.delete',
97
+ description: 'Deletes one or more event webhooks by their IDs. Admin only.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ ids: { type: 'array', items: { type: 'number' }, description: 'Event webhook IDs to delete' },
102
+ },
103
+ required: ['ids'],
104
+ },
105
+ })
106
+ async deleteEventWebhooks(args: { ids: number[] }, _context: McpContext): Promise<any> {
107
+ return this.eventWebhookService.delete({ ids: args.ids });
108
+ }
109
+
110
+ @McpTool({
111
+ name: 'core.event-webhooks.logs.list',
112
+ description: 'Lists delivery logs for an event webhook. Admin only.',
113
+ inputSchema: {
114
+ type: 'object',
115
+ properties: {
116
+ webhookId: { type: 'number', description: 'Event webhook ID' },
117
+ page: { type: 'number', description: 'Page number (default: 1)' },
118
+ pageSize: { type: 'number', description: 'Items per page (default: 20)' },
119
+ },
120
+ required: ['webhookId'],
121
+ },
122
+ readOnly: true,
123
+ })
124
+ async listEventWebhookLogs(args: { webhookId: number; page?: number; pageSize?: number }, _context: McpContext): Promise<any> {
125
+ return this.eventWebhookService.listLogs(args.webhookId, {
126
+ page: args.page ?? 1,
127
+ pageSize: args.pageSize ?? 20,
128
+ search: '',
129
+ sortField: 'id',
130
+ sortOrder: 'desc' as any,
131
+ fields: '',
132
+ });
133
+ }
134
+ }