z/OS FTP MCP服务器
](https://pypi.org/project/zos-ftp-mcp/) ](https://pepy.tech/projects/zos-ftp-mcp) ](https://pypi.org/project/zos-ftp-mcp/) 
用于通过FTP与z/OS大型机系统交互的模型上下文协议(MCP)服务器。
特性
- 使用模式匹配从大型机目录中列出数据集
- 下载二进制和文本格式的数据集,并进行编码转换
- 从具有并行支持的分区数据集(PDS)下载成员
- 提交并监控JCL作业
- 高级文本处理:编码转换、行尾控制、尾随空格处理
- 可配置的写保护,安全生产使用
- 通过环境变量进行连接管理
安装
MCP服务器使用情况
无需安装!MCP配置 uvx 将自动下载并运行该包。
Python库用法
pip install zos-ftp-mcp配置
设置连接的环境变量:
export ZFTP_HOST="your-mainframe-host"
export ZFTP_PORT="21"
export ZFTP_USER="your-username"
export ZFTP_PASSWORD="your-password"
export ZFTP_TIMEOUT="600.0"
export ZFTP_DOWNLOAD_PATH="/path/to/downloads"
export ZFTP_DEBUG="false" # Set to "true" for detailed FTP protocol logging
export ZFTP_ALLOW_WRITE="false" # Set to "true" to enable upload/submit operations高级文本处理
控制文本文件如何从EBCDIC主机下载到ASCII/UTF-8:
# Character encoding conversion (EBCDIC to ASCII/UTF-8)
export ZFTP_DEFAULT_ENCODING="IBM-037,UTF-8" # US/Canada EBCDIC to UTF-8
# Other options: IBM-1047,UTF-8 (Latin-1), IBM-285,UTF-8 (UK)
# Line ending format
export ZFTP_DEFAULT_LINE_ENDING="LF" # Unix/Linux style
# Options: CRLF (Windows), LF (Unix), CR (old Mac), NONE
# Preserve trailing spaces in fixed-length records
export ZFTP_PRESERVE_TRAILING_SPACES="false" # Strip trailing spaces
# Set to "true" to keep 80-character fixed-length records intact何时使用这些设置:
- 编码:对于正确的字符转换(JCL、COBOL、日志)至关重要
- 行尾:跨平台兼容性、版本控制(Git)
- 尾部空格:对于大多数文本文件保持“false”,对于固定格式数据保持“true”
写入操作
默认情况下,MCP服务器为 只读 为了安全。要启用写入操作,请执行以下操作:
export ZFTP_ALLOW_WRITE="true"启用后,您可以:
- 将文件上传到大型机数据集(
upload_dataset) - 提交JCL作业(
submit_job)
在生产环境中小心使用。只读操作(列表、下载、监视作业)始终可用。
用法
作为MCP服务器
{
"mcpServers": {
"zos-ftp-mcp": {
"command": "uvx",
"args": ["zos-ftp-mcp"],
"env": {
"ZFTP_HOST": "your-mainframe-host",
"ZFTP_USER": "your-username",
"ZFTP_PASSWORD": "your-password",
"ZFTP_DOWNLOAD_PATH": "/path/to/downloads"
}
}
}
}直接命令行
zos-ftp-mcp可用工具
数据集操作
list_catalog(pattern, limit, offset)-列出与分页模式匹配的数据集download_binary(source_dataset, target_file)-以二进制模式下载数据集download_text(source_dataset, target_file, encoding, line_ending, preserve_trailing_spaces)-带文本处理的下载download_pds_members(dataset, target_dir, members, encoding, line_ending, ...)-使用高级选项下载PDS成员upload_dataset(source_file, target_dataset, binary, lrecl, blksize, recfm, space)-将文件上传到数据集(要求ZFTP_ALLOW_WRITE=true)get_vsam_info(dataset, limit, offset)-通过分页获取VSAM数据集信息(要求ZFTP_ALLOW_WRITE=true)get_gdg_info(gdg_base, limit, offset)-通过分页获取GDG基本属性和生成(需要ZFTP_ALLOW_WRITE=true)
作业操作
submit_job(jcl, jobname)-提交JCL作业(要求ZFTP_ALLOW_WRITE=true)list_jes_jobs(jobmask, owner, status, limit, offset)-列出具有筛选和分页功能的作业get_job_info(jobid)-获取作业详细信息download_job_spool(jobid, target_file)-下载带有返回代码提取的作业输出
连接管理
get_connection_info()-显示当前连接设置
示例使用提示
配置后,您可以使用以下提示:
数据集发现
“列出从SYS1开始的所有数据集以探索系统数据集”
“显示与MYUSER.\*模式匹配的所有用户数据集”
数据下载
“使用UTF-8编码将数据集MYUSER.COBOL.SOURCE下载到我的本地下载文件夹”
“将PDS MYUSER.COBOL.COPYLIB中的所有成员下载到本地目录”
数据上传(要求ZFTP_ALLOW_WRITE=true)
“将我的本地文件test.jcl上传到数据集MYUSER.jcl.test,lrecl=80,recfm=FB”
“将本地文件member.cbl上载到PDS成员MYUSER.COBOL.SOURCE(TESTPGM)”
作业操作
“提交此JCL作业并等待完成”(要求ZFTP_ALLOW_WRITE=true)
“列出我所有处于输出状态的作业”
“下载作业JOB12345的线轴输出,并向我显示返回代码”
连接管理
“显示当前FTP连接设置”
依赖项
- 主控程序 -模型上下文协议
- Python 3.10+标准库(ftplib、pathlib等)
高级功能
分页支持
为了避免大结果集的上下文窗口过多,有几个工具支持分页:
带分页的工具:
list_catalog-通过数据集进行分页list_jes_jobs-通过工作进行分页get_vsam_info-通过VSAM数据集进行分页get_gdg_info-通过GDG世代传诵
用途:
# Get first 50 datasets
list_catalog('USER.*', limit=50)
# Get next 50 datasets
list_catalog('USER.*', limit=50, offset=50)
# Get first 20 jobs
list_jes_jobs(status='OUTPUT', limit=20)
# Get first 10 GDG generations
get_gdg_info('AWS.M2.CARDDEMO.TRANSACT.BKUP', limit=10)答复包括:
count-此页面中返回的项目数total-可用项目总数offset-当前偏移量has_more-如果有更多项目可用,则为True
JESINTERFACE级别限制
服务器会自动检测大型机的JES接口级别。随着 jesinterfaceelevel=1 (常见于旧系统):
职位提交:
- JCL中的作业名必须为
userid + exactly one character - 示例:如果用户ID为
USER123,作业名称必须为USER123J - 服务器会自动验证并提供明确的错误消息
职位列表:
- 服务器端过滤可能不起作用
- 客户端过滤是自动应用的
- 作业可能会很快从卷轴中清除
解决方法: 服务器透明地处理这些限制。请注意,如果作业被快速清除,则作业检索可能会失败。
并行PDS下载
使用多个FTP连接更快地下载PDS成员:
# Sequential (default)
download_pds_members(dataset, target_dir, members, ftp_threads=1)
# Parallel (2-16 threads)
download_pds_members(dataset, target_dir, members, ftp_threads=4)对于大型PDS(>10个成员),并行下载速度要快得多。
每次操作超限
虽然默认值是通过环境变量设置的,但您可以在每次操作中覆盖它们:
# Use different line ending for specific file
download_text(dataset, target_file, line_ending='CRLF')
# Preserve trailing spaces for fixed-format data
download_text(dataset, target_file, preserve_trailing_spaces=True)
# Use different encoding
download_pds_members(dataset, target_dir, members, encoding='IBM-1047,UTF-8')许可证
MIT许可证-有关详细信息,请参阅许可证文件。
