isc-transforms-mcp 1.0.4 → 1.0.6
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.
|
@@ -27,29 +27,11 @@
|
|
|
27
27
|
"type": "object",
|
|
28
28
|
"description": "Conditional logic configuration, plus optional dynamic variables (per docs).",
|
|
29
29
|
"additionalProperties": {
|
|
30
|
-
"description": "Dynamic variables referenced via $variableName. Can be literals or nested transforms.",
|
|
31
|
-
"
|
|
30
|
+
"description": "Dynamic variables referenced via $variableName. Can be string literals or nested transforms.",
|
|
31
|
+
"anyOf": [
|
|
32
32
|
{
|
|
33
33
|
"type": "string"
|
|
34
34
|
},
|
|
35
|
-
{
|
|
36
|
-
"type": "number"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"type": "integer"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"type": "boolean"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"type": "array"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"type": "object"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"type": "null"
|
|
52
|
-
},
|
|
53
35
|
{
|
|
54
36
|
"$ref": "#/$defs/NestedTransform"
|
|
55
37
|
}
|
|
@@ -36,29 +36,11 @@
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"additionalProperties": {
|
|
39
|
-
"description": "Dynamic variables referenced in Velocity template. Can be literals or nested transforms.",
|
|
40
|
-
"
|
|
39
|
+
"description": "Dynamic variables referenced in Velocity template. Can be string literals or nested transforms.",
|
|
40
|
+
"anyOf": [
|
|
41
41
|
{
|
|
42
42
|
"type": "string"
|
|
43
43
|
},
|
|
44
|
-
{
|
|
45
|
-
"type": "number"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"type": "integer"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"type": "boolean"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"type": "array"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"type": "object"
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"type": "null"
|
|
61
|
-
},
|
|
62
44
|
{
|
|
63
45
|
"$ref": "#/$defs/NestedTransform"
|
|
64
46
|
}
|
package/README.md
CHANGED
|
@@ -1,38 +1,191 @@
|
|
|
1
1
|
# isc-transforms-mcp
|
|
2
2
|
|
|
3
3
|
> **SailPoint ISC transform authoring, right inside Claude.**
|
|
4
|
-
>
|
|
4
|
+
> Catalog · Build · Lint · Validate · Explain — without leaving your AI assistant.
|
|
5
5
|
|
|
6
6
|
[](https://www.npmjs.com/package/isc-transforms-mcp)
|
|
7
7
|
[](LICENSE)
|
|
8
8
|
[](https://modelcontextprotocol.io)
|
|
9
9
|
|
|
10
|
+
> **Community Project** — This is an independent, community-built tool. It is not affiliated with, endorsed by, or supported by SailPoint Technologies.
|
|
11
|
+
|
|
10
12
|
---
|
|
11
13
|
|
|
12
14
|
## What is this?
|
|
13
15
|
|
|
14
16
|
`isc-transforms-mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server that gives Claude a complete SailPoint ISC transform authoring toolkit. Instead of handwriting transform JSON, debugging schema errors in the UI, and cross-referencing the docs manually — you describe what you need in plain English and Claude does the rest.
|
|
15
17
|
|
|
16
|
-
**Free (Personal)** —
|
|
17
|
-
**Enterprise (coming soon)** — All
|
|
18
|
+
**Free (Personal)** — 11 tools. No ISC tenant needed. Works entirely on your laptop.
|
|
19
|
+
**Enterprise (coming soon)** — All 15 tools, including live tenant operations (list, get, find references). See [Enterprise Plan](#-enterprise-plan).
|
|
20
|
+
|
|
21
|
+
> **Note on "no tenant needed":** The MCP server itself runs as a local Node.js process on your machine — it makes no calls to any ISC tenant for the free tools. Your transform JSON is validated and linted entirely locally. Claude (the AI) is a cloud service provided by Anthropic, so your conversation — including any transform JSON you share — passes through Anthropic's infrastructure as part of normal Claude usage, the same as any other Claude session.
|
|
18
22
|
|
|
19
23
|
---
|
|
20
24
|
|
|
21
|
-
##
|
|
25
|
+
## How to Use — Strict Prompt Pattern
|
|
26
|
+
|
|
27
|
+
Copy and adapt this exact structure. The explicit step numbering and the **DO NOT** rules are what keep Claude on track.
|
|
22
28
|
|
|
23
29
|
```
|
|
24
|
-
|
|
25
|
-
|
|
30
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
31
|
+
|
|
32
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
33
|
+
operation type you plan to use. Do not build anything yet.
|
|
34
|
+
|
|
35
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
36
|
+
and structure from the catalog response in Step 1.
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
38
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
39
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
40
|
+
isc_transforms_lint again.
|
|
41
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
42
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
30
43
|
|
|
31
|
-
|
|
32
|
-
→ valid: true
|
|
44
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
33
45
|
|
|
34
|
-
|
|
35
|
-
|
|
46
|
+
[describe your transform requirement here]
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Real-World Prompt Examples
|
|
52
|
+
|
|
53
|
+
### Lifecycle State from Start/End Dates
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
57
|
+
|
|
58
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
59
|
+
operation type you plan to use. Do not build anything yet.
|
|
60
|
+
|
|
61
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
62
|
+
and structure from the catalog response in Step 1.
|
|
63
|
+
|
|
64
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
65
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
66
|
+
isc_transforms_lint again.
|
|
67
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
68
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
69
|
+
|
|
70
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
71
|
+
|
|
72
|
+
Transform requirement:
|
|
73
|
+
Create a transform named cloudLifecycleState with requiresPeriodicRefresh: true.
|
|
74
|
+
Logic:
|
|
75
|
+
- startDate > today → prehire
|
|
76
|
+
- startDate ≤ today AND endDate ≥ today AND employeeStatus = LEAVE → leave
|
|
77
|
+
- startDate ≤ today AND endDate ≥ today AND employeeStatus = ACTIVE → active
|
|
78
|
+
- endDate < today AND endDate ≥ today-30 → inactive
|
|
79
|
+
- endDate < today-30 → archived
|
|
80
|
+
Inputs (source: SimplifyAuth-HRMS):
|
|
81
|
+
- startDate attribute: startDate, format: dd-MM-yyyy
|
|
82
|
+
- endDate attribute: endDate, format: dd-MM-yyyy
|
|
83
|
+
- leaveStatus attribute: employeeStatus
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Temporary Password from Account Attributes
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
90
|
+
|
|
91
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
92
|
+
operation type you plan to use. Do not build anything yet.
|
|
93
|
+
|
|
94
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
95
|
+
and structure from the catalog response in Step 1.
|
|
96
|
+
|
|
97
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
98
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
99
|
+
isc_transforms_lint again.
|
|
100
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
101
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
102
|
+
|
|
103
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
104
|
+
|
|
105
|
+
Transform requirement:
|
|
106
|
+
Build a static transform named Temporary-Password that produces:
|
|
107
|
+
${firstInitialLower}${lastNameProper}${hireMonth}RstP*!7
|
|
108
|
+
Variables (source: HRMS):
|
|
109
|
+
- firstInitialLower = lowercase first character of first_name
|
|
110
|
+
- lastNameProper = uppercase first char of last_name + remaining chars of last_name
|
|
111
|
+
- hireMonth = 2-digit month extracted from hire_date (input format: yyyy-MM-dd)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Username with Uniqueness Counter
|
|
115
|
+
|
|
116
|
+
```
|
|
117
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
118
|
+
|
|
119
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
120
|
+
operation type you plan to use. Do not build anything yet.
|
|
121
|
+
|
|
122
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
123
|
+
and structure from the catalog response in Step 1.
|
|
124
|
+
|
|
125
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
126
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
127
|
+
isc_transforms_lint again.
|
|
128
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
129
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
130
|
+
|
|
131
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
132
|
+
|
|
133
|
+
Transform requirement:
|
|
134
|
+
Create a username transform named username-generator.
|
|
135
|
+
- Pattern: first initial + last name, all lowercase, max 20 chars
|
|
136
|
+
- If the username is already taken, append a uniqueCounter
|
|
137
|
+
- Source: Workday HR, attributes: firstName and lastName
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Email from Name Attributes
|
|
141
|
+
|
|
142
|
+
```
|
|
143
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
144
|
+
|
|
145
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
146
|
+
operation type you plan to use. Do not build anything yet.
|
|
147
|
+
|
|
148
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
149
|
+
and structure from the catalog response in Step 1.
|
|
150
|
+
|
|
151
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
152
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
153
|
+
isc_transforms_lint again.
|
|
154
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
155
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
156
|
+
|
|
157
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
158
|
+
|
|
159
|
+
Transform requirement:
|
|
160
|
+
Build a transform named email-generator that produces: firstname.lastname@acme.com
|
|
161
|
+
- Normalize both names (remove diacritics, lowercase) before concatenating
|
|
162
|
+
- Source: Active Directory, attributes: givenName and sn
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Fallback Chain
|
|
166
|
+
|
|
167
|
+
```
|
|
168
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
169
|
+
|
|
170
|
+
Step 1 — Call isc_transforms_operationCatalog to retrieve the full spec for every
|
|
171
|
+
operation type you plan to use. Do not build anything yet.
|
|
172
|
+
|
|
173
|
+
Step 2 — Build the complete transform JSON using only the attribute names, types,
|
|
174
|
+
and structure from the catalog response in Step 1.
|
|
175
|
+
|
|
176
|
+
Step 3 — Call isc_transforms_lint on the JSON you built.
|
|
177
|
+
- If lint returns errors or warnings, fix every one of them and call
|
|
178
|
+
isc_transforms_lint again.
|
|
179
|
+
- Repeat until isc_transforms_lint returns ok: true with 0 errors and 0 warnings.
|
|
180
|
+
- DO NOT output the final JSON until lint passes completely.
|
|
181
|
+
|
|
182
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
183
|
+
|
|
184
|
+
Transform requirement:
|
|
185
|
+
Build a transform named email-fallback that returns the first non-empty value from:
|
|
186
|
+
1. workEmail (source: HR System)
|
|
187
|
+
2. personalEmail (source: HR System)
|
|
188
|
+
3. Static fallback: noemail@acme.com
|
|
36
189
|
```
|
|
37
190
|
|
|
38
191
|
---
|
|
@@ -74,35 +227,52 @@ Look for the 🔨 hammer icon at the bottom of the chat input — that confirms
|
|
|
74
227
|
|
|
75
228
|
```
|
|
76
229
|
"Use isc_ping to check the server"
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
Use MCP tools only. Follow these steps exactly and do not skip any:
|
|
234
|
+
Step 1 — Call isc_transforms_operationCatalog for the operations you need. Do not build yet.
|
|
235
|
+
Step 2 — Build the transform JSON using only specs from Step 1.
|
|
236
|
+
Step 3 — Call isc_transforms_lint. Fix all errors and repeat until ok: true, 0 errors, 0 warnings.
|
|
237
|
+
DO NOT output JSON until lint passes completely.
|
|
238
|
+
Step 4 — Output the final lint-clean JSON and nothing else.
|
|
239
|
+
|
|
240
|
+
Transform requirement: Build a transform that lowercases the first name from Workday HR
|
|
241
|
+
(source: Workday, attribute: firstName). Name it lowercase-firstname.
|
|
80
242
|
```
|
|
81
243
|
|
|
82
244
|
---
|
|
83
245
|
|
|
84
246
|
## Free Tools (Phase 1 — No ISC Tenant Required)
|
|
85
247
|
|
|
86
|
-
All
|
|
248
|
+
All 11 tools below run locally on your machine with no ISC tenant connection required. No ISC credentials needed.
|
|
87
249
|
|
|
88
|
-
### `
|
|
89
|
-
|
|
250
|
+
### `isc_transforms_operationCatalog`
|
|
251
|
+
**Start here when building any transform.** Returns everything needed in a single call — all 39 operation types with type key, title, doc URL, required attributes, scaffold JSON, and full JSON Schema. Optionally filter to specific operation types to keep the response focused.
|
|
90
252
|
|
|
91
253
|
```
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
254
|
+
"Show me the full spec for dateCompare and dateMath"
|
|
255
|
+
"What attributes does accountAttribute require?"
|
|
256
|
+
"Give me the scaffold for a conditional transform"
|
|
95
257
|
```
|
|
96
258
|
|
|
97
|
-
### `isc_transforms_validate`
|
|
98
|
-
Two-stage JSON Schema validation powered by AJV and the official SailPoint JSON Schema pack. Stage 1 validates the root shape (name, type, attributes). Stage 2 validates against the operation-specific schema for all 44 operation types, including attribute requirements, allowed values, and nested transform shapes.
|
|
99
|
-
|
|
100
259
|
### `isc_transforms_lint`
|
|
101
|
-
27 semantic lint rules that go beyond what JSON Schema can check. Catches issues like multiple source references on `accountAttribute`, using `delimiter` instead of `separator` on `join`, invalid regex patterns, `requiresPeriodicRefresh`
|
|
260
|
+
27 semantic lint rules that go beyond what JSON Schema can check. Catches issues like wrong case on nested transform types (`datemath` vs `dateMath`), multiple source references on `accountAttribute`, using `delimiter` instead of `separator` on `join`, invalid regex patterns, `requiresPeriodicRefresh` as a string instead of boolean, missing `default` key on `lookup`, and more. Always run this after building — fix all errors before treating the JSON as final.
|
|
261
|
+
|
|
262
|
+
### `isc_transforms_validate`
|
|
263
|
+
Two-stage JSON Schema validation powered by AJV and the official SailPoint JSON Schema pack. Stage 1 validates the root shape (name, type, attributes). Stage 2 validates against the operation-specific schema for all 39 operation types, including attribute requirements, allowed values, and nested transform shapes.
|
|
102
264
|
|
|
103
265
|
### `isc_transforms_explain`
|
|
104
266
|
Takes a broken transform (or an ISC error message) and returns plain-English guidance plus an auto-corrected JSON where the fix is automatable. Handles 13 known error patterns including boolean coercion, deprecated attribute names, conditional operator restrictions, and missing required fields.
|
|
105
267
|
|
|
268
|
+
### `isc_transforms_generate`
|
|
269
|
+
Converts a plain-English requirement into a SailPoint ISC transform JSON payload. Returns the transform JSON, confidence level, alternative operations, and a link to the official SailPoint docs. Best used as a quick starting point — always follow up with `isc_transforms_operationCatalog` and `isc_transforms_lint`.
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
"Generate a transform that converts an EPOCH timestamp to ISO8601 date format"
|
|
273
|
+
"Create a username transform using first initial plus last name with a uniqueness counter"
|
|
274
|
+
```
|
|
275
|
+
|
|
106
276
|
### `isc_transforms_suggestPattern`
|
|
107
277
|
Matches your description against 10 named nested-transform patterns and returns a complete working example. Patterns include: fallback email chain, conditional department → building code, username first-initial + last-name + uniqueCounter, EPOCH → ISO8601, normalize + lowercase name, country code → region lookup, email from first.last@domain, date compare for lifecycle state, E.164 phone normalisation, and split to extract domain from email.
|
|
108
278
|
|
|
@@ -110,13 +280,13 @@ Matches your description against 10 named nested-transform patterns and returns
|
|
|
110
280
|
Generates 2–5 illustrative test cases for a transform: happy-path, null input, and edge cases. Each test case includes a description, sample input, expected output, and notes. Use these directly in the ISC transform tester.
|
|
111
281
|
|
|
112
282
|
### `isc_transforms_catalog`
|
|
113
|
-
Returns all
|
|
283
|
+
Returns all 39 supported SailPoint ISC transform operation types with: type key, human-readable title, required attributes, doc URL, schema coverage flag, and scaffold example. Use `isc_transforms_operationCatalog` instead when you need full specs — this is the lightweight index.
|
|
114
284
|
|
|
115
285
|
### `isc_transforms_getSchema`
|
|
116
|
-
Returns the full JSON Schema (Draft 2020-12) for any operation type
|
|
286
|
+
Returns the full JSON Schema (Draft 2020-12) for any single operation type. Useful when you want to inspect exactly which attributes are required, optional, and what their constraints are.
|
|
117
287
|
|
|
118
288
|
### `isc_transforms_scaffold`
|
|
119
|
-
Generates a valid minimal starter JSON payload for any operation type. Good starting point before
|
|
289
|
+
Generates a valid minimal starter JSON payload for any operation type. Good starting point before filling in actual values.
|
|
120
290
|
|
|
121
291
|
### `isc_ping`
|
|
122
292
|
Health check. Returns the server status, active license tier, and whether Phase 2 tools are available.
|
|
@@ -130,7 +300,7 @@ The 4 tools below connect to a live ISC tenant and require an **Enterprise licen
|
|
|
130
300
|
| Tool | What it does |
|
|
131
301
|
|---|---|
|
|
132
302
|
| `isc_transforms_list` | `GET /v3/transforms` — fetch all transforms from your tenant |
|
|
133
|
-
| `isc_transforms_get` | `GET /v3/transforms/:id` — fetch a single transform |
|
|
303
|
+
| `isc_transforms_get` | `GET /v3/transforms/:id` — fetch a single transform by ID |
|
|
134
304
|
| `isc_transforms_upsert` | Create or update with dry-run preview + JSON-Patch diff + lint before write |
|
|
135
305
|
| `isc_transforms_findReferences` | Scan identity profiles for every place a transform is referenced |
|
|
136
306
|
|
|
@@ -186,7 +356,6 @@ All settings are optional for Personal use. Enterprise users need the `ISC_*` cr
|
|
|
186
356
|
| `ISC_PAT_CLIENT_ID` | — | PAT client ID for authentication |
|
|
187
357
|
| `ISC_PAT_CLIENT_SECRET` | — | PAT client secret for authentication |
|
|
188
358
|
| `ISC_ACCESS_TOKEN` | — | Pre-minted bearer token (alternative to PAT) |
|
|
189
|
-
| `ISC_MCP_MODE` | `readonly` | Set to `write` to allow `isc_transforms_upsert` to apply changes |
|
|
190
359
|
| `ISC_MCP_DEBUG` | `false` | Enable verbose debug logging to stderr |
|
|
191
360
|
| `ISC_TIMEOUT_MS` | `30000` | HTTP request timeout in milliseconds |
|
|
192
361
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "isc-transforms-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "MCP server for SailPoint Identity Security Cloud (ISC) Transform authoring — scaffold, strict lint, catalog, and safe upsert to live tenants.",
|
|
6
6
|
"author": {
|