workday-studio-mcp-server 2.0.1 → 2.0.2

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 (51) hide show
  1. package/dist/index.js +21 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/tools/add-assembly-step.d.ts +7 -0
  4. package/dist/tools/add-assembly-step.d.ts.map +1 -0
  5. package/dist/tools/add-assembly-step.js +130 -0
  6. package/dist/tools/add-assembly-step.js.map +1 -0
  7. package/dist/tools/create-project.d.ts +3 -0
  8. package/dist/tools/create-project.d.ts.map +1 -0
  9. package/dist/tools/create-project.js +262 -0
  10. package/dist/tools/create-project.js.map +1 -0
  11. package/dist/tools/create-xsl-transform.d.ts +6 -0
  12. package/dist/tools/create-xsl-transform.d.ts.map +1 -0
  13. package/dist/tools/create-xsl-transform.js +103 -0
  14. package/dist/tools/create-xsl-transform.js.map +1 -0
  15. package/dist/tools/get-step-type-reference.d.ts +6 -0
  16. package/dist/tools/get-step-type-reference.d.ts.map +1 -0
  17. package/dist/tools/get-step-type-reference.js +387 -0
  18. package/dist/tools/get-step-type-reference.js.map +1 -0
  19. package/dist/tools/log-learning.d.ts +6 -0
  20. package/dist/tools/log-learning.d.ts.map +1 -0
  21. package/dist/tools/log-learning.js +77 -0
  22. package/dist/tools/log-learning.js.map +1 -0
  23. package/dist/tools/lookup-soap-operations.d.ts +6 -0
  24. package/dist/tools/lookup-soap-operations.d.ts.map +1 -0
  25. package/dist/tools/lookup-soap-operations.js +343 -0
  26. package/dist/tools/lookup-soap-operations.js.map +1 -0
  27. package/dist/tools/parse-server-log.d.ts +6 -0
  28. package/dist/tools/parse-server-log.d.ts.map +1 -0
  29. package/dist/tools/parse-server-log.js +252 -0
  30. package/dist/tools/parse-server-log.js.map +1 -0
  31. package/dist/tools/plan-integration.d.ts +9 -0
  32. package/dist/tools/plan-integration.d.ts.map +1 -0
  33. package/dist/tools/plan-integration.js +550 -0
  34. package/dist/tools/plan-integration.js.map +1 -0
  35. package/dist/tools/update-sub-flow.d.ts +7 -0
  36. package/dist/tools/update-sub-flow.d.ts.map +1 -0
  37. package/dist/tools/update-sub-flow.js +185 -0
  38. package/dist/tools/update-sub-flow.js.map +1 -0
  39. package/dist/tools/validate-assembly.d.ts +6 -0
  40. package/dist/tools/validate-assembly.d.ts.map +1 -0
  41. package/dist/tools/validate-assembly.js +94 -0
  42. package/dist/tools/validate-assembly.js.map +1 -0
  43. package/dist/utils/assembly-validator.d.ts +18 -0
  44. package/dist/utils/assembly-validator.d.ts.map +1 -0
  45. package/dist/utils/assembly-validator.js +202 -0
  46. package/dist/utils/assembly-validator.js.map +1 -0
  47. package/dist/utils/fs.d.ts +6 -1
  48. package/dist/utils/fs.d.ts.map +1 -1
  49. package/dist/utils/fs.js +16 -1
  50. package/dist/utils/fs.js.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-step-type-reference.d.ts","sourceRoot":"","sources":["../../src/tools/get-step-type-reference.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwDhD"}
