mcp-creatio 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/README.md +252 -212
  2. package/dist/cli.d.ts +5 -0
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +18 -11
  5. package/dist/cli.js.map +1 -1
  6. package/dist/creatio/auth/auth.d.ts +2 -0
  7. package/dist/creatio/auth/auth.d.ts.map +1 -1
  8. package/dist/creatio/auth/auth.js.map +1 -1
  9. package/dist/creatio/auth/providers/base-provider.d.ts +1 -0
  10. package/dist/creatio/auth/providers/base-provider.d.ts.map +1 -1
  11. package/dist/creatio/auth/providers/base-provider.js +3 -0
  12. package/dist/creatio/auth/providers/base-provider.js.map +1 -1
  13. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts +3 -0
  14. package/dist/creatio/auth/providers/oauth2-code-provider.d.ts.map +1 -1
  15. package/dist/creatio/auth/providers/oauth2-code-provider.js +30 -24
  16. package/dist/creatio/auth/providers/oauth2-code-provider.js.map +1 -1
  17. package/dist/creatio/providers/configuration-provider.d.ts +3 -2
  18. package/dist/creatio/providers/configuration-provider.d.ts.map +1 -1
  19. package/dist/creatio/providers/crud-provider.d.ts +2 -0
  20. package/dist/creatio/providers/crud-provider.d.ts.map +1 -1
  21. package/dist/creatio/services/configuration-service-provider.d.ts.map +1 -1
  22. package/dist/creatio/services/configuration-service-provider.js +11 -3
  23. package/dist/creatio/services/configuration-service-provider.js.map +1 -1
  24. package/dist/creatio/services/http-client.d.ts.map +1 -1
  25. package/dist/creatio/services/http-client.js +0 -1
  26. package/dist/creatio/services/http-client.js.map +1 -1
  27. package/dist/creatio/services/metadata-store.d.ts +5 -0
  28. package/dist/creatio/services/metadata-store.d.ts.map +1 -1
  29. package/dist/creatio/services/metadata-store.js +18 -6
  30. package/dist/creatio/services/metadata-store.js.map +1 -1
  31. package/dist/creatio/services/odata-crud-provider.d.ts +3 -1
  32. package/dist/creatio/services/odata-crud-provider.d.ts.map +1 -1
  33. package/dist/creatio/services/odata-crud-provider.js +31 -8
  34. package/dist/creatio/services/odata-crud-provider.js.map +1 -1
  35. package/dist/server/http/creatio-oauth-handlers.d.ts +0 -1
  36. package/dist/server/http/creatio-oauth-handlers.d.ts.map +1 -1
  37. package/dist/server/http/creatio-oauth-handlers.js +30 -23
  38. package/dist/server/http/creatio-oauth-handlers.js.map +1 -1
  39. package/dist/server/http/httpServer.d.ts +9 -0
  40. package/dist/server/http/httpServer.d.ts.map +1 -1
  41. package/dist/server/http/httpServer.js +34 -11
  42. package/dist/server/http/httpServer.js.map +1 -1
  43. package/dist/server/http/mcp-handlers.d.ts.map +1 -1
  44. package/dist/server/http/mcp-handlers.js +4 -1
  45. package/dist/server/http/mcp-handlers.js.map +1 -1
  46. package/dist/server/http/mcp-oauth-handlers.d.ts.map +1 -1
  47. package/dist/server/http/mcp-oauth-handlers.js +18 -6
  48. package/dist/server/http/mcp-oauth-handlers.js.map +1 -1
  49. package/dist/server/http/middleware.d.ts +7 -0
  50. package/dist/server/http/middleware.d.ts.map +1 -1
  51. package/dist/server/http/middleware.js +23 -0
  52. package/dist/server/http/middleware.js.map +1 -1
  53. package/dist/server/http/rate-limiter.d.ts +24 -0
  54. package/dist/server/http/rate-limiter.d.ts.map +1 -0
  55. package/dist/server/http/rate-limiter.js +42 -0
  56. package/dist/server/http/rate-limiter.js.map +1 -0
  57. package/dist/server/mcp/creatio-rest.d.ts +44 -0
  58. package/dist/server/mcp/creatio-rest.d.ts.map +1 -0
  59. package/dist/server/mcp/creatio-rest.js +26 -0
  60. package/dist/server/mcp/creatio-rest.js.map +1 -0
  61. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts +55 -0
  62. package/dist/server/mcp/crtmcp/crt-mcp-client.d.ts.map +1 -0
  63. package/dist/server/mcp/crtmcp/crt-mcp-client.js +67 -0
  64. package/dist/server/mcp/crtmcp/crt-mcp-client.js.map +1 -0
  65. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts +20 -0
  66. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.d.ts.map +1 -0
  67. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js +74 -0
  68. package/dist/server/mcp/crtmcp/crt-mcp-tool-preparer.js.map +1 -0
  69. package/dist/server/mcp/dataforge/dataforge-client.d.ts +64 -0
  70. package/dist/server/mcp/dataforge/dataforge-client.d.ts.map +1 -0
  71. package/dist/server/mcp/dataforge/dataforge-client.js +130 -0
  72. package/dist/server/mcp/dataforge/dataforge-client.js.map +1 -0
  73. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts +17 -0
  74. package/dist/server/mcp/dataforge/dataforge-tool-preparer.d.ts.map +1 -0
  75. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js +42 -0
  76. package/dist/server/mcp/dataforge/dataforge-tool-preparer.js.map +1 -0
  77. package/dist/server/mcp/filters.d.ts.map +1 -1
  78. package/dist/server/mcp/filters.js +20 -4
  79. package/dist/server/mcp/filters.js.map +1 -1
  80. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts +50 -0
  81. package/dist/server/mcp/globalsearch/globalsearch-client.d.ts.map +1 -0
  82. package/dist/server/mcp/globalsearch/globalsearch-client.js +118 -0
  83. package/dist/server/mcp/globalsearch/globalsearch-client.js.map +1 -0
  84. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts +16 -0
  85. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.d.ts.map +1 -0
  86. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js +34 -0
  87. package/dist/server/mcp/globalsearch/globalsearch-tool-preparer.js.map +1 -0
  88. package/dist/server/mcp/json-schema-to-zod.d.ts +3 -0
  89. package/dist/server/mcp/json-schema-to-zod.d.ts.map +1 -0
  90. package/dist/server/mcp/json-schema-to-zod.js +54 -0
  91. package/dist/server/mcp/json-schema-to-zod.js.map +1 -0
  92. package/dist/server/mcp/server.d.ts +18 -0
  93. package/dist/server/mcp/server.d.ts.map +1 -1
  94. package/dist/server/mcp/server.js +93 -25
  95. package/dist/server/mcp/server.js.map +1 -1
  96. package/dist/server/mcp/tool-preparer.d.ts +26 -0
  97. package/dist/server/mcp/tool-preparer.d.ts.map +1 -0
  98. package/dist/server/mcp/tool-preparer.js +11 -0
  99. package/dist/server/mcp/tool-preparer.js.map +1 -0
  100. package/dist/server/mcp/tools-data.d.ts +69 -10
  101. package/dist/server/mcp/tools-data.d.ts.map +1 -1
  102. package/dist/server/mcp/tools-data.js +222 -32
  103. package/dist/server/mcp/tools-data.js.map +1 -1
  104. package/dist/server/oauth/oauth-server.d.ts +0 -1
  105. package/dist/server/oauth/oauth-server.d.ts.map +1 -1
  106. package/dist/server/oauth/oauth-server.js +11 -21
  107. package/dist/server/oauth/oauth-server.js.map +1 -1
  108. package/dist/server/oauth/storage.d.ts +0 -2
  109. package/dist/server/oauth/storage.d.ts.map +1 -1
  110. package/dist/server/oauth/storage.js +0 -6
  111. package/dist/server/oauth/storage.js.map +1 -1
  112. package/dist/server/oauth/validators.d.ts +6 -0
  113. package/dist/server/oauth/validators.d.ts.map +1 -1
  114. package/dist/server/oauth/validators.js +28 -0
  115. package/dist/server/oauth/validators.js.map +1 -1
  116. package/dist/services/session-context.d.ts +8 -7
  117. package/dist/services/session-context.d.ts.map +1 -1
  118. package/dist/services/session-context.js +7 -27
  119. package/dist/services/session-context.js.map +1 -1
  120. package/package.json +18 -9
  121. package/.dockerignore +0 -12
  122. package/.editorconfig +0 -14
  123. package/.eslintrc.cjs +0 -18
  124. package/.gitattributes +0 -8
  125. package/.github/workflows/docker-publish.yml +0 -50
  126. package/.prettierignore +0 -3
  127. package/.prettierrc +0 -9
  128. package/.vscode/launch.json +0 -23
  129. package/.vscode/mcp.json +0 -13
  130. package/.vscode/settings.json +0 -16
  131. package/Agent.md +0 -190
  132. package/Debug.md +0 -32
  133. package/Dockerfile +0 -23
  134. package/docs/coding-style.md +0 -30
  135. package/eslint.config.cjs +0 -95
  136. package/src/cli.ts +0 -162
  137. package/src/config-builder.ts +0 -76
  138. package/src/consts.ts +0 -3
  139. package/src/creatio/auth/auth-manager.ts +0 -27
  140. package/src/creatio/auth/auth.ts +0 -31
  141. package/src/creatio/auth/index.ts +0 -3
  142. package/src/creatio/auth/providers/base-oauth2-provider.ts +0 -62
  143. package/src/creatio/auth/providers/base-provider.ts +0 -42
  144. package/src/creatio/auth/providers/index.ts +0 -4
  145. package/src/creatio/auth/providers/legacy-provider.ts +0 -70
  146. package/src/creatio/auth/providers/oauth2-code-provider.ts +0 -252
  147. package/src/creatio/auth/providers/oauth2-provider.ts +0 -91
  148. package/src/creatio/auth/providers/type.ts +0 -5
  149. package/src/creatio/client-config.ts +0 -34
  150. package/src/creatio/engines/admin-operation/admin-operation-engine.ts +0 -44
  151. package/src/creatio/engines/configuration/configuration-engine.ts +0 -26
  152. package/src/creatio/engines/crud/crud-engine.ts +0 -47
  153. package/src/creatio/engines/engine-manager.ts +0 -157
  154. package/src/creatio/engines/engine-registry.ts +0 -39
  155. package/src/creatio/engines/engine.ts +0 -3
  156. package/src/creatio/engines/feature/feature-engine.ts +0 -20
  157. package/src/creatio/engines/index.ts +0 -10
  158. package/src/creatio/engines/process/process-engine.ts +0 -20
  159. package/src/creatio/engines/sys-settings/sys-settings-engine.ts +0 -41
  160. package/src/creatio/engines/user/user-engine.ts +0 -20
  161. package/src/creatio/index.ts +0 -6
  162. package/src/creatio/provider-context.ts +0 -21
  163. package/src/creatio/providers/admin-operation-provider.ts +0 -34
  164. package/src/creatio/providers/configuration-provider.ts +0 -22
  165. package/src/creatio/providers/crud-provider.ts +0 -45
  166. package/src/creatio/providers/feature-provider.ts +0 -10
  167. package/src/creatio/providers/index.ts +0 -7
  168. package/src/creatio/providers/process-provider.ts +0 -15
  169. package/src/creatio/providers/sys-settings-provider.ts +0 -63
  170. package/src/creatio/providers/user-provider.ts +0 -12
  171. package/src/creatio/services/admin-operation-service-provider.ts +0 -115
  172. package/src/creatio/services/configuration-service-provider.ts +0 -127
  173. package/src/creatio/services/creatio-service-context.ts +0 -55
  174. package/src/creatio/services/feature-service-provider.ts +0 -60
  175. package/src/creatio/services/http-client.ts +0 -174
  176. package/src/creatio/services/index.ts +0 -10
  177. package/src/creatio/services/metadata-store.ts +0 -181
  178. package/src/creatio/services/odata-crud-provider.ts +0 -210
  179. package/src/creatio/services/process-service-provider.ts +0 -76
  180. package/src/creatio/services/sys-settings-service-provider.ts +0 -192
  181. package/src/creatio/services/user-info-provider.ts +0 -41
  182. package/src/index.ts +0 -44
  183. package/src/log.ts +0 -183
  184. package/src/server/http/creatio-oauth-handlers.ts +0 -146
  185. package/src/server/http/httpServer.ts +0 -150
  186. package/src/server/http/index.ts +0 -5
  187. package/src/server/http/mcp-handlers.ts +0 -92
  188. package/src/server/http/mcp-oauth-handlers.ts +0 -108
  189. package/src/server/http/middleware.ts +0 -91
  190. package/src/server/index.ts +0 -2
  191. package/src/server/mcp/filters.ts +0 -97
  192. package/src/server/mcp/index.ts +0 -1
  193. package/src/server/mcp/prompts-data.ts +0 -1292
  194. package/src/server/mcp/server.ts +0 -442
  195. package/src/server/mcp/tools-data.ts +0 -748
  196. package/src/server/oauth/client-manager.ts +0 -47
  197. package/src/server/oauth/index.ts +0 -6
  198. package/src/server/oauth/oauth-server.ts +0 -185
  199. package/src/server/oauth/storage.ts +0 -106
  200. package/src/server/oauth/token-manager.ts +0 -80
  201. package/src/server/oauth/types.ts +0 -55
  202. package/src/server/oauth/validators.ts +0 -56
  203. package/src/services/index.ts +0 -2
  204. package/src/services/session-context.ts +0 -232
  205. package/src/services/token-refresh-scheduler.ts +0 -68
  206. package/src/types/index.ts +0 -1
  207. package/src/types/network.ts +0 -7
  208. package/src/utils/context.ts +0 -49
  209. package/src/utils/env.ts +0 -12
  210. package/src/utils/index.ts +0 -5
  211. package/src/utils/mcp.ts +0 -8
  212. package/src/utils/network.ts +0 -65
  213. package/src/utils/pkce.ts +0 -39
  214. package/src/version.ts +0 -15
  215. package/tsconfig.json +0 -28
