@purplesquirrel/ibmz-mcp-server 1.0.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.
- package/.github/dependabot.yml +21 -0
- package/.github/workflows/ci.yml +36 -0
- package/LICENSE +21 -0
- package/README.md +217 -0
- package/TROUBLESHOOTING.md +241 -0
- package/docs/index.html +761 -0
- package/docs/specs.html +646 -0
- package/index.js +681 -0
- package/linkedin-post.md +90 -0
- package/package.json +29 -0
- package/test-keyprotect.js +46 -0
- package/test-watsonx-generation.js +72 -0
package/docs/index.html
ADDED
|
@@ -0,0 +1,761 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>IBM Z MCP Server - Mainframe Integration for Claude</title>
|
|
7
|
+
<meta name="description" content="MCP server enabling Claude to interact with IBM Z mainframe services - Key Protect HSM and z/OS Connect">
|
|
8
|
+
<meta property="og:title" content="IBM Z MCP Server">
|
|
9
|
+
<meta property="og:description" content="Enterprise mainframe integration for Claude Code - HSM key management and z/OS Connect APIs">
|
|
10
|
+
<meta property="og:type" content="website">
|
|
11
|
+
<meta property="og:url" content="https://purplesquirrelmedia.github.io/ibmz-mcp-server/">
|
|
12
|
+
<link rel="stylesheet" href="https://unpkg.com/@carbon/styles@1.50.0/css/styles.min.css">
|
|
13
|
+
<style>
|
|
14
|
+
:root {
|
|
15
|
+
--ibm-blue: #0f62fe;
|
|
16
|
+
--ibm-blue-dark: #0043ce;
|
|
17
|
+
--ibm-gray-100: #161616;
|
|
18
|
+
--ibm-gray-90: #262626;
|
|
19
|
+
--ibm-gray-80: #393939;
|
|
20
|
+
--ibm-green: #24a148;
|
|
21
|
+
--ibm-purple: #8a3ffc;
|
|
22
|
+
--ibm-cyan: #1192e8;
|
|
23
|
+
--ibm-magenta: #d12771;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
* {
|
|
27
|
+
margin: 0;
|
|
28
|
+
padding: 0;
|
|
29
|
+
box-sizing: border-box;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
body {
|
|
33
|
+
font-family: 'IBM Plex Sans', -apple-system, BlinkMacSystemFont, sans-serif;
|
|
34
|
+
background: var(--ibm-gray-100);
|
|
35
|
+
color: #f4f4f4;
|
|
36
|
+
line-height: 1.6;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.hero {
|
|
40
|
+
background: linear-gradient(135deg, var(--ibm-gray-100) 0%, var(--ibm-gray-90) 50%, #1a1a2e 100%);
|
|
41
|
+
padding: 6rem 2rem;
|
|
42
|
+
text-align: center;
|
|
43
|
+
border-bottom: 1px solid var(--ibm-gray-80);
|
|
44
|
+
position: relative;
|
|
45
|
+
overflow: hidden;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.hero::before {
|
|
49
|
+
content: '';
|
|
50
|
+
position: absolute;
|
|
51
|
+
top: 0;
|
|
52
|
+
left: 0;
|
|
53
|
+
right: 0;
|
|
54
|
+
bottom: 0;
|
|
55
|
+
background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23393939' fill-opacity='0.15'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E");
|
|
56
|
+
opacity: 0.5;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.hero-content {
|
|
60
|
+
position: relative;
|
|
61
|
+
z-index: 1;
|
|
62
|
+
max-width: 900px;
|
|
63
|
+
margin: 0 auto;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.badge {
|
|
67
|
+
display: inline-block;
|
|
68
|
+
background: var(--ibm-purple);
|
|
69
|
+
color: white;
|
|
70
|
+
padding: 0.5rem 1rem;
|
|
71
|
+
border-radius: 4px;
|
|
72
|
+
font-size: 0.875rem;
|
|
73
|
+
font-weight: 600;
|
|
74
|
+
margin-bottom: 1.5rem;
|
|
75
|
+
letter-spacing: 0.5px;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
h1 {
|
|
79
|
+
font-size: 3.5rem;
|
|
80
|
+
font-weight: 300;
|
|
81
|
+
margin-bottom: 1.5rem;
|
|
82
|
+
letter-spacing: -1px;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
h1 strong {
|
|
86
|
+
font-weight: 600;
|
|
87
|
+
color: var(--ibm-cyan);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.hero p {
|
|
91
|
+
font-size: 1.25rem;
|
|
92
|
+
color: #c6c6c6;
|
|
93
|
+
max-width: 700px;
|
|
94
|
+
margin: 0 auto 2rem;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.hero-buttons {
|
|
98
|
+
display: flex;
|
|
99
|
+
gap: 1rem;
|
|
100
|
+
justify-content: center;
|
|
101
|
+
flex-wrap: wrap;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.btn {
|
|
105
|
+
display: inline-flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: 0.5rem;
|
|
108
|
+
padding: 1rem 2rem;
|
|
109
|
+
border-radius: 0;
|
|
110
|
+
font-size: 1rem;
|
|
111
|
+
font-weight: 500;
|
|
112
|
+
text-decoration: none;
|
|
113
|
+
transition: all 0.2s;
|
|
114
|
+
border: none;
|
|
115
|
+
cursor: pointer;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.btn-primary {
|
|
119
|
+
background: var(--ibm-blue);
|
|
120
|
+
color: white;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.btn-primary:hover {
|
|
124
|
+
background: var(--ibm-blue-dark);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.btn-secondary {
|
|
128
|
+
background: transparent;
|
|
129
|
+
color: white;
|
|
130
|
+
border: 1px solid #6f6f6f;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
.btn-secondary:hover {
|
|
134
|
+
background: var(--ibm-gray-80);
|
|
135
|
+
border-color: #8d8d8d;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.architecture {
|
|
139
|
+
background: var(--ibm-gray-90);
|
|
140
|
+
padding: 5rem 2rem;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.container {
|
|
144
|
+
max-width: 1200px;
|
|
145
|
+
margin: 0 auto;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
.section-title {
|
|
149
|
+
font-size: 2rem;
|
|
150
|
+
font-weight: 400;
|
|
151
|
+
margin-bottom: 3rem;
|
|
152
|
+
text-align: center;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.arch-diagram {
|
|
156
|
+
background: var(--ibm-gray-100);
|
|
157
|
+
border: 1px solid var(--ibm-gray-80);
|
|
158
|
+
border-radius: 8px;
|
|
159
|
+
padding: 3rem;
|
|
160
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
161
|
+
font-size: 0.9rem;
|
|
162
|
+
overflow-x: auto;
|
|
163
|
+
margin-bottom: 2rem;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
.arch-diagram pre {
|
|
167
|
+
color: #78a9ff;
|
|
168
|
+
line-height: 1.8;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.features {
|
|
172
|
+
padding: 5rem 2rem;
|
|
173
|
+
background: var(--ibm-gray-100);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.feature-grid {
|
|
177
|
+
display: grid;
|
|
178
|
+
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
|
179
|
+
gap: 2rem;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.feature-card {
|
|
183
|
+
background: var(--ibm-gray-90);
|
|
184
|
+
border: 1px solid var(--ibm-gray-80);
|
|
185
|
+
border-radius: 8px;
|
|
186
|
+
padding: 2rem;
|
|
187
|
+
transition: all 0.3s;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
.feature-card:hover {
|
|
191
|
+
border-color: var(--ibm-blue);
|
|
192
|
+
transform: translateY(-2px);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.feature-icon {
|
|
196
|
+
width: 48px;
|
|
197
|
+
height: 48px;
|
|
198
|
+
margin-bottom: 1rem;
|
|
199
|
+
display: flex;
|
|
200
|
+
align-items: center;
|
|
201
|
+
justify-content: center;
|
|
202
|
+
border-radius: 8px;
|
|
203
|
+
font-size: 1.5rem;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.icon-key {
|
|
207
|
+
background: rgba(138, 63, 252, 0.2);
|
|
208
|
+
color: var(--ibm-purple);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.icon-mainframe {
|
|
212
|
+
background: rgba(17, 146, 232, 0.2);
|
|
213
|
+
color: var(--ibm-cyan);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.icon-security {
|
|
217
|
+
background: rgba(36, 161, 72, 0.2);
|
|
218
|
+
color: var(--ibm-green);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.icon-api {
|
|
222
|
+
background: rgba(209, 39, 113, 0.2);
|
|
223
|
+
color: var(--ibm-magenta);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.feature-card h3 {
|
|
227
|
+
font-size: 1.25rem;
|
|
228
|
+
font-weight: 500;
|
|
229
|
+
margin-bottom: 0.75rem;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.feature-card p {
|
|
233
|
+
color: #a8a8a8;
|
|
234
|
+
font-size: 0.95rem;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
.tools {
|
|
238
|
+
padding: 5rem 2rem;
|
|
239
|
+
background: var(--ibm-gray-90);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.tool-section {
|
|
243
|
+
margin-bottom: 3rem;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
.tool-section h3 {
|
|
247
|
+
font-size: 1.5rem;
|
|
248
|
+
margin-bottom: 1.5rem;
|
|
249
|
+
color: var(--ibm-cyan);
|
|
250
|
+
display: flex;
|
|
251
|
+
align-items: center;
|
|
252
|
+
gap: 0.75rem;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.tools-table {
|
|
256
|
+
width: 100%;
|
|
257
|
+
border-collapse: collapse;
|
|
258
|
+
background: var(--ibm-gray-100);
|
|
259
|
+
border-radius: 8px;
|
|
260
|
+
overflow: hidden;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
.tools-table th,
|
|
264
|
+
.tools-table td {
|
|
265
|
+
padding: 1rem 1.5rem;
|
|
266
|
+
text-align: left;
|
|
267
|
+
border-bottom: 1px solid var(--ibm-gray-80);
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.tools-table th {
|
|
271
|
+
background: var(--ibm-gray-80);
|
|
272
|
+
font-weight: 500;
|
|
273
|
+
font-size: 0.875rem;
|
|
274
|
+
text-transform: uppercase;
|
|
275
|
+
letter-spacing: 0.5px;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.tools-table td:first-child {
|
|
279
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
280
|
+
color: var(--ibm-cyan);
|
|
281
|
+
font-size: 0.9rem;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
.tools-table tr:hover {
|
|
285
|
+
background: var(--ibm-gray-90);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
.quickstart {
|
|
289
|
+
padding: 5rem 2rem;
|
|
290
|
+
background: var(--ibm-gray-100);
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
.code-block {
|
|
294
|
+
background: var(--ibm-gray-90);
|
|
295
|
+
border: 1px solid var(--ibm-gray-80);
|
|
296
|
+
border-radius: 8px;
|
|
297
|
+
padding: 1.5rem;
|
|
298
|
+
margin: 1.5rem 0;
|
|
299
|
+
overflow-x: auto;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.code-block pre {
|
|
303
|
+
font-family: 'IBM Plex Mono', monospace;
|
|
304
|
+
font-size: 0.9rem;
|
|
305
|
+
color: #78a9ff;
|
|
306
|
+
line-height: 1.6;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
.code-block .comment {
|
|
310
|
+
color: #6f6f6f;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
.code-block .string {
|
|
314
|
+
color: #42be65;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
.code-block .key {
|
|
318
|
+
color: #be95ff;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
.step {
|
|
322
|
+
display: flex;
|
|
323
|
+
gap: 1.5rem;
|
|
324
|
+
margin-bottom: 2rem;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.step-number {
|
|
328
|
+
width: 40px;
|
|
329
|
+
height: 40px;
|
|
330
|
+
background: var(--ibm-blue);
|
|
331
|
+
color: white;
|
|
332
|
+
border-radius: 50%;
|
|
333
|
+
display: flex;
|
|
334
|
+
align-items: center;
|
|
335
|
+
justify-content: center;
|
|
336
|
+
font-weight: 600;
|
|
337
|
+
flex-shrink: 0;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.step-content h4 {
|
|
341
|
+
font-size: 1.1rem;
|
|
342
|
+
margin-bottom: 0.5rem;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
.step-content p {
|
|
346
|
+
color: #a8a8a8;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.concepts {
|
|
350
|
+
padding: 5rem 2rem;
|
|
351
|
+
background: var(--ibm-gray-90);
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
.concept-grid {
|
|
355
|
+
display: grid;
|
|
356
|
+
grid-template-columns: repeat(auto-fit, minmax(400px, 1fr));
|
|
357
|
+
gap: 2rem;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
.concept-card {
|
|
361
|
+
background: var(--ibm-gray-100);
|
|
362
|
+
border: 1px solid var(--ibm-gray-80);
|
|
363
|
+
border-radius: 8px;
|
|
364
|
+
padding: 2rem;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.concept-card h3 {
|
|
368
|
+
font-size: 1.25rem;
|
|
369
|
+
margin-bottom: 1rem;
|
|
370
|
+
color: var(--ibm-purple);
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.concept-card h4 {
|
|
374
|
+
font-size: 1rem;
|
|
375
|
+
margin: 1rem 0 0.5rem;
|
|
376
|
+
color: #f4f4f4;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.concept-card ul {
|
|
380
|
+
color: #a8a8a8;
|
|
381
|
+
margin-left: 1.25rem;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.concept-card li {
|
|
385
|
+
margin-bottom: 0.25rem;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
footer {
|
|
389
|
+
background: var(--ibm-gray-100);
|
|
390
|
+
border-top: 1px solid var(--ibm-gray-80);
|
|
391
|
+
padding: 3rem 2rem;
|
|
392
|
+
text-align: center;
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
footer p {
|
|
396
|
+
color: #6f6f6f;
|
|
397
|
+
font-size: 0.9rem;
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
footer a {
|
|
401
|
+
color: var(--ibm-cyan);
|
|
402
|
+
text-decoration: none;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
footer a:hover {
|
|
406
|
+
text-decoration: underline;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
@media (max-width: 768px) {
|
|
410
|
+
h1 {
|
|
411
|
+
font-size: 2.5rem;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.hero {
|
|
415
|
+
padding: 4rem 1.5rem;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.feature-grid,
|
|
419
|
+
.concept-grid {
|
|
420
|
+
grid-template-columns: 1fr;
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
.step {
|
|
424
|
+
flex-direction: column;
|
|
425
|
+
gap: 1rem;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
</style>
|
|
429
|
+
</head>
|
|
430
|
+
<body>
|
|
431
|
+
<section class="hero">
|
|
432
|
+
<div class="hero-content">
|
|
433
|
+
<span class="badge">MCP Server v1.0</span>
|
|
434
|
+
<h1><strong>IBM Z</strong> MCP Server</h1>
|
|
435
|
+
<p>Enterprise mainframe integration for Claude Code. HSM-backed key management and z/OS Connect REST APIs to CICS, IMS, and batch programs.</p>
|
|
436
|
+
<div class="hero-buttons">
|
|
437
|
+
<a href="https://github.com/PurpleSquirrelMedia/ibmz-mcp-server" class="btn btn-primary">
|
|
438
|
+
<svg width="20" height="20" fill="currentColor" viewBox="0 0 16 16"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
|
|
439
|
+
View on GitHub
|
|
440
|
+
</a>
|
|
441
|
+
<a href="specs.html" class="btn btn-secondary">
|
|
442
|
+
Technical Specs
|
|
443
|
+
</a>
|
|
444
|
+
</div>
|
|
445
|
+
</div>
|
|
446
|
+
</section>
|
|
447
|
+
|
|
448
|
+
<section class="architecture">
|
|
449
|
+
<div class="container">
|
|
450
|
+
<h2 class="section-title">Architecture</h2>
|
|
451
|
+
<div class="arch-diagram">
|
|
452
|
+
<pre>
|
|
453
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
454
|
+
│ Claude Code (Opus 4.5) │
|
|
455
|
+
│ Primary Reasoning Agent │
|
|
456
|
+
└─────────────────────────────────┬───────────────────────────────────────────┘
|
|
457
|
+
│
|
|
458
|
+
▼
|
|
459
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
460
|
+
│ IBM Z MCP Server │
|
|
461
|
+
│ Model Context Protocol Bridge │
|
|
462
|
+
└──────────────┬──────────────────────────────────┬───────────────────────────┘
|
|
463
|
+
│ │
|
|
464
|
+
▼ ▼
|
|
465
|
+
┌──────────────────────────────┐ ┌──────────────────────────────────────────┐
|
|
466
|
+
│ IBM Key Protect │ │ z/OS Connect EE │
|
|
467
|
+
│ ┌────────────────────┐ │ │ ┌────────────────────────────────┐ │
|
|
468
|
+
│ │ FIPS 140-2 L3 HSM │ │ │ │ REST API Gateway │ │
|
|
469
|
+
│ │ ┌──────────────┐ │ │ │ └──────────────┬─────────────────┘ │
|
|
470
|
+
│ │ │ Root Keys │ │ │ │ │ │
|
|
471
|
+
│ │ │ (KEKs) │ │ │ │ ┌──────────────┼─────────────────┐ │
|
|
472
|
+
│ │ └──────────────┘ │ │ │ │ │ │ │
|
|
473
|
+
│ │ ┌──────────────┐ │ │ │ ▼ ▼ ▼ │
|
|
474
|
+
│ │ │ Standard Keys│ │ │ │ ┌─────┐ ┌─────────┐ ┌─────────┐ │
|
|
475
|
+
│ │ │ (DEKs) │ │ │ │ │CICS │ │ IMS │ │ Batch │ │
|
|
476
|
+
│ │ └──────────────┘ │ │ │ └─────┘ └─────────┘ └─────────┘ │
|
|
477
|
+
│ └────────────────────┘ │ │ │
|
|
478
|
+
└──────────────────────────────┘ └──────────────────────────────────────────┘
|
|
479
|
+
</pre>
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
</section>
|
|
483
|
+
|
|
484
|
+
<section class="features">
|
|
485
|
+
<div class="container">
|
|
486
|
+
<h2 class="section-title">Features</h2>
|
|
487
|
+
<div class="feature-grid">
|
|
488
|
+
<div class="feature-card">
|
|
489
|
+
<div class="feature-icon icon-key">
|
|
490
|
+
<svg width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M0 8a4 4 0 0 1 7.465-2H14a.5.5 0 0 1 .354.146l1.5 1.5a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0L13 9.207l-.646.647a.5.5 0 0 1-.708 0L11 9.207l-.646.647a.5.5 0 0 1-.708 0L9 9.207l-.646.647A.5.5 0 0 1 8 10h-.535A4 4 0 0 1 0 8zm4-3a3 3 0 1 0 2.712 4.285A.5.5 0 0 1 7.163 9h.63l.853-.854a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.793-.793-1-1h-6.63a.5.5 0 0 1-.451-.285A3 3 0 0 0 4 5z"/><path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/></svg>
|
|
491
|
+
</div>
|
|
492
|
+
<h3>HSM-Backed Key Management</h3>
|
|
493
|
+
<p>Enterprise-grade encryption with FIPS 140-2 Level 3 certified Hardware Security Modules. Keys never leave the HSM hardware.</p>
|
|
494
|
+
</div>
|
|
495
|
+
<div class="feature-card">
|
|
496
|
+
<div class="feature-icon icon-mainframe">
|
|
497
|
+
<svg width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M5 0a.5.5 0 0 1 .5.5V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2A2.5 2.5 0 0 1 14 4.5h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14a2.5 2.5 0 0 1-2.5 2.5v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14A2.5 2.5 0 0 1 2 11.5H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2A2.5 2.5 0 0 1 4.5 2V.5A.5.5 0 0 1 5 0zm-.5 3A1.5 1.5 0 0 0 3 4.5v7A1.5 1.5 0 0 0 4.5 13h7a1.5 1.5 0 0 0 1.5-1.5v-7A1.5 1.5 0 0 0 11.5 3h-7zM5 6.5A1.5 1.5 0 0 1 6.5 5h3A1.5 1.5 0 0 1 11 6.5v3A1.5 1.5 0 0 1 9.5 11h-3A1.5 1.5 0 0 1 5 9.5v-3zM6.5 6a.5.5 0 0 0-.5.5v3a.5.5 0 0 0 .5.5h3a.5.5 0 0 0 .5-.5v-3a.5.5 0 0 0-.5-.5h-3z"/></svg>
|
|
498
|
+
</div>
|
|
499
|
+
<h3>z/OS Connect Integration</h3>
|
|
500
|
+
<p>REST APIs to mainframe programs. Call CICS transactions, IMS programs, and batch jobs directly from Claude.</p>
|
|
501
|
+
</div>
|
|
502
|
+
<div class="feature-card">
|
|
503
|
+
<div class="feature-icon icon-security">
|
|
504
|
+
<svg width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M5.338 1.59a61.44 61.44 0 0 0-2.837.856.481.481 0 0 0-.328.39c-.554 4.157.726 7.19 2.253 9.188a10.725 10.725 0 0 0 2.287 2.233c.346.244.652.42.893.533.12.057.218.095.293.118a.55.55 0 0 0 .101.025.615.615 0 0 0 .1-.025c.076-.023.174-.061.294-.118.24-.113.547-.29.893-.533a10.726 10.726 0 0 0 2.287-2.233c1.527-1.997 2.807-5.031 2.253-9.188a.48.48 0 0 0-.328-.39c-.651-.213-1.75-.56-2.837-.855C9.552 1.29 8.531 1.067 8 1.067c-.53 0-1.552.223-2.662.524zM5.072.56C6.157.265 7.31 0 8 0s1.843.265 2.928.56c1.11.3 2.229.655 2.887.87a1.54 1.54 0 0 1 1.044 1.262c.596 4.477-.787 7.795-2.465 9.99a11.775 11.775 0 0 1-2.517 2.453 7.159 7.159 0 0 1-1.048.625c-.28.132-.581.24-.829.24s-.548-.108-.829-.24a7.158 7.158 0 0 1-1.048-.625 11.777 11.777 0 0 1-2.517-2.453C1.928 10.487.545 7.169 1.141 2.692A1.54 1.54 0 0 1 2.185 1.43 62.456 62.456 0 0 1 5.072.56z"/><path d="M10.854 5.146a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708 0l-1.5-1.5a.5.5 0 1 1 .708-.708L7.5 7.793l2.646-2.647a.5.5 0 0 1 .708 0z"/></svg>
|
|
505
|
+
</div>
|
|
506
|
+
<h3>Envelope Encryption</h3>
|
|
507
|
+
<p>Industry-standard envelope encryption pattern. Root keys wrap data encryption keys for secure key hierarchy management.</p>
|
|
508
|
+
</div>
|
|
509
|
+
<div class="feature-card">
|
|
510
|
+
<div class="feature-icon icon-api">
|
|
511
|
+
<svg width="24" height="24" fill="currentColor" viewBox="0 0 16 16"><path d="M6 9a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 0 1h-3A.5.5 0 0 1 6 9zM3.854 4.146a.5.5 0 1 0-.708.708L4.793 6.5 3.146 8.146a.5.5 0 1 0 .708.708l2-2a.5.5 0 0 0 0-.708l-2-2z"/><path d="M2 1a2 2 0 0 0-2 2v10a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V3a2 2 0 0 0-2-2H2zm12 1a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h12z"/></svg>
|
|
512
|
+
</div>
|
|
513
|
+
<h3>JSON to COBOL Mapping</h3>
|
|
514
|
+
<p>z/OS Connect automatically maps JSON payloads to COBOL copybooks. Modernize mainframe access without changing legacy code.</p>
|
|
515
|
+
</div>
|
|
516
|
+
</div>
|
|
517
|
+
</div>
|
|
518
|
+
</section>
|
|
519
|
+
|
|
520
|
+
<section class="tools">
|
|
521
|
+
<div class="container">
|
|
522
|
+
<h2 class="section-title">Available Tools</h2>
|
|
523
|
+
|
|
524
|
+
<div class="tool-section">
|
|
525
|
+
<h3>
|
|
526
|
+
<svg width="20" height="20" fill="currentColor" viewBox="0 0 16 16"><path d="M0 8a4 4 0 0 1 7.465-2H14a.5.5 0 0 1 .354.146l1.5 1.5a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0L13 9.207l-.646.647a.5.5 0 0 1-.708 0L11 9.207l-.646.647a.5.5 0 0 1-.708 0L9 9.207l-.646.647A.5.5 0 0 1 8 10h-.535A4 4 0 0 1 0 8zm4-3a3 3 0 1 0 2.712 4.285A.5.5 0 0 1 7.163 9h.63l.853-.854a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.646-.647a.5.5 0 0 1 .708 0l.646.647.793-.793-1-1h-6.63a.5.5 0 0 1-.451-.285A3 3 0 0 0 4 5z"/><path d="M4 8a1 1 0 1 1-2 0 1 1 0 0 1 2 0z"/></svg>
|
|
527
|
+
Key Protect (HSM Key Management)
|
|
528
|
+
</h3>
|
|
529
|
+
<table class="tools-table">
|
|
530
|
+
<thead>
|
|
531
|
+
<tr>
|
|
532
|
+
<th>Tool</th>
|
|
533
|
+
<th>Description</th>
|
|
534
|
+
</tr>
|
|
535
|
+
</thead>
|
|
536
|
+
<tbody>
|
|
537
|
+
<tr>
|
|
538
|
+
<td>key_protect_list_keys</td>
|
|
539
|
+
<td>List all encryption keys in your Key Protect instance</td>
|
|
540
|
+
</tr>
|
|
541
|
+
<tr>
|
|
542
|
+
<td>key_protect_create_key</td>
|
|
543
|
+
<td>Create a new root key (KEK) or standard key (DEK)</td>
|
|
544
|
+
</tr>
|
|
545
|
+
<tr>
|
|
546
|
+
<td>key_protect_get_key</td>
|
|
547
|
+
<td>Get metadata and details of a specific key</td>
|
|
548
|
+
</tr>
|
|
549
|
+
<tr>
|
|
550
|
+
<td>key_protect_wrap_key</td>
|
|
551
|
+
<td>Wrap (encrypt) a DEK with a root key for envelope encryption</td>
|
|
552
|
+
</tr>
|
|
553
|
+
<tr>
|
|
554
|
+
<td>key_protect_unwrap_key</td>
|
|
555
|
+
<td>Unwrap (decrypt) a wrapped DEK using a root key</td>
|
|
556
|
+
</tr>
|
|
557
|
+
<tr>
|
|
558
|
+
<td>key_protect_rotate_key</td>
|
|
559
|
+
<td>Rotate a root key while maintaining access to old versions</td>
|
|
560
|
+
</tr>
|
|
561
|
+
<tr>
|
|
562
|
+
<td>key_protect_delete_key</td>
|
|
563
|
+
<td>Delete a key (WARNING: irreversible)</td>
|
|
564
|
+
</tr>
|
|
565
|
+
<tr>
|
|
566
|
+
<td>key_protect_get_key_policies</td>
|
|
567
|
+
<td>Get policies (rotation, dual auth) applied to a key</td>
|
|
568
|
+
</tr>
|
|
569
|
+
</tbody>
|
|
570
|
+
</table>
|
|
571
|
+
</div>
|
|
572
|
+
|
|
573
|
+
<div class="tool-section">
|
|
574
|
+
<h3>
|
|
575
|
+
<svg width="20" height="20" fill="currentColor" viewBox="0 0 16 16"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0zM4.5 7.5a.5.5 0 0 0 0 1h5.793l-2.147 2.146a.5.5 0 0 0 .708.708l3-3a.5.5 0 0 0 0-.708l-3-3a.5.5 0 1 0-.708.708L10.293 7.5H4.5z"/></svg>
|
|
576
|
+
watsonx.ai (Foundation Models)
|
|
577
|
+
</h3>
|
|
578
|
+
<p style="color: #a8a8a8; margin-bottom: 1rem;">Available via <a href="https://github.com/PurpleSquirrelMedia/watsonx-mcp-server" style="color: var(--ibm-cyan);">watsonx-mcp-server</a></p>
|
|
579
|
+
<table class="tools-table">
|
|
580
|
+
<thead>
|
|
581
|
+
<tr>
|
|
582
|
+
<th>Tool</th>
|
|
583
|
+
<th>Description</th>
|
|
584
|
+
</tr>
|
|
585
|
+
</thead>
|
|
586
|
+
<tbody>
|
|
587
|
+
<tr>
|
|
588
|
+
<td>watsonx_generate</td>
|
|
589
|
+
<td>Text generation with Granite, Llama, Mistral models</td>
|
|
590
|
+
</tr>
|
|
591
|
+
<tr>
|
|
592
|
+
<td>watsonx_embeddings</td>
|
|
593
|
+
<td>Generate 768-dim embeddings for RAG applications</td>
|
|
594
|
+
</tr>
|
|
595
|
+
<tr>
|
|
596
|
+
<td>watsonx_chat</td>
|
|
597
|
+
<td>Multi-turn conversations with foundation models</td>
|
|
598
|
+
</tr>
|
|
599
|
+
<tr>
|
|
600
|
+
<td>watsonx_list_models</td>
|
|
601
|
+
<td>List available models (Granite 4, Code, Guardian)</td>
|
|
602
|
+
</tr>
|
|
603
|
+
</tbody>
|
|
604
|
+
</table>
|
|
605
|
+
</div>
|
|
606
|
+
|
|
607
|
+
<div class="tool-section">
|
|
608
|
+
<h3>
|
|
609
|
+
<svg width="20" height="20" fill="currentColor" viewBox="0 0 16 16"><path d="M5 0a.5.5 0 0 1 .5.5V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2h1V.5a.5.5 0 0 1 1 0V2A2.5 2.5 0 0 1 14 4.5h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14v1h1.5a.5.5 0 0 1 0 1H14a2.5 2.5 0 0 1-2.5 2.5v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14h-1v1.5a.5.5 0 0 1-1 0V14A2.5 2.5 0 0 1 2 11.5H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2v-1H.5a.5.5 0 0 1 0-1H2A2.5 2.5 0 0 1 4.5 2V.5A.5.5 0 0 1 5 0z"/></svg>
|
|
610
|
+
z/OS Connect (Mainframe Integration)
|
|
611
|
+
</h3>
|
|
612
|
+
<table class="tools-table">
|
|
613
|
+
<thead>
|
|
614
|
+
<tr>
|
|
615
|
+
<th>Tool</th>
|
|
616
|
+
<th>Description</th>
|
|
617
|
+
</tr>
|
|
618
|
+
</thead>
|
|
619
|
+
<tbody>
|
|
620
|
+
<tr>
|
|
621
|
+
<td>zos_connect_list_services</td>
|
|
622
|
+
<td>List all available mainframe services (REST APIs)</td>
|
|
623
|
+
</tr>
|
|
624
|
+
<tr>
|
|
625
|
+
<td>zos_connect_get_service</td>
|
|
626
|
+
<td>Get service details and OpenAPI specification</td>
|
|
627
|
+
</tr>
|
|
628
|
+
<tr>
|
|
629
|
+
<td>zos_connect_call_service</td>
|
|
630
|
+
<td>Call a mainframe service (CICS, IMS, batch)</td>
|
|
631
|
+
</tr>
|
|
632
|
+
<tr>
|
|
633
|
+
<td>zos_connect_list_apis</td>
|
|
634
|
+
<td>List API requester configurations (outbound calls)</td>
|
|
635
|
+
</tr>
|
|
636
|
+
<tr>
|
|
637
|
+
<td>zos_connect_health</td>
|
|
638
|
+
<td>Check z/OS Connect server health status</td>
|
|
639
|
+
</tr>
|
|
640
|
+
</tbody>
|
|
641
|
+
</table>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</section>
|
|
645
|
+
|
|
646
|
+
<section class="quickstart">
|
|
647
|
+
<div class="container">
|
|
648
|
+
<h2 class="section-title">Quick Start</h2>
|
|
649
|
+
|
|
650
|
+
<div class="step">
|
|
651
|
+
<div class="step-number">1</div>
|
|
652
|
+
<div class="step-content">
|
|
653
|
+
<h4>Install Dependencies</h4>
|
|
654
|
+
<p>Clone the repository and install npm packages</p>
|
|
655
|
+
<div class="code-block">
|
|
656
|
+
<pre><span class="comment"># Clone the repository</span>
|
|
657
|
+
git clone https://github.com/PurpleSquirrelMedia/ibmz-mcp-server.git
|
|
658
|
+
cd ibmz-mcp-server
|
|
659
|
+
|
|
660
|
+
<span class="comment"># Install dependencies</span>
|
|
661
|
+
npm install</pre>
|
|
662
|
+
</div>
|
|
663
|
+
</div>
|
|
664
|
+
</div>
|
|
665
|
+
|
|
666
|
+
<div class="step">
|
|
667
|
+
<div class="step-number">2</div>
|
|
668
|
+
<div class="step-content">
|
|
669
|
+
<h4>Configure Claude Code</h4>
|
|
670
|
+
<p>Add the MCP server to your ~/.claude.json configuration</p>
|
|
671
|
+
<div class="code-block">
|
|
672
|
+
<pre>{
|
|
673
|
+
<span class="key">"mcpServers"</span>: {
|
|
674
|
+
<span class="key">"ibmz"</span>: {
|
|
675
|
+
<span class="key">"type"</span>: <span class="string">"stdio"</span>,
|
|
676
|
+
<span class="key">"command"</span>: <span class="string">"node"</span>,
|
|
677
|
+
<span class="key">"args"</span>: [<span class="string">"/path/to/ibmz-mcp-server/index.js"</span>],
|
|
678
|
+
<span class="key">"env"</span>: {
|
|
679
|
+
<span class="key">"IBM_CLOUD_API_KEY"</span>: <span class="string">"your-api-key"</span>,
|
|
680
|
+
<span class="key">"KEY_PROTECT_INSTANCE_ID"</span>: <span class="string">"your-instance-id"</span>
|
|
681
|
+
}
|
|
682
|
+
}
|
|
683
|
+
}
|
|
684
|
+
}</pre>
|
|
685
|
+
</div>
|
|
686
|
+
</div>
|
|
687
|
+
</div>
|
|
688
|
+
|
|
689
|
+
<div class="step">
|
|
690
|
+
<div class="step-number">3</div>
|
|
691
|
+
<div class="step-content">
|
|
692
|
+
<h4>Restart Claude Code</h4>
|
|
693
|
+
<p>The IBM Z tools will be available after restart</p>
|
|
694
|
+
<div class="code-block">
|
|
695
|
+
<pre><span class="comment"># Restart Claude Code to load the new MCP server</span>
|
|
696
|
+
claude
|
|
697
|
+
|
|
698
|
+
<span class="comment"># Example usage</span>
|
|
699
|
+
User: List my encryption keys in Key Protect
|
|
700
|
+
Claude: [Uses key_protect_list_keys tool]</pre>
|
|
701
|
+
</div>
|
|
702
|
+
</div>
|
|
703
|
+
</div>
|
|
704
|
+
</div>
|
|
705
|
+
</section>
|
|
706
|
+
|
|
707
|
+
<section class="concepts">
|
|
708
|
+
<div class="container">
|
|
709
|
+
<h2 class="section-title">Key Concepts</h2>
|
|
710
|
+
<div class="concept-grid">
|
|
711
|
+
<div class="concept-card">
|
|
712
|
+
<h3>Envelope Encryption</h3>
|
|
713
|
+
<p>Industry-standard pattern for managing encryption at scale:</p>
|
|
714
|
+
<h4>Root Keys (KEK)</h4>
|
|
715
|
+
<ul>
|
|
716
|
+
<li>Stored in HSM hardware - never exported</li>
|
|
717
|
+
<li>Used to wrap (encrypt) data encryption keys</li>
|
|
718
|
+
<li>Can be rotated without re-encrypting data</li>
|
|
719
|
+
</ul>
|
|
720
|
+
<h4>Data Encryption Keys (DEK)</h4>
|
|
721
|
+
<ul>
|
|
722
|
+
<li>Used to encrypt actual data</li>
|
|
723
|
+
<li>Wrapped by root keys for protection</li>
|
|
724
|
+
<li>Stored alongside encrypted data</li>
|
|
725
|
+
</ul>
|
|
726
|
+
</div>
|
|
727
|
+
<div class="concept-card">
|
|
728
|
+
<h3>z/OS Connect</h3>
|
|
729
|
+
<p>RESTful access to mainframe programs:</p>
|
|
730
|
+
<h4>Supported Subsystems</h4>
|
|
731
|
+
<ul>
|
|
732
|
+
<li>CICS - Online transaction processing</li>
|
|
733
|
+
<li>IMS - Hierarchical database and transactions</li>
|
|
734
|
+
<li>Batch - Scheduled job processing</li>
|
|
735
|
+
<li>Db2 - Relational database access</li>
|
|
736
|
+
</ul>
|
|
737
|
+
<h4>Automatic Mapping</h4>
|
|
738
|
+
<ul>
|
|
739
|
+
<li>JSON to COBOL copybook conversion</li>
|
|
740
|
+
<li>OpenAPI specification generation</li>
|
|
741
|
+
<li>No changes to legacy code required</li>
|
|
742
|
+
</ul>
|
|
743
|
+
</div>
|
|
744
|
+
</div>
|
|
745
|
+
</div>
|
|
746
|
+
</section>
|
|
747
|
+
|
|
748
|
+
<footer>
|
|
749
|
+
<div class="container">
|
|
750
|
+
<p>
|
|
751
|
+
Built by <a href="https://github.com/PurpleSquirrelMedia">Matthew Karsten</a> |
|
|
752
|
+
<a href="https://github.com/PurpleSquirrelMedia/ibmz-mcp-server">GitHub Repository</a> |
|
|
753
|
+
MIT License
|
|
754
|
+
</p>
|
|
755
|
+
<p style="margin-top: 0.5rem;">
|
|
756
|
+
IBM, IBM Z, z/OS, CICS, IMS, Key Protect, and watsonx are trademarks of IBM Corporation.
|
|
757
|
+
</p>
|
|
758
|
+
</div>
|
|
759
|
+
</footer>
|
|
760
|
+
</body>
|
|
761
|
+
</html>
|