@@ -0,0 +1,387 @@
1
+ /**
2
+ * get_step_type_reference — confirmed step type docs with production XML examples.
3
+ */
4
+ import { z } from 'zod';
5
+ export function register(server) {
6
+ server.tool('get_step_type_reference', [
7
+ 'Return confirmed Workday Studio step type documentation with production XML examples.',
8
+ '',
9
+ 'Supports every top-level cc: step type used in assembly.xml. Returns:',
10
+ ' • Required and optional attributes with allowed values',
11
+ ' • Known constraints and gotchas (things that crash Studio silently)',
12
+ ' • At least one complete production-grade XML example',
13
+ ' • Routing attribute rules (routes-to, routes-response-to)',
14
+ '',
15
+ 'Pass step_type="all" to get a summary table of all supported step types.',
16
+ ].join('\n'), {
17
+ step_type: z.string().describe('The cc: step type to look up, e.g. "async-mediation", "splitter", "http-out", "workday-out-soap". ' +
18
+ 'Pass "all" for an overview of every supported type.'),
19
+ }, async ({ step_type }) => {
20
+ const key = step_type.toLowerCase().replace(/^cc:/, '').trim();
21
+ if (key === 'all') {
22
+ return {
23
+ content: [{
24
+ type: 'text',
25
+ text: JSON.stringify(STEP_TYPE_OVERVIEW, null, 2),
26
+ }],
27
+ };
28
+ }
29
+ const doc = STEP_DOCS[key];
30
+ if (!doc) {
31
+ const known = Object.keys(STEP_DOCS).sort().join(', ');
32
+ return {
33
+ content: [{
34
+ type: 'text',
35
+ text: JSON.stringify({
36
+ error: true,
37
+ code: 'UNKNOWN_STEP_TYPE',
38
+ message: `Unknown step type: "${step_type}"`,
39
+ known_types: known,
40
+ }, null, 2),
41
+ }],
42
+ };
43
+ }
44
+ return {
45
+ content: [{
46
+ type: 'text',
47
+ text: JSON.stringify(doc, null, 2),
48
+ }],
49
+ };
50
+ });
51
+ }
52
+ // ── overview table ──────────────────────────────────────────────────────────
53
+ const STEP_TYPE_OVERVIEW = {
54
+ title: 'Workday Studio Assembly Step Types — Overview',
55
+ categories: {
56
+ 'Entry Points': [
57
+ { type: 'cc:workday-in', purpose: 'Integration entry point — declares integration system, services, params' },
58
+ ],
59
+ 'Flow Control': [
60
+ { type: 'cc:async-mediation', purpose: 'Container for a sequence of inline steps (sub-flow)' },
61
+ { type: 'cc:splitter', purpose: 'Fan-out over a collection; each item processed in parallel sub-route' },
62
+ { type: 'cc:route', purpose: 'Conditional branching via cc:when / cc:otherwise' },
63
+ { type: 'cc:local-in', purpose: 'Named vm:// sub-flow endpoint (called from cc:local-out)' },
64
+ ],
65
+ 'Outbound Connectors': [
66
+ { type: 'cc:workday-out-rest', purpose: 'Call Workday RAAS report or REST endpoint' },
67
+ { type: 'cc:workday-out-soap', purpose: 'Call Workday SOAP service' },
68
+ { type: 'cc:http-out', purpose: 'Call external HTTP/REST endpoint' },
69
+ { type: 'cc:local-out', purpose: 'Deliver document, log event, or call a vm:// sub-flow' },
70
+ ],
71
+ 'Transformation (inline steps only)': [
72
+ { type: 'cc:xslt-plus', purpose: 'XSLT 3.0 transform (streaming capable)' },
73
+ { type: 'cc:eval', purpose: 'Groovy/Mule expression — set props, extract xpath values' },
74
+ { type: 'cc:write', purpose: 'Replace message payload with literal XML/text' },
75
+ { type: 'cc:log', purpose: 'Write a structured log entry' },
76
+ { type: 'cc:json-to-xml', purpose: 'Convert JSON payload to XML' },
77
+ { type: 'cc:xml-to-json', purpose: 'Convert XML payload to JSON' },
78
+ { type: 'cc:csv-to-xml', purpose: 'Parse CSV to XML rows' },
79
+ { type: 'cc:xml-to-csv', purpose: 'Serialize XML to CSV' },
80
+ { type: 'cc:base64-encode', purpose: 'Base64-encode message content' },
81
+ { type: 'cc:base64-decode', purpose: 'Base64-decode message content' },
82
+ { type: 'cc:pgp-encrypt', purpose: 'PGP-encrypt payload' },
83
+ { type: 'cc:pgp-decrypt', purpose: 'PGP-decrypt payload' },
84
+ { type: 'cc:zip', purpose: 'Zip payload' },
85
+ { type: 'cc:unzip', purpose: 'Unzip payload' },
86
+ ],
87
+ 'Error Handling': [
88
+ { type: 'cc:send-error', purpose: 'Route to error handler when an error occurs in a sub-flow' },
89
+ ],
90
+ },
91
+ note: 'Call get_step_type_reference with a specific type name for full attribute reference and XML examples.',
92
+ };
93
+ const STEP_DOCS = {
94
+ 'workday-in': {
95
+ type: 'cc:workday-in',
96
+ summary: 'Integration entry point. Must be the first (and only) entry-point element in every assembly. Declares the integration system name, services, params, and attributes.',
97
+ required_attributes: [
98
+ { name: 'id', description: 'Unique id for this element (conventionally "StartHere").' },
99
+ { name: 'routes-to', description: 'id of the first downstream element to call after launch.' },
100
+ ],
101
+ optional_attributes: [],
102
+ routing: 'routes-to is required. No routes-response-to.',
103
+ constraints: [
104
+ 'Only one cc:workday-in allowed per assembly.',
105
+ 'GlobalErrorHandler cc:send-error is a sibling, not a child.',
106
+ 'All cloud: service/param declarations must be inside <cc:integration-system>.',
107
+ ],
108
+ example: `<cc:workday-in id="StartHere" routes-to="CaptureParams">
109
+ <cc:integration-system name="INT145_Workers_To_Dayforce">
110
+ <cloud:report-service name="INT145_Reports">
111
+ <cloud:report-alias description="Active Workers" name="INT145_ActiveWorkers"/>
112
+ </cloud:report-service>
113
+ <cloud:attribute-map-service name="INT145_Attributes">
114
+ <cloud:attribute name="Target API URL">
115
+ <cloud:type><cloud:simple-type>text</cloud:simple-type></cloud:type>
116
+ </cloud:attribute>
117
+ </cloud:attribute-map-service>
118
+ <cloud:launch-parameter-service name="INT145_Params">
119
+ <cloud:param name="Effective_Date" prompt="Effective Date">
120
+ <cloud:type><cloud:simple-type>date</cloud:simple-type></cloud:type>
121
+ </cloud:param>
122
+ </cloud:launch-parameter-service>
123
+ </cc:integration-system>
124
+ </cc:workday-in>`,
125
+ },
126
+ 'async-mediation': {
127
+ type: 'cc:async-mediation',
128
+ summary: 'Container for a sequential list of inline steps. Each step runs in order; any uncaught exception propagates upward unless a cc:send-error child is present.',
129
+ required_attributes: [
130
+ { name: 'id', description: 'Unique id.' },
131
+ ],
132
+ optional_attributes: [
133
+ { name: 'routes-to', description: 'Next top-level element after steps complete.' },
134
+ { name: 'routes-response-to', description: 'Element to route to after an http-out or soap response is received.' },
135
+ { name: 'handle-downstream-errors', description: 'If true, errors from routes-to target are caught by this element\'s cc:send-error.', allowed_values: 'true | false', default: 'false' },
136
+ ],
137
+ routing: 'routes-to optional; routes-response-to optional. Use handle-downstream-errors="true" when you have a per-step error handler.',
138
+ constraints: [
139
+ 'Must contain exactly one <cc:steps> child with inline steps.',
140
+ 'Top-level elements (workday-in, workday-out-soap, splitter, etc.) cannot appear inside <cc:steps>.',
141
+ 'XML comments inside <cc:steps> shift @mixed indices and break diagram connections — never add them.',
142
+ ],
143
+ example: `<cc:async-mediation id="CaptureParams" routes-to="GetReport" handle-downstream-errors="true">
144
+ <cc:steps>
145
+ <cc:eval id="CaptureCredentials">
146
+ <cc:expression>props['API_URL'] = intsys.getAttribute('Target API URL')</cc:expression>
147
+ <cc:expression>props['RunDate'] = launchParams['Effective_Date'] ?: new Date().format('yyyy-MM-dd')</cc:expression>
148
+ </cc:eval>
149
+ </cc:steps>
150
+ <cc:send-error id="CaptureParamsError" rethrow-error="false" routes-to="DeliverError"/>
151
+ </cc:async-mediation>`,
152
+ },
153
+ 'splitter': {
154
+ type: 'cc:splitter',
155
+ summary: 'Fan-out over a collection. Each item is routed to a cc:sub-route target in parallel (up to the thread pool limit). Use cc:xml-stream-splitter for streaming large Workday reports.',
156
+ required_attributes: [
157
+ { name: 'id', description: 'Unique id.' },
158
+ ],
159
+ optional_attributes: [
160
+ { name: 'max-concurrency', description: 'Maximum concurrent threads per splitter invocation.', default: '10' },
161
+ ],
162
+ routing: 'No routes-to on the cc:splitter itself. Each <cc:sub-route> has a routes-to.',
163
+ constraints: [
164
+ 'cc:splitter MUST NOT have a routes-to attribute — this causes a Studio validation error.',
165
+ 'Each cc:sub-route must have a unique name= and a routes-to= pointing to a top-level element.',
166
+ 'Use cc:xml-stream-splitter for reports > 100 rows to avoid OOM errors.',
167
+ 'Use cc:xpath-splitter only for small in-memory payloads.',
168
+ ],
169
+ example: `<cc:splitter id="SplitRecords" max-concurrency="5">
170
+ <cc:sub-route name="ProcessRecord" routes-to="BuildPayload"/>
171
+ <cc:xml-stream-splitter xpath="wd:Report_Data/wd:Report_Entry"/>
172
+ </cc:splitter>`,
173
+ },
174
+ 'workday-out-rest': {
175
+ type: 'cc:workday-out-rest',
176
+ summary: 'Call a Workday RAAS report or any Workday REST endpoint using the integration system\'s built-in Workday credentials.',
177
+ required_attributes: [
178
+ { name: 'id', description: 'Unique id.' },
179
+ { name: 'extra-path', description: 'Path appended to the Workday tenant URL. For RAAS use intsys.reportService.getExtrapath().' },
180
+ ],
181
+ optional_attributes: [
182
+ { name: 'routes-response-to', description: 'Element to route the response body to.' },
183
+ { name: 'http-method', description: 'HTTP method.', default: 'GET', allowed_values: 'GET | POST | PUT | PATCH | DELETE' },
184
+ ],
185
+ routing: 'routes-response-to routes the response. No routes-to.',
186
+ constraints: [
187
+ 'extra-path must be an @{...} expression, not a literal string, when using RAAS.',
188
+ 'Always append ?format=simplexml to RAAS URLs to get predictable XML.',
189
+ ],
190
+ example: `<cc:workday-out-rest id="GetReport" routes-response-to="SplitRecords"
191
+ extra-path="@{intsys.reportService.getExtrapath('INT145_ActiveWorkers')}?format=simplexml"/>`,
192
+ },
193
+ 'workday-out-soap': {
194
+ type: 'cc:workday-out-soap',
195
+ summary: 'Call a Workday SOAP service. The message body must already be a valid SOAP envelope (built by an XSL transform or cc:write step upstream).',
196
+ required_attributes: [
197
+ { name: 'id', description: 'Unique id.' },
198
+ { name: 'application', description: 'Workday service name, e.g. "Staffing", "HumanResources", "Payroll".' },
199
+ { name: 'version', description: 'WSDL version, e.g. "v46.1".' },
200
+ ],
201
+ optional_attributes: [
202
+ { name: 'routes-response-to', description: 'Element to route the SOAP response to.' },
203
+ { name: 'replace-with-soap-fault', description: 'If true, a SOAP fault is returned as a fault message rather than throwing an exception.', default: 'false', allowed_values: 'true | false' },
204
+ ],
205
+ routing: 'routes-response-to routes the response. No routes-to.',
206
+ constraints: [
207
+ 'replace-with-soap-fault="true" is required for write operations (Hire, Terminate, Change_Job) to get structured error messages.',
208
+ 'The upstream payload must be a complete SOAP envelope with wd: namespace.',
209
+ ],
210
+ example: `<cc:workday-out-soap id="HireWorker" routes-response-to="HandleHireResponse"
211
+ application="Staffing" version="v46.1" replace-with-soap-fault="true"/>`,
212
+ },
213
+ 'http-out': {
214
+ type: 'cc:http-out',
215
+ summary: 'Call an external HTTP/REST endpoint. Supports Basic Auth, Bearer tokens, and custom headers.',
216
+ required_attributes: [
217
+ { name: 'id', description: 'Unique id.' },
218
+ { name: 'endpoint', description: 'Target URL. Can use @{props[\'..\']} expressions.' },
219
+ ],
220
+ optional_attributes: [
221
+ { name: 'routes-response-to', description: 'Element to route the HTTP response to.' },
222
+ { name: 'http-method', description: 'HTTP method.', default: 'POST', allowed_values: 'GET | POST | PUT | PATCH | DELETE' },
223
+ { name: 'content-type', description: 'Content-Type header for the request body.', default: 'application/xml' },
224
+ ],
225
+ routing: 'routes-response-to routes the response. No routes-to.',
226
+ constraints: [
227
+ 'Always set content-type="application/json" when posting JSON.',
228
+ 'Use cc:http-basic-auth or cc:http-header child elements for auth.',
229
+ ],
230
+ example: `<cc:http-out id="PostToTarget" routes-response-to="HandleResponse"
231
+ endpoint="@{props['API_URL']}" http-method="POST" content-type="application/json">
232
+ <cc:http-basic-auth username="@{props['API_User']}" password="@{props['API_Pass']}"/>
233
+ </cc:http-out>`,
234
+ },
235
+ 'local-out': {
236
+ type: 'cc:local-out',
237
+ summary: 'Deliver a document or event to the Workday integration messaging bus, or call a vm:// sub-flow.',
238
+ required_attributes: [
239
+ { name: 'id', description: 'Unique id.' },
240
+ { name: 'endpoint', description: 'vm:// endpoint. For document delivery use "vm://wcc/PutIntegrationMessage".' },
241
+ ],
242
+ optional_attributes: [
243
+ { name: 'store-message', description: 'Whether to store the message for debugging.', default: 'none', allowed_values: 'none | always' },
244
+ { name: 'routes-to', description: 'Next element after the delivery completes.' },
245
+ ],
246
+ routing: 'Optional routes-to. No routes-response-to.',
247
+ constraints: [
248
+ 'is.document.deliverable must be "true" to generate a downloadable integration document.',
249
+ 'is.message.severity must be "ERROR" or "CRITICAL" for error events.',
250
+ 'is.document.file.name sets the output file name (include the extension).',
251
+ ],
252
+ example: `<cc:local-out id="DeliverFile" store-message="none" endpoint="vm://wcc/PutIntegrationMessage">
253
+ <cc:set name="is.document.file.name" value="'workers_' + new Date().format('yyyyMMdd') + '.csv'"/>
254
+ <cc:set name="is.document.deliverable" value="'true'"/>
255
+ <cc:set name="is.document.content.type" value="'text/csv'"/>
256
+ </cc:local-out>`,
257
+ },
258
+ 'local-in': {
259
+ type: 'cc:local-in',
260
+ summary: 'Named vm:// sub-flow entry point. Called via cc:local-out with a matching vm:// endpoint.',
261
+ required_attributes: [
262
+ { name: 'id', description: 'Unique id (also used in vm:// endpoint name).' },
263
+ ],
264
+ optional_attributes: [
265
+ { name: 'routes-to', description: 'Next element after steps complete.' },
266
+ ],
267
+ routing: 'Optional routes-to.',
268
+ constraints: [
269
+ 'The vm:// endpoint name in cc:local-out must match the cc:local-in id exactly.',
270
+ ],
271
+ example: `<cc:local-in id="ProcessChunk" routes-to="DeliverChunk">
272
+ <cc:steps>
273
+ <cc:xslt-plus id="TransformChunk" output-mimetype="text/csv" url="ChunkTransform.xsl"/>
274
+ </cc:steps>
275
+ </cc:local-in>`,
276
+ },
277
+ 'send-error': {
278
+ type: 'cc:send-error',
279
+ summary: 'Declares an error handler for the enclosing element or the whole assembly. When an error occurs in the sibling or parent, execution is routed to routes-to.',
280
+ required_attributes: [
281
+ { name: 'id', description: 'Unique id.' },
282
+ { name: 'routes-to', description: 'Error destination element id.' },
283
+ ],
284
+ optional_attributes: [
285
+ { name: 'rethrow-error', description: 'If true, the error is rethrown after routing.', default: 'false', allowed_values: 'true | false' },
286
+ ],
287
+ routing: 'routes-to required. Error info available in context.errorMessage downstream.',
288
+ constraints: [
289
+ 'GlobalErrorHandler must be a direct child of cc:assembly (sibling of cc:workday-in).',
290
+ 'Per-step error handlers are children of their cc:async-mediation element.',
291
+ 'Use context.errorMessage in cc:set expressions to pass the error text.',
292
+ ],
293
+ example: `<cc:send-error id="GlobalErrorHandler" routes-to="DeliverError" rethrow-error="false"/>`,
294
+ },
295
+ 'xslt-plus': {
296
+ type: 'cc:xslt-plus',
297
+ summary: 'Apply an XSLT 3.0 stylesheet to the current message. Supports streaming for large payloads. Always use instead of the legacy cc:xslt element.',
298
+ required_attributes: [
299
+ { name: 'id', description: 'Unique id.' },
300
+ { name: 'url', description: 'XSL file name relative to WSAR-INF, e.g. "WorkersToCSV.xsl".' },
301
+ ],
302
+ optional_attributes: [
303
+ { name: 'output-mimetype', description: 'MIME type of the output. Determines Content-Type of the result message.', default: 'text/xml' },
304
+ ],
305
+ routing: 'Inline step — no routing attributes.',
306
+ constraints: [
307
+ 'url= is relative to WSAR-INF, not an absolute path.',
308
+ 'output-mimetype="application/json" is required for JSON output so downstream steps parse it correctly.',
309
+ 'For streaming XSL use xsl:mode streamable="yes" in the stylesheet.',
310
+ 'xsl:param names cannot contain dots — use underscores.',
311
+ ],
312
+ example: `<cc:xslt-plus id="BuildPayload" output-mimetype="application/json" url="INT145_ReportToJSON.xsl"/>`,
313
+ },
314
+ 'eval': {
315
+ type: 'cc:eval',
316
+ summary: 'Execute Groovy/Mule expressions to read/write props, capture xpath values, or set variables. Each cc:expression runs in order.',
317
+ required_attributes: [
318
+ { name: 'id', description: 'Unique id.' },
319
+ ],
320
+ optional_attributes: [],
321
+ routing: 'Inline step — no routing attributes.',
322
+ constraints: [
323
+ 'Use props[\'key\'] = value to store data; values persist for the life of the message.',
324
+ 'xpath() calls are relative to the current message payload.',
325
+ 'intsys.getAttribute(\'name\') reads integration attributes.',
326
+ 'launchParams[\'name\'] reads launch parameters.',
327
+ ],
328
+ example: `<cc:eval id="CaptureFields">
329
+ <cc:expression>props['WorkerID'] = parts[0].xpath('wd:Worker_ID/text()')</cc:expression>
330
+ <cc:expression>props['FullName'] = parts[0].xpath('wd:Full_Name/text()')</cc:expression>
331
+ <cc:expression>props['EffDate'] = launchParams['Effective_Date'] ?: new Date().format('yyyy-MM-dd')</cc:expression>
332
+ </cc:eval>`,
333
+ },
334
+ 'route': {
335
+ type: 'cc:route',
336
+ summary: 'Conditional branching. Evaluates cc:when conditions in order; routes to the first matching target, or cc:otherwise if none match.',
337
+ required_attributes: [
338
+ { name: 'id', description: 'Unique id.' },
339
+ ],
340
+ optional_attributes: [],
341
+ routing: 'Each cc:when and cc:otherwise has its own routes-to.',
342
+ constraints: [
343
+ 'cc:otherwise is required to avoid silent message drops.',
344
+ 'Conditions are Groovy expressions evaluated against props.',
345
+ ],
346
+ example: `<cc:route id="CheckMode">
347
+ <cc:when condition="props['Mode'] == 'FULL'" routes-to="FullLoad"/>
348
+ <cc:when condition="props['Mode'] == 'INCREMENTAL'" routes-to="IncrementalLoad"/>
349
+ <cc:otherwise routes-to="DeliverError"/>
350
+ </cc:route>`,
351
+ },
352
+ 'log': {
353
+ type: 'cc:log',
354
+ summary: 'Write a structured log entry visible in the Workday integration event log.',
355
+ required_attributes: [
356
+ { name: 'id', description: 'Unique id.' },
357
+ ],
358
+ optional_attributes: [
359
+ { name: 'level', description: 'Log level.', default: 'INFO', allowed_values: 'DEBUG | INFO | WARN | ERROR' },
360
+ ],
361
+ routing: 'Inline step — no routing attributes.',
362
+ constraints: [],
363
+ example: `<cc:log id="LogStart" level="INFO">
364
+ <cc:log-message>
365
+ <cc:text>Starting integration run for date: </cc:text>
366
+ <cc:expression>props['RunDate']</cc:expression>
367
+ <cc:line-separator/>
368
+ </cc:log-message>
369
+ </cc:log>`,
370
+ },
371
+ 'write': {
372
+ type: 'cc:write',
373
+ summary: 'Replace the current message payload with literal content. Used to seed an XSL transform that builds its output purely from xsl:params (no input XML needed).',
374
+ required_attributes: [
375
+ { name: 'id', description: 'Unique id.' },
376
+ ],
377
+ optional_attributes: [],
378
+ routing: 'Inline step — no routing attributes.',
379
+ constraints: [
380
+ 'Literal text inside <cc:text> must be XML-escaped (< = &lt;, & = &amp;).',
381
+ ],
382
+ example: `<cc:write id="SeedInput">
383
+ <cc:message><cc:text>&lt;request/&gt;</cc:text></cc:message>
384
+ </cc:write>`,
385
+ },
386
+ };
387
+ //# sourceMappingURL=get-step-type-reference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-step-type-reference.js","sourceRoot":"","sources":["../../src/tools/get-step-type-reference.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * log_learning — append a new learning entry to learnings.md in the repo root.
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function register(server: McpServer): void;
6
+ //# sourceMappingURL=log-learning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-learning.d.ts","sourceRoot":"","sources":["../../src/tools/log-learning.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6EhD"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * log_learning — append a new learning entry to learnings.md in the repo root.
3
+ */
4
+ import { z } from 'zod';
5
+ import { appendFile, access } from 'fs/promises';
6
+ import { fileURLToPath } from 'url';
7
+ import { dirname, join } from 'path';
8
+ import { errorResponse } from '../utils/errors.js';
9
+ const __dirname = dirname(fileURLToPath(import.meta.url));
10
+ // dist/tools/ → repo root (two levels up)
11
+ const LEARNINGS_PATH = join(__dirname, '../../learnings.md');
12
+ export function register(server) {
13
+ server.tool('log_learning', [
14
+ 'CALL THIS AUTOMATICALLY whenever you discover a new Workday Studio pattern, schema rule,',
15
+ 'gotcha, or workaround during a build session — even if the user did not ask you to log it.',
16
+ 'This is how the team\'s shared knowledge base grows. Examples of when to call this:',
17
+ 'a build fails with an error not already in the step-type reference, Studio silently rejects',
18
+ 'an element, MVEL throws an unexpected exception, a diagram crashes on open, a workaround',
19
+ 'fixes something with no documented cause.',
20
+ 'Do NOT call it for things already documented in get_step_type_reference.',
21
+ ].join(' '), {
22
+ title: z.string().describe('Short descriptive title, e.g. "cc:splitter cannot have routes-to attribute"'),
23
+ category: z.enum(['Schema', 'Diagram', 'MVEL', 'XSLT', 'Assembly', 'HTTP', 'Error', 'Other'])
24
+ .describe('The type of learning'),
25
+ trigger: z.string().describe('What caused the discovery — the exact error or unexpected behavior observed'),
26
+ pattern: z.string().describe('What we learned — specific and actionable, written for a teammate who will hit this next'),
27
+ example: z.string().optional().describe('Minimal XML/MVEL/XSLT snippet showing the correct or incorrect form'),
28
+ promote_to: z.enum(['patterns.md', 'get-step-type-reference', 'validate-assembly', 'all'])
29
+ .describe('Which file(s) this learning should be promoted into during the next review'),
30
+ }, async ({ title, category, trigger, pattern, example, promote_to }) => {
31
+ const date = new Date().toISOString().slice(0, 10);
32
+ const lines = [
33
+ `\n### [${date}] ${title}`,
34
+ `**Category**: ${category}`,
35
+ `**Trigger**: ${trigger}`,
36
+ `**Pattern**: ${pattern}`,
37
+ ];
38
+ if (example) {
39
+ lines.push('**Example**:');
40
+ lines.push('```xml');
41
+ lines.push(example);
42
+ lines.push('```');
43
+ }
44
+ lines.push(`**Promote to**: ${promote_to}`);
45
+ lines.push('**Status**: raw');
46
+ lines.push('');
47
+ const entry = lines.join('\n');
48
+ // Verify learnings.md exists
49
+ try {
50
+ await access(LEARNINGS_PATH);
51
+ }
52
+ catch {
53
+ return errorResponse('LEARNINGS_NOT_FOUND', `learnings.md not found at ${LEARNINGS_PATH}`, 'Make sure the MCP repo is intact. learnings.md should be in the repo root.');
54
+ }
55
+ try {
56
+ await appendFile(LEARNINGS_PATH, entry, 'utf8');
57
+ return {
58
+ content: [{
59
+ type: 'text',
60
+ text: JSON.stringify({
61
+ logged: true,
62
+ title,
63
+ date,
64
+ category,
65
+ promote_to,
66
+ path: LEARNINGS_PATH,
67
+ message: 'Logged to learnings.md. Ask the user to commit this so the team benefits from it.',
68
+ }, null, 2),
69
+ }],
70
+ };
71
+ }
72
+ catch (e) {
73
+ return errorResponse('WRITE_FAILED', e.message, 'Check file permissions on learnings.md.');
74
+ }
75
+ });
76
+ }
77
+ //# sourceMappingURL=log-learning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-learning.js","sourceRoot":"","sources":["../../src/tools/log-learning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * lookup_soap_operations — Workday SOAP Web Services reference (WWS v46.1 / 2026R1).
3
+ */
4
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
+ export declare function register(server: McpServer): void;
6
+ //# sourceMappingURL=lookup-soap-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookup-soap-operations.d.ts","sourceRoot":"","sources":["../../src/tools/lookup-soap-operations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAqSzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyEhD"}