@@ -1,442 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
-
3
- import {
4
- CreatioEngineManager,
5
- ICreatioAuthProvider,
6
- SysSettingDefinitionUpdate,
7
- } from '../../creatio';
8
- import log from '../../log';
9
- import { withValidation } from '../../utils';
10
- import { NAME, VERSION } from '../../version';
11
-
12
- import { buildFilterFromStructured } from './filters';
13
- import { ALL_PROMPTS } from './prompts-data';
14
- import {
15
- callConfigurationServiceDescriptor,
16
- callConfigurationServiceInput,
17
- createDescriptor,
18
- createInput,
19
- createSysSettingDescriptor,
20
- createSysSettingInput,
21
- deleteAdminOperationDescriptor,
22
- deleteAdminOperationGranteeDescriptor,
23
- deleteAdminOperationGranteeInput,
24
- deleteAdminOperationInput,
25
- deleteDescriptor,
26
- deleteInput,
27
- describeEntityDescriptor,
28
- describeEntityInput,
29
- executeProcessDescriptor,
30
- executeProcessInput,
31
- getCurrentUserInfoDescriptor,
32
- getCurrentUserInfoInput,
33
- listEntitiesDescriptor,
34
- listEntitiesInput,
35
- querySysSettingsDescriptor,
36
- querySysSettingsInput,
37
- readDescriptor,
38
- readInput,
39
- refreshFeatureCacheDescriptor,
40
- refreshFeatureCacheInput,
41
- setAdminOperationGranteeDescriptor,
42
- setAdminOperationGranteeInput,
43
- setSysSettingsValueDescriptor,
44
- setSysSettingsValueInput,
45
- updateDescriptor,
46
- updateInput,
47
- updateSysSettingDefinitionDescriptor,
48
- updateSysSettingDefinitionInput,
49
- upsertAdminOperationDescriptor,
50
- upsertAdminOperationInput,
51
- } from './tools-data';
52
-
53
- type ToolHandler = (payload: any) => Promise<any>;
54
-
55
- export interface ServerConfig {
56
- readonlyMode?: boolean;
57
- }
58
-
59
- export class Server {
60
- private readonly _engines: CreatioEngineManager;
61
- private readonly _descriptors = new Map<string, any>();
62
- private readonly _handlers = new Map<string, ToolHandler>();
63
- private _mcp?: McpServer;
64
- private _readonly = false;
65
- private _serverName = NAME;
66
- private _serverVersion = VERSION;
67
-
68
- public get authProvider(): ICreatioAuthProvider {
69
- return this._engines.authProvider;
70
- }
71
-
72
- constructor(engines: CreatioEngineManager, config: ServerConfig) {
73
- this._engines = engines;
74
- this._readonly = config.readonlyMode ?? false;
75
- this._registerClientTools();
76
- }
77
-
78
- private _registerData() {
79
- for (const [name, handler] of this._handlers.entries()) {
80
- this._registerAsTool(name, handler);
81
- }
82
- this._registerPrompts();
83
- }
84
-
85
- private _registerHandlerWithDescriptor(name: string, descriptor: any, handler: ToolHandler) {
86
- this._handlers.set(name, handler);
87
- this._descriptors.set(name, descriptor);
88
- if (this._mcp) {
89
- this._registerAsTool(name, handler);
90
- }
91
- }
92
-
93
- private _normalizeToToolHandler(handler: ToolHandler) {
94
- return async (args: any) => {
95
- const result = await handler(args);
96
- if (result && typeof result === 'object' && 'content' in result) {
97
- return result;
98
- }
99
- return {
100
- content: [
101
- {
102
- type: 'text',
103
- text: typeof result === 'string' ? result : JSON.stringify(result, null, 2),
104
- },
105
- ],
106
- };
107
- };
108
- }
109
-
110
- private _registerAsTool(name: string, handler: ToolHandler) {
111
- if (!this._mcp) {
112
- return;
113
- }
114
- try {
115
- const descriptor =
116
- this._descriptors.get(name) ||
117
- ({
118
- title: name,
119
- description: `Tool ${name}`,
120
- inputSchema: {},
121
- } as any);
122
- this._mcp.registerTool(name, descriptor, async (args: any) => {
123
- return this._normalizeToToolHandler(handler)(args);
124
- });
125
- log.info('mcp.tool.register', { tool: name });
126
- } catch (err) {
127
- log.warn('mcp.tool.register.failed', { tool: name, error: String(err) });
128
- }
129
- }
130
-
131
- private _registerPrompts() {
132
- if (!this._mcp) {
133
- return;
134
- }
135
- try {
136
- for (const prompt of ALL_PROMPTS) {
137
- this._mcp.registerPrompt(
138
- prompt.name,
139
- {
140
- title: prompt.title,
141
- description: prompt.description,
142
- argsSchema: prompt.argsSchema,
143
- },
144
- prompt.callback,
145
- );
146
- log.info('mcp.prompt.register', { prompt: prompt.name });
147
- }
148
- } catch (err) {
149
- log.warn('mcp.prompts.register.failed', { error: String(err) });
150
- }
151
- }
152
-
153
- private _registerClientTools() {
154
- const crud = this._engines.crud;
155
- const user = this._engines.user;
156
- const sysSettings = this._engines.sysSettings;
157
- this._registerHandlerWithDescriptor(
158
- 'get-current-user-info',
159
- getCurrentUserInfoDescriptor,
160
- withValidation(getCurrentUserInfoInput, () => user.getCurrentUserInfo()),
161
- );
162
- this._registerHandlerWithDescriptor(
163
- 'list-entities',
164
- listEntitiesDescriptor,
165
- withValidation(listEntitiesInput, async () => {
166
- const sets = await crud.listEntitySets();
167
- return {
168
- content: [
169
- {
170
- type: 'text',
171
- text: JSON.stringify({ results: sets }),
172
- },
173
- ],
174
- };
175
- }),
176
- );
177
- this._registerHandlerWithDescriptor(
178
- 'describe-entity',
179
- describeEntityDescriptor,
180
- withValidation(describeEntityInput, async ({ entitySet }) => {
181
- const schema = await crud.describeEntity(entitySet);
182
- return {
183
- content: [
184
- {
185
- type: 'text',
186
- text: JSON.stringify(schema),
187
- },
188
- ],
189
- };
190
- }),
191
- );
192
- this._registerHandlerWithDescriptor(
193
- 'read',
194
- readDescriptor,
195
- withValidation(
196
- readInput,
197
- async ({ entity, filter, filters, select, top, expand, orderBy }) => {
198
- const structured = buildFilterFromStructured(filters);
199
- let finalFilter = filter || structured;
200
- if (filter && structured) {
201
- finalFilter = `(${filter}) and (${structured})`;
202
- }
203
- return crud.read({
204
- entity,
205
- filter: finalFilter ?? undefined,
206
- select,
207
- top,
208
- expand,
209
- orderBy,
210
- });
211
- },
212
- ),
213
- );
214
- this._registerHandlerWithDescriptor(
215
- 'query-sys-settings',
216
- querySysSettingsDescriptor,
217
- withValidation(querySysSettingsInput, async ({ sysSettingCodes }) => {
218
- const result = await sysSettings.queryValues(sysSettingCodes);
219
- return {
220
- content: [
221
- {
222
- type: 'text',
223
- text: JSON.stringify(result, null, 2),
224
- },
225
- ],
226
- };
227
- }),
228
- );
229
- if (!this._readonly) {
230
- const process = this._engines.process;
231
- const feature = this._engines.feature;
232
- const adminOperation = this._engines.adminOperation;
233
- const configuration = this._engines.configuration;
234
- this._registerHandlerWithDescriptor(
235
- 'create',
236
- createDescriptor,
237
- withValidation(createInput, async ({ entity, data }) =>
238
- crud.create({ entity, data }),
239
- ),
240
- );
241
- this._registerHandlerWithDescriptor(
242
- 'update',
243
- updateDescriptor,
244
- withValidation(updateInput, async ({ entity, id, data }) =>
245
- crud.update({ entity, id, data }),
246
- ),
247
- );
248
- this._registerHandlerWithDescriptor(
249
- 'delete',
250
- deleteDescriptor,
251
- withValidation(deleteInput, async ({ entity, id }) => crud.delete({ entity, id })),
252
- );
253
- this._registerHandlerWithDescriptor(
254
- 'execute-process',
255
- executeProcessDescriptor,
256
- withValidation(executeProcessInput, async ({ processName, parameters }) => {
257
- const result = await process.execute({
258
- processName,
259
- parameters: parameters || {},
260
- });
261
- return {
262
- content: [
263
- {
264
- type: 'text',
265
- text: JSON.stringify(result, null, 2),
266
- },
267
- ],
268
- };
269
- }),
270
- );
271
- this._registerHandlerWithDescriptor(
272
- 'set-sys-settings-value',
273
- setSysSettingsValueDescriptor,
274
- withValidation(setSysSettingsValueInput, async ({ sysSettingsValues }) => {
275
- const result = await sysSettings.setValues(sysSettingsValues);
276
- return {
277
- content: [
278
- {
279
- type: 'text',
280
- text: JSON.stringify(result),
281
- },
282
- ],
283
- };
284
- }),
285
- );
286
- this._registerHandlerWithDescriptor(
287
- 'create-sys-setting',
288
- createSysSettingDescriptor,
289
- withValidation(createSysSettingInput, async ({ definition, initialValue }) => {
290
- const result = await sysSettings.createSetting({ definition, initialValue });
291
- return {
292
- content: [
293
- {
294
- type: 'text',
295
- text: JSON.stringify(result, null, 2),
296
- },
297
- ],
298
- };
299
- }),
300
- );
301
- this._registerHandlerWithDescriptor(
302
- 'update-sys-setting-definition',
303
- updateSysSettingDefinitionDescriptor,
304
- withValidation(updateSysSettingDefinitionInput, async ({ id, definition }) => {
305
- const result = await sysSettings.updateDefinition({
306
- ...(definition as SysSettingDefinitionUpdate),
307
- id,
308
- });
309
- return {
310
- content: [
311
- {
312
- type: 'text',
313
- text: JSON.stringify(result, null, 2),
314
- },
315
- ],
316
- };
317
- }),
318
- );
319
- this._registerHandlerWithDescriptor(
320
- 'refresh-feature-cache',
321
- refreshFeatureCacheDescriptor,
322
- withValidation(refreshFeatureCacheInput, async ({ featureCode }) => {
323
- const result = await feature.clearFeaturesCache(featureCode);
324
- return {
325
- content: [
326
- {
327
- type: 'text',
328
- text: JSON.stringify(result, null, 2),
329
- },
330
- ],
331
- };
332
- }),
333
- );
334
- this._registerHandlerWithDescriptor(
335
- 'upsert-admin-operation',
336
- upsertAdminOperationDescriptor,
337
- withValidation(upsertAdminOperationInput, async ({ id, name, code, description }) => {
338
- const result = await adminOperation.upsertAdminOperation({
339
- ...(id !== undefined ? { id } : {}),
340
- name,
341
- code,
342
- ...(description !== undefined ? { description } : {}),
343
- });
344
- return {
345
- content: [
346
- { type: 'text', text: JSON.stringify(result, null, 2) },
347
- ],
348
- };
349
- }),
350
- );
351
- this._registerHandlerWithDescriptor(
352
- 'delete-admin-operation',
353
- deleteAdminOperationDescriptor,
354
- withValidation(deleteAdminOperationInput, async ({ ids }) => {
355
- const result = await adminOperation.deleteAdminOperation(ids);
356
- return {
357
- content: [
358
- { type: 'text', text: JSON.stringify(result, null, 2) },
359
- ],
360
- };
361
- }),
362
- );
363
- this._registerHandlerWithDescriptor(
364
- 'set-admin-operation-grantee',
365
- setAdminOperationGranteeDescriptor,
366
- withValidation(
367
- setAdminOperationGranteeInput,
368
- async ({ adminOperationId, adminUnitIds, canExecute }) => {
369
- const result = await adminOperation.setAdminOperationGrantee({
370
- adminOperationId,
371
- adminUnitIds,
372
- canExecute,
373
- });
374
- return {
375
- content: [
376
- { type: 'text', text: JSON.stringify(result, null, 2) },
377
- ],
378
- };
379
- },
380
- ),
381
- );
382
- this._registerHandlerWithDescriptor(
383
- 'delete-admin-operation-grantee',
384
- deleteAdminOperationGranteeDescriptor,
385
- withValidation(deleteAdminOperationGranteeInput, async ({ ids }) => {
386
- const result = await adminOperation.deleteAdminOperationGrantee(ids);
387
- return {
388
- content: [
389
- { type: 'text', text: JSON.stringify(result, null, 2) },
390
- ],
391
- };
392
- }),
393
- );
394
- this._registerHandlerWithDescriptor(
395
- 'call-configuration-service',
396
- callConfigurationServiceDescriptor,
397
- withValidation(
398
- callConfigurationServiceInput,
399
- async ({ service, method, httpMethod, body, query }) => {
400
- const result = await configuration.call({
401
- service,
402
- method,
403
- httpMethod,
404
- ...(body !== undefined ? { body } : {}),
405
- ...(query !== undefined ? { query } : {}),
406
- });
407
- return {
408
- content: [
409
- { type: 'text', text: JSON.stringify(result, null, 2) },
410
- ],
411
- };
412
- },
413
- ),
414
- );
415
- }
416
- }
417
-
418
- public async startMcp() {
419
- if (this._mcp) {
420
- return this._mcp;
421
- }
422
- this._mcp = new McpServer({ name: this._serverName, version: this._serverVersion });
423
- this._registerData();
424
- log.serverStart(this._serverName, this._serverVersion, {
425
- tools: Array.from(this._handlers.keys()),
426
- prompts: ALL_PROMPTS.length,
427
- });
428
- return this._mcp;
429
- }
430
-
431
- public async stopMcp() {
432
- if (!this._mcp) {
433
- return;
434
- }
435
- try {
436
- this._mcp.close();
437
- log.serverStop(this._serverName, this._serverVersion);
438
- } catch (err) {
439
- log.warn('mcp.stop.failed', { error: String(err) });
440
- }
441
- }
442
- }