-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Hi Team
We are leveraging netapp-dataops-toolkit MCP server and adding this as an integration into our Agentic Autonomous IT Support Platform product. While testing we found that our customers do not export standard port 443 for the ONTAP API endpoint , instead they NAT this apply port-forwarding from any random port to 443 , in our case its via 8001 --> 443.
The current implementation does not support custom port number , with this github issue we are requesting to add support for customer port numbers. So the config should look something like
{
"connectionType": "ONTAP",
"hostname": "100.100.xx.xx:8001",
"svm": "",
"dataLif": "100.100.xx.xx:8001",
"defaultVolumeType": "flexgroup",
"defaultExportPolicy": "default",
"defaultSnapshotPolicy": "none",
"defaultUnixUID": "0",
"defaultUnixGID": "0",
"defaultUnixPermissions": "0777",
"defaultAggregate": "",
"username": "xxxxx",
"password": "xxxxxx",
"verifySSLCert": false
}
Some logs for your reference
2025-12-30T08:26:24.356Z [netapp-ontap] [info] Initializing server... { metadata: undefined }
2025-12-30T08:26:24.374Z [netapp-ontap] [info] Using MCP server command: /opt/homebrew/bin/uvx with args and path: {
metadata: {
args: [
'--from',
'netapp-dataops-traditional',
'netapp_dataops_ontap_mcp.py',
[length]: 3
],
paths: [
'/usr/local/bin',
'/opt/homebrew/bin',
'/usr/bin',
'/bin',
'/usr/sbin',
'/sbin',
[length]: 6
]
}
} %o
2025-12-30T08:26:24.374Z [netapp-ontap] [info] Server started and connected successfully { metadata: undefined }
2025-12-30T08:26:24.426Z [netapp-ontap] [info] Message from client: {"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0} { metadata: undefined }
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/volume_efficiency.py:136: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
ratio = marshmallow_fields.Number(data_key="ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/shelf_voltage_sensors.py:47: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
voltage = marshmallow_fields.Number(data_key="voltage", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_fc_ports.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
configured_data_rate = marshmallow_fields.Number(data_key="configured_data_rate", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_fc_ports.py:37: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
data_rate_capability = marshmallow_fields.Number(data_key="data_rate_capability", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_fc_ports.py:46: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
negotiated_data_rate = marshmallow_fields.Number(data_key="negotiated_data_rate", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/ems_event_action_parameters.py:77: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
multiple_of = marshmallow_fields.Number(data_key="multipleOf", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_sas_ports.py:27: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
data_rate_capability = marshmallow_fields.Number(data_key="data_rate_capability", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_sas_ports.py:36: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
negotiated_data_rate = marshmallow_fields.Number(data_key="negotiated_data_rate", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/space_efficiency.py:27: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
ratio = marshmallow_fields.Number(data_key="ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/nvme_namespace_space.py:29: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
efficiency_ratio = marshmallow_fields.Number(data_key="efficiency_ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/aggr_space_efficiency.py:42: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
ratio = marshmallow_fields.Number(data_key="ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/analytics_histogram_by_time.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
aged_data_metric = marshmallow_fields.Number(data_key="aged_data_metric", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/marshmallow/utils.py:361: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
return cls_or_instance()
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/ems_action_parameter.py:77: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
multiple_of = marshmallow_fields.Number(data_key="multipleOf", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/lun_space.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
efficiency_ratio = marshmallow_fields.Number(data_key="efficiency_ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_unit_space.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
efficiency_ratio = marshmallow_fields.Number(data_key="efficiency_ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_bridge_fc_ports_sfp.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
data_rate_capability = marshmallow_fields.Number(data_key="data_rate_capability", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/models/storage_availability_zone_space_efficiency_without_snapshots.py:24: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
ratio = marshmallow_fields.Number(data_key="ratio", allow_none=True)
/Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G/lib/python3.12/site-packages/netapp_ontap/resources/storage_port.py:353: ChangedInMarshmallow4Warning: `Number` field should not be instantiated. Use `Integer`, `Float`, or `Decimal` instead.
speed = marshmallow_fields.Number(
Registered tools:
{'CreateVolume': FunctionTool(name='CreateVolume', title=None, description='Use this tool to rapidly provision a new data volume.\n\nArgs:\n volume_name (str): Name of the new volume (required).\n volume_size (str): Size of the new volume (required). Format: \'1024MB\', \'100GB\', \'10TB\', etc.\n guarantee_space (bool): Guarantee sufficient storage space for the full capacity of the volume (i.e., do not use thin provisioning). Defaults to False.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n volume_type (str): Volume type can be flexvol (default) or flexgroup. Defaults to "flexvol".\n unix_permissions (str): Unix filesystem permissions to apply when creating the new volume (e.g., \'0777\' for full read/write permissions for all users and groups). Defaults to "0777".\n unix_uid (str): Unix filesystem user ID (uid) to apply when creating the new volume (e.g., \'0\' for root user). Defaults to "0".\n unix_gid (str): Unix filesystem group ID (gid) to apply when creating the new volume (e.g., \'0\' for root group). Defaults to "0".\n export_policy (str): NFS export policy to use when exporting the new volume. Defaults to "default".\n snapshot_policy (str): Snapshot policy to apply for the new volume. Defaults to "none".\n aggregate (str): Aggregate name or comma-separated aggregates for flexgroup. Defaults to None.\n mountpoint (str): Local mountpoint to mount the new volume at. If not specified, the volume will not be mounted locally. On Linux hosts - if specified, the calling program must be run as root. Defaults to None.\n junction (str): Custom junction path for the volume to be exported at. If not specified, the junction path will be: ("/"+Volume Name). Defaults to None.\n readonly (bool): Mount the volume locally as "read-only." If not specified, the volume will be mounted as "read-write". On Linux hosts - if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n tiering_policy (str): For fabric pool-enabled systems, the tiering policy can be: none, auto, snapshot-only, all. Defaults to None.\n vol_dp (bool): Create the volume as type DP, which can be used as a SnapMirror destination. Defaults to False.\n snaplock_type (str): SnapLock type to apply for the new volume (e.g., \'compliance\' or \'enterprise\'). Defaults to None.\n\nReturns:\n None.', tags=set(), enabled=True), 'CloneVolume': FunctionTool(name='CloneVolume', title=None, description='Use this tool to near-instantaneously create a new data volume that is an exact copy of an existing volume. \nThis functionality utilizes NetApp FlexClone technology, ensuring that any clones created will be extremely storage-space-efficient. \nAside from metadata, a clone will not consume additional storage space until its contents start to deviate from the source volume.\n\nArgs:\n new_volume_name (str): Name of the new cloned volume (required).\n source_volume_name (str): Name of the volume to be cloned (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n source_snapshot_name (str): Name of the snapshot to be cloned. If suffixed by \'*\', the latest snapshot starting with the prefix will be used (e.g., \'daily*\'). Defaults to None.\n source_svm (str): Name of the SVM hosting the volume to be cloned. Defaults to the default SVM if not provided.\n target_svm (str): Name of the SVM hosting the clone. Defaults to the source SVM if not provided.\n export_hosts (str): Colon-separated hosts/CIDRs for export. Hosts will be exported for read-write and root access. Defaults to None.\n export_policy (str): Export policy name to attach to the volume. Default policy will be used if export-hosts/export-policy is not provided. Defaults to None.\n snapshot_policy (str): Name of an existing snapshot policy to configure on the volume. Defaults to None.\n split (bool): Start clone split after creation. Defaults to False.\n unix_uid (str): Unix filesystem user ID (uid) to apply when creating the new volume. Defaults to the source volume\'s uid. Cannot apply uid of \'0\' when creating a clone. Defaults to None.\n unix_gid (str): Unix filesystem group ID (gid) to apply when creating the new volume. Defaults to the source volume\'s gid. Cannot apply gid of \'0\' when creating a clone. Defaults to None.\n mountpoint (str): Local mountpoint to mount the new volume. If not specified, the volume will not be mounted locally. On Linux hosts, if specified, the calling program must be run as root. Defaults to None.\n junction (str): Custom junction path for the volume to be exported at. Defaults to "/<Volume Name>" if not specified. Defaults to None.\n readonly (bool): Option to mount the volume locally as "read-only." Defaults to "read-write" if not specified. On Linux hosts, if specified, the calling program must be run as root. Defaults to False.\n refresh (bool): If true, a previous clone using this name will be deleted prior to the new clone creation. Defaults to False.\n svm_dr_unprotect (bool): Marks the clone to be excluded from SVM-DR replication when configured on the clone SVM. Defaults to False.\n print_output (bool): Prints logs to the console. Defaults to False.\n\nReturns:\n None', tags=set(), enabled=True), 'ListVolumes': FunctionTool(name='ListVolumes', title=None, description="Use this tool to retrieve a list of all existing data volumes.\n\nArgs:\n check_local_mounts (bool): If set to true, the local mountpoints of any mounted volumes will be included in the returned list and printed output. Defaults to False.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\n include_space_usage_details (bool): Include storage space usage details in the output. Defaults to False. \n If set to True, then four additional fields will be included in the output: 'Snap Reserve', 'Capacity', 'Usage', and 'Footprint'. \n These fields and their relation to the 'Size' field are explained below:\n - Size: The logical size of the volume.\n - Snap Reserve: The percentage of the volume's logical size that is reserved for snapshot copies.\n - Capacity: The logical capacity that is available for users of the volume to store data in.\n - Usage: The combined logical size of all of the files that are stored on the volume.\n - Footprint: The actual on-disk storage space that is being consumed by the volume after all ONTAP storage efficiencies are taken into account.\n\nReturns:\n A list of all existing volumes. Each item in the list will be a dictionary containing details regarding a specific volume.", tags=set(), enabled=True), 'MountVolume': FunctionTool(name='MountVolume', title=None, description='Use this tool to mount an existing data volume as "read-only" or "read-write" on your local host as part of any Python program or workflow. \nOn Linux hosts, mounting requires root privileges, so any Python program that invokes this function must be run as root. \nIt is usually not necessary to invoke this function as root on macOS hosts.\n\nArgs:\n volume_name (str): Name of the volume (required).\n mountpoint (str): Local mountpoint to mount the volume at (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n mount_options (str): Specify custom NFS mount options. Defaults to None.\n lif_name(str): Non-default lif (nfs server ip/name). Defaults to None.\n readonly (bool): Option to mount the volume locally as "read-only." If not specified volume will be mounted as "read-write". On Linux hosts, if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None', tags=set(), enabled=True), 'CreateSnapshot': FunctionTool(name='CreateSnapshot', title=None, description="Use this tool to create a near-instantaneous, space-efficient, read-only copy of an existing data volume, called a snapshot. \nSnapshots are particularly useful for versioning datasets and implementing dataset-to-model traceability.\n\nArgs:\n volume_name (str): Name of the volume (required).\n snapshot_name (str): Name of the new snapshot. If not specified, will be set to 'netapp_dataops_<timestamp>'. If retention is specified, snapshot name will be the prefix for the snapshot. Defaults to None.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n retention_count (int): The number of snapshots to keep. Excessive snapshots will be deleted. Defaults to 0.\n retention_days (bool): When true, the retention count will represent the number of days to retain snapshots. Defaults to False.\n snapmirror_label (str): When provided, the snapmirror label will be set on the snapshot created. This is useful when the volume is a source for vault snapmirror. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None", tags=set(), enabled=True), 'ListSnapshots': FunctionTool(name='ListSnapshots', title=None, description='Use this tool to retrieve a list of all existing snapshots for a specific data volume. \nSnapshots are space-efficient, read-only copies of a volume at a specific point in time. \n\nArgs:\n volume_name (str): Name of the volume (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n A list of all existing snapshots for the specific data volume.\n Each item in the list will be a dictionary containing details regarding a specific snapshot. \n The keys for the values in this dictionary are "Snapshot Name", "Create Time".', tags=set(), enabled=True), 'CreateSnapMirrorRelationship': FunctionTool(name='CreateSnapMirrorRelationship', title=None, description="Use this tool to create a SnapMirror relationship between a source volume and a target volume. \nSnapMirror is a NetApp technology used for efficient data replication between storage systems. \nThis tool is particularly useful for replicating data for various purposes, including but not limited to AI/ML model training or retraining, disaster recovery, or data migration. \nIt can also be used to initialize new replication relationships or resynchronize existing ones.\n\nArgs:\n source_svm (str): Name of the SVM hosting the source volume (required).\n source_vol (str): Name of the source volume to replicate (required).\n target_vol (str): Name of the target volume to replicate to (required). If not provided, the default SVM will be used.\n target_svm (str): Name of the SVM hosting the target volume. Defaults to None.\n cluster_name (str): Non-default cluster name. Same credentials as the default credentials should be used. Defaults to None.\n schedule (str): Name of the schedule to use. If not provided, no schedule will be provided. Defaults to an empty string.\n policy (str): SnapMirror policy to use. Defaults to 'MirrorAllSnapshots'.\n action (str): Action to perform after creating the SnapMirror relationship. Can be 'initialize' (to start new replication, requires destination volume to be of DP type) or 'resync' (to resynchronize volumes with a common snapshot). Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None", tags=set(), enabled=True), 'ListSnapMirrorRelationships': FunctionTool(name='ListSnapMirrorRelationships', title=None, description='Use this tool to retrieve a list of all existing SnapMirror relationships for which the destination volume resides on the user\'s storage system. \n\nArgs:\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n A list of all existing SnapMirror relationships for which the destination volume resides on the user\'s storage system. \n Each item in the list will be a dictionary containing details regarding a specific SnapMirror relationship. \n The keys for the values in this dictionary are "UUID", "Type", "Healthy", "Current Transfer Status", "Source Cluster", "Source SVM", "Source Volume", "Dest Cluster", "Dest SVM", "Dest Volume".', tags=set(), enabled=True), 'CreateFlexCache': FunctionTool(name='CreateFlexCache', title=None, description='Use this tool to create a FlexCache volume from a specified source volume.\n\nArgs:\n source_vol (str): Name of the source volume (required).\n source_svm (str): Name of the SVM hosting the source volume (required).\n flexcache_vol (str): Name of the FlexCache volume to create (required).\n flexcache_svm (str): Name of the SVM hosting the FlexCache volume. Defaults to None.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n flexcache_size (str): Size of the FlexCache volume (e.g., \'100GB\', \'10TB\'). Defaults to 10% of source volume size if not specified.\n junction (str): Custom junction path for the FlexCache volume to be exported at. If not specified, the junction path will be: ("/"+FlexCache Volume Name). Defaults to None.\n export_policy (str): NFS export policy to use when exporting the FlexCache volume. Defaults to "default".\n mountpoint (str): Local mountpoint to mount the FlexCache volume at. If not specified, the volume will not be mounted locally. On Linux hosts - if specified, the calling program must be run as root. Defaults to None.\n readonly (bool): Mount the FlexCache volume locally as "read-only." If not specified, the volume will be mounted as "read-write". On Linux hosts - if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None', tags=set(), enabled=True)}
╭──────────────────────────────────────────────────────────────────────────────╮
│ │
│ ▄▀▀ ▄▀█ █▀▀ ▀█▀ █▀▄▀█ █▀▀ █▀█ │
│ █▀ █▀█ ▄▄█ █ █ ▀ █ █▄▄ █▀▀ │
│ │
│ FastMCP 2.14.1 │
│ │
│ │
│ 🖥 Server name: NetApp DataOps Traditional Toolkit MCP │
│ │
│ 📦 Transport: STDIO │
│ │
│ 📚 Docs: https://gofastmcp.com │
│ 🚀 Hosting: https://fastmcp.cloud │
│ │
╰──────────────────────────────────────────────────────────────────────────────╯
[12/30/25 13:56:28] INFO Starting MCP server 'NetApp DataOps server.py:2527
Traditional Toolkit MCP' with
transport 'stdio'
2025-12-30T08:26:28.565Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":0,"result":{"protocolVersion":"2025-06-18","capabilities":{"experimental":{"tasks":{"list":{},"cancel":{},"requests":{"tools":{"call":{}},"prompts":{"get":{}},"resources":{"read":{}}}}},"prompts":{"listChanged":false},"resources":{"subscribe":false,"listChanged":false},"tools":{"listChanged":true}},"serverInfo":{"name":"NetApp DataOps Traditional Toolkit MCP","version":"2.14.1"}}} { metadata: undefined }
2025-12-30T08:26:28.566Z [netapp-ontap] [info] Message from client: {"method":"notifications/initialized","jsonrpc":"2.0"} { metadata: undefined }
2025-12-30T08:26:28.566Z [netapp-ontap] [info] Message from client: {"method":"tools/list","params":{},"jsonrpc":"2.0","id":1} { metadata: undefined }
2025-12-30T08:26:28.567Z [netapp-ontap] [info] Message from client: {"method":"prompts/list","params":{},"jsonrpc":"2.0","id":2} { metadata: undefined }
2025-12-30T08:26:28.567Z [netapp-ontap] [info] Message from client: {"method":"resources/list","params":{},"jsonrpc":"2.0","id":3} { metadata: undefined }
2025-12-30T08:26:28.569Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":1,"result":{"tools":[{"name":"CreateVolume","description":"Use this tool to rapidly provision a new data volume.\n\nArgs:\n volume_name (str): Name of the new volume (required).\n volume_size (str): Size of the new volume (required). Format: '1024MB', '100GB', '10TB', etc.\n guarantee_space (bool): Guarantee sufficient storage space for the full capacity of the volume (i.e., do not use thin provisioning). Defaults to False.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n volume_type (str): Volume type can be flexvol (default) or flexgroup. Defaults to \"flexvol\".\n unix_permissions (str): Unix filesystem permissions to apply when creating the new volume (e.g., '0777' for full read/write permissions for all users and groups). Defaults to \"0777\".\n unix_uid (str): Unix filesystem user ID (uid) to apply when creating the new volume (e.g., '0' for root user). Defaults to \"0\".\n unix_gid (str): Unix filesystem group ID (gid) to apply when creating the new volume (e.g., '0' for root group). Defaults to \"0\".\n export_policy (str): NFS export policy to use when exporting the new volume. Defaults to \"default\".\n snapshot_policy (str): Snapshot policy to apply for the new volume. Defaults to \"none\".\n aggregate (str): Aggregate name or comma-separated aggregates for flexgroup. Defaults to None.\n mountpoint (str): Local mountpoint to mount the new volume at. If not specified, the volume will not be mounted locally. On Linux hosts - if specified, the calling program must be run as root. Defaults to None.\n junction (str): Custom junction path for the volume to be exported at. If not specified, the junction path will be: (\"/\"+Volume Name). Defaults to None.\n readonly (bool): Mount the volume locally as \"read-only.\" If not specified, the volume will be mounted as \"read-write\". On Linux hosts - if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n tiering_policy (str): For fabric pool-enabled systems, the tiering policy can be: none, auto, snapshot-only, all. Defaults to None.\n vol_dp (bool): Create the volume as type DP, which can be used as a SnapMirror destination. Defaults to False.\n snaplock_type (str): SnapLock type to apply for the new volume (e.g., 'compliance' or 'enterprise'). Defaults to None.\n\nReturns:\n None.","inputSchema":{"properties":{"volume_name":{"type":"string"},"volume_size":{"type":"string"},"guarantee_space":{"default":false,"type":"boolean"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"svm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"volume_type":{"default":"flexvol","type":"string"},"unix_permissions":{"default":"0777","type":"string"},"unix_uid":{"default":"0","type":"string"},"unix_gid":{"default":"0","type":"string"},"export_policy":{"default":"default","type":"string"},"snapshot_policy":{"default":"none","type":"string"},"aggregate":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"mountpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"junction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"readonly":{"default":false,"type":"boolean"},"print_output":{"default":false,"type":"boolean"},"tiering_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"vol_dp":{"default":false,"type":"boolean"},"snaplock_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["volume_name","volume_size"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"CloneVolume","description":"Use this tool to near-instantaneously create a new data volume that is an exact copy of an existing volume. \nThis functionality utilizes NetApp FlexClone technology, ensuring that any clones created will be extremely storage-space-efficient. \nAside from metadata, a clone will not consume additional storage space until its contents start to deviate from the source volume.\n\nArgs:\n new_volume_name (str): Name of the new cloned volume (required).\n source_volume_name (str): Name of the volume to be cloned (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n source_snapshot_name (str): Name of the snapshot to be cloned. If suffixed by '*', the latest snapshot starting with the prefix will be used (e.g., 'daily*'). Defaults to None.\n source_svm (str): Name of the SVM hosting the volume to be cloned. Defaults to the default SVM if not provided.\n target_svm (str): Name of the SVM hosting the clone. Defaults to the source SVM if not provided.\n export_hosts (str): Colon-separated hosts/CIDRs for export. Hosts will be exported for read-write and root access. Defaults to None.\n export_policy (str): Export policy name to attach to the volume. Default policy will be used if export-hosts/export-policy is not provided. Defaults to None.\n snapshot_policy (str): Name of an existing snapshot policy to configure on the volume. Defaults to None.\n split (bool): Start clone split after creation. Defaults to False.\n unix_uid (str): Unix filesystem user ID (uid) to apply when creating the new volume. Defaults to the source volume's uid. Cannot apply uid of '0' when creating a clone. Defaults to None.\n unix_gid (str): Unix filesystem group ID (gid) to apply when creating the new volume. Defaults to the source volume's gid. Cannot apply gid of '0' when creating a clone. Defaults to None.\n mountpoint (str): Local mountpoint to mount the new volume. If not specified, the volume will not be mounted locally. On Linux hosts, if specified, the calling program must be run as root. Defaults to None.\n junction (str): Custom junction path for the volume to be exported at. Defaults to \"/<Volume Name>\" if not specified. Defaults to None.\n readonly (bool): Option to mount the volume locally as \"read-only.\" Defaults to \"read-write\" if not specified. On Linux hosts, if specified, the calling program must be run as root. Defaults to False.\n refresh (bool): If true, a previous clone using this name will be deleted prior to the new clone creation. Defaults to False.\n svm_dr_unprotect (bool): Marks the clone to be excluded from SVM-DR replication when configured on the clone SVM. Defaults to False.\n print_output (bool): Prints logs to the console. Defaults to False.\n\nReturns:\n None","inputSchema":{"properties":{"new_volume_name":{"type":"string"},"source_volume_name":{"type":"string"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"source_snapshot_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"source_svm":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"target_svm":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"export_hosts":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"export_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"snapshot_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"split":{"default":false,"type":"boolean"},"unix_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"unix_gid":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"mountpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"junction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"readonly":{"default":false,"type":"boolean"},"refresh":{"default":false,"type":"boolean"},"svm_dr_unprotect":{"default":false,"type":"boolean"},"print_output":{"default":false,"type":"boolean"}},"required":["new_volume_name","source_volume_name"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"ListVolumes","description":"Use this tool to retrieve a list of all existing data volumes.\n\nArgs:\n check_local_mounts (bool): If set to true, the local mountpoints of any mounted volumes will be included in the returned list and printed output. Defaults to False.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\n include_space_usage_details (bool): Include storage space usage details in the output. Defaults to False. \n If set to True, then four additional fields will be included in the output: 'Snap Reserve', 'Capacity', 'Usage', and 'Footprint'. \n These fields and their relation to the 'Size' field are explained below:\n - Size: The logical size of the volume.\n - Snap Reserve: The percentage of the volume's logical size that is reserved for snapshot copies.\n - Capacity: The logical capacity that is available for users of the volume to store data in.\n - Usage: The combined logical size of all of the files that are stored on the volume.\n - Footprint: The actual on-disk storage space that is being consumed by the volume after all ONTAP storage efficiencies are taken into account.\n\nReturns:\n A list of all existing volumes. Each item in the list will be a dictionary containing details regarding a specific volume.","inputSchema":{"properties":{"check_local_mounts":{"default":false,"type":"boolean"},"include_space_usage_details":{"default":false,"type":"boolean"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"svm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"print_output":{"default":false,"type":"boolean"}},"type":"object"},"outputSchema":{"properties":{"result":{"items":{},"type":"array"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"MountVolume","description":"Use this tool to mount an existing data volume as \"read-only\" or \"read-write\" on your local host as part of any Python program or workflow. \nOn Linux hosts, mounting requires root privileges, so any Python program that invokes this function must be run as root. \nIt is usually not necessary to invoke this function as root on macOS hosts.\n\nArgs:\n volume_name (str): Name of the volume (required).\n mountpoint (str): Local mountpoint to mount the volume at (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n mount_options (str): Specify custom NFS mount options. Defaults to None.\n lif_name(str): Non-default lif (nfs server ip/name). Defaults to None.\n readonly (bool): Option to mount the volume locally as \"read-only.\" If not specified volume will be mounted as \"read-write\". On Linux hosts, if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None","inputSchema":{"properties":{"volume_name":{"type":"string"},"mountpoint":{"type":"string"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"svm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"mount_options":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"lif_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"readonly":{"default":false,"type":"boolean"},"print_output":{"default":false,"type":"boolean"}},"required":["volume_name","mountpoint"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"CreateSnapshot","description":"Use this tool to create a near-instantaneous, space-efficient, read-only copy of an existing data volume, called a snapshot. \nSnapshots are particularly useful for versioning datasets and implementing dataset-to-model traceability.\n\nArgs:\n volume_name (str): Name of the volume (required).\n snapshot_name (str): Name of the new snapshot. If not specified, will be set to 'netapp_dataops_<timestamp>'. If retention is specified, snapshot name will be the prefix for the snapshot. Defaults to None.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n retention_count (int): The number of snapshots to keep. Excessive snapshots will be deleted. Defaults to 0.\n retention_days (bool): When true, the retention count will represent the number of days to retain snapshots. Defaults to False.\n snapmirror_label (str): When provided, the snapmirror label will be set on the snapshot created. This is useful when the volume is a source for vault snapmirror. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None","inputSchema":{"properties":{"volume_name":{"type":"string"},"snapshot_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"svm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"retention_count":{"default":0,"type":"integer"},"retention_days":{"default":false,"type":"boolean"},"snapmirror_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"print_output":{"default":false,"type":"boolean"}},"required":["volume_name"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"ListSnapshots","description":"Use this tool to retrieve a list of all existing snapshots for a specific data volume. \nSnapshots are space-efficient, read-only copies of a volume at a specific point in time. \n\nArgs:\n volume_name (str): Name of the volume (required).\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n svm_name (str): Non-default SVM name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n A list of all existing snapshots for the specific data volume.\n Each item in the list will be a dictionary containing details regarding a specific snapshot. \n The keys for the values in this dictionary are \"Snapshot Name\", \"Create Time\".","inputSchema":{"properties":{"volume_name":{"type":"string"},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"svm_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"print_output":{"default":false,"type":"boolean"}},"required":["volume_name"],"type":"object"},"outputSchema":{"properties":{"result":{"items":{},"type":"array"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"CreateSnapMirrorRelationship","description":"Use this tool to create a SnapMirror relationship between a source volume and a target volume. \nSnapMirror is a NetApp technology used for efficient data replication between storage systems. \nThis tool is particularly useful for replicating data for various purposes, including but not limited to AI/ML model training or retraining, disaster recovery, or data migration. \nIt can also be used to initialize new replication relationships or resynchronize existing ones.\n\nArgs:\n source_svm (str): Name of the SVM hosting the source volume (required).\n source_vol (str): Name of the source volume to replicate (required).\n target_vol (str): Name of the target volume to replicate to (required). If not provided, the default SVM will be used.\n target_svm (str): Name of the SVM hosting the target volume. Defaults to None.\n cluster_name (str): Non-default cluster name. Same credentials as the default credentials should be used. Defaults to None.\n schedule (str): Name of the schedule to use. If not provided, no schedule will be provided. Defaults to an empty string.\n policy (str): SnapMirror policy to use. Defaults to 'MirrorAllSnapshots'.\n action (str): Action to perform after creating the SnapMirror relationship. Can be 'initialize' (to start new replication, requires destination volume to be of DP type) or 'resync' (to resynchronize volumes with a common snapshot). Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None","inputSchema":{"properties":{"source_svm":{"type":"string"},"source_vol":{"type":"string"},"target_vol":{"type":"string"},"target_svm":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"schedule":{"default":"","type":"string"},"policy":{"default":"MirrorAllSnapshots","type":"string"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"print_output":{"default":false,"type":"boolean"}},"required":["source_svm","source_vol","target_vol"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"ListSnapMirrorRelationships","description":"Use this tool to retrieve a list of all existing SnapMirror relationships for which the destination volume resides on the user's storage system. \n\nArgs:\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n A list of all existing SnapMirror relationships for which the destination volume resides on the user's storage system. \n Each item in the list will be a dictionary containing details regarding a specific SnapMirror relationship. \n The keys for the values in this dictionary are \"UUID\", \"Type\", \"Healthy\", \"Current Transfer Status\", \"Source Cluster\", \"Source SVM\", \"Source Volume\", \"Dest Cluster\", \"Dest SVM\", \"Dest Volume\".","inputSchema":{"properties":{"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"print_output":{"default":false,"type":"boolean"}},"type":"object"},"outputSchema":{"properties":{"result":{"items":{},"type":"array"}},"required":["result"],"type":"object","x-fastmcp-wrap-result":true},"_meta":{"_fastmcp":{"tags":[]}}},{"name":"CreateFlexCache","description":"Use this tool to create a FlexCache volume from a specified source volume.\n\nArgs:\n source_vol (str): Name of the source volume (required).\n source_svm (str): Name of the SVM hosting the source volume (required).\n flexcache_vol (str): Name of the FlexCache volume to create (required).\n flexcache_svm (str): Name of the SVM hosting the FlexCache volume. Defaults to None.\n cluster_name (str): Non-default cluster name, same credentials as the default credentials should be used. Defaults to None.\n flexcache_size (str): Size of the FlexCache volume (e.g., '100GB', '10TB'). Defaults to 10% of source volume size if not specified.\n junction (str): Custom junction path for the FlexCache volume to be exported at. If not specified, the junction path will be: (\"/\"+FlexCache Volume Name). Defaults to None.\n export_policy (str): NFS export policy to use when exporting the FlexCache volume. Defaults to \"default\".\n mountpoint (str): Local mountpoint to mount the FlexCache volume at. If not specified, the volume will not be mounted locally. On Linux hosts - if specified, the calling program must be run as root. Defaults to None.\n readonly (bool): Mount the FlexCache volume locally as \"read-only.\" If not specified, the volume will be mounted as \"read-write\". On Linux hosts - if specified, the calling program must be run as root. Defaults to False.\n print_output (bool): Denotes whether or not to print messages to the console during execution. Defaults to False.\n\nReturns:\n None","inputSchema":{"properties":{"source_vol":{"type":"string"},"source_svm":{"type":"string"},"flexcache_vol":{"type":"string"},"flexcache_svm":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"cluster_name":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"flexcache_size":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"junction":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"export_policy":{"default":"default","type":"string"},"mountpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"readonly":{"default":false,"type":"boolean"},"print_output":{"default":false,"type":"boolean"}},"required":["source_vol","source_svm","flexcache_vol"],"type":"object"},"_meta":{"_fastmcp":{"tags":[]}}}]}} { metadata: undefined }
2025-12-30T08:26:28.569Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":2,"result":{"prompts":[]}} { metadata: undefined }
2025-12-30T08:26:28.569Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":3,"result":{"resources":[]}} { metadata: undefined }
2025-12-30T08:29:23.138Z [netapp-ontap] [info] Message from client: {"method":"tools/call","params":{"name":"ListVolumes","arguments":{}},"jsonrpc":"2.0","id":4} { metadata: undefined }
Error listing volumes: Caused by InvalidURL('Failed to parse: https://100.100.xxx.xxx:8001:443/api/storage/volumes')
[12/30/25 13:59:23] Error calling tool 'ListVolumes'
╭─────────── Traceback (most recent call last) ────────────╮
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_dataops/traditional │
│ /__init__.py:1531 in list_volumes │
│ │
│ 1528 │ │ │ │
│ 1529 │ │ │ # Construct list of volumes; do not i │
│ 1530 │ │ │ volumesList = list() │
│ ❱ 1531 │ │ │ for volume in volumes: │
│ 1532 │ │ │ │ baseVolumeFields = "nas.path,size │
│ 1533 │ │ │ │ try : │
│ 1534 │ │ │ │ │ volumeFields = baseVolumeFiel │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_ontap/resource.py:7 │
│ 91 in _get_collection │
│ │
│ 788 │ │ except requests.exceptions.RequestExcepti │
│ 789 │ │ │ # our @utils.api wrapper cannot help │
│ 790 │ │ │ # since this is a generator function │
│ ❱ 791 │ │ │ utils.on_api_fail(erro) │
│ 792 │ │
│ 793 │ @classmethod │
│ 794 │ def _count_collection( │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_ontap/utils.py:74 │
│ in on_api_fail │
│ │
│ 71 │ """ │
│ 72 │ │
│ 73 │ if config.RAISE_API_ERRORS: │
│ ❱ 74 │ │ raise NetAppRestError(cause=erro) from Non │
│ 75 │ return NetAppResponse(erro.response) # type: │
│ 76 │
│ 77 │
╰──────────────────────────────────────────────────────────╯
NetAppRestError: Caused by InvalidURL('Failed to parse:
https://100.100.xxx.xxx:8001:443/api/storage/volumes')
During handling of the above exception, another exception
occurred:
╭─────────── Traceback (most recent call last) ────────────╮
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/fastmcp/tools/tool_manager │
│ .py:160 in call_tool │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/fastmcp/tools/tool.py:383 │
│ in run │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /bin/netapp_dataops_ontap_mcp.py:212 in │
│ list_volumes_tool │
│ │
│ 209 │ │ A list of all existing volumes. Each item │
│ containing details regarding a specific volume. │
│ 210 │ """ │
│ 211 │ try: │
│ ❱ 212 │ │ volumes = list_volumes( │
│ 213 │ │ │ check_local_mounts=check_local_mounts, │
│ 214 │ │ │ include_space_usage_details=include_sp │
│ 215 │ │ │ cluster_name=cluster_name, │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_dataops/traditional │
│ /__init__.py:1660 in list_volumes │
│ │
│ 1657 │ │ except NetAppRestError as err: │
│ 1658 │ │ │ if print_output : │
│ 1659 │ │ │ │ logger.error("Error: ONTAP Rest A │
│ ❱ 1660 │ │ │ raise APIConnectionError(err) │
│ 1661 │ │ │
│ 1662 │ │ # Print list of volumes │
│ 1663 │ │ if print_output: │
╰──────────────────────────────────────────────────────────╯
APIConnectionError: Caused by InvalidURL('Failed to parse:
https://100.100.xxx.xxx:8001:443/api/storage/volumes')
2025-12-30T08:29:23.352Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":4,"result":{"content":[{"type":"text","text":"Error calling tool 'ListVolumes': Caused by InvalidURL('Failed to parse: https://100.100.xxx.xxx:8001:443/api/storage/volumes')"}],"isError":true}} { metadata: undefined }
2025-12-30T08:29:39.790Z [netapp-ontap] [info] Message from client: {"method":"tools/call","params":{"name":"ListVolumes","arguments":{"print_output":true}},"jsonrpc":"2.0","id":5} { metadata: undefined }
Error: ONTAP Rest API Error: Caused by InvalidURL('Failed to parse: https://100.100.xxx.xxx:8001:443/api/storage/volumes')
Error listing volumes: Caused by InvalidURL('Failed to parse: https://100.100.xxx.xxx:8001:443/api/storage/volumes')
[12/30/25 13:59:39] Error calling tool 'ListVolumes'
╭─────────── Traceback (most recent call last) ────────────╮
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_dataops/traditional │
│ /__init__.py:1531 in list_volumes │
│ │
│ 1528 │ │ │ │
│ 1529 │ │ │ # Construct list of volumes; do not i │
│ 1530 │ │ │ volumesList = list() │
│ ❱ 1531 │ │ │ for volume in volumes: │
│ 1532 │ │ │ │ baseVolumeFields = "nas.path,size │
│ 1533 │ │ │ │ try : │
│ 1534 │ │ │ │ │ volumeFields = baseVolumeFiel │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_ontap/resource.py:7 │
│ 91 in _get_collection │
│ │
│ 788 │ │ except requests.exceptions.RequestExcepti │
│ 789 │ │ │ # our @utils.api wrapper cannot help │
│ 790 │ │ │ # since this is a generator function │
│ ❱ 791 │ │ │ utils.on_api_fail(erro) │
│ 792 │ │
│ 793 │ @classmethod │
│ 794 │ def _count_collection( │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_ontap/utils.py:74 │
│ in on_api_fail │
│ │
│ 71 │ """ │
│ 72 │ │
│ 73 │ if config.RAISE_API_ERRORS: │
│ ❱ 74 │ │ raise NetAppRestError(cause=erro) from Non │
│ 75 │ return NetAppResponse(erro.response) # type: │
│ 76 │
│ 77 │
╰──────────────────────────────────────────────────────────╯
NetAppRestError: Caused by InvalidURL('Failed to parse:
https://100.100.xxx.xxx:8001:443/api/storage/volumes')
During handling of the above exception, another exception
occurred:
╭─────────── Traceback (most recent call last) ────────────╮
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/fastmcp/tools/tool_manager │
│ .py:160 in call_tool │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/fastmcp/tools/tool.py:383 │
│ in run │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /bin/netapp_dataops_ontap_mcp.py:212 in │
│ list_volumes_tool │
│ │
│ 209 │ │ A list of all existing volumes. Each item │
│ containing details regarding a specific volume. │
│ 210 │ """ │
│ 211 │ try: │
│ ❱ 212 │ │ volumes = list_volumes( │
│ 213 │ │ │ check_local_mounts=check_local_mounts, │
│ 214 │ │ │ include_space_usage_details=include_sp │
│ 215 │ │ │ cluster_name=cluster_name, │
│ │
│ /Users/ksingh/.cache/uv/archive-v0/edPVHncHWaqH3pQQO4C0G │
│ /lib/python3.12/site-packages/netapp_dataops/traditional │
│ /__init__.py:1660 in list_volumes │
│ │
│ 1657 │ │ except NetAppRestError as err: │
│ 1658 │ │ │ if print_output : │
│ 1659 │ │ │ │ logger.error("Error: ONTAP Rest A │
│ ❱ 1660 │ │ │ raise APIConnectionError(err) │
│ 1661 │ │ │
│ 1662 │ │ # Print list of volumes │
│ 1663 │ │ if print_output: │
╰──────────────────────────────────────────────────────────╯
APIConnectionError: Caused by InvalidURL('Failed to parse:
https://100.100.xxx.xxx:8001:443/api/storage/volumes')
2025-12-30T08:29:40.011Z [netapp-ontap] [info] Message from server: {"jsonrpc":"2.0","id":5,"result":{"content":[{"type":"text","text":"Error calling tool 'ListVolumes': Caused by InvalidURL('Failed to parse: https://100.100.xxx.xxx:8001:443/api/storage/volumes')"}],"isError":true}} { metadata: undefined }
Metadata
Metadata
Assignees
Labels
No labels