@uluops/registry-mcp 0.1.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 (272) hide show
  1. package/CHANGELOG.md +152 -0
  2. package/README.md +228 -0
  3. package/dist/client/sdk-error-mapper.d.ts +30 -0
  4. package/dist/client/sdk-error-mapper.d.ts.map +1 -0
  5. package/dist/client/sdk-error-mapper.js +129 -0
  6. package/dist/client/sdk-error-mapper.js.map +1 -0
  7. package/dist/config/index.d.ts +17 -0
  8. package/dist/config/index.d.ts.map +1 -0
  9. package/dist/config/index.js +92 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/tool-registry.d.ts +9 -0
  12. package/dist/config/tool-registry.d.ts.map +1 -0
  13. package/dist/config/tool-registry.js +386 -0
  14. package/dist/config/tool-registry.js.map +1 -0
  15. package/dist/index.d.ts +10 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +160 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/resources/definition-types.d.ts +6 -0
  20. package/dist/resources/definition-types.d.ts.map +1 -0
  21. package/dist/resources/definition-types.js +31 -0
  22. package/dist/resources/definition-types.js.map +1 -0
  23. package/dist/resources/definitions.d.ts +7 -0
  24. package/dist/resources/definitions.d.ts.map +1 -0
  25. package/dist/resources/definitions.js +11 -0
  26. package/dist/resources/definitions.js.map +1 -0
  27. package/dist/resources/index.d.ts +12 -0
  28. package/dist/resources/index.d.ts.map +1 -0
  29. package/dist/resources/index.js +19 -0
  30. package/dist/resources/index.js.map +1 -0
  31. package/dist/resources/models.d.ts +7 -0
  32. package/dist/resources/models.d.ts.map +1 -0
  33. package/dist/resources/models.js +11 -0
  34. package/dist/resources/models.js.map +1 -0
  35. package/dist/resources/providers.d.ts +7 -0
  36. package/dist/resources/providers.d.ts.map +1 -0
  37. package/dist/resources/providers.js +11 -0
  38. package/dist/resources/providers.js.map +1 -0
  39. package/dist/resources/response-helpers.d.ts +8 -0
  40. package/dist/resources/response-helpers.d.ts.map +1 -0
  41. package/dist/resources/response-helpers.js +51 -0
  42. package/dist/resources/response-helpers.js.map +1 -0
  43. package/dist/tools/archive-definition.d.ts +24 -0
  44. package/dist/tools/archive-definition.d.ts.map +1 -0
  45. package/dist/tools/archive-definition.js +19 -0
  46. package/dist/tools/archive-definition.js.map +1 -0
  47. package/dist/tools/batch-publish.d.ts +38 -0
  48. package/dist/tools/batch-publish.d.ts.map +1 -0
  49. package/dist/tools/batch-publish.js +64 -0
  50. package/dist/tools/batch-publish.js.map +1 -0
  51. package/dist/tools/batch-users.d.ts +17 -0
  52. package/dist/tools/batch-users.d.ts.map +1 -0
  53. package/dist/tools/batch-users.js +14 -0
  54. package/dist/tools/batch-users.js.map +1 -0
  55. package/dist/tools/check-forkable.d.ts +23 -0
  56. package/dist/tools/check-forkable.d.ts.map +1 -0
  57. package/dist/tools/check-forkable.js +17 -0
  58. package/dist/tools/check-forkable.js.map +1 -0
  59. package/dist/tools/compare-effectiveness.d.ts +23 -0
  60. package/dist/tools/compare-effectiveness.d.ts.map +1 -0
  61. package/dist/tools/compare-effectiveness.js +17 -0
  62. package/dist/tools/compare-effectiveness.js.map +1 -0
  63. package/dist/tools/create-definition.d.ts +107 -0
  64. package/dist/tools/create-definition.d.ts.map +1 -0
  65. package/dist/tools/create-definition.js +30 -0
  66. package/dist/tools/create-definition.js.map +1 -0
  67. package/dist/tools/delete-definition.d.ts +23 -0
  68. package/dist/tools/delete-definition.d.ts.map +1 -0
  69. package/dist/tools/delete-definition.js +17 -0
  70. package/dist/tools/delete-definition.js.map +1 -0
  71. package/dist/tools/deprecate-definition.d.ts +29 -0
  72. package/dist/tools/deprecate-definition.d.ts.map +1 -0
  73. package/dist/tools/deprecate-definition.js +23 -0
  74. package/dist/tools/deprecate-definition.js.map +1 -0
  75. package/dist/tools/diff-versions.d.ts +32 -0
  76. package/dist/tools/diff-versions.d.ts.map +1 -0
  77. package/dist/tools/diff-versions.js +20 -0
  78. package/dist/tools/diff-versions.js.map +1 -0
  79. package/dist/tools/fork-definition.d.ts +29 -0
  80. package/dist/tools/fork-definition.d.ts.map +1 -0
  81. package/dist/tools/fork-definition.js +22 -0
  82. package/dist/tools/fork-definition.js.map +1 -0
  83. package/dist/tools/get-definition.d.ts +35 -0
  84. package/dist/tools/get-definition.d.ts.map +1 -0
  85. package/dist/tools/get-definition.js +32 -0
  86. package/dist/tools/get-definition.js.map +1 -0
  87. package/dist/tools/get-dependencies.d.ts +26 -0
  88. package/dist/tools/get-dependencies.d.ts.map +1 -0
  89. package/dist/tools/get-dependencies.js +23 -0
  90. package/dist/tools/get-dependencies.js.map +1 -0
  91. package/dist/tools/get-dependents.d.ts +23 -0
  92. package/dist/tools/get-dependents.d.ts.map +1 -0
  93. package/dist/tools/get-dependents.js +17 -0
  94. package/dist/tools/get-dependents.js.map +1 -0
  95. package/dist/tools/get-diff-impact.d.ts +26 -0
  96. package/dist/tools/get-diff-impact.d.ts.map +1 -0
  97. package/dist/tools/get-diff-impact.js +18 -0
  98. package/dist/tools/get-diff-impact.js.map +1 -0
  99. package/dist/tools/get-ecosystem-overview.d.ts +11 -0
  100. package/dist/tools/get-ecosystem-overview.d.ts.map +1 -0
  101. package/dist/tools/get-ecosystem-overview.js +12 -0
  102. package/dist/tools/get-ecosystem-overview.js.map +1 -0
  103. package/dist/tools/get-effectiveness.d.ts +23 -0
  104. package/dist/tools/get-effectiveness.d.ts.map +1 -0
  105. package/dist/tools/get-effectiveness.js +17 -0
  106. package/dist/tools/get-effectiveness.js.map +1 -0
  107. package/dist/tools/get-evolution.d.ts +20 -0
  108. package/dist/tools/get-evolution.d.ts.map +1 -0
  109. package/dist/tools/get-evolution.js +16 -0
  110. package/dist/tools/get-evolution.js.map +1 -0
  111. package/dist/tools/get-execution-stats.d.ts +26 -0
  112. package/dist/tools/get-execution-stats.d.ts.map +1 -0
  113. package/dist/tools/get-execution-stats.js +18 -0
  114. package/dist/tools/get-execution-stats.js.map +1 -0
  115. package/dist/tools/get-fork-lineage.d.ts +23 -0
  116. package/dist/tools/get-fork-lineage.d.ts.map +1 -0
  117. package/dist/tools/get-fork-lineage.js +17 -0
  118. package/dist/tools/get-fork-lineage.js.map +1 -0
  119. package/dist/tools/get-health.d.ts +23 -0
  120. package/dist/tools/get-health.d.ts.map +1 -0
  121. package/dist/tools/get-health.js +17 -0
  122. package/dist/tools/get-health.js.map +1 -0
  123. package/dist/tools/get-language.d.ts +17 -0
  124. package/dist/tools/get-language.d.ts.map +1 -0
  125. package/dist/tools/get-language.js +14 -0
  126. package/dist/tools/get-language.js.map +1 -0
  127. package/dist/tools/get-lineage.d.ts +20 -0
  128. package/dist/tools/get-lineage.d.ts.map +1 -0
  129. package/dist/tools/get-lineage.js +16 -0
  130. package/dist/tools/get-lineage.js.map +1 -0
  131. package/dist/tools/get-model.d.ts +20 -0
  132. package/dist/tools/get-model.d.ts.map +1 -0
  133. package/dist/tools/get-model.js +15 -0
  134. package/dist/tools/get-model.js.map +1 -0
  135. package/dist/tools/get-translation-analytics.d.ts +20 -0
  136. package/dist/tools/get-translation-analytics.d.ts.map +1 -0
  137. package/dist/tools/get-translation-analytics.js +16 -0
  138. package/dist/tools/get-translation-analytics.js.map +1 -0
  139. package/dist/tools/get-translator-version.d.ts +11 -0
  140. package/dist/tools/get-translator-version.d.ts.map +1 -0
  141. package/dist/tools/get-translator-version.js +12 -0
  142. package/dist/tools/get-translator-version.js.map +1 -0
  143. package/dist/tools/get-user.d.ts +17 -0
  144. package/dist/tools/get-user.d.ts.map +1 -0
  145. package/dist/tools/get-user.js +14 -0
  146. package/dist/tools/get-user.js.map +1 -0
  147. package/dist/tools/index.d.ts +12 -0
  148. package/dist/tools/index.d.ts.map +1 -0
  149. package/dist/tools/index.js +136 -0
  150. package/dist/tools/index.js.map +1 -0
  151. package/dist/tools/list-aliases.d.ts +11 -0
  152. package/dist/tools/list-aliases.d.ts.map +1 -0
  153. package/dist/tools/list-aliases.js +12 -0
  154. package/dist/tools/list-aliases.js.map +1 -0
  155. package/dist/tools/list-definitions.d.ts +53 -0
  156. package/dist/tools/list-definitions.d.ts.map +1 -0
  157. package/dist/tools/list-definitions.js +56 -0
  158. package/dist/tools/list-definitions.js.map +1 -0
  159. package/dist/tools/list-forks.d.ts +23 -0
  160. package/dist/tools/list-forks.d.ts.map +1 -0
  161. package/dist/tools/list-forks.js +17 -0
  162. package/dist/tools/list-forks.js.map +1 -0
  163. package/dist/tools/list-languages.d.ts +11 -0
  164. package/dist/tools/list-languages.d.ts.map +1 -0
  165. package/dist/tools/list-languages.js +12 -0
  166. package/dist/tools/list-languages.js.map +1 -0
  167. package/dist/tools/list-models.d.ts +23 -0
  168. package/dist/tools/list-models.d.ts.map +1 -0
  169. package/dist/tools/list-models.js +17 -0
  170. package/dist/tools/list-models.js.map +1 -0
  171. package/dist/tools/list-providers.d.ts +11 -0
  172. package/dist/tools/list-providers.d.ts.map +1 -0
  173. package/dist/tools/list-providers.js +12 -0
  174. package/dist/tools/list-providers.js.map +1 -0
  175. package/dist/tools/list-versions.d.ts +26 -0
  176. package/dist/tools/list-versions.d.ts.map +1 -0
  177. package/dist/tools/list-versions.js +21 -0
  178. package/dist/tools/list-versions.js.map +1 -0
  179. package/dist/tools/publish-definition.d.ts +23 -0
  180. package/dist/tools/publish-definition.d.ts.map +1 -0
  181. package/dist/tools/publish-definition.js +26 -0
  182. package/dist/tools/publish-definition.js.map +1 -0
  183. package/dist/tools/record-execution.d.ts +29 -0
  184. package/dist/tools/record-execution.d.ts.map +1 -0
  185. package/dist/tools/record-execution.js +22 -0
  186. package/dist/tools/record-execution.js.map +1 -0
  187. package/dist/tools/render-definition.d.ts +33 -0
  188. package/dist/tools/render-definition.d.ts.map +1 -0
  189. package/dist/tools/render-definition.js +97 -0
  190. package/dist/tools/render-definition.js.map +1 -0
  191. package/dist/tools/resolve-alias.d.ts +17 -0
  192. package/dist/tools/resolve-alias.d.ts.map +1 -0
  193. package/dist/tools/resolve-alias.js +14 -0
  194. package/dist/tools/resolve-alias.js.map +1 -0
  195. package/dist/tools/retranslate-definition.d.ts +26 -0
  196. package/dist/tools/retranslate-definition.d.ts.map +1 -0
  197. package/dist/tools/retranslate-definition.js +23 -0
  198. package/dist/tools/retranslate-definition.js.map +1 -0
  199. package/dist/tools/search-definitions.d.ts +44 -0
  200. package/dist/tools/search-definitions.d.ts.map +1 -0
  201. package/dist/tools/search-definitions.js +35 -0
  202. package/dist/tools/search-definitions.js.map +1 -0
  203. package/dist/tools/set-default-type.d.ts +10 -0
  204. package/dist/tools/set-default-type.d.ts.map +1 -0
  205. package/dist/tools/set-default-type.js +31 -0
  206. package/dist/tools/set-default-type.js.map +1 -0
  207. package/dist/tools/sync-models.d.ts +12 -0
  208. package/dist/tools/sync-models.d.ts.map +1 -0
  209. package/dist/tools/sync-models.js +32 -0
  210. package/dist/tools/sync-models.js.map +1 -0
  211. package/dist/tools/update-and-publish.d.ts +44 -0
  212. package/dist/tools/update-and-publish.d.ts.map +1 -0
  213. package/dist/tools/update-and-publish.js +111 -0
  214. package/dist/tools/update-and-publish.js.map +1 -0
  215. package/dist/tools/update-definition.d.ts +129 -0
  216. package/dist/tools/update-definition.d.ts.map +1 -0
  217. package/dist/tools/update-definition.js +85 -0
  218. package/dist/tools/update-definition.js.map +1 -0
  219. package/dist/tools/upgrade-definition.d.ts +27 -0
  220. package/dist/tools/upgrade-definition.d.ts.map +1 -0
  221. package/dist/tools/upgrade-definition.js +22 -0
  222. package/dist/tools/upgrade-definition.js.map +1 -0
  223. package/dist/tools/validate-definition.d.ts +24 -0
  224. package/dist/tools/validate-definition.d.ts.map +1 -0
  225. package/dist/tools/validate-definition.js +21 -0
  226. package/dist/tools/validate-definition.js.map +1 -0
  227. package/dist/types/config.d.ts +40 -0
  228. package/dist/types/config.d.ts.map +1 -0
  229. package/dist/types/config.js +5 -0
  230. package/dist/types/config.js.map +1 -0
  231. package/dist/types/index.d.ts +9 -0
  232. package/dist/types/index.d.ts.map +1 -0
  233. package/dist/types/index.js +7 -0
  234. package/dist/types/index.js.map +1 -0
  235. package/dist/types/mcp.d.ts +21 -0
  236. package/dist/types/mcp.d.ts.map +1 -0
  237. package/dist/types/mcp.js +34 -0
  238. package/dist/types/mcp.js.map +1 -0
  239. package/dist/types/schemas.d.ts +113 -0
  240. package/dist/types/schemas.d.ts.map +1 -0
  241. package/dist/types/schemas.js +65 -0
  242. package/dist/types/schemas.js.map +1 -0
  243. package/dist/types/server.d.ts +29 -0
  244. package/dist/types/server.d.ts.map +1 -0
  245. package/dist/types/server.js +5 -0
  246. package/dist/types/server.js.map +1 -0
  247. package/dist/utils/logger.d.ts +19 -0
  248. package/dist/utils/logger.d.ts.map +1 -0
  249. package/dist/utils/logger.js +94 -0
  250. package/dist/utils/logger.js.map +1 -0
  251. package/dist/utils/normalize-keys.d.ts +11 -0
  252. package/dist/utils/normalize-keys.d.ts.map +1 -0
  253. package/dist/utils/normalize-keys.js +41 -0
  254. package/dist/utils/normalize-keys.js.map +1 -0
  255. package/dist/utils/read-yaml-file.d.ts +27 -0
  256. package/dist/utils/read-yaml-file.d.ts.map +1 -0
  257. package/dist/utils/read-yaml-file.js +89 -0
  258. package/dist/utils/read-yaml-file.js.map +1 -0
  259. package/dist/utils/session-state.d.ts +20 -0
  260. package/dist/utils/session-state.d.ts.map +1 -0
  261. package/dist/utils/session-state.js +21 -0
  262. package/dist/utils/session-state.js.map +1 -0
  263. package/dist/utils/tool-handler.d.ts +61 -0
  264. package/dist/utils/tool-handler.d.ts.map +1 -0
  265. package/dist/utils/tool-handler.js +184 -0
  266. package/dist/utils/tool-handler.js.map +1 -0
  267. package/dist/utils/trim-definition.d.ts +13 -0
  268. package/dist/utils/trim-definition.d.ts.map +1 -0
  269. package/dist/utils/trim-definition.js +28 -0
  270. package/dist/utils/trim-definition.js.map +1 -0
  271. package/package.json +83 -0
  272. package/tool-policies.json +66 -0
