Repository navigation
Releases
mainframe-mcp-server v3.0.0
Added
-
Official packaging with supply-chain assurance.
- Signed, SBOM-attached container image: releases publish
ghcr.io/notharshhaa/mainframe-mcp-server(version/minor/SHA tags), built
non-root with OCI labels and an SSE healthcheck, signed with Sigstore
keyless cosign (sign-by-digest, verified in-workflow), with BuildKit
provenance (mode=max) and SBOM attestations, plus SPDX and CycloneDX
SBOMs attached to the GitHub release. - npm provenance: the package now publishes with
--provenance
(SLSA build provenance via GitHub Actions OIDC) — visible on npmjs.com
and verifiable withnpm audit signatures. - Helm chart (
helm/mainframe-mcp-server/): SSE deployment hardened by
default (non-root, read-only root filesystem, dropped capabilities, no
service-account token), with values for the z/OSMF connection, BYO
credentials Secret, policy-as-code ConfigMap mount, SIEM audit sinks,
probes, ingress, and optional persistence for the file audit sink. - Release assets: npm tarball, package + image SBOMs (with cosign
signatures), and a signedsha256sums.txtmanifest on every GitHub
release. - The Dockerfile keeps
USER node; docker-compose now ships hardened
defaults (read_only,cap_drop: ALL,no-new-privileges, tmpfs) and
defaults to the official image; CI builds the image on every push and
fails if it runs as root.
- Signed, SBOM-attached container image: releases publish
-
Console & JES coverage. MVS operator commands through the z/OSMF Console
API using a dynamically activated extended MCS console
(ZOSMF_CONSOLE_NAME):issue_console_command(with follow-up message
collection),get_console_messages(operations-log tail),hold_job/
release_job(JES2$HJ/$OJ),cancel_job(z/OSMF jobs API),
get_wlm_status(D WLMdisplays),ims_command(IMS commands via the
system console),get_hsm_activity(DFSMShsm recall/migration activity
filtered from the operations log), andanalyze_logrec(submits a canned
EREPIFCEREPreport job against LOGREC and summarizes record counts,
abend codes, and modules). All command-issuing tools are governed writes. -
Batch scheduler integration.
scheduler_job_statusqueries Control-M,
CA 7, and IBM Workload Automation through their REST APIs
(SCHEDULER_ADAPTERSJSON with per-scheduler host/token/path templates and
best-effort status normalization).job_dependenciesanalyzes a job's JCL
(inline or from spool) into dataset flows — inputs, outputs, updates per
step plus PROC references — for predecessor/successor analysis. -
Messaging & data coverage.
mq_queue_statusandmq_channel_status
via the IBM MQ REST admin API (MQ_REST_HOST/_PORT/_USER/_PASSWORD),
with queue high-water warnings and non-running channel flagging.
get_volume_spacereads DASD volume space from the z/OSMF Storage
Management Interface and flags volumes belowSTORAGE_FREE_THRESHOLD. -
CICS statistics and gated actions.
get_cics_region_stats(CMCI
CICSRegionattributes), plus governed-writecics_newcopyand
cics_disable_transactionimplemented as CMCI resource actions
(CICS TS 5.6+ with actions enabled). -
Dump summarization.
summarize_dumpdigests CEEDUMP / SYSMDUMP /
SYSUDUMP output — system and user completion codes, failing module and
offset, PSW, Language Environment conditions, section inventory, and
suggested next steps — from spool or a dataset, without shipping raw hex. -
Capacity and MLC cost attribution.
get_job_capacityparses per-step
and total CPU from JESMSGLG (IEF374I/IEF376I) and estimates MSU consumption
fromCAPACITY_MSU_RATING;estimate_mlc_costattributes MLC cost from
CPU/MSU usingMLC_MSU_MONTHLY_PRICE, with pricing assumptions surfaced in
the output. -
Multi-environment support. Define named systems (DEV/TEST/UAT/PROD,
multiple LPARs/sysplexes) in the policy file or viaZOSMF_ENVIRONMENTS
(JSON); the baseZOSMF_*connection remains available asdefault. Every
tool accepts an optionalenvironmentargument; each environment carries
its own credentials, lazily-cached Zowe session, and policy surface —
per-environmentreadOnly(e.g. read-only PROD),allowedRoles, and
per-user environment restrictions.ZOSMF_ENV/defaults.environment
select the default. Newlist_environmentstool enumerates targets. -
Policy-as-code and RBAC (
SECURITY_POLICY_FILE). A single YAML file
maps roles to tool allow/deny globs, dataset/USS patterns, per-role
read-only mode and change-ticket patterns, and read line caps (with role
inheritance: child allow lists replace, deny lists and readOnly accumulate
downward).users:maps usernames to roles per environment; unmapped users
fall back todefaults.roleor fail closed.${env:VAR}interpolation
keeps credentials out of the file; any structural error aborts startup.
Env-var controls continue to apply — the policy only narrows. New
whoamitool shows the acting identity, resolved role, and effective
policy. On SSE, theX-MCP-Userrequest header supplies the acting
identity for gateway deployments. -
Audit & SIEM export. One structured JSON audit record per tool call with
correlation id, user, MCP client (from theinitializehandshake),
transport, environment, redacted arguments, resource references, outcome
(success/error/blocked), error code, duration, and result size. Sinks:
NDJSON file (SECURITY_AUDIT_FILE), Splunk HEC
(SECURITY_AUDIT_SPLUNK_URL/_TOKEN), generic HTTP webhook
(SECURITY_AUDIT_WEBHOOK_URL/_TOKEN), and OpenTelemetry OTLP/JSON
(SECURITY_AUDIT_OTLP_URL). HTTP sinks are batched, time-boxed, and
best-effort — a dead collector never blocks a tool call. Records are
SHA-256 hash-chained (tamper-evident);npm run verify:audit(or
node tools/verify-audit-log.mjs) detects any edit, deletion, or
reordering and reports the first broken sequence number. -
Data protection. Built-in redaction rules (
ssn,credit_cardwith
Luhn validation,email,secretssuch asPASSWORD=/api_key:
assignments,jwt,private_keyblocks) mask job output and dataset/USS
reads by default (SECURITY_DATA_PROTECTION, style via
SECURITY_REDACTION_STYLE, rule set viaSECURITY_REDACTION_RULES);
masked output carries an explicit[data protection: …]footer. Policy
classifications:add per-resource behavior: rule overrides, hard line
caps (maxLines), head/tailsampleof bulk reads, and role-gated access
to classified resources. -
Policy roles can now require (or relax) change tickets per role:
changeTicketPatternon a role overrides
SECURITY_CHANGE_TICKET_PATTERNfor that role'ssubmit_jclcalls.
Supply-chain assurance
-
npm package published with SLSA provenance — verify on npmjs.com ("Provenance" badge)
-
Container image:
ghcr.io/notharshhaa/mainframe-mcp-server:3.0.0— signed with Sigstore keyless; verify with:cosign verify ghcr.io/notharshhaa/mainframe-mcp-server:3.0.0 \ --certificate-identity-regexp 'https://github.com/@notharshhaa/mainframe-mcp-server/\.github/workflows/release\.yml@refs/tags/' \ --certificate-oidc-issuer https://token.actions.githubusercontent.com -
SBOMs (SPDX + CycloneDX) attached below for the npm package and the container image
-
sha256sums.txtlists all assets; its signature is insha256sums.txt.sig
mainframe-mcp-server v2.8.0
Added
- Per-user identity (PassTicket propagation). Set
ZOSMF_USER_IDand the
server generates z/OSMF PassTickets for the end user and runs every z/OSMF
tool call under that identity, so RACF sees who asked instead of the shared
service account. Tickets are cached (8-minute TTL) and regenerated
transparently. - mTLS client-certificate auth via
ZOSMF_CERT+ZOSMF_CERT_KEY(PEM
paths,cert-pemsessions). - JWT / APIML token auth:
ZOSMF_TOKEN_TYPE=JWT|APIML|BEARERis sent as
Authorization: Bearerfor API Mediation Layer and OIDC-issued tokens;
ZOSMF_TOKEN_FILEallows vault/agent-side token injection. - Zowe team config profile import:
ZOWE_TEAM_CONFIG(+ZOSMF_PROFILE)
fills any z/OSMF setting not provided via env, including@secureentries
stored in the config file. - Governed writes for
submit_jcl:- JCL pre-flight scan (
SECURITY_JCL_SCAN, default on) blocking IDCAMS
DELETE, IEFBR14DISP=(...,DELETE)dataset deletes, blocked utilities
(ADRDSSU,ICKDSF,IEHINITTby default, extendable via
SECURITY_BLOCKED_PROGRAMS), and restricted job classes; WARN findings
(e.g. IDCAMSALTER) block in strict mode (SECURITY_JCL_SCAN_STRICT). - Change-ticket requirement (
SECURITY_CHANGE_TICKET_PATTERN). - Change-window enforcement (
SECURITY_WRITE_WINDOW,SECURITY_WRITE_DAYS,
SECURITY_WRITE_WINDOW_TZ) with overnight-window and IANA-timezone
support. dryRun=trueonsubmit_jclreports structure checks, scan findings, and
the governance outcome without submitting.- Human-in-the-loop approval (
SECURITY_WRITE_APPROVAL=true): validated
submissions become pending and a newapprove_writetool executes
them with a one-time, 10-minute token after human review; the change
window is re-checked at approval time.
- JCL pre-flight scan (
Changed
SECURITY_READ_ONLYnow defaults totrue. Write tools (submit_jcl,
approve_write) are blocked unless you explicitly set
SECURITY_READ_ONLY=false. This is the safe default for AI-agent access.- Boolean env fallbacks moved out of the env reader into the Zod schema so
defaults are applied uniformly (previously inline fallbacks shadowed the
schema). - Documentation overhaul: z/OS prerequisites, per-tool read/write labelling,
per-user identity & SSO, governed writes, trust & prompt-injection model,
intelligence-tool mechanics, limits, troubleshooting/FAQ, and an honest
comparison table.
Commits in this release (v2.5.0...v2.8.0)
| Commit | Summary |
|---|---|
b3ed26f |
Fix trend detection, security-gate tool names, JOB-card rewrites, wait-loop resilience, USS pluralization, SSE startup errors (+ regression tests) |
734f542 |
Documentation accuracy: Zowe attribution, token-first examples, transports, trademarks |
cebe728 |
Website redesign: Operations Console theme, upgraded header, logo & favicon |
95bbcd8 |
Project hygiene: CI workflow, SECURITY/CONTRIBUTING/CHANGELOG, README overhaul, read-only default, demo animation |
476b270 |
Per-user identity (PassTicket/mTLS/JWT-APIML/team config) and governed writes (scan, tickets, windows, approval) |
20ca60b |
Website: enterprise identity & governed-writes sections |
d700aef |
Release 2.8.0: version bump across package/server/schema/docs and npm + MCP registry release workflow |
Fixed
predict_batch_failures: trend detection was dead code (always reported
STABLE) and its labels were inverted. Trends are now computed by
comparing failure counts in the newest vs oldest third of the look-back
window.summarize_abendsandlist_db2_subsystems: the security gate and audit
log used stale tool names (mainframe_*), soSECURITY_ALLOWED_TOOLS/
SECURITY_BLOCKED_TOOLSdid not match them.submit_jcl:CLASS=/NOTIFY=JOB-card overrides matched anywhere in the
JCL and could corrupt the card when aNOTIFYvalue contained$.
Overrides are now scoped to the//name JOBstatement.submit_jclwait mode no longer fails the whole call on a transient
polling error after a successful submission.- USS listings pluralized "directory" incorrectly ("1 directoryy").
- Failure analysis now recognizes the
COND CODE=nnnnspelling of IEF142I. - SSE transport: a port-in-use error now aborts startup with a clean fatal
message instead of an unhandled exception.