{"server":{"name":"steelframe","version":"1.0.0"},"lane":"persistent","instructions":"SteelFrame: a real z/OS-style mainframe engine (JES2 batch, CICS online, VSAM/DB2, CA-7/Control-M scheduler). Everything you do here is PERSISTENT and visible in the SteelFrame web as your userid. Two uses. (1) Developer loop: check_source / upload_source / compile_program / run_program, then the JES2 tools (submit_job, wait_job, read_spool) and the dataset tools. (2) Reference ORACLE for modernization comparison: SteelFrame RETURNS what the mainframe holds and does — files (decode_records, export_bundle, export_state), a batch run's joblog + output datasets (run_batch), online screens ONE keystroke at a time (cics_open_session → cics_send → cics_close_session, or cics_run_script), scheduler cycles (sched_demand / sched_order → sched_wait_cycle). It never judges equivalence and never converts code: replay the same inputs against your modernized system and compare on your side. Isolation: create_workspace (give it a name), then pass workspace:<id> on any tool call to run it on a copy of the estate (the live estate never changes); reset_workspace re-baselines it. Creation is ASYNCHRONOUS: if the response says status:CREATING, poll get_workspace every 10-15 s until status=RUNNING before using it (tools are refused 409 NOT READY until then) — never call create_workspace again meanwhile (the same name returns the in-flight one). Seeding: load_dataset / stage_gdg (rows + copybook, or hex). Determinism: clock:{fixed:...} on run_batch / cics_open_session / cics_run_script pins the program clock; JOBIDs and JES timestamps stay real — decide on your side what to ignore.","workspaceProxy":"/api/workspaces/{id}/call","tools":[{"name":"whoami","description":"The user behind the presented bearer token (authoritative token→user mapping; both web surfaces refresh their cached user from this at boot)","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":null,"_binding":{"id":"whoami","method":"GET","path":"/api/me","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"upload_source","description":"MCP composite upload_source: batch-write source members into real cataloged datasets under the caller HLQ (allocate-if-missing PO FB80). kind cbl→<HLQ>.SOURCE, cpy→<HLQ>.COPYLIB, jcl→<HLQ>.JCL","inputSchema":{"type":"object","properties":{"items":{"description":"array of { member, lines, kind: 'cbl'|'cpy'|'jcl', dsn (optional override) }","type":"array","items":{"type":"object","properties":{"member":{"type":"string"},"lines":{"type":"array","items":{"type":"string"}},"kind":{"type":"string","enum":["cbl","cpy","jcl"]},"dsn":{"type":"string"}},"required":["member","lines"]}},"hlq":{"type":"string","description":"target dataset-name prefix: one or more dotted qualifiers, e.g. SYNUT or SYN.UT (default: your userid)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["items"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"mcpUploadSource","method":"POST","path":"/api/mcp/upload","pathParams":[],"queryParams":[],"bodyParams":["items","hlq"],"extraParams":["workspace"]}},{"name":"compile_program","description":"MCP composite compile_program: one-shot compile+link of a COBOL program through the REAL pipeline — source into <HLQ>.SOURCE, a generated EXEC IGYWCL deck through JES2, per-step RCs, diagnostics parsed from the genuine SYSPRINT listing; the load module lands in <HLQ>.LOADLIB (persistent, visible in the web as your job/datasets). Oracle use: loadlib + syslib install the module INTO an estate library (e.g. AWS.M2.CARDDEMO.LOADLIB) with the estate's copybooks","inputSchema":{"type":"object","properties":{"program":{"type":"string","description":"program/member name (1-8 chars) — becomes GOPGM and the load-module name"},"lines":{"type":"array","items":{"type":"string"},"description":"COBOL source card images (omit to compile an existing member)"},"copybooks":{"description":"array of { member, lines } staged into <HLQ>.COPYLIB and searched via SYSLIB (optional)","type":"array","items":{"type":"object","properties":{"member":{"type":"string"},"lines":{"type":"array","items":{"type":"string"}}},"required":["member","lines"]}},"parm":{"type":"string","description":"compile PARM, e.g. 'SQL' (DB2 precompile) or 'CICS' (translator); auto-detected from the source when omitted"},"hlq":{"type":"string","description":"dataset-name prefix: one or more dotted qualifiers, e.g. SYNUT or SYN.UT (default: your userid)"},"sourceDsn":{"type":"string","description":"source PDS override (default <HLQ>.SOURCE)"},"sourceMember":{"type":"string","description":"source member override (default: program)"},"loadlib":{"type":"string","description":"target load library override (default <HLQ>.LOADLIB) — install the module into an estate library, e.g. AWS.M2.CARDDEMO.LOADLIB"},"syslib":{"description":"copybook library search order: an ARRAY of cataloged PDS names (one string, comma-separated, also accepted; any other type is a 400); SYS2.COBOL.COPYLIB is appended — default <HLQ>.COPYLIB + SYS2.COBOL.COPYLIB","anyOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}]},"timeout":{"description":"seconds to wait for the compile job (default 120, max 300); on timeout the jobid is returned for wait_job re-polling","type":"integer"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["program"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"mcpCompileProgram","method":"POST","path":"/api/mcp/compile","pathParams":[],"queryParams":[],"bodyParams":["program","lines","copybooks","parm","hlq","sourceDsn","sourceMember","loadlib","syslib","timeout"],"extraParams":["workspace"]}},{"name":"run_program","description":"MCP composite run_program: generate+submit a GO deck (EXEC PGM= with STEPLIB <HLQ>.LOADLIB and DDs from a simple JSON spec) through JES2, wait, and return the RC plus the SYSOUT spool contents","inputSchema":{"type":"object","properties":{"program":{"type":"string","description":"load-module name in the STEPLIB (compile_program output)"},"parm":{"type":"string","description":"PARM= string passed to the program (optional)"},"dd":{"description":"DD spec object: { DDNAME: {lines: [...]} (instream) | {dsn, disp?, attrs?} | {sysout: true} | {dummy: true} } — STEPLIB and a default SYSOUT DD are generated","type":"object"},"hlq":{"type":"string","description":"STEPLIB HLQ (default: your userid → <HLQ>.LOADLIB)"},"steplib":{"type":"string","description":"explicit STEPLIB dataset override"},"timeout":{"description":"seconds to wait (default 120, max 300)","type":"integer"},"tail":{"description":"max lines of each SYSOUT file returned (default 500)","type":"integer"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["program"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"mcpRunProgram","method":"POST","path":"/api/mcp/run","pathParams":[],"queryParams":[],"bodyParams":["program","parm","dd","hlq","steplib","timeout","tail"],"extraParams":["workspace"]}},{"name":"system_info","description":"Instance information: product/release, uptime, data root, subsystem status, engine-wide security posture","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"system.read","_binding":{"id":"systemInfo","method":"GET","path":"/api/system/info","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"list_datasets","description":"List catalog entries matching an MVS pattern (or a name prefix); the whole list by default, a page with total/truncated/next when max or from is given","inputSchema":{"type":"object","properties":{"pattern":{"type":"string","description":"MVS pattern (* = one qualifier chunk, ** = any, % = one char); default <user>.**"},"prefix":{"type":"string","description":"dataset-name prefix instead of a pattern: SYN.BANK lists SYN.BANK and every SYN.BANK.* entry"},"max":{"type":"string","description":"page size (1-5000); giving max or from returns { datasets, total, from, count, truncated, next } instead of the bare array"},"from":{"type":"string","description":"first entry of the page (0-based)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"listDatasets","method":"GET","path":"/api/datasets","pathParams":[],"queryParams":["pattern","prefix","max","from"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"search_catalog","description":"Search the catalog: dataset names, member names, and optionally member text content","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"MVS dataset pattern (default **) or bare string matched as **string** (query is an alias)"},"member":{"type":"string","description":"member-name pattern (* wildcard) — lists matching members of matching PO datasets"},"content":{"type":"string","description":"substring grep (case-insensitive) over member text of matching PO datasets"},"max":{"type":"string","description":"result cap per section (default 200, max 1000)"},"from":{"type":"string","description":"first dataset of the page (0-based) — page the datasets section with total/next"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"},"query":{"type":"string","description":"alias of q: MVS dataset pattern (default **) or bare string matched as **string** (query is an alias)"},"pattern":{"type":"string","description":"alias of q: MVS dataset pattern (default **) or bare string matched as **string** (query is an alias)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"searchCatalog","method":"GET","path":"/api/search","pathParams":[],"queryParams":["q","member","content","max","from"],"bodyParams":[],"extraParams":["workspace"],"aliases":{"query":"q","pattern":"q"}}},{"name":"check_source","description":"Compile-check source through the engine compiler pipeline (no artifacts); diagnostics cannot drift from a real compile step","inputSchema":{"type":"object","properties":{"language":{"type":"string","description":"'COBOL' (default) or 'JCL'"},"lines":{"type":"array","items":{"type":"string"},"description":"source card images"},"syslib":{"description":"array of PO dataset names for COPY resolution (optional)","type":"array","items":{"type":"string"}},"parm":{"type":"string","description":"compile PARM string, e.g. 'CICS' to force the translator (optional)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["lines"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"checkSource","method":"POST","path":"/api/check","pathParams":[],"queryParams":[],"bodyParams":["language","lines","syslib","parm"],"extraParams":["workspace"]}},{"name":"allocate_dataset","description":"Allocate (catalog) a new dataset; omitted BLKSIZE is system-determined","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"attrs":{"description":"{ dsorg, recfm, lrecl, ... }","type":"object"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"allocateDataset","method":"POST","path":"/api/dataset","pathParams":[],"queryParams":[],"bodyParams":["dsn","attrs"],"extraParams":["workspace"]}},{"name":"dataset_info","description":"Dataset info (PO datasets include memberList)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"getDataset","method":"GET","path":"/api/dataset/{dsn}","pathParams":["dsn"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"list_members","description":"List the members of a PDS (the memberList of dataset_info on its own): name, changed, size, inUse when another session holds an edit","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"PDS name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"listMembers","method":"GET","path":"/api/dataset/{dsn}/members","pathParams":["dsn"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"delete_dataset","description":"Delete/uncatalog a dataset (VSAM clusters included)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.write","_binding":{"id":"deleteDataset","method":"DELETE","path":"/api/dataset/{dsn}","pathParams":["dsn"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"rename_dataset","description":"Rename a dataset","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"newName":{"type":"string","description":"new dataset name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","newName"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.write","_binding":{"id":"renameDataset","method":"POST","path":"/api/dataset/{dsn}/rename","pathParams":["dsn"],"queryParams":[],"bodyParams":["newName"],"extraParams":["workspace"]}},{"name":"copy_dataset","description":"Copy a dataset","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"newName":{"type":"string","description":"target dataset name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","newName"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"copyDataset","method":"POST","path":"/api/dataset/{dsn}/copy","pathParams":["dsn"],"queryParams":[],"bodyParams":["newName"],"extraParams":["workspace"]}},{"name":"read_records","description":"Read raw records as hex (PS + VSAM; binary-safe for packed/zoned/binary fields). GDG relative names BASE(0)/BASE(-n) resolve to the current/older generation","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name (GDG relative form BASE(0) / BASE(-n) accepted)"},"from":{"type":"string","description":"first record index (default 0)"},"count":{"type":"string","description":"record count (default 1000, max 10000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"readRecords","method":"GET","path":"/api/dataset/{dsn}/records","pathParams":["dsn"],"queryParams":["from","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"write_records","description":"Write raw records from hex (VSAM: keyed writes into the cluster)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"records":{"type":"array","items":{"type":"string"},"description":"array of hex-encoded records"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","records"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"writeRecords","method":"PUT","path":"/api/dataset/{dsn}/records","pathParams":["dsn"],"queryParams":[],"bodyParams":["records"],"extraParams":["workspace"]}},{"name":"read_member_records","description":"Read raw records of a PDS member as hex","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"from":{"type":"string","description":"first record index (default 0)"},"count":{"type":"string","description":"record count (default 1000, max 10000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"readMemberRecords","method":"GET","path":"/api/dataset/{dsn}/records/{member}","pathParams":["dsn","member"],"queryParams":["from","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"write_member_records","description":"Write raw records of a PDS member from hex","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"records":{"type":"array","items":{"type":"string"},"description":"array of hex-encoded records"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member","records"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"writeMemberRecords","method":"PUT","path":"/api/dataset/{dsn}/records/{member}","pathParams":["dsn","member"],"queryParams":[],"bodyParams":["records"],"extraParams":["workspace"]}},{"name":"read_dataset","description":"Read a PS dataset (or browse a VSAM cluster) as text lines; ?view=hex for a hex dump","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"view":{"type":"string","description":"'hex' for a hex/EBCDIC dump"},"start":{"type":"string","description":"first record number for a paged read (0-based; with count, returns { lines, paged, start, total })"},"count":{"type":"string","description":"record count for a paged read (default 1000, max 100000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"readDatasetContent","method":"GET","path":"/api/dataset/{dsn}/member","pathParams":["dsn"],"queryParams":["view","start","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"write_dataset","description":"Write a PS dataset as text lines (converted to EBCDIC at rest). Honours If-Match/ifMatch against the dataset's version tag (412 on stale copy); refused 409 while a job or another edit session holds the dataset (Lane-9 F9.1/F9.2/F9.3)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"lines":{"type":"array","items":{"type":"string"},"description":"array of text lines"},"ifMatch":{"type":"string","description":"version tag from GET (optional; stale copy -> 412)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","lines"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"writeDatasetContent","method":"PUT","path":"/api/dataset/{dsn}/member","pathParams":["dsn"],"queryParams":[],"bodyParams":["lines","ifMatch"],"extraParams":["workspace"]}},{"name":"read_member","description":"Read a PDS member as text lines; ?view=hex for a hex dump","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"view":{"type":"string","description":"'hex' for a hex/EBCDIC dump"},"start":{"type":"string","description":"first record number for a paged read (0-based)"},"count":{"type":"string","description":"record count for a paged read (default 1000, max 100000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"readMember","method":"GET","path":"/api/dataset/{dsn}/member/{member}","pathParams":["dsn","member"],"queryParams":["view","start","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"write_member","description":"Write a PDS member as text lines. Honours If-Match/ifMatch against the member's version tag (412 on stale copy); refused 409 while a job or another edit session holds it (Lane-9 F9.1/F9.2/F9.3). A dataset that is not cataloged is a 404 unless allocate is given (then it is allocated first, PO FB 80 by default — the same allocate-if-missing upload_source does)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"lines":{"type":"array","items":{"type":"string"},"description":"array of text lines"},"ifMatch":{"type":"string","description":"version tag from GET (optional; stale copy -> 412)"},"allocate":{"description":"true = allocate the PDS if it is not cataloged (PO FB LRECL 80), or { dsorg, recfm, lrecl, ... } attributes for it","anyOf":[{"type":"boolean"},{"type":"object"}]},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member","lines"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"writeMember","method":"PUT","path":"/api/dataset/{dsn}/member/{member}","pathParams":["dsn","member"],"queryParams":[],"bodyParams":["lines","ifMatch","allocate"],"extraParams":["workspace"]}},{"name":"delete_member","description":"Delete a PDS member","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.write","_binding":{"id":"deleteMember","method":"DELETE","path":"/api/dataset/{dsn}/member/{member}","pathParams":["dsn","member"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"rename_member","description":"Rename a PDS member","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"newName":{"type":"string","description":"new member name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member","newName"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"renameMember","method":"POST","path":"/api/dataset/{dsn}/member/{member}/rename","pathParams":["dsn","member"],"queryParams":[],"bodyParams":["newName"],"extraParams":["workspace"]}},{"name":"copy_member","description":"Copy a PDS member (optionally to another PDS)","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name"},"member":{"type":"string","description":"member name"},"toDsn":{"type":"string","description":"target PDS (default same)"},"toMember":{"type":"string","description":"target member name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn","member"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"copyMember","method":"POST","path":"/api/dataset/{dsn}/member/{member}/copy","pathParams":["dsn","member"],"queryParams":[],"bodyParams":["toDsn","toMember"],"extraParams":["workspace"]}},{"name":"define_cluster","description":"Define a VSAM cluster (IDCAMS DEFINE CLUSTER equivalent)","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"cluster name"},"type":{"type":"string","description":"KSDS|ESDS|RRDS (default KSDS)"},"keylen":{"description":"key length","type":"integer"},"keyoff":{"description":"key offset","type":"integer"},"maxrecl":{"description":"max record length","type":"integer"},"avgrecl":{"description":"average record length","type":"integer"},"volser":{"type":"string","description":"volume (default WORK01)"},"freespace":{"type":"string","description":"freespace string"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.write","_binding":{"id":"vsamDefine","method":"POST","path":"/api/vsam/define","pathParams":[],"queryParams":[],"bodyParams":["name","type","keylen","keyoff","maxrecl","avgrecl","volser","freespace"],"extraParams":["workspace"]}},{"name":"vsam_info","description":"VSAM cluster attributes and record count","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"cluster name"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"vsamInfo","method":"GET","path":"/api/vsam/info","pathParams":[],"queryParams":["dsn"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"submit_job","description":"Submit JCL to JES2 (internal-reader equivalent)","inputSchema":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"array of JCL card images"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["lines"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"submitJob","method":"POST","path":"/api/submit","pathParams":[],"queryParams":[],"bodyParams":["lines"],"extraParams":["workspace"]}},{"name":"list_jobs","description":"List jobs on the queue/output, most recent first (defaults to YOUR jobs; owner:\"\" lists every job you may see - your own and those that NOTIFY you; the system view needs RACF SPECIAL/OPERATIONS or a JESSPOOL grant)","inputSchema":{"type":"object","properties":{"max":{"type":"string","description":"return at most N jobs (default: all)"},"owner":{"type":"string","description":"only jobs owned by this userid"},"prefix":{"type":"string","description":"only jobs whose jobname matches (exact name or * wildcard, like SDSF PREFIX)"},"skip":{"type":"string","description":"skip the first N matching jobs (paging window for SDSF F8/DOWN)"},"count":{"type":"string","description":"1 = return { total } of matching jobs instead of the list (paging: DOWN MAX)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"listJobs","method":"GET","path":"/api/jobs","pathParams":[],"queryParams":["max","owner","prefix","skip","count"],"bodyParams":[],"extraParams":["workspace"]},"_defaults":{"owner":"$USER"}},{"name":"get_job","description":"Job status + spool file list","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id (JOBnnnnn)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"getJob","method":"GET","path":"/api/jobs/{jobid}","pathParams":["jobid"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"wait_job","description":"Long-poll until the job completes (OUTPUT/OUTPUT-HOLD) or the timeout passes. Long jobs: on { timedOut: true } simply call wait_job again with the same jobid","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"timeout":{"type":"string","description":"seconds (default 60, max 300)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"waitJob","method":"GET","path":"/api/jobs/{jobid}/wait","pathParams":["jobid"],"queryParams":["timeout"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"read_spool","description":"Read one spool file of a job — by its full name from the files list (Dnnnn.STEP.DD) or by the stable STEP.DD / DD handle (the Dnnnn spool-dataset number is assigned per run and shifts between otherwise identical jobs)","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"name":{"type":"string","description":"spool file name (from the files list), or STEP.DD / PROCSTEP.STEP.DD / DD without the Dnnnn prefix"},"tail":{"type":"integer","description":"return only the last N lines (default 500)"},"full":{"type":"boolean","description":"true = the whole file (careful: listings can be long)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid","name"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"readSpool","method":"GET","path":"/api/jobs/{jobid}/file/{name}","pathParams":["jobid","name"],"queryParams":[],"bodyParams":[],"extraParams":["tail","full","workspace"]},"_guard":{"kind":"tail","field":"content","defaultLines":500}},{"name":"list_replies","description":"Outstanding operator replies (WTOR): console messages awaiting a reply, with the owning job","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"listReplies","method":"GET","path":"/api/jes/replies","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"reply_wtor","description":"Answer an outstanding reply (console R nn,text equivalent) — unblocks the waiting job step","inputSchema":{"type":"object","properties":{"replyId":{"type":"string","description":"outstanding reply id (2-digit, leading zero optional)"},"text":{"type":"string","description":"reply text delivered to the waiting program"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["replyId","text"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"replyWtor","method":"POST","path":"/api/jes/replies/{replyId}","pathParams":["replyId"],"queryParams":[],"bodyParams":["text"],"extraParams":["workspace"]}},{"name":"cancel_job","description":"Cancel a job ($C J equivalent). ACTIVE: kills the tracked step child processes, unblocks its outstanding replies, and the job completes ABEND S222 with canceled:true. INPUT-HOLD: the held job completes CANCELED without ever running. OUTPUT-HOLD: the held output is canceled — the job is purged","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"jobs.write","_binding":{"id":"cancelJob","method":"POST","path":"/api/jobs/{jobid}/cancel","pathParams":["jobid"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"hold_job","description":"Hold a job still on the input queue ($H J equivalent): it stays INPUT-HOLD — the mined casout /g state 1 — until released. TYPRUN=HOLD jobs arrive already held","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"holdJob","method":"POST","path":"/api/jobs/{jobid}/hold","pathParams":["jobid"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"release_job","description":"Release a held job ($A J equivalent): an INPUT-HOLD job (operator hold or TYPRUN=HOLD/JCLHOLD) is queued for the initiator and runs","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"releaseJob","method":"POST","path":"/api/jobs/{jobid}/release","pathParams":["jobid"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"inventory_scan","description":"Static portfolio scan: programs (language/LOC/CICS/SQL/DLI/MQ flags, CALL+COPY refs), jobs (EXEC PGM steps, DSN refs), BMS mapsets, copybooks","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"dataset pattern to scan (default **)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"inventoryScan","method":"GET","path":"/api/inventory","pathParams":[],"queryParams":["q"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"analysis_model","description":"The estate analysis model index (W7.1): per-program paragraphs/calls/files/SQL with dynamic-target resolution counts, per-job step+DD detail, screens, copybooks","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"dataset pattern to scan (default **)"},"refresh":{"type":"string","description":"bypass the 30s model cache when \"1\""},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"analysisModel","method":"GET","path":"/api/analysis/model","pathParams":[],"queryParams":["q","refresh"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"analysis_graph","description":"Analysis graphs (W7.1): kind=call (CALL/LINK/XCTL edges with literal/resolved/unresolved provenance), kind=job (job→program→dataset with I/O direction + cross-job dataflow), kind=screen (mapsets/transids + XCTL/RETURN-TRANSID navigation; transids resolve through the region CSD)","inputSchema":{"type":"object","properties":{"kind":{"type":"string","description":"call | job | screen (required)"},"q":{"type":"string","description":"dataset pattern to scan (default **)"},"refresh":{"type":"string","description":"bypass the model cache when \"1\""},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"analysisGraph","method":"GET","path":"/api/analysis/graph","pathParams":[],"queryParams":["kind","q","refresh"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"analysis_impact","description":"Field-level impact trace (W7.2, A13.2b): BFS over the estate impact graph — MOVE/COMPUTE/arith dataflow, group/REDEFINES aliasing, copybook identity, CALL USING linkage, COMMAREA, WRITE→dataset→READ file flow — from a seed field; expand:true answers the Change-Analyzer-style worklist grouped by program/copybook/dataset","inputSchema":{"type":"object","properties":{"field":{"type":"string","description":"seed field name (required)"},"program":{"type":"string","description":"restrict the seed to one program"},"copybook":{"type":"string","description":"seed the copybook-identity hub instead"},"depth":{"description":"BFS depth cap (default 6)","type":"integer"},"dir":{"type":"string","description":"'forward' | 'backward' | 'both' (default both)"},"expand":{"description":"true = seed-expansion worklist shape","type":"boolean"},"q":{"type":"string","description":"dataset pattern to scan (default **)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["field"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"analysisImpact","method":"POST","path":"/api/analysis/impact","pathParams":[],"queryParams":[],"bodyParams":["field","program","copybook","depth","dir","expand","q"],"extraParams":["workspace"]}},{"name":"analysis_metrics","description":"Complexity/dead-code metrics (W7.3, A13.2c): per-program cyclomatic complexity (pinned formula 1+IF+WHEN+AND/OR+UNTIL+handlers), dead paragraphs (conservative reachability; ALTER programs refuse loudly), unreferenced data, estate-dead copybook fields, plus the text report","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"dataset pattern to scan (default **)"},"program":{"type":"string","description":"single program (full metrics row)"},"report":{"type":"string","description":"\"text\" adds the rendered report"},"refresh":{"type":"string","description":"bypass the model cache when \"1\""},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"analysisMetrics","method":"GET","path":"/api/analysis/metrics","pathParams":[],"queryParams":["q","program","report","refresh"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"explain_program","description":"LLM program explanation over the analysis model (W7.4, A12.12): assembles a deterministic context pack (structure, call neighborhood, jobs/datasets, screens, metrics, shared copybooks, capped source) into a provider-agnostic request. GATED without tenant AI config (SF_AI_PROVIDER/SF_AI_MODEL/SF_AI_KEY/SF_AI_URL): returns the assembled prompt+request with gated:true, never a fabricated answer; with a key the live call runs","inputSchema":{"type":"object","properties":{"program":{"type":"string","description":"program name (required)"},"paragraph":{"type":"string","description":"focus one paragraph"},"q":{"type":"string","description":"dataset pattern to scan (default **)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"analysisExplain","method":"GET","path":"/api/analysis/explain","pathParams":[],"queryParams":["program","paragraph","q"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"run_capture","description":"Run a JCL deck and keep its golden envelope (RC/abend, every spool file, named output datasets as record hex) as a capture. Oracle use: prefer run_batch (joblog + decoded rows + run record); this is the raw capture primitive","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"capture name"},"jcl":{"description":"JCL card images","type":"array","items":{"type":"string"}},"datasets":{"description":"output dataset names to snapshot (optional)","type":"array","items":{"type":"string"}},"masks":{"description":"regexes masked before spool compare (defaults: jobids/timestamps)","type":"array","items":{"type":"string"}},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jcl"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"captureRun","method":"POST","path":"/api/captures","pathParams":[],"queryParams":[],"bodyParams":["name","jcl","datasets","masks"],"extraParams":["workspace"]}},{"name":"list_runs","description":"List run records (run_batch / cics_run_script / sched_wait_cycle, format steelframe-run/1) and golden captures, newest first","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"captureList","method":"GET","path":"/api/captures","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"get_run","description":"One run record (steelframe-run/1: jobs[].joblog, after.datasets hex+rows, cycle, before) or golden capture by id — the persisted artifact of run_batch / sched_wait_cycle / cics_run_script","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"capture id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"jobs.read","_binding":{"id":"captureGet","method":"GET","path":"/api/captures/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"delete_run","description":"Delete a run record (run_batch / cics_run_script / sched_wait_cycle) or a golden capture by id","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"run record / capture id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"jobs.write","_binding":{"id":"captureDelete","method":"DELETE","path":"/api/captures/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"search_source","description":"Find source members by kind and/or content across the text PO libraries: kind is detected from content (program|copybook|jcl|proc|bms|csd|other); with q the matching lines are returned with optional context, without q the members of the wanted kinds are listed","inputSchema":{"type":"object","properties":{"q":{"type":"string","description":"text to find (substring, case-insensitive; regex=true for a regular expression); omit to list members by kind"},"regex":{"type":"string","description":"'true' = q is a regular expression"},"kinds":{"type":"string","description":"comma list of kinds to keep: program,copybook,jcl,proc,bms,csd,other"},"libraries":{"type":"string","description":"comma list of PO datasets to scan (default: every non-load PO library; the 2000-member scan cap applies — give libraries on big estates); dsn / library are aliases"},"member":{"type":"string","description":"member-name pattern (* wildcard)"},"max":{"type":"string","description":"result cap (default 200, max 2000)"},"context":{"type":"string","description":"lines of context before/after each hit (0-20)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"},"dsn":{"type":"string","description":"alias of libraries: comma list of PO datasets to scan (default: every non-load PO library; the 2000-member scan cap applies — give libraries on big estates); dsn / library are aliases"},"library":{"type":"string","description":"alias of libraries: comma list of PO datasets to scan (default: every non-load PO library; the 2000-member scan cap applies — give libraries on big estates); dsn / library are aliases"},"query":{"type":"string","description":"alias of q: text to find (substring, case-insensitive; regex=true for a regular expression); omit to list members by kind"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"searchSource","method":"GET","path":"/api/search/source","pathParams":[],"queryParams":["q","regex","kinds","libraries","member","max","context"],"bodyParams":[],"extraParams":["workspace"],"aliases":{"dsn":"libraries","library":"libraries","query":"q"}}},{"name":"find_program","description":"Everything the estate knows about one program, as data: source location, transitive copybooks (COPY / EXEC SQL INCLUDE closure through the copybook libraries), load modules, every JCL step that runs it (+ the deck location), the CSD slice (PPT entry, transactions, FILEs the source names), mapsets, and the scheduler jobs that run those decks","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"program name"},"syslib":{"type":"string","description":"comma list of copybook libraries to resolve COPY through (default: the source library, every *COPY*/DCLGEN PO, SYS2.COBOL.COPYLIB)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"findProgram","method":"GET","path":"/api/search/program/{name}","pathParams":["name"],"queryParams":["syslib"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"decode_records","description":"Records of a dataset decoded through a copybook: byte truth (hex, charset stated — EBCDIC at rest for PS/PDS, program image for KSDS/ESDS) beside the decoded rows (alphanumerics right-trimmed, numerics as exact scaled-decimal strings, OCCURS expanded, FILLER omitted) and the field layout","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"dataset name (GDG relative (0)/(-n) accepted)"},"copybook":{"description":"record layout as 'LIB(MEMBER)' or { dsn, member } (required)","anyOf":[{"type":"string"},{"type":"object","properties":{"dsn":{"type":"string"},"member":{"type":"string"}},"required":["dsn","member"]}]},"record":{"type":"string","description":"which 01 level to use when the copybook holds several"},"member":{"type":"string","description":"PDS member (for a PO dataset)"},"from":{"type":"string","description":"first record (0-based, default 0)"},"count":{"type":"string","description":"records to return (default 1000, max 10000)"},"hex":{"type":"string","description":"'false' = rows only (default true: hex beside rows)"},"syslib":{"type":"string","description":"comma list of libraries nested COPY statements resolve through"},"ccsid":{"type":"string","description":"CCSID the EBCDIC-at-rest alphanumerics decode through (SBCS 37/273/284/285/297/500/1140/... or mixed 930/939/933/935/937/1399 with SO/SI); default = the dataset's effective CCSID (37). EBCDIC-at-rest datasets (PS/PDS/GDG) only: on a program-charset VSAM cluster it has no effect and the answer says so (ccsidIgnored: true + ccsidNote). PIC G is DBCS, PIC N UTF-16BE regardless"},"numbers":{"description":"numeric output form: 'native' (default: a JSON number when a double carries the exact decimal, else the exact decimal string — a whole-valued S9(10)V99 shows as 194, a 9(9) as 20973888), 'decimal' (ALWAYS the exact decimal text at the PICTURE scale: \"194.00\", \"-0.05\", \"20973888\") or 'display' (the fixed-width digit image of the PICTURE: \"0000000194.00\", \"020973888\"). Same byte-true magnitude in every form; layout[] carries digits/scale/signed per numeric field","type":"string","enum":["native","decimal","display"]},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"decodeRecords","method":"GET","path":"/api/dataset/{dsn}/decoded","pathParams":["dsn"],"queryParams":["copybook","record","member","from","count","hex","syslib","ccsid","numbers"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"encode_records","description":"JSON rows -> record images through a copybook (the inverse of decode_records): charset ebcdic (PS at rest — DISPLAY fields transcoded, COMP/COMP-3 bit-exact) or program (KSDS/ESDS image); feed the hex to write_records","inputSchema":{"type":"object","properties":{"copybook":{"type":"string","description":"record layout as 'LIB(MEMBER)' or { dsn, member }"},"lines":{"type":"array","items":{"type":"string"},"description":"or the copybook card images inline"},"record":{"type":"string","description":"which 01 level when the copybook holds several"},"rows":{"description":"array of row objects (keys = item names, case/hyphen-insensitive; groups nested or flat; OCCURS as arrays; numerics as strings or numbers)","type":"array","items":{"type":"object"}},"charset":{"description":"'ebcdic' (default, PS/PDS at rest) or 'program' (KSDS/ESDS image)","type":"string","enum":["ebcdic","program"]},"ccsid":{"description":"CCSID of the EBCDIC alphanumerics (default 37): SBCS pages 273/284/285/297/500/1140/... or mixed 930/939/933/935/937/1399 (SO/SI framed); unmappable characters -> the page's SUB X'3F'. PIC G = DBCS 2 bytes/char (X'4040' pad), PIC N = UTF-16BE 2 bytes/char regardless","type":"string"},"syslib":{"description":"libraries nested COPY statements resolve through","type":"array","items":{"type":"string"}},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["rows"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"encodeRecords","method":"POST","path":"/api/records/encode","pathParams":[],"queryParams":[],"bodyParams":["copybook","lines","record","rows","charset","ccsid","syslib"],"extraParams":["workspace"]}},{"name":"load_dataset","description":"SEED a dataset with records (hex, charset stated) or rows (+copybook) in one call: PS replace/append (all-or-nothing), KSDS replace (delete every key + write, one batched op list — cluster/AIX/PATH/catalog untouched) / append (duplicates reported) / upsert (rewrite-or-write), ESDS replace/append; allocates the dataset first when allocate:{attrs}|{like} is given. Refused for system HLQs and while a CICS task holds record locks","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"target dataset (PS, KSDS, ESDS; GDG generation by absolute name or (0)/(-n))"},"records":{"description":"array of hex record images","type":"array","items":{"type":"string"}},"charset":{"description":"charset of `records`: 'auto' (default = the own convention of the dataset: PS = EBCDIC at rest, KSDS/ESDS = program image) | 'ebcdic' | 'program' (a mismatch needs copybook so packed/binary fields convert correctly)","type":"string","enum":["auto","ebcdic","program"]},"rows":{"description":"array of row objects (needs copybook or lines)","type":"array","items":{"type":"object"}},"copybook":{"type":"string","description":"record layout LIB(MEMBER)"},"lines":{"type":"array","items":{"type":"string"},"description":"or the copybook inline"},"record":{"type":"string","description":"which 01 level"},"syslib":{"description":"copybook libraries","type":"array","items":{"type":"string"}},"mode":{"description":"'replace' (default) | 'append' | 'upsert' (KSDS only)","type":"string","enum":["replace","append","upsert"]},"member":{"type":"string","description":"PDS member (PS-style load into one member)"},"allocate":{"description":"when not cataloged: { attrs: {dsorg, recfm, lrecl, blksize?, volser?} | {dsorg:'VS', vsam:{type, keylen, keyoff, recl, alts?}} | {esds:true, lrecl} } or { like: 'MODEL.DSN' }","type":"object"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.write","_binding":{"id":"loadDataset","method":"PUT","path":"/api/dataset/{dsn}/load","pathParams":["dsn"],"queryParams":[],"bodyParams":["records","charset","rows","copybook","lines","record","syslib","mode","member","allocate"],"extraParams":["workspace"]}},{"name":"stage_gdg","description":"Roll a NEW generation into a GDG base from records/rows: a staging PS is loaded, then a real IEBGENER step with DSN=BASE(+1),DISP=(NEW,CATLG) creates the generation through the JES DISP path exactly as a production job would; returns the absolute GnnnnV00 name and the joblog","inputSchema":{"type":"object","properties":{"dsn":{"type":"string","description":"GDG base name"},"records":{"description":"hex record images (EBCDIC at rest)","type":"array","items":{"type":"string"}},"rows":{"description":"rows (+copybook)","type":"array","items":{"type":"object"}},"copybook":{"type":"string","description":"LIB(MEMBER)"},"lines":{"type":"array","items":{"type":"string"},"description":"copybook inline"},"record":{"type":"string","description":"01 level"},"charset":{"type":"string","description":"'auto'|'ebcdic'|'program' for records"},"attrs":{"description":"{ recfm, lrecl } (default: the DCB of the newest generation, else the base model)","type":"object"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["dsn"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"jobs.write","_binding":{"id":"stageGdg","method":"POST","path":"/api/dataset/{dsn}/gdg","pathParams":["dsn"],"queryParams":[],"bodyParams":["records","rows","copybook","lines","record","charset","attrs"],"extraParams":["workspace"]}},{"name":"export_state","description":"A pure DUMP of what the mainframe holds right now: named datasets (hex + rows when a copybook is given, charset stated, sha256), DB2 tables (rows), and optionally one job's spool — persisted server-side (get_state) and returned inline. Take two dumps (before/after, or oracle vs candidate) and compare them on YOUR side; SteelFrame does not diff","inputSchema":{"type":"object","properties":{"datasets":{"description":"array of dataset names or { dsn, copybook: 'LIB(MEMBER)', record?, member? }","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"db2":{"description":"array of table names or { table, orderBy }  (needs db2.exec)","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"spool":{"description":"{ jobid, files?: [STEP.DD names] } to include a joblog","type":"object"},"records":{"description":"'both' (default) | 'hex' | 'rows' | 'none' (hashes + counts only)","type":"string","enum":["both","hex","rows","none"]},"name":{"type":"string","description":"label"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"exportState","method":"POST","path":"/api/export/state","pathParams":[],"queryParams":[],"bodyParams":["datasets","db2","spool","records","name"],"extraParams":["workspace"]}},{"name":"create_workspace","description":"Create an ISOLATED workspace: a child engine on a copy of the estate (seed clone = copy of the live root incl. datasets/CSD/scheduler store, the parent's spool left behind unless includeSpool:true; snapshot:<id> = a quiesced snapshot; fresh = a seeded new system). Every tool then runs INSIDE it (pass workspace:<id> on any tool call) as you, and the live estate is never touched. Disposed at the TTL or by destroy_workspace. ram:true = a RAM-only zero-retention sandbox-class child instead of a disk child (what the private lane always makes). CREATION IS ASYNCHRONOUS: the workspace is registered at once with status CREATING (phase + progress in the view) while the estate copy and child boot run in the background; the call returns as soon as status leaves CREATING or after waitSeconds (default 20, max 45 — always under a 60 s MCP client timeout). If the response says status:CREATING, poll get_workspace every 10-15 s until status=RUNNING (ready:true) before passing workspace:<id> on other tools — they are refused 409 NOT READY until then. Do NOT call create_workspace again meanwhile: the same name returns the in-flight row (reused:true), a different name counts against your cap (429). A clone takes seconds to a few minutes depending on the host (the view's progress.typicalSeconds is the last one on this engine)","inputSchema":{"type":"object","properties":{"seed":{"type":"string","description":"'clone' (default) | 'fresh' | 'snapshot:<id>'"},"ttlSeconds":{"description":"dispose after N seconds (default 3600, max 86400)","type":"integer"},"name":{"type":"string","description":"label AND per-user idempotency key: naming a workspace of yours that is CREATING or RUNNING (same seed/kind) returns that one (reused:true) instead of cloning again — give every workspace a name"},"waitSeconds":{"description":"how long this call may wait for status to leave CREATING before answering (default 20, 0 = answer at once, max 45)","type":"integer"},"jobNumber":{"description":"set the child JES2 job-number counter (JOBIDs line up across re-runs)","type":"integer"},"ram":{"description":"true = RAM-only zero-retention sandbox-class child (the private lane's kind); default false = disk child under the data root","type":"boolean"},"includeSpool":{"description":"clone only: true = also copy the parent's JES2 spool (every past job's output — most of the estate's files, minutes on a big one); default false = the workspace starts with an empty spool and the parent's job-number counter","type":"boolean"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"workspace.write","_binding":{"id":"createWorkspace","method":"POST","path":"/api/workspaces","pathParams":[],"queryParams":[],"bodyParams":["seed","ttlSeconds","name","waitSeconds","jobNumber","ram","includeSpool"],"extraParams":[]}},{"name":"list_workspaces","description":"List your workspaces (a SPECIAL user sees all; ram:true marks the RAM-only ones) — including the ones still CREATING (status/phase/progress) and recently FAILED ones (error)","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"workspace.read","_binding":{"id":"listWorkspaces","method":"GET","path":"/api/workspaces","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":[]}},{"name":"get_workspace","description":"One workspace — THE POLL after create_workspace / reset_workspace: status CREATING (phase, progress.elapsedSeconds, progress.typicalSeconds) → RUNNING (ready:true, use it) | FAILED (error: destroy and recreate); after destroy_workspace: CANCELLING | DESTROYING until the row is gone (404)","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"workspace id"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"workspace.read","_binding":{"id":"getWorkspace","method":"GET","path":"/api/workspaces/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":[]}},{"name":"destroy_workspace","description":"Destroy a workspace (the child engine and its copy of the estate are removed). On a workspace still CREATING this cancels it (cancelled:true): the estate copy is stopped at once (a queued copy leaves the queue, a running copy process is killed), no child engine boots, the partial directory is removed. The row stays visible as CANCELLING (or DESTROYING for a RUNNING one) and counts toward your cap only until that is done — the call waits for it up to waitSeconds (default 15, max 45) and answers settled:true (row gone) or settled:false (still unwinding: poll get_workspace until 404). Idempotent: destroying an unwinding row again just reports it","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"workspace id"},"waitSeconds":{"description":"how long to wait for the child/copy to be fully gone before answering (default 15, 0 = answer at once, max 45)","type":"integer"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"workspace.write","_binding":{"id":"destroyWorkspace","method":"DELETE","path":"/api/workspaces/{id}","pathParams":["id"],"queryParams":["waitSeconds"],"bodyParams":[],"extraParams":[]}},{"name":"reset_workspace","description":"Reset a workspace to its seed baseline (destroy + recreate from the same seed under the SAME id; optional jobNumber so JOBIDs line up across your re-runs). Asynchronous like create_workspace: the view comes back when status leaves CREATING or after waitSeconds — poll get_workspace until status=RUNNING. Refused with 409 while the workspace is still CREATING (poll first) or being CANCELLED/DESTROYED (create a new one)","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"workspace id"},"jobNumber":{"description":"child JES2 job-number counter after the reset","type":"integer"},"waitSeconds":{"description":"wait for the rebuild up to N seconds before answering (default 20, max 45)","type":"integer"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"workspace.write","_binding":{"id":"resetWorkspace","method":"POST","path":"/api/workspaces/{id}/reset","pathParams":["id"],"queryParams":[],"bodyParams":["jobNumber","waitSeconds"],"extraParams":[]}},{"name":"export_bundle","description":"Export a modernization BUNDLE in one call: programs (source) + their transitive copybooks + JCL (with the DD/dataset list) + procs + BMS mapsets (source, parsed model, the region's physical map) + the CSD slice + the scheduler jobs that run those decks + datasets (hex + rows). Text parts are inline in the returned manifest; dataset parts are stored server-side (get_bundle_part pages them; GET /api/export/bundles/{id}/download = tar.gz). Nothing is converted","inputSchema":{"type":"object","properties":{"programs":{"description":"array of program names (or {dsn, member})","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"copybooks":{"description":"extra copybook names to include (the COPY closure of every program is included automatically)","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"jcl":{"description":"JCL member names (or {dsn, member})","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"procs":{"description":"proc member names","type":"array","items":{"type":"string"}},"maps":{"description":"extra BMS mapset names (every MAPSET('X') a program names is included automatically; a data-name MAPSET or a mapset found nowhere is a warning)","type":"array","items":{"type":"string"}},"db2":{"description":"extra DB2 table names (every table a program's EXEC SQL references is included automatically as a db2 part: CREATE TABLE DDL + indexes + rows; a referenced table that is not catalogued is a warning)","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"includeDb2":{"description":"default true","type":"boolean"},"datasets":{"description":"array of dataset names or { dsn, copybook: 'LIB(MEMBER)', record?, all?: true (no 10000-record cap) }","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"records":{"description":"'both' (default) | 'hex' | 'rows' | 'none'","type":"string","enum":["both","hex","rows","none"]},"includeCopybooks":{"description":"default true","type":"boolean"},"includeCsd":{"description":"default true","type":"boolean"},"includeSchedule":{"description":"default true","type":"boolean"},"includeLoadModules":{"description":"default false (engine-native modules, labelled)","type":"boolean"},"syslib":{"description":"copybook library search order","type":"array","items":{"type":"string"}},"name":{"type":"string","description":"label"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"exportBundle","method":"POST","path":"/api/export/bundles","pathParams":[],"queryParams":[],"bodyParams":["programs","copybooks","jcl","procs","maps","db2","includeDb2","datasets","records","includeCopybooks","includeCsd","includeSchedule","includeLoadModules","syslib","name"],"extraParams":["workspace"]}},{"name":"list_bundles","description":"List exported bundles, newest first","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"listBundles","method":"GET","path":"/api/export/bundles","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"get_bundle","description":"One bundle manifest (text parts inline)","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"bundle id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"getBundle","method":"GET","path":"/api/export/bundles/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"get_bundle_part","description":"One bundle part: a dataset part paged (hex + rows), a load module as hex, a text part as-is","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"bundle id"},"n":{"type":"string","description":"part index (manifest.parts[n])"},"from":{"type":"string","description":"first record"},"count":{"type":"string","description":"records (default 1000, max 10000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id","n"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"getBundlePart","method":"GET","path":"/api/export/bundles/{id}/parts/{n}","pathParams":["id","n"],"queryParams":["from","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"delete_bundle","description":"Delete a bundle","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"bundle id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.read","_binding":{"id":"deleteBundle","method":"DELETE","path":"/api/export/bundles/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"list_states","description":"List persisted state dumps (export_state), newest first","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"listStates","method":"GET","path":"/api/export/state","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"get_state","description":"One persisted state dump; page one dataset's records with dataset=&from=&count=","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"state id"},"dataset":{"type":"string","description":"return only this dataset artifact (paged)"},"from":{"type":"string","description":"first record (with dataset)"},"count":{"type":"string","description":"records (with dataset, default 1000)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"datasets.read","_binding":{"id":"getState","method":"GET","path":"/api/export/state/{id}","pathParams":["id"],"queryParams":["dataset","from","count"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"delete_state","description":"Delete a persisted state dump","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"state id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"datasets.read","_binding":{"id":"deleteState","method":"DELETE","path":"/api/export/state/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"run_batch","description":"Run a batch job and RETURN its run record in one call: submit (inline lines or a JCL member), wait, then step RCs/abend, the whole joblog (JESMSGLG/JESYSMSG/every SYSOUT DD, keyed STEP.DD), and the output datasets as hex + copybook-decoded rows (datasets auto-derived from the deck DDs unless given; GDG (+n) resolved after the run), optional DB2 tables, optional identical dump taken BEFORE the run (verbatim — no diff), WTORs auto-answered. Persisted as a steelframe-run/1 record (get_run)","inputSchema":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"JCL card images"},"member":{"type":"string","description":"or a cataloged deck: 'CARDDEMO.JCL(POSTTRAN)'"},"datasets":{"description":"'auto' (default: every non-instream/SYSOUT/DUMMY DD of the deck) or an array of dataset names / { dsn, copybook }","anyOf":[{"type":"string","enum":["auto"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}}]},"copybooks":{"description":"{ DSN-or-last-qualifier: 'LIB(MEMBER)' } record layouts for decoded rows (e.g. { 'AWS.M2.CARDDEMO.TRANSACT.VSAM.KSDS': 'CARDDEMO.COPYLIB(CVTRA05Y)' })","type":"object"},"db2":{"description":"array of table names / { table, orderBy } to dump after the run (needs db2.exec)","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"before":{"description":"true = also return the same dump taken before submit","type":"boolean"},"spool":{"description":"'all' (default) | 'tail' (last 200 lines per file) | 'names'","type":"string","enum":["all","tail","names"]},"records":{"description":"'both' (default) | 'hex' | 'rows' | 'none' (hashes + counts only)","type":"string","enum":["both","hex","rows","none"]},"replies":{"description":"[{ match?: regex over the WTOR text, text }] answered in order while waiting","type":"array","items":{"type":"object"}},"timeout":{"description":"seconds to wait (default 300, max 3600); on timeout { timedOut, jobid } is returned for wait_job","type":"integer"},"clock":{"description":"{ fixed: 'YYYY-MM-DD HH:MM:SS' } pins the COBOL runtime clock (ACCEPT FROM DATE/TIME, FUNCTION CURRENT-DATE) for every program step of THIS job so a re-run reproduces byte-for-byte; JES timestamps in JESMSGLG are real","type":"object","properties":{"fixed":{"type":"string"}}},"name":{"type":"string","description":"run label"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"jobs.write","_binding":{"id":"runBatch","method":"POST","path":"/api/run/batch","pathParams":[],"queryParams":[],"bodyParams":["lines","member","datasets","copybooks","db2","before","spool","records","replies","timeout","clock","name"],"extraParams":["workspace"]}},{"name":"cics_link","description":"LINK a CICS program headlessly with a COMMAREA (hex program-image bytes, or rows + copybook) and/or a channel of containers, under a real task with a live EIB (the ECI/JSON-provider path); returns the returned COMMAREA as hex (+ decoded rows when a copybook was given), containers, abend code","inputSchema":{"type":"object","properties":{"program":{"type":"string","description":"program name (PPT entry or load module)"},"transid":{"type":"string","description":"transaction id for the task (default CPIH)"},"commarea":{"description":"hex string (program image) or { rows: {...}, copybook: 'LIB(MEMBER)', record?, length? }","anyOf":[{"type":"string"},{"type":"object"}]},"channel":{"type":"string","description":"channel name (optional)"},"containers":{"description":"{ NAME: { hex, type?: BIT|CHAR } } (with channel)","type":"object"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["program"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsLink","method":"POST","path":"/api/cics/link","pathParams":[],"queryParams":[],"bodyParams":["program","transid","commarea","channel","containers"],"extraParams":["workspace"]}},{"name":"cics_open_session","description":"Open a headless CICS terminal session as the caller (the same engine terminal the web/Studio/TN3270E use): returns the session id, termid and the initial screen. Then cics_send one AID at a time; cics_close_session when done (idle sessions expire; per-user cap)","inputSchema":{"type":"object","properties":{"netname":{"type":"string","description":"LU name (CEDA TERMINAL match / session-continuity key, optional)"},"signon":{"description":"true = mark the terminal signed on as the caller like CESN (identity is attached either way)","type":"boolean"},"raw":{"description":"true = include the TN3270E data stream of the screen","type":"boolean"},"transaction":{"type":"string","description":"transid (1-4 chars) to START on the new terminal — typed as the unformatted input line and ENTERed exactly like the first keystroke of a session; the settled result of that step (screens, task, keyboard) is returned with the session. Without it the terminal is blank: send the transid as text on cics_send"},"clock":{"description":"{ fixed: 'YYYY-MM-DD HH:MM:SS' } pins the clock for every task of THIS terminal only (EIBDATE/EIBTIME, ASKTIME/FORMATTIME, FUNCTION CURRENT-DATE / ACCEPT FROM DATE in the programs) so a re-run paints the same screens; 'YYYY-MM-DD' alone = that date with the real time of day. Other terminals and users keep the real clock","type":"object","properties":{"fixed":{"type":"string"}}},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsOpenSession","method":"POST","path":"/api/cics/sessions","pathParams":[],"queryParams":[],"bodyParams":["netname","signon","raw","transaction","clock"],"extraParams":["workspace"]}},{"name":"cics_list_sessions","description":"List your open headless CICS sessions (a SPECIAL user sees all)","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsListSessions","method":"GET","path":"/api/cics/sessions","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"cics_send","description":"Send ONE keystroke to a session — an AID with field inputs addressed by BMS field NAME (or row/col) and/or the unformatted input line — and RETURN every screen the engine painted during the step plus the final screen (steelframe-screen/1: named fields, attributes, cursor, 24x80 text). Settles on the engine keyboard signal (task attached → task ended / RECEIVE suspended: task.alive tells you the next send feeds the same task); CLEAR / message screens settle on the write itself. 409 while the keyboard is still locked (task running): re-read with cics_screen or send with queue:true to type ahead","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"session id"},"aid":{"type":"string","description":"ENTER (default) | CLEAR | PA1-PA3 | PF1-PF24"},"text":{"type":"string","description":"unformatted input line (the transaction id on a cleared screen)"},"fields":{"description":"[{ name: 'USERID', text: 'USER0001' } | { row, col, text }] typed into unprotected fields of the current screen","anyOf":[{"type":"array","items":{"type":"object"}},{"type":"object"}]},"cursor":{"description":"[row, col] or { field: name } (default: the first typed field)","anyOf":[{"type":"array","items":{"type":"integer"}},{"type":"object"}]},"expect":{"description":"{ text?, field?, timeoutMs? } — after settling, wait until the current screen contains the text / named field (expectMet reported, never an error)","type":"object"},"settle":{"description":"{ timeoutMs (default 8000), lockWaitMs (default 250) }","type":"object"},"raw":{"description":"true = include the TN3270E outbound data stream of the final screen","type":"boolean"},"queue":{"description":"true = type ahead while the keyboard is locked (queued like a real terminal)","type":"boolean"},"force":{"description":"true = allow typing into a protected field / over-length text","type":"boolean"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"},"session":{"type":"string","description":"alias of id: session id"},"sessionId":{"type":"string","description":"alias of id: session id"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsSend","method":"POST","path":"/api/cics/sessions/{id}/send","pathParams":["id"],"queryParams":[],"bodyParams":["aid","text","fields","cursor","expect","settle","raw","queue","force"],"extraParams":["workspace"],"aliases":{"session":"id","sessionId":"id"}}},{"name":"cics_screen","description":"The current screen of a session (re-read without sending anything) + task/keyboard state","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"session id"},"raw":{"type":"string","description":"'true' = include the TN3270E data stream"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"},"session":{"type":"string","description":"alias of id: session id"},"sessionId":{"type":"string","description":"alias of id: session id"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsScreen","method":"GET","path":"/api/cics/sessions/{id}/screen","pathParams":["id"],"queryParams":["raw"],"bodyParams":[],"extraParams":["workspace"],"aliases":{"session":"id","sessionId":"id"}}},{"name":"cics_close_session","description":"Close a session (a running task on it is killed, like a terminal disconnect)","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"session id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"},"session":{"type":"string","description":"alias of id: session id"},"sessionId":{"type":"string","description":"alias of id: session id"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"cics.exec","_binding":{"id":"cicsCloseSession","method":"DELETE","path":"/api/cics/sessions/{id}","pathParams":["id"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"],"aliases":{"session":"id","sessionId":"id"}}},{"name":"cics_run_script","description":"Run a whole online script in one call — open a session, send every step (same shape as cics_send), dump the named datasets (or state:auto = every CSD FILE), close — and RETURN the transcript: every screen of every step in order, as steelframe-screen/1. Persisted as a run record (kind online, get_run). Stops at the first step that does not settle or whose expect is not met (aborted reported, never a verdict)","inputSchema":{"type":"object","properties":{"steps":{"description":"[{ aid, text?, fields?, cursor?, expect?, settle? }] in order (fields: [{name|row+col, text}] or an object map { NAME: text })","type":"array","items":{"type":"object"}},"state":{"description":"'auto' (every CSD FILE dataset) or [dsn | {dsn, copybook}] to dump after the script","anyOf":[{"type":"string","enum":["auto"]},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}}]},"transaction":{"type":"string","description":"transid (1-4 chars) to START first — run as step 1 (ENTER with the transid as the unformatted input line) before your steps"},"db2":{"description":"tables to dump after the script (needs db2.exec)","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"records":{"description":"'none' (default: counts + sha256) | 'hex' | 'rows' | 'both' for the state dump","type":"string","enum":["none","hex","rows","both"]},"netname":{"type":"string","description":"LU name"},"signon":{"description":"true = CESN-like signon as the caller","type":"boolean"},"raw":{"description":"true = data streams","type":"boolean"},"stopOnUnsettled":{"description":"false = keep going after an unsettled step","type":"boolean"},"name":{"type":"string","description":"run label"},"clock":{"description":"{ fixed: 'YYYY-MM-DD HH:MM:SS' } pins the clock for the script's terminal only (same as cics_open_session clock); echoed in the result and the run record","type":"object","properties":{"fixed":{"type":"string"}}},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["steps"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"cics.exec","_binding":{"id":"cicsRunScript","method":"POST","path":"/api/cics/scripts/run","pathParams":[],"queryParams":[],"bodyParams":["steps","state","transaction","db2","records","netname","signon","raw","stopOnUnsettled","name","clock"],"extraParams":["workspace"]}},{"name":"sched_import","description":"Import scheduler definitions straight in: a captured CA-7 LJOB,JOB=x,LIST=ALL report (folder = SYSTEM) or a Control-M DEFTABLE XML export — the same importers PGM=ZWSCHED IMPORT runs; optionally set the default JCL library","inputSchema":{"type":"object","properties":{"format":{"description":"CA7 | CTM","type":"string","enum":["CA7","CTM"]},"lines":{"type":"array","items":{"type":"string"},"description":"the report / XML lines"},"member":{"type":"string","description":"or a cataloged member 'DSN(MEMBER)'"},"jcllib":{"type":"string","description":"default JCL library for the cycles (sets options.jcllib)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["format"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"sched.admin","_binding":{"id":"schedImport","method":"POST","path":"/api/sched/import","pathParams":[],"queryParams":[],"bodyParams":["format","lines","member","jcllib"],"extraParams":["workspace"]}},{"name":"sched_define_job","description":"Define or update ONE scheduler job with its dependencies from JSON: CA-7 (triggers: this job triggers those jobs on completion) or Control-M (inconds/outconds); the definition is synthesized in the importer's own grammar (LJOB block / one-job DEFTABLE) and merged like an import — unknown trigger targets become stubs to define next","inputSchema":{"type":"object","properties":{"folder":{"type":"string","description":"folder (CA-7 SYSTEM name, 1-8 chars; Control-M folder)"},"type":{"type":"string","description":"'CA7' | 'CTM' (default: the folder's type, CA7 for a new folder)"},"name":{"type":"string","description":"job name"},"member":{"type":"string","description":"JCL member (default: name)"},"jcllib":{"type":"string","description":"JCL library or symbol, e.g. '&CARDDEMOPRODJCL'"},"owner":{"type":"string","description":"owner"},"class":{"type":"string","description":"job class"},"msgclass":{"type":"string","description":"msgclass"},"schid":{"type":"string","description":"CA-7 schedule id"},"freq":{"type":"string","description":"DAILY|WEEKLY|MONTHLY"},"days":{"type":"string","description":"day list (MON,FRI / SA)"},"triggers":{"description":"[{ job, schid?, qtm?, leadtm? }] (CA-7)","type":"array","items":{"type":"object"}},"inconds":{"description":"[{ name, odate?, andOr? }] (Control-M)","type":"array","items":{"type":"object"}},"outconds":{"description":"[{ name, odate?, sign? }] (Control-M)","type":"array","items":{"type":"object"}},"timefrom":{"type":"string","description":"HHMM"},"timeto":{"type":"string","description":"HHMM"},"calendar":{"type":"string","description":"SCAL / CONFCAL name"},"cyclic":{"description":"true (Control-M)","type":"boolean"},"interval":{"type":"string","description":"e.g. '00030M'"},"maxrerun":{"description":"number","type":"integer"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["folder","name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"sched.admin","_binding":{"id":"schedDefineJob","method":"POST","path":"/api/sched/jobs","pathParams":[],"queryParams":[],"bodyParams":["folder","type","name","member","jcllib","owner","class","msgclass","schid","freq","days","triggers","inconds","outconds","timefrom","timeto","calendar","cyclic","interval","maxrerun"],"extraParams":["workspace"]}},{"name":"sched_ca7_command","description":"One CA-7 top-line command in CA-7 syntax: DEMAND[H] / RUN[H] (run one job — requirements not checked, completion neither posts nor triggers) / LJOB (definition report; the same grammar sched_import accepts) / LQ,LQUE,LREQ,LRDY,LACT (queues) / LPRRN (prior runs) / HOLD / RELEASE / CANCEL / POST. Report wording is engine-own; the syntax is CA-7's","inputSchema":{"type":"object","properties":{"command":{"type":"string","description":"e.g. 'RUN,JOB=POSTTRAN', 'LJOB,JOB=CLOSEFIL,LIST=ALL', 'LQ', 'POST,JOB=WAITSTEP,DEPJOB=POSTTRAN'"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["command"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedCa7","method":"POST","path":"/api/sched/ca7","pathParams":[],"queryParams":[],"bodyParams":["command"],"extraParams":["workspace"]}},{"name":"sched_wait_cycle","description":"Wait for a scheduler cycle (sched_demand / sched_order / RUN) to END and RETURN it: the cycle log (order the jobs ran, triggers fired), every job's state/jobid/maxcc/steps and joblog, optional output datasets; on timeout the live state is returned with each waiting job's reason. Persisted as a run record (kind cycle) when ended","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"cycle id (CYCnnnnn)"},"timeoutMs":{"description":"milliseconds to wait (default 300000)","type":"integer"},"joblogs":{"type":"string","description":"'all' (default) | 'tail' | 'names' | 'none'"},"outputs":{"description":"array of dataset names / { dsn, copybook } to dump after the cycle","type":"array","items":{"anyOf":[{"type":"string"},{"type":"object"}]}},"records":{"description":"'both' | 'hex' | 'rows' | 'none' for outputs","type":"string","enum":["both","hex","rows","none"]},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.read","_binding":{"id":"schedWaitCycle","method":"POST","path":"/api/sched/cycle/{id}/wait","pathParams":["id"],"queryParams":[],"bodyParams":["timeoutMs","joblogs","outputs","records"],"extraParams":["workspace"]}},{"name":"purge_job","description":"Purge a job and its spool","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"jobs.write","_binding":{"id":"purgeJob","method":"DELETE","path":"/api/jobs/{jobid}","pathParams":["jobid"],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"set_spool_file_outdisp","description":"Change one spool data set output disposition (SDSF JDS O/H/P actions): WRITE releases it, HOLD/LEAVE hold it, KEEP keeps it, PURGE removes the data set — the job is untouched","inputSchema":{"type":"object","properties":{"jobid":{"type":"string","description":"JES2 job id"},"name":{"type":"string","description":"spool file name"},"outdisp":{"type":"string","description":"WRITE | HOLD | KEEP | LEAVE | PURGE"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["jobid","name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"jobs.write","_binding":{"id":"setSpoolFileOutdisp","method":"PUT","path":"/api/jobs/{jobid}/file/{name}/outdisp","pathParams":["jobid","name"],"queryParams":[],"bodyParams":["outdisp"],"extraParams":["workspace"]}},{"name":"sql","description":"Execute a SQL batch against the Db2 subsystem (SPUFI/DSNTEP2 equivalent): statements separated by ;, each answered with its SQLCODE, Db2 message text and rows. This is the Db2 door (tables in DSN1), not the copybook-mapped dataset SQL views of POST /api/sql.","inputSchema":{"type":"object","properties":{"sql":{"type":"string","description":"SQL statements separated by ;"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["sql"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"db2.exec","_binding":{"id":"spufi","method":"POST","path":"/api/spufi","pathParams":[],"queryParams":[],"bodyParams":["sql"],"extraParams":["workspace"]}},{"name":"cics_csd","description":"The whole CSD (every resource definition: PROGRAM, TRANSACTION, FILE, MAPSET, TDQUEUE, JSONSERVICE, ...) as data — the transid→program→file mapping an online comparison needs; find_program returns the slice for ONE program","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"cics.read","_binding":{"id":"cicsCsd","method":"GET","path":"/api/cics/csd","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"bms_preview","description":"Parse BMS mapset source into its map model (rows/cols/attributes/initials) — the IDE renders 3270 and HTML5 previews from it","inputSchema":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"string"},"description":"BMS macro source (DFHMSD/DFHMDI/DFHMDF card images)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["lines"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"cics.read","_binding":{"id":"bmsPreview","method":"POST","path":"/api/bms/preview","pathParams":[],"queryParams":[],"bodyParams":["lines"],"extraParams":["workspace"]}},{"name":"cics_define","description":"CEDA-style DEFINE (+install) of a PROGRAM/TRANSACTION/FILE/MAPSET/... — on the LIVE estate only with a token holding cics.admin (FILE also passes the CASFILE operator check), otherwise pass workspace:<id> (create_workspace) — inside a workspace cics.exec suffices (cics.admin is granted there), every other tool keeps its own scope inside too; FILE attrs: dsn or DSNAME name the dataset","inputSchema":{"type":"object","properties":{"kind":{"type":"string","description":"PROGRAM|TRANSACTION|FILE|MAPSET|TDQUEUE|JSONSERVICE|..."},"name":{"type":"string","description":"resource name"},"attrs":{"description":"attribute object","type":"object"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate — REQUIRED unless the token holds scope cics.admin (then the live estate is allowed, exactly like the REST route)"}},"required":["kind","name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"cics.admin","_binding":{"id":"cicsDefine","method":"POST","path":"/api/cics/define","pathParams":[],"queryParams":[],"bodyParams":["kind","name","attrs"],"extraParams":["workspace"]},"_liveScope":"cics.admin"},{"name":"sched_list","description":"Scheduler store overview: folders, jobs, conditions, symbols, cycles","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"sched.read","_binding":{"id":"schedStore","method":"GET","path":"/api/sched/store","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"sched_jobs","description":"Job definitions of a folder (* = all) WITH the dependency graph as data: CA-7 triggers[{job,schid,qtm,leadtm}], Control-M inconds/outconds, calendars, time windows","inputSchema":{"type":"object","properties":{"folder":{"type":"string","description":"folder name (* = all)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"sched.read","_binding":{"id":"schedJobs","method":"GET","path":"/api/sched/jobs","pathParams":[],"queryParams":["folder"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"sched_status","description":"One scheduler cycle: per-job state (WAITING|HELD|EXECUTING|ENDED-OK|ENDED-NOTOK|CANCELLED), jobid, maxcc, reason (WAIT-COND/WAIT-TIME/HELD-BY-OPERATOR/LATE) and the cycle log; sched_wait_cycle adds the joblogs","inputSchema":{"type":"object","properties":{"id":{"type":"string","description":"cycle id"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"sched.read","_binding":{"id":"schedCycle","method":"GET","path":"/api/sched/cycle","pathParams":[],"queryParams":["id"],"bodyParams":[],"extraParams":["workspace"]}},{"name":"sched_order","description":"Control-M ORDER: start a cycle for a folder — every calendar-eligible job (all with force) runs under its IN conditions; returns the cycle id for sched_wait_cycle","inputSchema":{"type":"object","properties":{"folder":{"type":"string","description":"folder name"},"force":{"description":"order even out of schedule","type":"boolean"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["folder"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedOrder","method":"POST","path":"/api/sched/order","pathParams":[],"queryParams":[],"bodyParams":["folder","force"],"extraParams":["workspace"]}},{"name":"sched_demand","description":"CA-7 DEMAND: run one job AND its trigger closure as a new cycle (only the demanded job starts ready; successors release as triggers fire); returns the cycle id for sched_wait_cycle","inputSchema":{"type":"object","properties":{"job":{"type":"string","description":"job name"},"schid":{"type":"string","description":"schedule id variant (optional)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["job"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedDemand","method":"POST","path":"/api/sched/demand","pathParams":[],"queryParams":[],"bodyParams":["job","schid"],"extraParams":["workspace"]}},{"name":"sched_symbol","description":"Set a JCLLIB-style symbol (e.g. &CARDDEMOPRODJCL)","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"symbol name"},"value":{"type":"string","description":"value"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["name","value"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedSymbol","method":"POST","path":"/api/sched/symbol","pathParams":[],"queryParams":[],"bodyParams":["name","value"],"extraParams":["workspace"]}},{"name":"sched_options","description":"Set scheduler options: okrc (max RC counted OK), jcllib (default JCL library the cycles submit from), newdayTime, condRetainDays, ca7Rerun (YES lets a CA-7 trigger re-run an already-run job), ca7MaxRuns","inputSchema":{"type":"object","properties":{"okrc":{"description":"max RC counted as OK","type":"integer"},"jcllib":{"type":"string","description":"default JCL library the cycles submit from (a DSN or a &SYMBOL set with sched_symbol)"},"newdayTime":{"type":"string","description":"New Day time HHMM (sched_newday's scheduled moment)"},"condRetainDays":{"description":"days a posted condition is kept before New Day ages it out","type":"integer"},"ca7Rerun":{"type":"string","description":"'YES' lets a CA-7 trigger re-run a job that already ran in the cycle (default 'NO')"},"ca7MaxRuns":{"description":"cap on re-runs of one job per cycle when ca7Rerun is YES (default 10)","type":"integer"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedOptions","method":"POST","path":"/api/sched/options","pathParams":[],"queryParams":[],"bodyParams":["okrc","jcllib","newdayTime","condRetainDays","ca7Rerun","ca7MaxRuns"],"extraParams":["workspace"]}},{"name":"sched_condition","description":"Post (+) or erase (-) a global IOA-style condition (name/ODATE) — the manual 'predecessor done' signal that releases a Control-M job waiting on an IN condition","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"condition name"},"sign":{"type":"string","description":"'+' (default) or '-'"},"odate":{"type":"string","description":"optional ODATE (yyyymmdd, ODAT, STAT/****; default ODAT=today; '-' with no odate erases every date of the name)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedCondition","method":"POST","path":"/api/sched/condition","pathParams":[],"queryParams":[],"bodyParams":["name","sign","odate"],"extraParams":["workspace"]}},{"name":"sched_job_action","description":"Operator action on a cycle job: HOLD, FREE, RUNNOW (release ignoring conditions/time window), BYPASS (force-complete without running; successors release) or RESTART a failed job","inputSchema":{"type":"object","properties":{"cycle":{"type":"string","description":"cycle id (CYCnnnnn)"},"job":{"type":"string","description":"job name"},"action":{"description":"HOLD|FREE|RUNNOW|BYPASS|RESTART","type":"string","enum":["HOLD","FREE","RUNNOW","BYPASS","RESTART"]},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["cycle","job","action"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedJobAction","method":"POST","path":"/api/sched/jobaction","pathParams":[],"queryParams":[],"bodyParams":["cycle","job","action"],"extraParams":["workspace"]}},{"name":"sched_cancel","description":"Cancel the remaining (waiting/held) work of an active cycle","inputSchema":{"type":"object","properties":{"cycle":{"type":"string","description":"cycle id (CYCnnnnn)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["cycle"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"sched.admin","_binding":{"id":"schedCancel","method":"POST","path":"/api/sched/cancel","pathParams":[],"queryParams":[],"bodyParams":["cycle"],"extraParams":["workspace"]}},{"name":"sched_newday","description":"Run the New Day procedure: age the conditions table, order every eligible Control-M folder, demand every scheduled CA-7 job (holiday/ROLL calendars applied)","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedNewday","method":"POST","path":"/api/sched/newday","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"sched_calendar","description":"Define a base calendar (CA-7 SCAL / Control-M CONFCAL): holidays + working week; jobs reference it via SCAL/SCHED_CALENDAR with ROLL/SHIFT semantics","inputSchema":{"type":"object","properties":{"name":{"type":"string","description":"calendar name"},"holidays":{"description":"[yyyymmdd,...]","type":"array","items":{"type":"string"}},"weekdays":{"type":"string","description":"working week, e.g. 'MO,TU,WE,TH,FR' (optional)"},"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false},"scope":"sched.admin","_binding":{"id":"schedCalendar","method":"PUT","path":"/api/sched/calendar","pathParams":[],"queryParams":[],"bodyParams":["name","holidays","weekdays"],"extraParams":["workspace"]}},{"name":"sched_alerts","description":"SHOUT alert log (WHEN OK/NOTOK/LATESUB/LATETIME, destination, urgency), newest first","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"run inside this workspace (create_workspace) instead of the live estate (optional)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false},"scope":"sched.read","_binding":{"id":"schedAlerts","method":"GET","path":"/api/sched/alerts","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]}},{"name":"sched_reset","description":"Wipe the scheduler store + cycles — WORKSPACE-ONLY on the MCP surface (pass workspace:<id>); refused on the live door","inputSchema":{"type":"object","properties":{"workspace":{"type":"string","description":"REQUIRED: run inside this workspace (create_workspace) — this tool is refused on the live estate"}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true},"scope":"sched.admin","_binding":{"id":"schedReset","method":"POST","path":"/api/sched/reset","pathParams":[],"queryParams":[],"bodyParams":[],"extraParams":["workspace"]},"_workspaceOnly":true}]}