@@ -0,0 +1,184 @@
1
+ /**
2
+ * Tool handler factory
3
+ *
4
+ * Creates standardized MCP tool handlers with consistent error handling.
5
+ * Eliminates boilerplate across tool implementations.
6
+ */
7
+ import { z } from 'zod';
8
+ import { mapSdkErrorToMcp, mapZodErrorToMcp } from '../client/sdk-error-mapper.js';
9
+ import { normalizeKeys } from './normalize-keys.js';
10
+ import { createSuccessResponse } from '../types/index.js';
11
+ import { getDefaultType } from './session-state.js';
12
+ /**
13
+ * Coerce string values to numbers for fields that the Zod schema expects as numeric.
14
+ * MCP JSON-RPC sometimes serializes numeric parameters as strings (e.g., "50" instead of 50).
15
+ * This runs before Zod validation to prevent spurious type errors at the boundary.
16
+ */
17
+ function coerceNumericFields(args, schema) {
18
+ if (typeof args !== 'object' || args === null)
19
+ return args;
20
+ if (!(schema instanceof z.ZodObject))
21
+ return args;
22
+ const shape = schema.shape;
23
+ const obj = { ...args };
24
+ for (const [key, fieldSchema] of Object.entries(shape)) {
25
+ if (key in obj && typeof obj[key] === 'string') {
26
+ if (isNumericSchema(fieldSchema)) {
27
+ const num = Number(obj[key]);
28
+ if (!isNaN(num)) {
29
+ obj[key] = num;
30
+ }
31
+ }
32
+ }
33
+ }
34
+ return obj;
35
+ }
36
+ /** Check if a Zod schema (possibly wrapped in optional/nullable/default) expects a number. */
37
+ function isNumericSchema(schema) {
38
+ if (schema instanceof z.ZodNumber)
39
+ return true;
40
+ if (schema instanceof z.ZodOptional || schema instanceof z.ZodNullable || schema instanceof z.ZodDefault) {
41
+ return isNumericSchema(schema._def.innerType);
42
+ }
43
+ return false;
44
+ }
45
+ /** Type guard: checks if a value is a complete MCP tool response (has content array). */
46
+ function isMcpToolResponse(value) {
47
+ return (typeof value === 'object' &&
48
+ value !== null &&
49
+ 'content' in value &&
50
+ Array.isArray(value.content));
51
+ }
52
+ /**
53
+ * Creates a standardized tool handler with Zod validation, key normalization,
54
+ * and SDK error mapping.
55
+ *
56
+ * All handlers follow the same flow:
57
+ * 1. Parse input with Zod schema (validates snake_case MCP input)
58
+ * 2. Normalize keys from snake_case -> camelCase for SDK
59
+ * 3. Call SDK method with normalized input
60
+ * 4. Return success response or mapped error
61
+ *
62
+ * Timeout enforcement is handled by the RegistryClient SDK (configured via
63
+ * ULUOPS_REGISTRY_TIMEOUT env var, default 30s). No additional timeout is
64
+ * needed at this layer.
65
+ */
66
+ export function createToolHandler(schema, sdkCall, options) {
67
+ return async (args) => {
68
+ try {
69
+ // Extract fields param before Zod parse (meta-parameter, not part of tool schemas)
70
+ const { cleanArgs, fields } = extractFieldsParam(args);
71
+ // Inject session-level default type if not explicitly provided
72
+ const injectedArgs = injectSessionType(cleanArgs);
73
+ let input = schema.parse(coerceNumericFields(injectedArgs, schema));
74
+ if (options?.preProcess) {
75
+ const preResult = options.preProcess(input);
76
+ if (isMcpToolResponse(preResult)) {
77
+ return preResult;
78
+ }
79
+ input = preResult;
80
+ }
81
+ const normalized = normalizeKeys(input);
82
+ let result = await sdkCall(normalized);
83
+ if (options?.postProcess) {
84
+ result = options.postProcess(result);
85
+ }
86
+ // Apply field selection after all processing
87
+ if (fields) {
88
+ result = filterResponseFields(result, fields);
89
+ }
90
+ return createSuccessResponse(result);
91
+ }
92
+ catch (error) {
93
+ // Log errors to stderr for debugging (MCP transport uses stdout)
94
+ const errorMsg = error instanceof Error ? error.message : String(error);
95
+ const errorType = error instanceof z.ZodError ? 'validation' :
96
+ error instanceof Error ? error.constructor.name : 'unknown';
97
+ process.stderr.write(`[mcp-tool-error] type=${errorType} message=${errorMsg.slice(0, 200)}\n`);
98
+ if (error instanceof z.ZodError) {
99
+ return mapZodErrorToMcp(error);
100
+ }
101
+ return mapSdkErrorToMcp(error);
102
+ }
103
+ };
104
+ }
105
+ /**
106
+ * Inject session-level default type into args if not explicitly provided.
107
+ * Safe for blanket injection — Zod strips unknown keys from tools that don't declare `type`.
108
+ */
109
+ export function injectSessionType(args) {
110
+ const sessionType = getDefaultType();
111
+ if (!sessionType)
112
+ return args;
113
+ if (typeof args === 'object' && args !== null) {
114
+ const obj = args;
115
+ if (obj.type === undefined || obj.type === null) {
116
+ return { ...obj, type: sessionType };
117
+ }
118
+ }
119
+ return args;
120
+ }
121
+ /**
122
+ * Extract the `fields` meta-parameter from raw args before Zod validation.
123
+ * Removes it from the args so Zod doesn't reject it as an unknown key.
124
+ */
125
+ export function extractFieldsParam(args) {
126
+ if (typeof args !== 'object' || args === null) {
127
+ return { cleanArgs: args, fields: undefined };
128
+ }
129
+ const obj = args;
130
+ if (!('fields' in obj) || !Array.isArray(obj.fields)) {
131
+ return { cleanArgs: args, fields: undefined };
132
+ }
133
+ const fields = obj.fields.filter((f) => typeof f === 'string');
134
+ const rest = Object.fromEntries(Object.entries(obj).filter(([k]) => k !== 'fields'));
135
+ if (fields.length === 0) {
136
+ return { cleanArgs: rest, fields: undefined };
137
+ }
138
+ return { cleanArgs: rest, fields };
139
+ }
140
+ /** Keys that represent pagination metadata and are always preserved. */
141
+ const PAGINATION_KEYS = new Set(['total', 'limit', 'offset', 'hasMore', 'page', 'totalPages']);
142
+ /**
143
+ * Filter response fields to only include requested properties.
144
+ * Preserves pagination metadata. For array properties, picks fields from each item.
145
+ */
146
+ export function filterResponseFields(data, fields) {
147
+ if (typeof data !== 'object' || data === null)
148
+ return data;
149
+ const obj = data;
150
+ const result = {};
151
+ for (const [key, value] of Object.entries(obj)) {
152
+ // Always preserve pagination metadata
153
+ if (PAGINATION_KEYS.has(key)) {
154
+ result[key] = value;
155
+ continue;
156
+ }
157
+ // For array values, pick fields from each item
158
+ if (Array.isArray(value)) {
159
+ result[key] = value.map((item) => {
160
+ if (typeof item === 'object' && item !== null) {
161
+ return pickFields(item, fields);
162
+ }
163
+ return item;
164
+ });
165
+ continue;
166
+ }
167
+ // Include top-level keys that match the fields list
168
+ if (fields.includes(key)) {
169
+ result[key] = value;
170
+ }
171
+ }
172
+ return result;
173
+ }
174
+ /** Pick specified fields from an object. */
175
+ function pickFields(obj, fields) {
176
+ const result = {};
177
+ for (const field of fields) {
178
+ if (field in obj) {
179
+ result[field] = obj[field];
180
+ }
181
+ }
182
+ return result;
183
+ }
184
+ //# sourceMappingURL=tool-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-handler.js","sourceRoot":"","sources":["../../src/utils/tool-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Trims large fields from definition responses to reduce token consumption.
3
+ *
4
+ * MCP responses containing full YAML and rendered markdown can exceed 16k tokens
5
+ * per call. For mutation operations (create, update, publish, deprecate), the caller
6
+ * already has the YAML — returning it wastes context window.
7
+ */
8
+ /**
9
+ * Replace `yaml` and `runtimeMd` with short previews in a definition response.
10
+ * Preserves all other fields (status, version, hash, etc.) untouched.
11
+ */
12
+ export declare function trimDefinitionResponse(data: unknown): unknown;
13
+ //# sourceMappingURL=trim-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trim-definition.d.ts","sourceRoot":"","sources":["../../src/utils/trim-definition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiB7D"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Trims large fields from definition responses to reduce token consumption.
3
+ *
4
+ * MCP responses containing full YAML and rendered markdown can exceed 16k tokens
5
+ * per call. For mutation operations (create, update, publish, deprecate), the caller
6
+ * already has the YAML — returning it wastes context window.
7
+ */
8
+ const PREVIEW_LENGTH = 25;
9
+ /**
10
+ * Replace `yaml` and `runtimeMd` with short previews in a definition response.
11
+ * Preserves all other fields (status, version, hash, etc.) untouched.
12
+ */
13
+ export function trimDefinitionResponse(data) {
14
+ if (typeof data !== 'object' || data === null)
15
+ return data;
16
+ const record = data;
17
+ const trimmed = { ...record };
18
+ if (typeof trimmed.yaml === 'string') {
19
+ const len = trimmed.yaml.length;
20
+ trimmed.yaml = `${trimmed.yaml.slice(0, PREVIEW_LENGTH)}... (${String(len)} chars)`;
21
+ }
22
+ if (typeof trimmed.runtimeMd === 'string') {
23
+ const len = trimmed.runtimeMd.length;
24
+ trimmed.runtimeMd = `${trimmed.runtimeMd.slice(0, PREVIEW_LENGTH)}... (${String(len)} chars)`;
25
+ }
26
+ return trimmed;
27
+ }
28
+ //# sourceMappingURL=trim-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trim-definition.js","sourceRoot":"","sources":["../../src/utils/trim-definition.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAa;IAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAE3D,MAAM,MAAM,GAAG,IAA+B,CAAC;IAC/C,MAAM,OAAO,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE9B,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,OAAO,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IACtF,CAAC;IAED,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QACrC,OAAO,CAAC,SAAS,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,QAAQ,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC;IAChG,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@uluops/registry-mcp",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for the UluOps Registry API — definition management, versioning, and analytics",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "uluops-registry-mcp": "./dist/index.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js"
15
+ }
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "tool-policies.json",
20
+ "README.md",
21
+ "CHANGELOG.md"
22
+ ],
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "dev": "tsx watch src/index.ts",
26
+ "start": "node dist/index.js",
27
+ "clean": "rm -rf dist",
28
+ "prebuild": "npm run clean",
29
+ "postbuild": "chmod +x dist/index.js",
30
+ "lint": "eslint src/",
31
+ "format": "prettier --write \"src/**/*.ts\"",
32
+ "format:check": "prettier --check \"src/**/*.ts\"",
33
+ "typecheck": "tsc --noEmit",
34
+ "test": "vitest run",
35
+ "test:watch": "vitest",
36
+ "test:coverage": "vitest run --coverage",
37
+ "prepublishOnly": "npm run lint && npm test && npm audit --audit-level=high --omit=dev && npm run build"
38
+ },
39
+ "keywords": [
40
+ "mcp",
41
+ "mcp-server",
42
+ "uluops",
43
+ "registry",
44
+ "definitions",
45
+ "claude",
46
+ "claude-code",
47
+ "model-context-protocol"
48
+ ],
49
+ "author": "aself101",
50
+ "license": "MIT",
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/Uluops/-uluops-registry-mcp.git"
54
+ },
55
+ "homepage": "https://github.com/Uluops/-uluops-registry-mcp#readme",
56
+ "bugs": {
57
+ "url": "https://github.com/Uluops/-uluops-registry-mcp/issues"
58
+ },
59
+ "engines": {
60
+ "node": ">=18.0.0"
61
+ },
62
+ "dependencies": {
63
+ "@modelcontextprotocol/sdk": "^1.29.0",
64
+ "@uluops/definition-factory": "^0.36.0",
65
+ "@uluops/registry-sdk": "0.30.1",
66
+ "@uluops/sdk-core": "0.11.0",
67
+ "mcp-secure-server": "^0.0.14-security",
68
+ "zod": "^3.23.0"
69
+ },
70
+ "devDependencies": {
71
+ "@eslint/js": "^9.0.0",
72
+ "@types/node": "^22.10.0",
73
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
74
+ "@typescript-eslint/parser": "^8.0.0",
75
+ "@vitest/coverage-v8": "^4.1.8",
76
+ "eslint": "^9.0.0",
77
+ "prettier": "^3.0.0",
78
+ "tsx": "^4.0.0",
79
+ "typescript": "^5.7.0",
80
+ "typescript-eslint": "^8.52.0",
81
+ "vitest": "^4.1.8"
82
+ }
83
+ }
@@ -0,0 +1,66 @@
1
+ {
2
+ "version": "2.0",
3
+ "tools": {
4
+ "validate_definition": {
5
+ "level": "STORAGE",
6
+ "relaxedFields": ["yaml"],
7
+ "description": "Validates YAML content - may contain code-like structures"
8
+ },
9
+ "create_definition": {
10
+ "level": "STORAGE",
11
+ "relaxedFields": ["yaml", "description", "tags"],
12
+ "description": "Creates definitions with YAML content that may contain code patterns"
13
+ },
14
+ "update_definition": {
15
+ "level": "STORAGE",
16
+ "relaxedFields": ["yaml", "description", "tags"],
17
+ "description": "Updates definitions with YAML content that may contain code patterns"
18
+ },
19
+ "render_definition": {
20
+ "level": "QUERY",
21
+ "relaxedFields": [],
22
+ "description": "Renders definition markdown"
23
+ },
24
+ "upgrade_definition": {
25
+ "level": "STORAGE",
26
+ "relaxedFields": ["yaml", "source_format"],
27
+ "description": "Upgrades legacy YAML format - may contain code patterns"
28
+ },
29
+ "deprecate_definition": {
30
+ "level": "STORAGE",
31
+ "relaxedFields": ["reason", "successor"],
32
+ "description": "Deprecation reason may contain technical references"
33
+ },
34
+ "fork_definition": {
35
+ "level": "STORAGE",
36
+ "relaxedFields": ["new_name", "description"],
37
+ "description": "Fork definition with user-provided names"
38
+ },
39
+ "update_and_publish": {
40
+ "level": "STORAGE",
41
+ "relaxedFields": ["yaml", "description", "tags"],
42
+ "description": "Composite update+publish with YAML content that may contain code patterns"
43
+ },
44
+ "batch_publish": {
45
+ "level": "QUERY",
46
+ "relaxedFields": [],
47
+ "description": "Batch publish multiple definitions by reference"
48
+ },
49
+ "record_execution": {
50
+ "level": "STORAGE",
51
+ "relaxedFields": ["idempotency_key"],
52
+ "description": "Records execution with idempotency key"
53
+ },
54
+ "get_user": {
55
+ "level": "QUERY",
56
+ "relaxedFields": ["id"],
57
+ "description": "User ID lookup - UUID format can trigger false positives"
58
+ },
59
+ "batch_users": {
60
+ "level": "QUERY",
61
+ "relaxedFields": ["ids"],
62
+ "description": "Batch user IDs - UUIDs can trigger false positives"
63
+ }
64
+ },
65
+ "defaultLevel": "QUERY"
66
+ }