Hostinger VPS Update Firewall Rule V1
This descriptor comes from the active versioned Portal catalog.
- Contract tier:
agent_ready - Risk:
write - Catalog version:
hostinger-2026.07.12.1 - Descriptor hash:
71f30fcdc8223fa202d8090467ac22a8401566e7c4779d1e398060767e214162
Use this tool when you need the Hostinger operation Update firewall rule. Update a specific firewall rule from a specified firewall. Any virtual machine that has this firewall activated will lose sync with the firewall and will have to be synced again manually. Use this endpoint to modify existing firewall rules. It calls PUT /api/vps/v1/firewall/{firewallId}/rules/{ruleId} against the configured Hostinger account. This changes external Hostinger state and requires confirm=true. Provider parameters: firewallId (path, required): Firewall ID ruleId (path, required): Firewall Rule ID The body follows the complete Hostinger schema in inputSchema. Do not place API tokens in arguments; credentials arrive only through protected Portal headers. The result is the normalized Hostinger MCP envelope with data, safe error details, HTTP/rate metadata, and pagination metadata when available. Runtime summary: Use this when you need Hostinger API operation VPS_updateFirewallRuleV1: Update firewall rule. Update a specific firewall rule from a specified firewall. Any virtual machine that has this firewall activated will lose sync with the firewall and will have to be synced again manually. Use this endpoint to modify existing firewall rules. Endpoint: PUT /api/vps/v1/firewall/{firewallId}/rules/{ruleId}. Path params: firewallId, ruleId. Request body: required/accepted. Risk class: write. This write tool requires confirm=true. Returns the compact MAD envelope {ok,data,error,meta}; set dry_run=true to preview without calling Hostinger.
Request Body
{
"jsonrpc": "2.0",
"id": "hostinger-vps-updatefirewallrulev1-example",
"method": "tools/call",
"params": {
"name": "hostinger.VPS_updateFirewallRuleV1",
"arguments": {
"path_params": "",
"body": "",
"params": "",
"compact": "",
"confirm": false,
"dry_run": false,
"max_items": "",
"include_raw": false,
"confirmation_phrase": ""
}
}
}
Arguments Schema
{
"type": "object",
"required": [
"path_params",
"body"
],
"properties": {
"body": {
"anyOf": [
{
"type": "object",
"required": [
"protocol",
"port",
"source",
"source_detail"
],
"properties": {
"port": {
"type": "string",
"description": "Port or port range, ex: 1024:2048"
},
"source": {
"enum": [
"any",
"custom"
],
"type": "string",
"description": "Hostinger request body field source."
},
"protocol": {
"enum": [
"TCP",
"UDP",
"ICMP",
"GRE",
"any",
"ESP",
"AH",
"ICMPv6",
"SSH",
"HTTP",
"HTTPS",
"MySQL",
"PostgreSQL"
],
"type": "string",
"description": "Hostinger request body field protocol."
},
"source_detail": {
"type": "string",
"description": "IP range, CIDR, single IP or `any`"
}
}
},
{
"type": "null"
}
],
"default": null,
"description": "JSON request body using the complete checked-in Hostinger provider schema."
},
"params": {
"anyOf": [
{
"type": "object",
"properties": {},
"additionalProperties": false
},
{
"type": "null"
}
],
"default": null,
"description": "Exact query parameters for this Hostinger operation, keyed by the provider names shown here."
},
"compact": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"description": "When true, truncate large arrays using MCP_MAX_ITEMS_* limits."
},
"confirm": {
"type": "boolean",
"default": false,
"description": "Required as true for any Hostinger write, spend, or destructive call."
},
"dry_run": {
"type": "boolean",
"default": false,
"description": "Preview the request and risk gates without calling Hostinger."
},
"max_items": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Maximum array items to keep when compacting responses."
},
"include_raw": {
"type": "boolean",
"default": false,
"description": "When true, include raw Hostinger response alongside normalized data."
},
"path_params": {
"anyOf": [
{
"type": "object",
"required": [
"firewallId",
"ruleId"
],
"properties": {
"ruleId": {
"type": "integer",
"description": "Firewall Rule ID"
},
"firewallId": {
"type": "integer",
"description": "Firewall ID"
}
},
"additionalProperties": false
},
{
"type": "null"
}
],
"default": null,
"description": "Exact path parameters for this Hostinger operation, keyed by the provider names shown here."
},
"confirmation_phrase": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Required exact phrase for spend, credential, and destructive tools."
}
},
"additionalProperties": false
}
Output Schema
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ok",
"data",
"error",
"meta"
],
"properties": {
"ok": {
"type": "boolean",
"description": "True only when the requested Hostinger or local catalog operation succeeded."
},
"data": {
"description": "Normalized result data, or null when the operation failed."
},
"meta": {
"type": "object",
"description": "Safe endpoint, timing, pagination, rate, catalog, and next-action metadata.",
"additionalProperties": true
},
"error": {
"description": "Secret-safe structured error details, or null on success."
}
},
"description": "Normalized Hostinger MCP response envelope.",
"additionalProperties": false
}
Code Examples
- cURL
- Node.js
- Python
curl -X POST 'https://portal.madpanda3d.com/api/mcp' \
-H 'Authorization: Bearer mad_live_***' \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": "hostinger-vps-updatefirewallrulev1-example",
"method": "tools/call",
"params": {
"name": "hostinger.VPS_updateFirewallRuleV1",
"arguments": {
"path_params": "",
"body": "",
"params": "",
"compact": "",
"confirm": false,
"dry_run": false,
"max_items": "",
"include_raw": false,
"confirmation_phrase": ""
}
}
}'
const response = await fetch('https://portal.madpanda3d.com/api/mcp', {
method: 'POST',
headers: {
Authorization: 'Bearer mad_live_***',
'Content-Type': 'application/json',
},
body: JSON.stringify({
"jsonrpc": "2.0",
"id": "hostinger-vps-updatefirewallrulev1-example",
"method": "tools/call",
"params": {
"name": "hostinger.VPS_updateFirewallRuleV1",
"arguments": {
"path_params": "",
"body": "",
"params": "",
"compact": "",
"confirm": false,
"dry_run": false,
"max_items": "",
"include_raw": false,
"confirmation_phrase": ""
}
}
}),
});
const data = await response.json();
console.log(data);
import requests
url = 'https://portal.madpanda3d.com/api/mcp'
headers = {
'Authorization': 'Bearer mad_live_***',
'Content-Type': 'application/json',
}
payload = {
"jsonrpc": "2.0",
"id": "hostinger-vps-updatefirewallrulev1-example",
"method": "tools/call",
"params": {
"name": "hostinger.VPS_updateFirewallRuleV1",
"arguments": {
"path_params": "",
"body": "",
"params": "",
"compact": "",
"confirm": false,
"dry_run": false,
"max_items": "",
"include_raw": false,
"confirmation_phrase": ""
}
}
}
response = requests.post(url, headers=headers, json=payload, timeout=60)
print(response.json())
Example Responses
- 200 Success
- 502 Upstream Error
{
"ok": true,
"message": "Tool hostinger.VPS_updateFirewallRuleV1 executed successfully.",
"note": "Response shape varies by MCP tool. Inspect live responses for exact fields."
}
{
"ok": false,
"classification": "upstream_http_error",
"message": "Upstream MCP returned a non-success status."
}