FortiGate MCP Server
Provides tools for managing FortiGate firewalls through the FortiOS REST API, including firewall policies, address and service objects, routing, DHCP, VPNs, users, security profiles, live sessions, logs, and configuration backups across multiple FortiGate devices.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@FortiGate MCP ServerWhich policy blocks 192.0.2.25 from reaching the file server on port 445?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
FortiGate MCP Server
A Model Context Protocol (MCP) server for FortiGate firewalls. It lets Claude Code, Claude Desktop, Cursor or any other MCP client read and change FortiOS configuration through the FortiOS REST API: policies, address and service objects, groups, routes, VIPs, DHCP, VPN, users, security profiles, live sessions and logs. One server can manage several FortiGates at once.
It was written against FortiOS 8.0 and uses only the /api/v2/cmdb, /api/v2/monitor
and /api/v2/log endpoints, so FortiOS 7.4 and 7.6 units work as well, apart from
endpoints a given release does not have.
The server exposes 140 unique tools, 275 total tool-surface registrations across stdio (137) and HTTP (138) transports; three create-tools have transport-specific parameter shapes. Every tool that changes a device is disabled until you turn writes on.
What you can do with it
Typical requests, in the words you would use with the assistant:
"Which policy blocks 192.0.2.25 from reaching the file server on port 445?" (
lookup_policy,query_traffic_log,get_firewall_policy_detail)"Add the new workstation to the remote-support exception group" (
add_address_group_members)"Reserve 192.0.2.40 for this MAC on the client VLAN" (
list_dhcp_leases,create_dhcp_reservation)"Move rule 12 above rule 7" (
move_firewall_policy)"Which IPsec tunnels are down?" (
list_ipsec_tunnels)"What does the remote-access application profile actually allow?" (
get_security_profile_detail)"Who logged into the admin GUI today?" (
query_event_log)"Save a config backup before I touch anything" (
backup_config)Anything else the REST API can do, through
cmdb_list,cmdb_get,monitor_getandlog_get.
Policy details resolve every address, address group, service and service group to its real value, and show the identity restrictions (users/groups) and the security profiles attached to the rule, so a reader does not have to open four screens to understand one line of the policy table.
Related MCP server: fortigate-mcp
Requirements
Python 3.11+ (3.12 or 3.13 recommended; the locked dependency set does not build on 3.14 yet because
pydantic-core 2.33ships no wheel for it)uvorpipA FortiGate reachable over HTTPS and a REST API admin with an API token
Install
git clone https://github.com/mdemirn/fortigate-mcp.git
cd fortigate-mcp
uv sync --locked # installs the locked, reproducible dependency setThe repository pins Python 3.12 in .python-version; uv downloads it if needed.
Without uv:
python3.12 -m venv .venv
source .venv/bin/activate
pip install -e .Create the API user on the FortiGate
In the GUI: System > Administrators > Create New > REST API Admin. Pick an admin profile (a read-only profile is enough for the read tools; writes need a profile with the matching permissions), optionally restrict Trusted Hosts to the machine that runs this server, and copy the token shown once after saving.
From the CLI:
config system api-user
edit "mcp-admin"
set accprofile "super_admin"
set vdom "root"
next
end
execute api-user generate-key mcp-adminConfigure
cp config/config.example.json config/config.jsonconfig/config.json is ignored by git. Each key under devices is the device_id
the tools take:
{
"server": {
"name": "fortigate-mcp-server",
"allow_writes": false
},
"fortigate": {
"devices": {
"fgt-hq": {
"host": "192.0.2.1",
"port": 443,
"api_token": "your-api-token",
"vdom": "root",
"verify_ssl": true,
"timeout": 30
},
"fgt-branch": {
"host": "198.51.100.1",
"port": 443,
"api_token": "your-api-token",
"vdom": "root",
"verify_ssl": true,
"timeout": 30
}
}
},
"logging": {
"level": "INFO",
"console": true
}
}allow_writeskeeps the server read-only until you set it totrue(or exportFORTIGATE_MCP_ALLOW_WRITES=1). While it istrue, every write and destructive tool runs for real, including on production units, so turn it on deliberately.Keep
verify_sslon. If the FortiGate still uses its factory self-signed certificate, install a certificate the client trusts (or add the FortiGate's CA to the system trust store) rather than disabling verification. The server logs a warning for every device that has verification turned off.username/passwordare accepted as a fallback, but an API token is the supported path.
Run
Claude Code
claude mcp add fortigate -s user \
-e FORTIGATE_MCP_CONFIG=/absolute/path/fortigate-mcp/config/config.json \
-- uv run --directory /absolute/path/fortigate-mcp python -m src.fortigate_mcp.serverCheck with claude mcp list, then restart Claude Code. A .mcp.json example for
project scope is in examples/claude_code_mcp.json.
Claude Desktop, Cursor
examples/claude_desktop_config.stdio.json and examples/cursor_mcp_config.json
contain ready-to-edit entries. The stdio server needs FORTIGATE_MCP_CONFIG in its
environment or --config on the command line.
HTTP transport
./start_http_server.sh
# or
uv run python -m src.fortigate_mcp.server_http \
--host 127.0.0.1 --port 8814 --path /fortigate-mcp --config config/config.jsonThe MCP endpoint is http://127.0.0.1:8814/fortigate-mcp; GET /health answers
without a token. Bind to anything other than 127.0.0.1 only after setting
auth.require_auth to true and listing bearer tokens under auth.api_tokens.
HTTP_MCP_GUIDE.md covers the HTTP mode in detail.
Docker
docker-compose up -dThe compose file publishes the port on the loopback interface only.
Safety model
Every tool carries a risk class that is checked at dispatch time, on both transports:
Class | Count | Examples | Default |
read | 111 |
| allowed |
write | 19 |
| refused until writes are enabled |
destructive | 10 |
| refused until writes are enabled |
The classification is derived from the tool name and verified by the test suite;
SECURITY.md lists every tool with its class. Secret-looking fields (passwords, PSKs,
passphrases, SNMP communities, keys) are redacted from every response, and the
device token never appears in logs or error messages.
backup_config is a read tool for the device, but it writes a file on the machine
running the server; it refuses to overwrite an existing file unless asked.
Tool reference
Devices
list_devices, get_device_status, test_device_connection, add_device,
remove_device, discover_vdoms, health_check, get_server_info,
get_system_resources, get_performance_status, get_system_time,
list_firmware, get_license_status, get_ha_status, get_security_rating,
list_running_processes
Firewall policies
list_firewall_policies, get_firewall_policy_detail (resolves groups, identity
and profiles), create_firewall_policy, update_firewall_policy,
move_firewall_policy, delete_firewall_policy, lookup_policy (which rule would
match a given flow), list_central_snat_rules, list_shaping_policies,
list_traffic_shapers, list_recurring_schedules, list_onetime_schedules,
list_internet_service_names
Objects
Addresses: list_address_objects, create_address_object, update_address_object,
delete_address_object.
Address groups: list_address_groups, get_address_group_detail,
create_address_group, add_address_group_members, remove_address_group_members,
delete_address_group.
Services: list_service_objects, create_service_object, update_service_object,
delete_service_object, list_service_groups.
VIPs and pools: list_virtual_ips, get_virtual_ip_detail, create_virtual_ip,
update_virtual_ip, delete_virtual_ip, list_vip_groups, list_ip_pools.
Network and routing
list_interfaces, get_interface_status, list_interface_counters, list_zones,
list_static_routes, get_static_route_detail, create_static_route,
update_static_route, delete_static_route, get_routing_table,
list_ipv6_routes, lookup_route, list_policy_routes, get_bgp_config,
get_ospf_config, list_prefix_lists, list_route_maps, get_sdwan_config,
list_sdwan_health_checks, list_sdwan_members, list_arp_table,
list_lldp_neighbors, ping_from_device, geoip_lookup
DHCP
list_dhcp_servers (with reservations), list_dhcp_leases,
create_dhcp_reservation, delete_dhcp_reservation
VPN
list_ipsec_tunnels (live status), list_ipsec_phase1, list_ipsec_phase2,
execute_ipsec_tunnel_action (up/down), list_ssl_vpn_sessions,
get_ssl_vpn_settings, list_ssl_vpn_portals, list_local_certificates,
list_ca_certificates, list_remote_certificates
Users and authentication
list_local_users, list_user_groups, list_firewall_auth_sessions,
list_radius_servers, list_ldap_servers, list_tacacs_servers,
list_saml_servers, list_fsso_agents, list_fortitokens, list_admins,
list_api_users, list_endpoint_devices
Security profiles
list_security_profiles and get_security_profile_detail for application,
webfilter, antivirus, ips, dnsfilter, ssl-ssh, dlp, emailfilter,
file-filter, icap, ssh-filter, waf, voip and virtual-patch;
list_url_filters, list_dns_domain_filters, list_ips_custom_signatures,
list_application_groups
Sessions and logs
list_active_sessions, get_fortiview_top, query_traffic_log,
query_event_log, query_utm_log, get_log_settings, list_syslog_settings,
get_fortianalyzer_settings, backup_config
System settings
get_system_global, get_dns_settings, get_ntp_settings,
list_snmp_communities, get_snmp_sysinfo
Wireless and switching
list_wireless_ssids, list_ap_profiles, list_managed_aps, list_wifi_clients,
list_rogue_aps, get_wifi_controller_settings, list_managed_switches,
list_switch_port_stats
Generic access to the whole API
cmdb_list, cmdb_get, create_cmdb_object, update_cmdb_object,
delete_cmdb_object, monitor_get, execute_monitor_action, log_get
These take a FortiOS path and reach any table or monitor endpoint, for example:
cmdb_list path="firewall/policy" filter_expr="action==deny" format_fields="policyid|name|srcaddr"
cmdb_get path="system/interface" key="vlan10"
monitor_get path="system/interface" params={"interface_name": "wan"}
log_get path="memory/event/vpn" rows=20 filter_expr="logdesc=@tunnel"
execute_monitor_action path="firewall/session/close" data={"saddr": "10.0.0.5", "daddr": "1.1.1.1", "sport": 51000, "dport": 443, "pro": "tcp"}Paths are validated before they become URL segments; keys are percent-encoded, so
names with spaces such as G Suite work.
HTTP-only: test_connection, health, get_schema_info.
Development
uv sync --locked --all-extras
uv run pytest # full suite with the coverage gate from pyproject.toml
uv run pytest -q --no-cov # quicker iteration
uv run ruff check src tests
uv run mypy srcThe tool surface is frozen in tests/fixtures/tool_schemas_*.json. After an
intentional schema change, regenerate the goldens and update the SHA pins in
tests/test_engine_gate.py:
UPDATE_SNAPSHOTS=1 uv run pytest tests/test_tool_schema_snapshot.py --no-covAdding a parameterless read tool is one CatalogEntry in
src/fortigate_mcp/tools/catalog.py plus a row in the SECURITY.md table.
Project layout
src/fortigate_mcp/
server.py stdio entry point
server_http.py HTTP entry point (uvicorn + bearer-token middleware)
registry.py every tool, its description and risk class, for both transports
core/fortigate.py REST client (cmdb/monitor/log, typed endpoints, generic helpers)
validation.py path/key/host validators and secret redaction
formatting/ text renderers for each resource type
tools/ tool classes: device, firewall, network, routing, virtual_ip,
dhcp, security, vpn, users, system, generic, catalog
config/ config.example.json (copy to config.json)
examples/ MCP client configuration snippets
tests/ pytest suite, respx-based API tests, golden tool schemasTroubleshooting
FORTIGATE_MCP_CONFIG environment variable must be set: pass-einclaude mcp addor--configon the command line.Authentication failed/ HTTP 401: wrong token, or the request comes from an address outside the API user's trusted hosts.Permission denied/ HTTP 403 on a single tool: the API user's admin profile lacks that area (for examplelist_firewall_auth_sessionsneeds the user monitor permission).HTTP 404 on a catalog tool: that FortiOS release or model does not have the endpoint;
monitor_get/cmdb_listwith a nearby path usually finds the current one.A
*_tool is a write tool and this server is running in read-only modeerror meansallow_writesis stillfalse.Session-table and log filters use FortiOS filter syntax (
srcaddr==10.0.0.5,logdesc=@login); the typed tools build these for you.
Credits
This project builds on alpadalar/fortigate-mcp-server. Thank you for the repository: the configuration loader, the dual stdio/HTTP transport, the read-only write gate and the test harness all come from there.
The purpose of this fork is to add tools. The original 33 tools covered devices, policies, address and service objects, routes and VIPs; this repository adds address groups, DHCP, VPN, identity, security profiles, sessions, logs, diagnostics, a catalog of read-only list tools and generic access to the rest of the FortiOS REST API, for a total of 140 tools.
License
MIT License, see LICENSE.
FortiGate and FortiOS are trademarks of Fortinet, Inc. This project is not affiliated with Fortinet.
Available Tools
137 toolsadd_address_group_membersA
Add address objects to an existing address group, keeping the current members.
Typical use: grant a new PC an exception that a policy already applies to the group (e.g. add a host object to an "allowed" group instead of editing the policy).
Parameters:
device_id: Identifier of the FortiGate device
name: Address group name
members: Address object names to add (already-present names are skipped)
vdom: Virtual Domain name (optional)
Returns:
Which members were added and the new member count
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address group name | |
| vdom | No | Virtual Domain | |
| members | Yes | Address object names to add | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses additive semantics, that duplicate member names are skipped (idempotent behavior), and what the response reports. It omits permission requirements and what happens if a named address object does not exist, which matters for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then a use case, then labeled Parameters/Returns sections. The parameter list largely restates the schema, a small redundancy, but the overall length is tight and every other line carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and no output schema, the description covers add-vs-replace semantics, duplicate handling, and return contents. Missing failure modes (nonexistent member objects, invalid group name, device/vdom mismatch) keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by adding the 'already-present names are skipped' semantics for members and noting that vdom is optional. It adds no format or constraint details beyond that.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb (add), resource (address objects), target (existing address group) and a critical scope constraint (keeping current members). This cleanly distinguishes it from remove_address_group_members and create_address_group in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'Typical use' paragraph gives a concrete scenario (exempting a new host that a policy already governs) and implicitly steers the agent away from editing the policy directly. It stops short of explicitly naming the alternative tools (e.g. remove_address_group_members, update_firewall_policy) or stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_deviceB
Add a new FortiGate device to the MCP server.
This tool registers a new FortiGate device with the server, configuring connection parameters and authentication credentials.
Parameters:
device_id: Unique identifier for the new device
host: IP address or hostname of the FortiGate device
port: HTTPS port (default: 443)
username: Username for authentication (if not using API token)
password: Password for authentication (if not using API token)
api_token: API token for authentication (preferred method)
vdom: Virtual Domain name (default: "root")
verify_ssl: Whether to verify SSL certificates (default: false)
timeout: Connection timeout in seconds (default: 30)
Returns:
Registration status
Device configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| host | Yes | FortiGate IP address or hostname | |
| port | No | HTTPS port | |
| vdom | No | Virtual Domain | root |
| timeout | No | Timeout in seconds | |
| password | No | Password | |
| username | No | Username | |
| api_token | No | API token | |
| device_id | Yes | Unique device identifier | |
| verify_ssl | No | Verify SSL |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It usefully discloses authentication options, the preferred API-token method, defaults, and a brief return summary, but it omits important mutation behavior such as persistence, duplicate device_id handling, permission requirements, and side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is front-loaded and clear. However, the parameter list largely duplicates the fully described input schema, so much of the text does not add new information; the returns section is useful because there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, all 9 parameters with defaults, authentication choices, and a basic return summary. Since there is no output schema, the returns note is helpful. The main remaining gap is mutation behavior and error/duplicate handling, but overall it is fairly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3. The description adds value by explaining that username/password apply only when not using an API token, and that api_token is the preferred authentication method, which is not captured in the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: adding a new FortiGate device to the MCP server. It is clearly distinguishable from sibling tools such as remove_device and list_devices, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool does but gives no explicit guidance on when to use it versus alternatives like test_device_connection or discover_vdoms. It also does not state prerequisites or the conditions under which this registration tool should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backup_configA
Download the running configuration and save it to a file on the MCP server host.
Parameters:
device_id: Identifier of the FortiGate device
output_path: Absolute file path to write (parent directory must exist)
scope: "global" (default, whole device) or "vdom"
overwrite: Replace an existing file (default false)
vdom: Virtual Domain name (optional)
Returns:
Saved path, size and line count
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| scope | No | Backup scope | global |
| device_id | Yes | FortiGate device identifier | |
| overwrite | No | Replace an existing file | |
| output_path | Yes | Absolute file path to write on the MCP host |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and mostly does: it discloses that the write target is the MCP host filesystem, that overwrite defaults to false (so an existing file causes failure unless opted in), and that the parent directory must already exist. It omits permission/API-scope requirements and failure behavior, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose followed by compact parameter and return lists — easy to scan. The parameter section largely duplicates a schema that is already fully documented, so a small amount of text doesn't earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by describing the return payload (saved path, size, line count). For a tool with a host-side write side effect and no annotations, the main remaining gap is error/partial-failure behavior and whether the device config is fetched over the already-configured credentials.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline would be 3; the description goes beyond the schema by explaining the global-vs-vdom dichotomy in the scope parameter, tying vdom to that choice, and adding the parent-directory constraint on output_path. Most other parameter text is a restatement of the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (download/save) and resource (running configuration) plus the destination (a file on the MCP server host), which is the detail an agent most needs. It is unmistakably distinct from every sibling, which are read/list/monitor tools that never touch the host filesystem.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implied usage is clear (produce a configuration backup file), and the 'parent directory must exist' note hints at a prerequisite, but it never states when to use this versus surfacing config via cmdb_get/get_system_global, nor any connectivity or permission preconditions. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cmdb_getA
Get one configuration object by key (GET /api/v2/cmdb/{path}/{key}).
Examples: path "firewall/policy" key "56"; path "system/interface" key "port1"; path "vpn.ipsec/phase1-interface" key "branch-vpn". Secret fields are redacted.
Parameters:
device_id: Identifier of the FortiGate device
path: cmdb table path
key: Object key (policy id, object name, interface name, ...)
vdom: Virtual Domain name (optional)
Returns:
The raw JSON object
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Object key | |
| path | Yes | cmdb table path | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose two useful traits: the underlying GET endpoint (implying read-only) and that secret fields are redacted in the response. It omits permission requirements, behavior for missing keys, and vdom resolution, so it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Endpoint is front-loaded, examples follow, and the parameter/return lists are short. The parameter bullets largely restate the schema descriptions, which is slightly redundant, but nothing is bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter read tool with no output schema, the description covers the essentials: what is fetched, valid path/key shapes, vdom as optional, and that the response is raw JSON with secrets redacted. Only edge-case behavior (unknown key, vdom default) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the description earns above that by explaining what a key looks like ('policy id, object name, interface name, ...') and giving real path/key pairs that show the relationship between the two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Get') and resource ('one configuration object by key') and pins the exact REST endpoint GET /api/v2/cmdb/{path}/{key}. The concrete path/key examples make the scope unambiguous; it differs from cmdb_list by being single-object retrieval, though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The three worked examples (firewall/policy, system/interface, vpn.ipsec/phase1-interface) imply when the tool is applicable and show valid path shapes, but there is no explicit statement of when to use cmdb_get instead of cmdb_list or the specialized list_*/get_*_detail tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cmdb_listA
List every object of any FortiOS configuration table (GET /api/v2/cmdb/{path}).
The escape hatch for tables that have no dedicated tool. Examples of path: "firewall/policy", "system/interface", "vpn.ipsec/phase1-interface", "router/static", "user/local", "wireless-controller/vap", "system/sdwan". Secret-looking fields (passwords, PSKs, keys) are redacted; large responses are truncated, so narrow them with filter_expr, count or format_fields.
Parameters:
device_id: Identifier of the FortiGate device
path: cmdb table path without the /api/v2/cmdb/ prefix
filter_expr: Optional FortiOS filter, e.g. "status==enable" or "name=@vlan" ("&" joins several)
start, count: Optional pagination
format_fields: Optional "|"-separated field list to return, e.g. "policyid|name|action"
vdom: Virtual Domain name (optional)
Returns:
The raw JSON response (results plus metadata)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | cmdb table path, e.g. firewall/policy | |
| vdom | No | Virtual Domain | |
| count | No | Maximum objects to return | |
| start | No | Pagination offset | |
| device_id | Yes | FortiGate device identifier | |
| filter_expr | No | FortiOS filter expression(s), '&'-joined | |
| format_fields | No | '|'-separated fields to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose that this is a GET/read operation, that secret-looking fields are redacted, and that large responses are truncated. It does not discuss authentication/permissions or error behavior, so it falls short of fully comprehensive disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and escape-hatch role, then caveats, parameters, and returns. The parameter list repeats schema names but earns its place by adding examples and syntax, and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter generic read tool with no annotations or output schema, the description explains read semantics, redaction/truncation, parameter narrowing, and that the return is raw JSON with results plus metadata. The exact response envelope remains lightly specified, which leaves a small gap without an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds useful meaning beyond the schema: path examples, filter syntax such as 'status==enable' and 'name=@vlan' with '&' joining, and a pipe-separated format_fields example. This materially improves parameter usage guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: list every object of any FortiOS configuration table, including the underlying endpoint GET /api/v2/cmdb/{path}. It explicitly positions itself as the escape hatch for tables without a dedicated tool, which distinguishes it from cmdb_get and the many dedicated list_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'escape hatch for tables that have no dedicated tool' gives clear when-to-use and when-not-to-use guidance, with the alternative being the dedicated tool class. It also tells the agent to narrow large responses with filter_expr, count, or format_fields, and gives concrete path examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_address_groupA
Create a new address group from existing address object names.
Parameters:
device_id: Identifier of the FortiGate device
name: Name for the new group (letters, digits, underscore, hyphen)
members: List of existing address object (or group) names; at least one is required
comment: Optional description
vdom: Virtual Domain name (optional)
Returns:
Creation status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New address group name | |
| vdom | No | Virtual Domain | |
| comment | No | Comment | |
| members | Yes | Existing address object names | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full behavioral burden. It does disclose a real constraint (members must be existing address object names) and that a creation status is returned, but it says nothing about duplicate-name behavior, permissions, or whether creation is atomic when a member name is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by a compact parameter list and a one-line return note. The parameter list partly restates the schema, but it is short and carries the added format and minimum-count details, so it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter mutation tool with no annotations and no output schema, the description covers the inputs and gestures at the return value, but omits failure modes and the vdom/device context needed when creating objects on a multi-VDOM FortiGate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds value beyond the schema: it specifies the allowed character set for name (letters, digits, underscore, hyphen) and states that members requires at least one entry, which the schema's array type alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the source of the data: 'Create a new address group from existing address object names.' An agent can tell this apart from list_address_groups or update_address_object, though it doesn't explicitly name the sibling group-modification tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the verb 'Create'; the description never says to use this instead of add_address_group_members when the group already exists, nor does it state prerequisites such as the device being registered or the member objects already existing on that device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_address_objectA
Create a new address object on a FortiGate device.
This tool adds a new network address object that can be used in firewall policies and other security rules.
Parameters:
device_id: Identifier of the FortiGate device
address_data: Address object configuration as JSON
vdom: Virtual Domain name (optional, uses device default)
Address data should include:
name: Object name
type: ipmask, iprange, or fqdn
subnet: IP/netmask (for ipmask type)
start-ip/end-ip: IP range (for iprange type)
fqdn: Domain name (for fqdn type)
comment: Optional description
Returns:
Creation status
Object configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| address_data | Yes | Address object configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that this is a create operation and summarizes return values, but it does not cover permissions, duplicate-name behavior, or failure modes for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and organized into purpose, parameters, address_data guidance, and returns. It is efficient, though it repeats some schema parameter names and could be slightly tighter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a create tool with no output schema and no annotations, it covers purpose, required inputs, optional vdom behavior, address_data fields, and expected returns. It still omits duplicate handling and permission requirements, which would fully round out the behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Top-level parameter descriptions already have 100% schema coverage, establishing a baseline of 3. The description adds meaningful semantics for the nested address_data object by listing supported fields and their purposes, which the schema leaves generic via additionalProperties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: create a new address object on a FortiGate device. It also clarifies the object's role in firewall policies, distinguishing it from sibling operations like list, update, and delete address objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly frames the tool as adding a new network address object usable in security rules, which gives an agent a clear use context. It does not explicitly say when to use update_address_object instead or how to handle existing objects, so it lacks exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_cmdb_objectA
Create a configuration object in any table from a raw JSON payload (POST /api/v2/cmdb/{path}).
Use the typed create_* tools when one exists; this is for tables without one (e.g. "firewall/ippool", "firewall.schedule/recurring", "system/zone", "vpn.ipsec/phase2-interface"). The payload must use FortiOS field names.
Parameters:
device_id: Identifier of the FortiGate device
path: cmdb table path
data: Object payload as JSON (FortiOS field names, e.g. {"name": "...", "member": [{"name": "..."}]})
vdom: Virtual Domain name (optional)
Returns:
Creation status and the new object's key when FortiOS reports it
| Name | Required | Description | Default |
|---|---|---|---|
| data | Yes | Object payload (FortiOS field names) | |
| path | Yes | cmdb table path | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does communicate that this is a raw, schema-unvalidated POST across arbitrary tables and that the response reports creation status and possibly the new object's key — useful context. It stops short of stating auth/permission requirements, what happens on duplicate names or invalid FortiOS fields, or whether vdom scoping changes behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and endpoint, then usage routing, then parameters, then returns — a clean structure with no filler prose. The per-parameter bullets largely restate schema descriptions, which is the only redundancy; the usage examples and payload example are the highest-value sentences and come first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generic mutation tool with no annotations and no output schema, this covers purpose, selection rule, payload conventions, and return behavior — enough for an agent to invoke it correctly. The remaining gap is failure-mode and permission context, which a generic create tool arguably should state given how much blast radius 'any table' implies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description earns the bump by adding a concrete payload shape example ({"name": "...", "member": [{"name": "..."}]}) that illustrates the nested-array convention for FortiOS data, which the schema only hints at with 'Object payload (FortiOS field names)'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create a configuration object in any CMDB table) and pins down the mechanism (raw JSON POST /api/v2/cmdb/{path}). It also distinguishes itself from the typed create_* siblings in the same breath, so an agent can tell immediately which family of tools this belongs to.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit selection rule: use the typed create_* tool when one exists, and this tool for tables that lack one. Concrete example paths (firewall/ippool, system/zone, vpn.ipsec/phase2-interface) make the exclusion condition operational rather than abstract.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dhcp_reservationA
Reserve an IP address for a MAC address on a FortiGate DHCP server.
The DHCP server is selected by dhcp_server_id, else by interface, else automatically by the server whose range/subnet contains the IP. Duplicate IP or MAC reservations are rejected before anything is written.
Parameters:
device_id: Identifier of the FortiGate device
ip: IPv4 address to reserve
mac: MAC address (aa:bb:cc:dd:ee:ff)
description: Optional description (e.g. hostname / owner)
dhcp_server_id: Optional DHCP server ID (see list_dhcp_servers)
interface: Optional interface name whose DHCP server should hold the reservation
vdom: Virtual Domain name (optional)
Returns:
Creation status with the chosen DHCP server
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 address to reserve | |
| mac | Yes | MAC address (aa:bb:cc:dd:ee:ff) | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| interface | No | Interface whose DHCP server to use | |
| description | No | Description | |
| dhcp_server_id | No | DHCP server ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that this is a write operation, explains the DHCP server selection precedence, and states duplicate IP or MAC reservations are rejected before anything is written. It does not mention permissions, reversibility, or side effects on existing leases, which prevents a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action, followed by a structured parameter list and a short returns section. The selection precedence and duplicate-rejection rule are included without rambling or repetition; no sentence feels extraneous.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description includes a brief Returns section noting creation status and the chosen DHCP server, which is useful. Combined with the parameter explanations and server-selection logic, it is nearly complete, though it could clarify permissions or what happens if server selection fails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful semantics beyond the schema by defining the precedence between dhcp_server_id, interface, and automatic subnet-based selection. It also references list_dhcp_servers for obtaining server IDs, which helps the agent populate the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Reserve an IP address for a MAC address on a FortiGate DHCP server.' It clearly distinguishes this creation action from siblings such as delete_dhcp_reservation and list_dhcp_servers without requiring schema inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains how the target DHCP server is selected by dhcp_server_id, then interface, then subnet containment, and references list_dhcp_servers for server IDs. It provides clear operating context but does not explicitly state when to avoid this tool in favor of alternatives or what prerequisites are required.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_firewall_policyA
Create a new firewall policy on a FortiGate device.
This tool adds a new security policy to control traffic flow through the FortiGate device, defining rules for source, destination, and services.
Parameters:
device_id: Identifier of the FortiGate device
policy_data: Policy configuration as JSON object
vdom: Virtual Domain name (optional, uses device default)
Policy data should include:
name: Policy name
srcintf: Source interface(s)
dstintf: Destination interface(s)
srcaddr: Source address object(s)
dstaddr: Destination address object(s)
service: Service object(s)
action: accept or deny
Returns:
Creation status
Policy ID assigned
Configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| policy_data | Yes | Policy configuration as JSON |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose useful behavior: vdom falls back to the device default, and the return includes the assigned policy ID and a configuration summary. It does not say whether creation fails on unresolved object references, where the policy lands in the policy order, or what permissions are required for a write operation on FortiGate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose, then short scoped sections for parameters, policy data, and returns. No filler sentences, though the Parameters block largely restates what the schema already says.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter creation tool with no output schema and an opaque nested object, the description supplies the missing payload shape and the return contents, which is exactly what an agent needs to construct a valid call. Remaining gaps (policy ordering, error conditions) are minor for a create operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is nominally 100%, but policy_data is a free-form object with additionalProperties:true and only 'Policy configuration as JSON' as its schema text. The description compensates by enumerating the expected inner keys (name, srcintf, dstintf, srcaddr, dstaddr, service, action), which is substantial value beyond the schema. It does not indicate which of those inner fields are required or how lists vs scalars are handled.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clear specific verb + resource: 'Create a new firewall policy on a FortiGate device', followed by a one-line statement of what that means operationally (rules for source, destination, services). It is distinguishable from siblings like update_firewall_policy or move_firewall_policy by name, but the description never explicitly contrasts with them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (you need a device_id and a policy_data payload with interface/address/service objects) but the description never states when to use this versus update_firewall_policy, nor that referenced address/service objects should exist first via create_address_object/create_service_object. No exclusions or prerequisites are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_service_objectA
Create a new service object on a FortiGate device.
This tool adds a new network service object that defines protocols and ports for use in firewall policies.
Parameters:
device_id: Identifier of the FortiGate device
service_data: Service object configuration as JSON
vdom: Virtual Domain name (optional, uses device default)
Service data should include:
name: Service name
protocol: TCP, UDP, or ICMP
tcp-portrange: TCP port range (for TCP)
udp-portrange: UDP port range (for UDP)
comment: Optional description
Returns:
Creation status
Service configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| service_data | Yes | Service object configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It does disclose that this is a write operation and summarizes the return payload (creation status plus configuration summary), but it says nothing about duplicate-name behavior, whether the object is committed immediately, permission requirements, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence front-loads the purpose and the remaining sections are scannable lists. The "Parameters" block partially duplicates the input schema, which is mild waste, but the Returns section earns its space since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The enumerated nested fields and the returns summary compensate well for the absent output schema and untyped nested object. However, for an unannotated mutation tool it omits the safety profile (reversibility, error handling) and the preconditions an agent needs before invoking it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description earns a step up by enumerating the nested service_data fields (name, protocol, tcp-portrange, udp-portrange, comment) — the schema declares service_data only as an open object with no field-level detail. It also restates that vdom is optional and falls back to the device default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Create a new service object on a FortiGate device") and adds scope detail: it defines protocols and ports for use in firewall policies. That distinguishes it implicitly from update_service_object, delete_service_object, and list_service_objects, though those siblings are never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is only implied by the phrase "for use in firewall policies." There is no explicit when-to-use guidance, no mention of the update_service_object alternative for modifying existing objects, and no stated prerequisite that the device must already be registered (add_device) or the VDOM must exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_static_routeA
Create a new static route on a FortiGate device.
This tool adds a new static route to the device's routing configuration, defining how traffic to specific networks should be forwarded.
Parameters:
device_id: Identifier of the FortiGate device
route_data: Route configuration as JSON
vdom: Virtual Domain name (optional, uses device default)
Route data should include:
dst: Destination network (IP/netmask)
gateway: Next hop gateway IP
device: Outgoing interface name
distance: Administrative distance (optional)
comment: Optional description
Returns:
Creation status
Route configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| route_data | Yes | Route configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose the shape of the mutation (routing entries, optional vdom fallback) and a coarse return summary, but says nothing about permissions, duplicate-route handling, validation failures, or whether the change is immediate/committed. For a config-writing tool with zero annotation coverage this is a real gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line summary, then Parameters, nested Route data, and Returns in labeled blocks. Sentences are short and each block maps to something an agent needs; the definitional sentence about forwarding traffic is the only mild filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers inputs, nested route fields and a rough return shape, which is reasonable for a 3-param tool with no output schema. However, with no annotations and no output schema, an agent still lacks failure-mode and side-effect information (does a duplicate destination error or overwrite?) that matters for a routing-mutation call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is nominally 100%, but the key parameter route_data is an untyped nested object (additionalProperties: true) with no field documentation in the schema. The description compensates by enumerating dst, gateway, device, distance and comment, which is genuinely necessary information. It does not state which of those nested fields are mandatory, capping it below 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('Create a new static route on a FortiGate device') plus one sentence of semantic context about what a static route does. It is distinguishable from list_static_routes / update_static_route / delete_static_route by verb, but the description never explicitly names or contrasts those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the word 'new' — an agent can infer this is for adding routes that do not yet exist, and must look elsewhere for modification or removal. No exclusions (e.g. 'use update_static_route for existing routes'), no prerequisites, no note about VDOM selection rules beyond 'uses device default'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_virtual_ipB
Create a new Virtual IP on a FortiGate device.
This tool adds a new Virtual IP object that can be used for port forwarding, NAT, and external access to internal services.
Parameters:
device_id: Identifier of the FortiGate device
name: Virtual IP name
extip: External IP address
mappedip: Mapped internal IP address
extintf: External interface name
portforward: Enable/disable port forwarding (default: disable)
protocol: Protocol type (tcp/udp, default: tcp)
extport: External port (optional)
mappedport: Mapped port (optional)
vdom: Virtual Domain name (optional, uses device default)
Returns:
Creation status
Virtual IP configuration summary
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Virtual IP name | |
| vdom | No | Virtual Domain | |
| extip | Yes | External IP address | |
| extintf | Yes | External interface name | |
| extport | No | External port | |
| mappedip | Yes | Mapped internal IP address | |
| protocol | No | Protocol type | tcp |
| device_id | Yes | FortiGate device identifier | |
| mappedport | No | Mapped port | |
| portforward | No | Enable/disable port forwarding | disable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It states that a new object is added and lists basic returns, but does not disclose permission/auth requirements, duplicate-name behavior, dependency constraints, idempotency, or whether creation is reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with purpose and usage, then uses a structured parameter list and returns section. It is readable, but the parameter list largely repeats schema descriptions that already have 100% coverage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
It covers purpose, use cases, all parameters, defaults, and a basic return summary, which is enough to attempt invocation. However, for a mutation tool with no annotations and no output schema, it does not address prerequisites, authorization, or failure modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds some meaning beyond the schema by naming protocol values (tcp/udp), stating that portforward defaults to disable, and noting extport, mappedport, and vdom as optional, though it does not detail IP/port formats or parameter interdependencies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb 'Create' and resource 'Virtual IP' on a FortiGate device, and explains the object's role in port forwarding, NAT, and external access. It is clear but does not explicitly differentiate itself from sibling list/update/delete virtual IP tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers use cases for the created object, which implies when to use the tool, but gives no explicit when-to-use guidance versus alternatives such as update_virtual_ip, list_virtual_ips, or create_firewall_policy. It also omits prerequisites like device reachability or interface existence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_address_groupB
Delete an address group. FortiOS refuses while a policy still references the group.
Parameters:
device_id: Identifier of the FortiGate device
name: Address group name
vdom: Virtual Domain name (optional)
Returns:
Deletion status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address group name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose a genuine behavioral trait beyond the schema — referential-integrity enforcement that will cause the call to fail — plus a return value. However, for a destructive operation it omits irreversibility, required permissions, and what happens to group members on deletion.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its key constraint, then short parameter and return sections. The parameter list largely duplicates the schema, which is the only wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, non-annotated tool with no output schema, the definition should say more: whether deletion is irreversible, whether dependent references must be removed first by the agent, and what the deletion status actually contains. The referential-integrity note is the only substantive behavioral content.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device_id, name, and vdom. The description's parameter list restates those same glosses without adding format, examples, or vdom-defaulting behavior, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete an address group"), which cleanly separates it from the create/update/list address-group siblings and from delete_address_object or delete_service_object. It doesn't explicitly contrast with those siblings, but the resource noun carries the distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The note that FortiOS refuses while a policy still references the group gives a real precondition an agent should check (e.g., via list_firewall_policies or lookup_policy), but usage is implied rather than stated as explicit when-to-use/when-not guidance or an alternative path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_address_objectA
Delete an address object. FortiOS refuses while a policy or group still references it.
Parameters:
device_id: Identifier of the FortiGate device
name: Address object name
vdom: Virtual Domain name (optional)
Returns:
Deletion status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address object name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one valuable trait: reference-blocking by policies/groups. It omits other behavioral facts an agent needs for a destructive operation, such as irreversibility, required permissions, and whether dependent objects are cascaded or orphaned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The failure condition is front-loaded in the first sentence, and the parameter/return lists are terse. Some space is spent restating schema text, which is mild waste but not bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter delete tool with no annotations and no output schema, the description covers the operation, inputs, key failure mode, and a bare return value ('Deletion status'). The return value's shape is vague and irreversible-deletion semantics are unstated, keeping it below a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented; the description's parameter list is largely a restatement ('Identifier of the FortiGate device' vs the schema's 'FortiGate device identifier'). It adds no format, scoping, or VDOM-selection guidance beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Delete an address object'), which cleanly distinguishes it from delete_service_object and delete_address_group in the sibling list. An agent can pick it out without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The line 'FortiOS refuses while a policy or group still references it' gives a concrete precondition for failure, which effectively tells the agent when this call will not succeed. It stops short of naming alternatives (e.g. remove_address_group_members, delete_firewall_policy) that would resolve that state.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_cmdb_objectB
Delete a configuration object from any table (DELETE /api/v2/cmdb/{path}/{key}).
FortiOS refuses while the object is still referenced elsewhere.
Parameters:
device_id: Identifier of the FortiGate device
path: cmdb table path
key: Object key
vdom: Virtual Domain name (optional)
Returns:
Deletion status
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Object key | |
| path | Yes | cmdb table path | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the key behavioral constraint that FortiOS refuses deletion when the object is still referenced elsewhere. However, it omits other critical traits for a destructive operation: whether deletion is irreversible, what permissions or device connectivity are required, and what failure responses look like beyond the reference constraint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loads the operation and endpoint, and uses a clear parameter/return structure. The parameter list is somewhat redundant given the fully documented schema, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no annotations and no output schema, the description covers the core operation, the endpoint, and one important constraint. It is not complete enough: it says only 'Deletion status' as the return and lacks irreversibility, permission, and broader failure-mode context that an agent needs before invoking a delete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description's parameter list largely restates the schema field descriptions (device_id, path, key, vdom) without adding syntax, format, or constraints. The schema already documents vdom as optional with a null default, so the description adds little beyond baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Delete a configuration object') and names the REST endpoint DELETE /api/v2/cmdb/{path}/{key}, making the operation unambiguous. It does not differentiate the generic tool from sibling-specific deletes such as delete_service_object or delete_address_object, which an agent might reasonably confuse.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by 'from any table' and the name; there is no explicit statement of when to choose this generic delete over specific delete tools. The note that FortiOS refuses deletion while the object is still referenced gives useful context but is a behavioral constraint rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dhcp_reservationB
Delete a DHCP reservation identified by reservation_id, ip or mac.
Parameters:
device_id: Identifier of the FortiGate device
dhcp_server_id: Optional DHCP server ID to narrow the search
reservation_id: Optional reservation entry ID (see list_dhcp_servers)
ip: Optional reserved IPv4 address
mac: Optional reserved MAC address
vdom: Virtual Domain name (optional)
Returns:
Deletion status (ambiguous matches are refused)
| Name | Required | Description | Default |
|---|---|---|---|
| ip | No | Reserved IPv4 address | |
| mac | No | Reserved MAC address | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| dhcp_server_id | No | DHCP server ID | |
| reservation_id | No | Reservation entry ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load. It does disclose a genuinely useful safety trait — ambiguous matches are refused rather than guessed — and names the return value ('Deletion status'). It says nothing about irreversibility, required permissions, or what happens to the lease when a reservation is removed, which matters for an unannotated destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, and the parameter/return blocks are scannable. Much of the parameter list duplicates schema text at 100% coverage, which is mildly wasteful but keeps the description self-contained.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter destructive tool with no annotations and no output schema, the description covers the essentials (target identity, ambiguity refusal, return signal). It leaves gaps on selector precedence, vdom behavior, and permission/irreversibility, so an agent could still mis-invoke it by passing conflicting identifiers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline applies. The description adds only marginal value beyond the schema: it marks reservation_id as coming from list_dhcp_servers and explains dhcp_server_id as a search narrower. It does not explain selector interaction or the role of vdom.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb (Delete) and resource (DHCP reservation) plus the identifier set (reservation_id, ip, mac), which clearly separates it from create_dhcp_reservation and the list_* siblings. It stops short of naming an alternative tool to use when the target is uncertain, but the purpose itself is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'identified by reservation_id, ip or mac' and by dhcp_server_id being described as narrowing the search, plus the parenthetical '(see list_dhcp_servers)' hinting at how to discover IDs. There is no explicit when-to-use / when-not-use statement and no guidance on whether selectors can be combined or which takes precedence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_firewall_policyB
Delete a firewall policy from a FortiGate device.
This tool removes an existing firewall policy from the device configuration, permanently deleting the specified security rule.
Parameters:
device_id: Identifier of the FortiGate device
policy_id: ID of the policy to delete
vdom: Virtual Domain name (optional, uses device default)
Returns:
Deletion status confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| policy_id | Yes | Policy ID to delete |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden; it does disclose that deletion is permanent and that it modifies device configuration. It omits permission/auth requirements, dependency or referential-integrity effects, whether the change is committed immediately to the FortiGate, and confirmation/rollback behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then short sections for parameters and returns. The second sentence ("removes an existing firewall policy... permanently deleting the specified security rule") largely repeats the first, and the parameter list duplicates the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the "Returns: Deletion status confirmation" line usefully fills that gap. However, for a destructive, annotation-free mutation tool the description leaves out device reachability expectations, VDOM scoping implications, and failure modes, which an agent would need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents device_id, policy_id and vdom, making 3 the baseline. The description restates the parameters nearly verbatim, adding only that omitting vdom falls back to the device default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a firewall policy from a FortiGate device"), which cleanly separates it from create_firewall_policy, update_firewall_policy, move_firewall_policy and list_firewall_policies. It does not explicitly name those siblings or explain the difference, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, no prerequisites (e.g., whether the policy must be unused or detached from references), and no warning about mitigations such as backup_config before deleting. The only hint that it is destructive is the word "permanently" in the body.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_service_objectA
Delete a custom service object. FortiOS refuses while a policy or service group references it.
Parameters:
device_id: Identifier of the FortiGate device
name: Service object name
vdom: Virtual Domain name (optional)
Returns:
Deletion status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Service object name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the non-obvious referential-integrity rejection, which is genuine behavioral value, but omits that deletion is irreversible, whether permission/scoping is required, whether vdom defaults, and how a not-found object is reported. Adequate but materially incomplete for a destructive operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two-sentence summary followed by compact Parameters/Returns blocks; the blocking condition is front-loaded where it matters most. Slight redundancy with the schema in the parameter list, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The "Returns: Deletion status" note partially compensates for the absence of an output schema, and the three parameters are simple. But without annotations, the description should still cover irreversibility and failure modes beyond the reference check, which it does not.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description's parameter list restates those labels nearly verbatim and adds little beyond marking vdom as optional. Baseline 3 is correct here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Delete a custom service object"), which cleanly distinguishes it from delete_address_object and from update_service_object/create_service_object in the sibling set. It does not explicitly name an alternative, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Adds a concrete precondition: FortiOS refuses deletion while a policy or service group references the object. That tells the agent the operation can fail for reasons outside its control and that cleanup elsewhere may be needed first. It stops short of naming the follow-up tools (e.g. list_service_groups, policy lookups) or stating what to do on refusal.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_static_routeB
Delete a static route from a FortiGate device.
This tool removes an existing static route from the device configuration.
Parameters:
device_id: Identifier of the FortiGate device
route_id: ID of the route to delete
vdom: Virtual Domain name (optional, uses device default)
Returns:
Deletion status confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| route_id | Yes | Route identifier | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses only that configuration is mutated. It says nothing about whether deletion is irreversible, what happens if the route_id does not exist, required permissions, or whether the change takes effect immediately in the routing table. Only the "Returns: Deletion status confirmation" line adds any behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by a clarifying sentence and compact parameter/return lists. The parameter list largely duplicates the schema, which is mild waste, but the description stays short and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter destructive tool with no annotations and no output schema, the description covers the basic contract and states the return value. It stops short of the details an agent most needs before a delete: irreversibility, permission requirements, and failure behavior when the route does not exist.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented in the schema, making 3 the baseline. The description adds one piece of meaning beyond the schema by noting that vdom is optional and falls back to the device default, but device_id and route_id are merely restated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (delete) and resource (static route) scoped to a FortiGate device, so the agent knows exactly what is being removed. It does not differentiate from siblings such as update_static_route or get_static_route_detail, but the verb/resource pairing is unambiguous on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Removes an existing static route" implies the precondition that the route must already exist, which is the only usage signal. There is no explicit guidance on when to choose this versus update_static_route, no prerequisite checks (e.g. confirm via get_static_route_detail first), and no stated exclusions or warnings about removing an in-use route.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_virtual_ipA
Delete a Virtual IP from a FortiGate device.
This tool removes an existing Virtual IP object from the device configuration. Note that Virtual IPs in use by policies cannot be deleted.
Parameters:
device_id: Identifier of the FortiGate device
name: Name of the Virtual IP to delete
vdom: Virtual Domain name (optional, uses device default)
Returns:
Deletion status confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Virtual IP name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool removes an existing object from device configuration, that in-use Virtual IPs cannot be deleted, and that it returns a deletion status confirmation, but it omits permission requirements, failure behavior, and whether deletion is immediate or reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured with clear sections and front-loads the main action. However, the first two sentences substantially repeat the same point, and the Parameters section duplicates schema descriptions that are already at 100% coverage, reducing efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core action, the main deletion constraint, and the return confirmation, which is important because no output schema exists. Still, for a destructive tool with no annotations, it should ideally say more about required permissions, error cases, and reversibility to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters, which sets a baseline of 3. The description adds some value beyond the schema by clarifying that vdom is optional and uses the device default, making the parameter behavior easier to apply correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: deleting a Virtual IP from a FortiGate device, and clarifies it removes an existing Virtual IP object from the configuration. This distinguishes it from sibling Virtual IP tools such as list_virtual_ips, create_virtual_ip, update_virtual_ip, and get_virtual_ip_detail.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when removing an existing Virtual IP and includes one useful when-not condition: Virtual IPs in use by policies cannot be deleted. However, it does not explicitly compare this tool with alternatives such as update_virtual_ip or explain prerequisites for successful deletion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_vdomsA
Discover and list all Virtual Domains (VDOMs) on a FortiGate device.
This tool queries the specified FortiGate device to retrieve information about all configured Virtual Domains, including their status and settings.
Parameters:
device_id: Identifier of the FortiGate device to query
Returns:
List of VDOMs with their configuration
VDOM status (enabled/disabled)
Resource allocation information
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It conveys the read-only nature ('queries', 'retrieve') and what comes back (status, resource allocation), but omits error behavior when the device is unreachable/unknown device_id, auth requirements, and explicit confirmation that nothing is modified.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-line purpose, followed by compact Parameters and Returns sections. The Returns breakdown is genuinely useful because no output schema exists; no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so the description appropriately enumerates the returned data (VDOM configuration, enabled/disabled status, resource allocation). With a single parameter and no annotations, the only meaningful gap is failure behavior for invalid or unreachable devices.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is already documented in the schema. The description restates its meaning ('Identifier of the FortiGate device to query'), which adds the intent of querying without exceeding the schema. Baseline 3 exceeded marginally by clarifying query semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Discover and list all Virtual Domains (VDOMs) on a FortiGate device.' No sibling tool covers VDOMs, so the target is unambiguous even without an explicit contrast. Slightly redundant ('Discover and list') but clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the context (query a specific FortiGate device to enumerate its configured VDOMs) but never says when to prefer this over generic siblings like cmdb_list, nor any prerequisites such as the device first being registered via add_device. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_ipsec_tunnel_actionA
Bring an IPsec tunnel up or down (monitor/vpn/ipsec/tunnel_up | tunnel_down).
Bringing a site-to-site tunnel down interrupts traffic until it renegotiates; requires writes to be enabled.
Parameters:
device_id: Identifier of the FortiGate device
phase1_name: Phase-1 interface name (see list_ipsec_phase1 / list_ipsec_tunnels)
action: "up" or "down"
phase2_name: Optional phase-2 selector name (defaults to all selectors of the phase-1)
vdom: Virtual Domain name (optional)
Returns:
Action status
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| action | Yes | Bring the tunnel up or down | |
| device_id | Yes | FortiGate device identifier | |
| phase1_name | Yes | Phase-1 interface name | |
| phase2_name | No | Phase-2 selector name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and does disclose the impactful behavior: tunnel-down interrupts site-to-site traffic and requires writes enabled. Minor gaps remain on idempotency, permissions specifics, and what 'Action status' actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded impact/warning sentence followed by organized Parameters and Returns sections. Some repetition of schema field descriptions, but overall efficient and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param mutation tool with no output schema, the description covers prerequisites, side effects, defaults, and a brief return note. Slightly thin on return detail, but adequate for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value beyond it: phase2_name defaults to all selectors of the phase-1, action enumerates up/down, and phase1_name is cross-referenced to discovery tools. That extra semantics justifies above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb pair (bring up/down) on a specific resource (IPsec tunnel/phase-1) and even names the underlying monitor endpoints. Clearly distinguishable from sibling read tools like list_ipsec_tunnels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the consequence of down (traffic interruption until renegotiation) and the prerequisite that writes must be enabled, plus points to list_ipsec_phase1 / list_ipsec_tunnels for discovering phase1_name. Lacks an explicit 'when not to use' or alternative-tool exclusion, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_monitor_actionA
Run a monitor action (POST /api/v2/monitor/{path}): tunnel up/down, session close, cache flush, user deauthentication, etc.
Examples: path "vpn/ipsec/tunnel_down" data {"p1name": "branch-vpn"}; path "firewall/session/close" data {"saddr": "10.0.0.5", "daddr": "...", "sport": 1, "dport": 443, "pro": "tcp"}; path "user/firewall/deauth" data {"user": "alice", "ip": "10.0.0.5"}. These change device state and require writes to be enabled.
Parameters:
device_id: Identifier of the FortiGate device
path: monitor action path
data: Optional JSON body
vdom: Virtual Domain name (optional)
Returns:
The raw JSON response
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | JSON body | |
| path | Yes | monitor action path, e.g. vpn/ipsec/tunnel_down | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden and does disclose the essential traits: this is a POST, it mutates device state, and it requires write access to be enabled. It also states the return is raw JSON. It stops short of noting reversibility, failure modes, or whether actions can be disruptive to live traffic (e.g., deauth), so a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation and endpoint, then examples, then a short parameter list and return note. The trailing parameter bullet list largely duplicates the schema descriptions and could be dropped, but the description remains compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the definition covers the write prerequisite, the raw-JSON return, and concrete invocation patterns, which is enough to call it correctly. It lacks any note on error responses or side effects of specific actions, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3; the description earns above baseline by illustrating what `path` and `data` actually look like in three worked examples, which is genuinely helpful for a free-form path/body API. `device_id` and `vdom` are only restated from the schema, so this isn't a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Run a monitor action") plus the underlying endpoint POST /api/v2/monitor/{path}, and enumerates the concrete action classes (tunnel up/down, session close, cache flush, deauth). This clearly distinguishes it from read-only siblings like monitor_get and from the narrower execute_ipsec_tunnel_action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use examples with exact paths and payload shapes, plus the crucial prerequisite that writes must be enabled on the device. It does not, however, explicitly route the agent away from overlapping siblings such as execute_ipsec_tunnel_action or monitor_get, which is the only missing piece for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
geoip_lookupA
Resolve an IP address to its FortiGuard geolocation (country) via the device.
Parameters:
device_id: Identifier of the FortiGate device
ip: IPv4 address
vdom: Virtual Domain name (optional)
Returns:
Country and related GeoIP fields
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | IPv4 address | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses that the lookup is executed on the device (an external dependency that can fail if the device is unreachable) and names the return content, but it says nothing about behavior for private/unresolvable IPs, error modes, or whether results are cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded, with the core action in the first sentence. The Parameters section is redundant against a fully documented schema, but the Returns section earns its place because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 3-parameter read tool with no annotations or output schema, the description covers purpose, inputs, and a rough sketch of return values. Minor gaps remain around prerequisites (device reachability, FortiGuard registration) and behavior for unresolvable addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The Parameters section in the description merely restates those descriptions without adding format, syntax, or VDOM-selection guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: resolve an IP to FortiGuard geolocation (country) via the FortiGate device. It is clearly distinguishable from siblings like ping_from_device or lookup_route, though it does not explicitly name what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent infers it should call this when it needs the country for an IP address. There is no statement of when to prefer it over alternatives (e.g., list_arp_table, lookup_route) and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_address_group_detailA
Show one address group with every member resolved to its subnet, range or FQDN.
Parameters:
device_id: Identifier of the FortiGate device
name: Address group name (exact match)
vdom: Virtual Domain name (optional)
Returns:
Group metadata and each member with its resolved value (nested groups are listed with their members)
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address group name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does useful work by disclosing the return shape: group metadata plus each member with its resolved value, and that nested groups are listed with their members. However, it never states the read-only nature explicitly, nor what happens when the name does not match (empty result vs error), nor how vdom defaults are applied.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose, then compact Parameters and Returns blocks. The parameter list largely restates the 100%-covered schema, but the Returns section earns its place since there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, the Returns section is essential and it covers the important edge case of nested group expansion. The remaining gap is failure behavior for a non-existent group and vdom default semantics, which the schema's default=null partly addresses.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds genuine semantics beyond the schema: 'exact match' for name (the schema only says 'Address group name') and 'optional' for vdom. device_id's meaning matches the schema, so the added value is real but modest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Show one address group') and adds a differentiator unique to this tool: every member resolved to subnet, range or FQDN. That distinguishes it from the sibling list_address_groups, which merely enumerates groups.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'one address group' plus 'name: exact match' signals this is for inspecting a single known group rather than browsing. There is no explicit when-to-use statement, no mention of list_address_groups for finding the name first, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bgp_configB
Show the BGP configuration (AS, router-id, neighbors, networks).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. 'Show' plus the enumerated contents imply a non-destructive read that returns a config object, which is useful, but it says nothing about permission requirements, what happens if BGP is not configured, or whether the response is a single object or a list.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource front-loaded and the returned fields parenthetically scoped. No filler, though it is terse enough to leave obvious gaps rather than covering them efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only getter with full schema coverage and no output schema, this is close to sufficient: the parenthetical field list effectively stands in for a return-value description. Missing are only error/absent-config behavior and vdom scoping, which are minor for this tool class.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id and vdom documented in the schema, so the baseline is 3. The description adds nothing about parameter semantics — neither parameter is referenced, and the meaning of the nullable vdom default is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('BGP configuration'), and enumerates the contents (AS, router-id, neighbors, networks), so an agent can tell it apart from routing siblings like get_ospf_config or get_routing_table. It stops short of explicitly naming those siblings, but the resource noun is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives such as get_routing_table or lookup_route, no mention of prerequisites (a valid device_id), and no note on vdom selection behavior. Usage is only inferable from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statusB
Get detailed system status information for a specific FortiGate device.
This tool retrieves comprehensive system information from a FortiGate device, including hardware details, software version, hostname, and operational status.
Parameters:
device_id: Identifier of the FortiGate device to query
Returns:
Device model and serial number
Software version and build
System hostname
Current operational status
Virtual Domain information
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. The verbs 'Get' and 'retrieves' imply a read-only query, and the return list adds context, but the description does not state side-effect guarantees, permission or authentication requirements, live-device dependency, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence and the parameter/return structure is easy to scan. There is minor redundancy between 'detailed system status' and 'comprehensive system information', and the Returns list partially repeats the second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a simple single-parameter read and no output schema, the description usefully enumerates return fields such as model and serial number, software version and build, hostname, operational status, and VDOM information. It does not cover error or permission behavior, but the core retrieval contract is sufficiently described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and the only parameter, device_id, is already documented in the schema. The description repeats its meaning ('Identifier of the FortiGate device to query') but adds no format, source, or validation details beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'Get', and resource, 'system status information', scoped to a specific FortiGate device. It enumerates hardware details, software version, hostname, and operational status, but does not distinguish this from nearby status/resource siblings such as get_system_resources, get_performance_status, or get_license_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternative. The description says what it retrieves but does not tell the agent whether to choose it over get_system_resources, get_performance_status, or get_license_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dns_settingsB
Show the system DNS configuration (primary/secondary servers, domain, DoT/DoH protocol).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden; 'Show' implies a non-destructive read and the field list signals the response shape, which is useful. However, it does not mention whether a device_id must be reachable, what happens on an unreachable device, or any permission requirement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource first and the returned fields in parentheses. No filler, no redundant restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only getter with fully documented parameters and no output schema, the description is largely sufficient because it enumerates the returned configuration items. It would be complete with a note on the required device context and any failure behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id and vdom documented in the schema, so the baseline is 3. The description adds no parameter-level meaning (e.g., whether vdom defaults to the device's global context) beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('system DNS configuration') and enumerates the fields returned (primary/secondary servers, domain, DoT/DoH), so an agent knows exactly what it retrieves. It does not explicitly distinguish itself from nearby config getters like get_ntp_settings, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus alternatives, nor any prerequisite or exclusion guidance. The read-only nature is only implied by the verb 'Show', leaving the agent to infer usage context entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_firewall_policy_detailC
Get detailed information for a specific firewall policy
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| policy_id | Yes | Policy ID to get details for |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Get' implies a read, but the description does not state what 'detailed information' includes, whether it can fail for missing policies, or what permissions are required. That is a significant gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, which suits a simple retrieval tool. It is arguably too terse rather than wasteful, so it stops short of a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description is the only source of behavioral detail, yet it never describes the returned detail (NAT, security profiles, counters) or failure modes. For a tool sitting among many firewall-policy siblings, that leaves the agent under-informed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id, policy_id, and vdom are already documented in the schema. The description adds no syntax, format, or defaulting details (e.g., how a null vdom is resolved), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (get) and resource (firewall policy detail) and implies retrieval of one policy versus the sibling list_firewall_policies. It does not explicitly name the contrast, but the singular 'specific' and 'detail' make the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this instead of list_firewall_policies or lookup_policy, and no prerequisites such as whether a vdom context is needed or whether device_id must come from list_devices. Usage is only implied by the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fortianalyzer_settingsB
Show FortiAnalyzer logging settings (log.fortianalyzer/setting).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full disclosure burden. The verb "Show" implies a read-only, non-destructive operation, which is useful, but the description says nothing about required permissions, whether the settings are returned raw or normalized, or what happens if FortiAnalyzer is unconfigured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler, front-loading the verb and resource. Nothing could usefully be removed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple two-parameter read of a settings object, the input schema is fully described, and no output schema exists to defer to. The description gives enough to invoke it correctly, though it could note that vdom is optional and defaults to the global scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for both parameters (vdom and device_id), so the schema already documents them adequately. The description adds no extra semantics such as vdom scoping behavior or what device_id format is expected, which is acceptable at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Show") and resource (FortiAnalyzer logging settings) and even cites the underlying API path (log.fortianalyzer/setting), making the target unambiguous. It does not explicitly distinguish itself from adjacent siblings like get_log_settings or list_syslog_settings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus get_log_settings, list_syslog_settings, or monitor_get/log_get. The agent must infer from the tool name alone that this is a specific-read of one vendor's logging config rather than a general log settings query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fortiview_topA
FortiView top talkers from the live session statistics (monitor/fortiview/statistics).
Parameters:
device_id: Identifier of the FortiGate device
report_by: source (default), destination, application, threat, country, policy, interface, website, web_category
count: Rows to return (default 20, max 200)
sort_by: bytes (default), sessions or bandwidth
source_interface: Optional source interface filter
vdom: Virtual Domain name (optional)
Returns:
One line per entry with sessions, bytes and bandwidth
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| count | No | Rows to return | |
| sort_by | No | Sort key | bytes |
| device_id | Yes | FortiGate device identifier | |
| report_by | No | Dimension to report on | source |
| source_interface | No | Source interface filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the important behaviors: data comes from live session statistics (not stored logs) and results are 'one line per entry with sessions, bytes and bandwidth'. It states default and maximum row counts and which parameters are optional, though it does not note whether the call is read-only-safe or costly on the device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose line is front-loaded and the parameter/return lists are scannable. Some content duplicates the schema verbatim, but the structure is efficient and nothing is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by describing the return shape (sessions, bytes, bandwidth per row). All six parameters are accounted for, including optionality; the main gap is guidance on choosing this tool over sibling monitoring tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every parameter and both enums. The description restates the same defaults and enum values (source default, bytes default, count max 200) without adding new semantics such as value formats or interactions between report_by and sort_by, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (get) plus a named resource (FortiView top talkers) and pins the underlying data source (monitor/fortiview/statistics), so an agent knows it is a live analytics view rather than a raw session or log listing. It does not explicitly name sibling alternatives such as list_active_sessions or query_traffic_log, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the mention of 'live session statistics' hints this is for current top-talker analysis, but the description never says when to prefer it over query_traffic_log (historical) or list_active_sessions (per-session detail). No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ha_statusA
Show HA cluster statistics (members, roles, sync state). Standalone units return an empty list.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'Show' implies a read-only operation and the empty-list behavior for standalone units is useful, but it does not explicitly state side effects, permissions, error behavior, or response format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the main purpose and followed by the key edge case. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with a fully described two-parameter schema and no output schema, the description is largely complete: it lists the key returned statistics and explains the standalone empty-list behavior. A little more detail on VDOM scoping or response shape would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented in the schema. The description adds no additional parameter meaning, syntax, or scoping behavior beyond what the schema provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Show HA cluster statistics', and enumerates the relevant data: members, roles, sync state. It also distinguishes the standalone case, making it clearly different from generic status or system-resource tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool is relevant by naming HA cluster statistics and noting standalone units return an empty list. However, it gives no explicit when-to-use guidance versus alternatives such as get_device_status or get_system_resources.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interface_statusA
Get the current status of a specific network interface on a FortiGate device.
This tool retrieves live status information for a single named interface, including its link state, IP address configuration, and related details.
Parameters:
device_id: Identifier of the FortiGate device
interface_name: Name of the specific interface to query
vdom: Virtual Domain name (optional, uses device default)
Returns:
Interface name
Link status (up/down)
IP address configuration
Related interface detail fields
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| interface_name | Yes | Interface name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral burden. It discloses that this is a live retrieval of link state, IP configuration, and related details, but it omits error behavior, permission requirements, and what happens when the interface or VDOM is invalid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and organized into Parameters and Returns sections. The Returns section is useful because no output schema exists, though the parameter list largely duplicates the input schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status tool with no output schema, the description provides a useful list of return fields and distinguishes the single-interface scope. It is only missing explicit error behavior and guidance on when to prefer alternative status or listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters. The description repeats the parameter names with brief labels and notes that vdom is optional and uses the device default, but it adds little beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the current status of a specific network interface') and specifies the scope as a single named interface on a FortiGate device. This is clearly distinguishable from sibling tools like list_interfaces, which would return multiple interfaces.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying it retrieves live status for one named interface, but it does not explicitly say when to use this instead of list_interfaces or list_interface_counters. No alternatives are named and no prerequisites are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_license_statusC
Show FortiGuard/FortiCare license and subscription status.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose whether the call touches the live device, whether it requires the device to be online, what happens on an unreachable device, or what the response contains beyond the general topic.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient but arguably under-specified rather than genuinely concise in a way that earns every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers the topic but omits what the returned license status looks like (expiry dates, entitlement counts, per-VDOM breakdown) and any device-state prerequisites. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both device_id and vdom are already documented in the schema. The description adds no meaning about scope (e.g., whether omitting vdom returns all VDOMs), so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Show") and a specific resource ("FortiGuard/FortiCare license and subscription status"), naming the two license families covered. It is unambiguous against siblings, none of which deal with licensing, though it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives, no preconditions (device must be registered/reachable), and no mention of whether it is per-device or per-VDOM. Only the verb "Show" weakly implies a read-only status lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_log_settingsA
Show where the device sends logs: memory, disk, syslog, FortiAnalyzer and FortiCloud settings in one view.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
One line per log destination with status, server and key options
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It implies a read-only 'show' operation and summarizes the return format, but it does not mention permissions, device availability requirements, or other operational constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and efficiently structured, first stating the aggregate purpose and then the parameters and return shape. The parameter section largely repeats the schema, which is slightly redundant, but the text remains tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description provides a useful return summary: one line per log destination with status, server and key options. Combined with fully documented parameters, this is enough for an agent to call the tool, though operational caveats are omitted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description repeats device_id and vdom meanings without adding format details, examples, or behavior beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: showing where the device sends logs across memory, disk, syslog, FortiAnalyzer and FortiCloud in one view. The 'one view' phrasing implicitly distinguishes it from narrower siblings like list_syslog_settings and get_fortianalyzer_settings, but it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The consolidated-view framing implies when this tool is useful, but there is no explicit guidance on when to use it instead of the sibling-specific syslog or FortiAnalyzer tools. It also gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ntp_settingsA
Show the NTP configuration (sync mode, servers, server mode on interfaces).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description bears the full burden. 'Show' implies a read-only retrieval and the parenthetical previews the returned content, but nothing is said about permissions, vdom-scoping semantics, or failure behavior when a device is unreachable — meaningful gaps given zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource first, then the content. Nothing is redundant and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the parenthetical enumeration of sync mode, servers, and per-interface server mode effectively previews what comes back, which is the right compensation. Only the vdom scoping behavior and read-only nature remain unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: device_id and vdom are both documented in the schema. The description adds no parameter-level meaning (e.g., how vdom affects the returned config), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific retrieval verb ('Show') and a precisely named resource ('NTP configuration') with parenthetical detail on what it contains, which distinguishes it from adjacent getters like get_dns_settings or get_system_time. It stops short of explicitly naming a sibling it replaces or is replaced by.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the resource name: an agent infers it should be called when NTP configuration is needed. There is no statement of when to prefer it over related tools (get_system_time, get_system_global) and no prerequisites such as needing a device_id or vdom context resolved first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ospf_configB
Show the OSPF configuration (router-id, areas, networks, interfaces).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Show' implies a read, but it never explicitly states read-only safety, required permissions, or how the query behaves across vdoms. For a definition with zero annotation coverage, this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero waste; the returned fields are packed into a tight parenthetical. Nothing could be removed without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because there is no output schema, enumerating router-id/areas/networks/interfaces is useful compensation. However, with no annotations, no usage routing to the on-premise alternatives, and silent vdom semantics, the definition is only barely sufficient to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both device_id and vdom are already documented in the schema. The description adds no parameter-level meaning beyond that, which matches the baseline 3 when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show the OSPF configuration') and enumerates the returned fields, so the agent knows exactly what it retrieves. It doesn't distinguish itself from closely related siblings like get_bgp_config or get_sdwan_config, but the resource is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives (e.g., get_routing_table or get_bgp_config), no prerequisites, and no noted exclusions. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_performance_statusB
Show CPU/memory/session/uptime performance counters (monitor/system/performance/status).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Show' strongly implies a read-only operation and the listed counters describe the data returned, but it does not explicitly state read-only behavior, permissions required, or any rate/scope constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with little waste. The parenthetical API path is slightly redundant but still useful context and does not obscure the main purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with complete schema coverage, the description is adequate to select and invoke it. However, with no annotations or output schema, it could say more about read-only behavior, vdom scoping, and whether counters are live or historical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented by the schema. The description adds no parameter-specific meaning or format details beyond the schema baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Show') and names the resource clearly ('CPU/memory/session/uptime performance counters'). It is understandable without opening the schema, though it does not explicitly distinguish this from related siblings like get_system_resources or get_device_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only states what the tool does, with no guidance on when to use it versus alternatives. It does not mention conditions, exclusions, or sibling tools such as get_system_resources, get_device_status, or monitor_get.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_routing_tableA
Get the current routing table from a FortiGate device.
This tool retrieves the active routing table showing all routes currently installed on the device, including static, dynamic, and connected routes.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Active route entries
Route sources (static, OSPF, BGP, etc.)
Metrics and preferences
Interface assignments
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description does carry the burden, and it does disclose that the result is the active table (not the config) and enumerates the returned fields. It says nothing about permissions, VDOM scoping pitfalls, read-only nature, or table size/performance on large routing tables.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with a one-line purpose, then Parameters and Returns sections. The Returns block earns its place because there is no output schema; the Parameters block mildly repeats the schema but stays brief.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no annotations and no output schema, the description covers purpose, parameter meaning, and the shape of the return values. Only sibling routing and operational caveats (size, VDOM requirement) are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds the meaningful detail that vdom is optional and falls back to the device default, which the schema only conveys via default=null. That is a small but genuine addition beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get the current routing table") and scopes it to the active table including static, dynamic and connected routes, which implicitly separates it from config-oriented siblings like list_static_routes or get_bgp_config. It never names a sibling explicitly, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: the word "current" and "installed" suggests live operational state rather than configuration, which helps against list_static_routes, but there is no explicit when-to-use/when-not guidance and no mention of lookup_route as the per-destination alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_sdwan_configC
Show the SD-WAN configuration (zones, members, health checks, rules).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Show' implies a read, but it never states that explicitly, nor does it mention required device access/permissions, whether the vdom scoping changes results, or how the configuration is returned. For a tool with zero structured safety metadata this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical contents list is efficient. It is arguably too terse rather than too long, so the only deduction is for missing rather than wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description sketches the returned sections, which helps given there is no output schema, but omits vdom scoping semantics and the relationship to the overlapping sibling tools. Adequate but with clear gaps for an unannotated tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the schema. The description adds nothing about parameter behavior, such as what happens when vdom is null (the default) — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('SD-WAN configuration') and enumerates the sub-sections returned (zones, members, health checks, rules). This separates it from granular siblings like list_sdwan_members and list_sdwan_health_checks, though it doesn't explicitly acknowledge that relationship.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this aggregate view versus the dedicated list_sdwan_members and list_sdwan_health_checks tools, which overlap directly with the returned content. The agent is left to infer that this is the bundled option.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_profile_detailB
Show one security profile in depth.
For application control lists the entries are shown in evaluation order with their action, categories and application signatures (resolved to names). For web filter profiles the FortiGuard category actions are grouped by action.
Parameters:
device_id: Identifier of the FortiGate device
profile_type: application | webfilter | antivirus | ips | dnsfilter | ssl-ssh
name: Profile name
vdom: Virtual Domain name (optional)
Returns:
Profile settings and entries
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Profile name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| profile_type | Yes | Profile type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden and does disclose meaningful details: application-control entries are in evaluation order with actions/categories/signatures, and web-filter categories are grouped by action. 'Show' implies a read operation, though permission and error behavior are not addressed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main purpose and is structured into behavior, parameters, and returns. The parameter list largely duplicates the schema, but the overall text remains compact and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a detail tool with no output schema and no annotations, the return description is minimal: 'Profile settings and entries.' It explains special output formatting only for application and web filter profiles, leaving return behavior for antivirus, ips, dnsfilter, and ssl-ssh profiles poorly specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description repeats the parameter list and enum options but adds little semantic meaning beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: show one security profile in depth. The phrase 'one ... in depth' implicitly distinguishes it from the sibling list_security_profiles, though it does not name that alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus list_security_profiles or other profile-related tools. It also does not state prerequisites such as obtaining a profile name first, so the agent must infer usage from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_security_ratingC
Show the Security Fabric security rating summary (monitor/system/security-rating).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden: it implies a read via 'Show' but never states that explicitly, and says nothing about permissions, rate limits, scope (single device vs. fabric-wide), or what the summary contains. For an unannotated tool this is a substantial gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical API path is compact and mildly useful for orientation. Nothing is wasted, though there is little content to be concise about.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A two-parameter read tool with a fully documented schema needs only modest description, but with no annotations and no output schema the description should say more about the rating payload (score, categories) and that this is a non-mutating read.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (device_id, vdom) are documented in the schema, so the baseline of 3 applies. The description adds no parameter hints such as whether vdom is required for fabric-level results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('Security Fabric security rating summary'), plus the underlying API path, so the agent knows exactly what data comes back. It does not, however, distinguish itself from generic read siblings such as monitor_get or get_device_status, leaving that to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives like monitor_get for other monitor endpoints. The agent must infer from the name alone that this is the tool for security rating data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_infoB
Get detailed information about the FortiGate MCP server.
This tool provides comprehensive information about the server configuration, capabilities, and current operational status.
Returns:
Server version and build information
Available tools and capabilities
Configuration summary
Runtime statistics
API endpoints
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses the categories of returned information, which is useful, but does not explicitly confirm read-only behavior, side effects, authentication requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and structured with a clear Returns list, but the second sentence largely repeats the first, and the Returns list is somewhat generic. It is adequate but contains some redundant framing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter server-info tool with no output schema, the description sufficiently defines scope and enumerates the kinds of information returned. It does not need to explain parameters, and the return-value categories give the agent enough context to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so parameter semantics are not a concern. The description does not need to explain inputs, and the baseline for a zero-param tool is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get detailed information about the FortiGate MCP server.' It clearly distinguishes a meta/server-information tool from device-configuration siblings, though it does not explicitly contrast itself with tools like health_check or get_system_resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states what information is available but gives no when-to-use guidance, no conditions or exclusions, and no alternatives. An agent must infer that this is for inspecting the MCP server rather than a FortiGate device.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_snmp_sysinfoC
Show SNMP agent status, contact, location and description.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, yet it discloses nothing beyond the field list: no note on required permissions, device reachability/timeout behavior, whether vdom scoping changes results, or error conditions when SNMP is disabled. For a monitoring call against a physical device this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is perhaps too terse given the missing context, but nothing in it is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with no output schema, the description does enumerate the returned fields, which is the minimum an agent needs. However, with no annotations and no output schema, it should say more about what 'status' contains and how failures surface when SNMP is not enabled on the device.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id ('FortiGate device identifier') and vdom ('Virtual Domain') are already documented, warranting the baseline of 3. The description adds no semantics for either parameter, and its list of fields could be mistaken for inputs rather than outputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb ('Show') and a specific resource (SNMP agent status, contact, location, description), so an agent knows exactly what data comes back. It does not explicitly contrast with the nearby list_snmp_communities, but the distinction (agent sysinfo vs. community strings) is reasonably inferable from the wording.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use guidance, no prerequisites (e.g. that device_id must be a reachable FortiGate), and no exclusions or alternatives. The agent must infer that this is a read-only diagnostic call from the verb 'Show' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ssl_vpn_settingsA
Show SSL-VPN settings (status, port, source interfaces, portal mapping, tunnel IP pools).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'Show' signals a read-only retrieval and the parenthetical enumerates what comes back, but nothing is said about permission requirements, whether the vdom parameter scopes results, or error behavior for an unknown device_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the returned-field list in parentheses; nothing redundant and no filler. The most useful information (what is retrieved) comes first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read with no output schema, the parenthetical field list effectively stands in for return-value documentation, which makes it callable without follow-up questions. The remaining gap is vdom scoping semantics, which matters on FortiGate but is unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with only two parameters, both documented in the schema ('FortiGate device identifier', 'Virtual Domain'), so baseline 3 applies. The description adds no meaning about how vdom affects the returned settings or that device_id is mandatory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and a concrete resource ('SSL-VPN settings'), then enumerates the returned fields (status, port, source interfaces, portal mapping, tunnel IP pools). This distinguishes it reasonably from list_ssl_vpn_portals and list_ssl_vpn_sessions, though it does not name those siblings explicitly, so the boundary is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: an agent can infer this is the read path for global SSL-VPN configuration on a device. There is no explicit when-to-use, when-not, or pointer to list_ssl_vpn_portals/list_ssl_vpn_sessions for portal or session data, leaving the choice to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_static_route_detailB
Get detailed information for a specific static route.
This tool retrieves comprehensive configuration details for a specific static route, including all settings and status.
Parameters:
device_id: Identifier of the FortiGate device
route_id: ID of the route to query
vdom: Virtual Domain name (optional, uses device default)
Returns:
Complete route configuration
Gateway and interface details
Status information
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| route_id | Yes | Route identifier | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden; 'retrieves' signals a read-only operation, which is the main behavioral fact. It does not mention failure modes (unknown route_id, invalid vdom) or any permission/connection requirements, and the Returns list is generic rather than concrete field names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence is good, but the following sentence repeats it, and the Parameters block duplicates schema text almost verbatim. The Returns block earns its place because no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple three-parameter read tool with no annotations and no output schema, the description covers the essentials and substitutes a coarse return summary. However, the return summary ('Complete route configuration', 'Status information') is too generic to tell an agent what fields to expect, leaving a gap for a 'detail' tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description largely restates schema text ('Identifier of the FortiGate device', 'ID of the route to query') but does add one genuine clarification: vdom is optional and falls back to the device default, which the schema's 'Virtual Domain' description omits.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information for a specific static route') and contrasts implicitly with list_static_routes by emphasizing a single route. It never names the sibling tools (list_static_routes, get_routing_table, lookup_route) that could be confused with it, so differentiation is only inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'specific' implies you must already know the route_id rather than searching, which is weak implicit guidance. There is no explicit statement of when to use this versus list_static_routes or lookup_route, and no prerequisites (e.g. device must be registered) are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_globalA
Show global system settings: hostname, admin ports/timeouts, timezone, management features.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It communicates a safe read-only operation and lists the fields returned, but does not mention permissions, VDOM scoping behavior, or any limitations of the global view.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with a colon-delimited list of covered settings. Every element earns its place and there is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only getter with full schema coverage, the description is largely complete: it states scope and enumerates the returned settings. It could be improved by clarifying VDOM behavior and differentiating from adjacent system getters, but no critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id and vdom documented directly in the schema. The description adds no parameter-level meaning beyond what the schema already provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ("Show") and resource ("global system settings") and enumerates the main fields covered (hostname, admin ports/timeouts, timezone, management features). It is clear enough to distinguish from unrelated siblings, though it does not explicitly name nearby alternatives like get_ntp_settings or get_system_time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by "Show global system settings": it is clearly read-only inspection. However, there is no explicit guidance on when to use this versus other system-level tools such as get_system_time, get_ntp_settings, or get_dns_settings, which are close siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_resourcesB
Show current CPU, memory, disk and session usage of a FortiGate device.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
Current values for cpu, memory, disk, sessions, setup rate
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. The verb 'Show' implies a read-only operation and the Returns section lists the monitored metrics, but it does not disclose permission requirements, whether vdom scope changes the result, or how current values are sampled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is short and front-loads its purpose in the first sentence. The Parameters section largely duplicates schema fields, but the overall structure remains efficient and easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists inputs and return categories, which is useful because there is no output schema. Still, with no annotations it leaves gaps around safe operation, prerequisites, and differentiation from other monitoring tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented. The description repeats that device_id identifies the device and vdom is optional, but adds no extra meaning such as expected identifier format or the effect of omitting vdom.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: showing current CPU, memory, disk, and session usage for a FortiGate device. It is clear what the tool does, but it does not distinguish itself from nearby monitoring siblings such as get_performance_status or get_device_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the phrase 'Show current... usage,' suggesting on-demand resource monitoring. However, there is no explicit guidance on when to choose this tool over get_performance_status, get_device_status, or other status-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_timeA
Show the device clock and timezone (monitor/system/time).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden. 'Show' signals a read-only, non-mutating operation and the endpoint path hints the data comes from the live monitor subsystem rather than stored config, but permission requirements, whether the device is queried in real time, and failure behavior are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the resource front-loaded and the API path appended as supporting detail. Nothing is wasted, though the parenthetical path is of marginal value to an agent that cannot call the API directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage, the definition is nearly sufficient. Minor gap: with no output schema, the description could hint at what the response contains (current time, timezone, DST state), but for this level of complexity the omission is small.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id ('FortiGate device identifier') and vdom ('Virtual Domain') already documented. The description adds no semantics beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Show') plus concrete resource ('device clock and timezone'), with the underlying API path (monitor/system/time) as corroboration. It is clearly distinct from siblings like get_ntp_settings or get_system_global, though it never names those alternatives to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for reading local time/timezone. There is no explicit guidance on when to prefer it over get_ntp_settings (the NTP configuration tool) or get_system_global, both of which are plausible confusion points in a large sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_virtual_ip_detailA
Get detailed information for a specific Virtual IP.
This tool retrieves comprehensive configuration details for a specific Virtual IP object, including all settings and mappings.
Parameters:
device_id: Identifier of the FortiGate device
name: Name of the Virtual IP to query
vdom: Virtual Domain name (optional, uses device default)
Returns:
Complete Virtual IP configuration
Port forwarding details
Interface assignments
Status information
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Virtual IP name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does disclose the return payload (complete config, port forwarding, interface assignments, status) and 'Get/retrieves' implies a read-only operation, but it says nothing about permission requirements, behavior with a wrong vdom or missing object, or whether device default fallback can mask errors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by clearly separated Parameters and Returns sections. The line-wrapped prose is slightly padded ('comprehensive configuration details ... including all settings and mappings'), but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter, non-destructive read with no output schema, the description supplies an adequate return-field summary and full parameter coverage. The only real gap is the absence of any behavioral or safety statement, which matters more here because no annotations back it up.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented, and the description only restates them. It adds minor value by clarifying that vdom is optional and falls back to the device default, but not enough to exceed the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve detailed configuration for one Virtual IP, which is implicitly the singular counterpart to list_virtual_ips. It does not name that sibling explicitly, but 'a specific Virtual IP' is enough for an agent to tell single-object read apart from listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the drill-down after list_virtual_ips, since it requires a device_id and a Virtual IP name. There is no explicit when-to-use/when-not, no mention of what to do if the name is unknown, and no stated prerequisites beyond the parameters.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wifi_controller_settingsC
Show wireless controller settings (country, duplicate SSID handling, fake SSID action).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden, yet "Show" is the only signal that this is a read-only operation. Nothing is said about required device permissions, whether the vdom argument defaults to the management VDOM, or what happens if the device lacks a wireless controller.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single well-formed sentence with the resource and the returned settings front-loaded; no filler, no hedging, nothing wasted. It is short precisely because it says little, but nothing in it is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A two-parameter, low-complexity read, but with no annotations and no output schema the description must disclose that this is a non-mutating read and roughly what a result looks like. It omits both, and says nothing about the vdom scoping parameter that affects which settings are returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (device_id and vdom are both documented in the schema), so baseline 3 applies. The description adds no meaning beyond the schema for either parameter — it does not explain the vdom default of null or how device_id is resolved.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Show") plus a precise resource ("wireless controller settings"), and the parenthetical enumerates the settings returned (country, duplicate SSID handling, fake SSID action). It does not, however, distinguish itself from nearby siblings such as get_system_global, get_dns_settings, or list_wireless_ssids, so the agent gets no explicit boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description contains no when-to-use guidance, no prerequisites, and no named alternative. With dozens of get_*/list_* siblings in this server, the absence of any routing hint leaves the agent to infer selection from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkB
Perform a comprehensive health check of the FortiGate MCP server.
This tool checks the overall health and status of the MCP server, including device connectivity, service availability, and system resources.
Returns:
Overall server health status
Registered device count
Service availability
Performance metrics
Error conditions if any
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses the checks performed and the kinds of values returned, including device count, service availability, performance metrics, and error conditions. It does not explicitly state that the operation is read-only or non-destructive, nor does it mention permissions or any side effects, leaving some behavioral context implicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the main action and follows with a useful bullet list of return contents. There is minor redundancy between the first two sentences, but the structure is efficient and the Returns section earns its place by compensating for the absence of an output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the tool has no parameters and no output schema, the description is largely complete: it explains what is checked and enumerates what is returned. The main remaining gap is the lack of explicit safety/read-only language and the absence of guidance about when this comprehensive check should be preferred over the many sibling status tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics to document beyond the schema. The baseline for a zero-parameter tool applies, and the description adds no confusing parameter information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: perform a comprehensive health check of the FortiGate MCP server. It also clarifies the scope by naming device connectivity, service availability, and system resources, which makes the purpose clear. However, it does not differentiate this aggregate health check from sibling tools such as get_device_status, get_system_resources, or get_performance_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool checks but gives no explicit guidance on when to use it versus alternatives. In a sibling list full of overlapping health/status tools, an agent must infer whether health_check is an umbrella check or a replacement for individual status tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_active_sessionsA
Query the live session table with optional filters.
Use it to check whether a host's traffic is actually flowing and which policy it matched.
Parameters:
device_id: Identifier of the FortiGate device
source_ip: Optional source IPv4 address
destination_ip: Optional destination IPv4 address
destination_port: Optional destination port
policy_id: Optional policy ID
count: Maximum sessions to return (default 50, max 500)
vdom: Virtual Domain name (optional)
Returns:
One line per session: protocol, source, destination, policy, duration, bytes, NAT
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| count | No | Maximum sessions to return | |
| device_id | Yes | FortiGate device identifier | |
| policy_id | No | Policy ID filter | |
| source_ip | No | Source IPv4 filter | |
| destination_ip | No | Destination IPv4 filter | |
| destination_port | No | Destination port filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does disclose a valuable behavioral trait beyond the schema: the result cap (default 50, max 500) and the per-session return shape. It never explicitly states that the call is read-only, whether it queries the device live (latency impact on a firewall), or what permissions are required, which are notable gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then parameters, then return shape — a clean structure. The parameter bullets largely restate the schema, which is mild redundancy, but each block is short and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by listing returned fields (protocol, source, destination, policy, duration, bytes, NAT), and it covers all seven parameters plus the required device_id. What's missing is behavioral context around live-query cost/permissions, but the call can be made correctly from this text.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3; the description earns an extra point by adding the count maximum (500) that the schema omits and by grouping the filters into a readable list. It doesn't clarify filter interaction (AND semantics) or whether policy_id/vdom accept names vs. IDs beyond what the schema says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Query the live session table') and adds the operational intent ('check whether a host's traffic is actually flowing and which policy it matched'). It doesn't name the nearest siblings (query_traffic_log, list_firewall_auth_sessions, list_ssl_vpn_sessions), so an agent must infer the boundary, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence gives a concrete use case: verifying live traffic flow and policy match for a host. That is a clear 'when to use' context, though there are no explicit exclusions or pointers to the alternative tools for historical vs. auth sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_address_groupsA
List address groups on a FortiGate device with their member names.
Address groups bundle address objects (and other groups) so one policy entry can reference many hosts/subnets. Use get_address_group_detail to resolve the members to IP values.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Group name, member count, member names, excluded members, comment
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden; it is implicitly a read-only list, but it never states permissions, whether results are cached/limited, or any pagination behavior. It does compensate partially by enumerating the returned fields (member count, excluded members, comment), which is real context no structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, the domain context and the sibling hand-off follow, and the Parameters/Returns blocks are compact with no filler. Every line contributes to call correctness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description does supply the return fields and both parameter meanings, so an agent knows what it gets back. It omits any mention of result size limits or pagination, which is the remaining gap for a list endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3. The description adds meaning beyond the schema by noting vdom is optional and falls back to the device default, which clarifies behavior the schema's bare "Virtual Domain" does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List address groups on a FortiGate device") and adds scope ("with their member names"), which cleanly separates it from list_address_objects and get_address_group_detail. An agent can pick this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use get_address_group_detail to resolve members to IP values, so the list-vs-detail split is stated. It lacks an explicit 'when not to use' or a note about list size/paging, so it stops short of full guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_address_objectsA
List all address objects configured on a FortiGate device.
This tool retrieves all network address objects defined on the device, including IP addresses, subnets, ranges, and FQDN objects.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Object name and type
IP address or subnet configuration
Comments and descriptions
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The words 'List' and 'retrieves' signal a read-only operation, and the Returns section adds useful output context, but the description does not state permissions, pagination behavior, or whether vdom scoping changes the result set.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and is reasonably sized. The Parameters section partly repeats schema information, but the Returns section earns its place because there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no annotations and no output schema, the description covers purpose, parameters, vdom default behavior, and expected return fields. It is largely complete, though it could mention permissions or pagination if those are relevant.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining that vdom is optional and uses the device default, while device_id is the FortiGate identifier. This is useful clarification beyond the schema's terse 'Virtual Domain' description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: listing all address objects configured on a FortiGate device. The mention of IP addresses, subnets, ranges, and FQDN objects clearly distinguishes this from sibling tools like list_address_groups or list_service_objects.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use clear by implication: retrieve all address objects on a device. However, it does not explicitly say when to use this versus alternatives such as get_address_group_detail or list_address_groups, nor does it state exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_adminsB
List administrator accounts with profile, trusted hosts and two-factor settings (passwords redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that passwords are redacted and enumerates some returned fields, but it does not state read-only behavior, authorization requirements, pagination, or multi-VDOM behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and notable output details front-loaded. The parenthetical about redacted passwords is relevant and no sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema and no annotations, the description gives enough context about what is returned and the sensitive-data handling. The main remaining gap is how the optional vdom parameter scopes the listing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are documented structurally. The description adds nothing about parameter semantics, such as how vdom scoping affects results; baseline 3 is appropriate when the schema carries this load.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource, 'List administrator accounts', and names the fields returned (profile, trusted hosts, two-factor settings). It is distinguishable from generic user-listing siblings by focusing on administrators, but it does not explicitly contrast itself with nearby tools like list_api_users or list_local_users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no explicit when-to-use guidance, prerequisites, or alternatives. It relies entirely on the tool name and 'List' verb to imply it is a read operation, leaving the agent to infer when this tool is preferable to related user or admin tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_api_usersB
List REST API users (api-user) with their admin profile and trusted hosts (keys redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden, and it does add useful context ('keys redacted', returns admin profile and trusted hosts). However, it never states read-only behavior explicitly, pagination, or permission requirements, so behavioral disclosure is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that puts the resource first and appends the notable return traits. No wasted words, though it is short enough that it could have accommodated disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema, the description is adequate: it implies the return shape and the key redaction. It falls short on differentiating from closely related sibling tools and on any read-only or scoping behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented in the schema. The description adds no parameter-level meaning beyond that baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List REST API users (api-user)') and even names the returned fields (admin profile, trusted hosts). This distinguishes it from a generic user list, but it never explicitly names the closest sibling list_admins to disambiguate API users vs administrative users.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus the sibling list_admins, list_local_users, or list_user_groups. An agent seeing several user-listing tools must infer the distinction from the resource name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_application_groupsC
List application control groups (application/group).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it says nothing about read-only safety, permission requirements, pagination, or result size. 'List' weakly implies a read, but that is the only behavioral signal present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb and resource, with no filler. It is efficient, though its brevity borders on under-specification rather than tightness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (two params, fully documented schema, no output schema), so the description is only marginally insufficient. It still omits any note on scope (per-device/per-vdom) or on the shape of the returned list, which an agent would want given zero annotation coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id ('FortiGate device identifier') and vdom ('Virtual Domain') documented. The description adds nothing beyond the schema, so the baseline of 3 applies rather than a higher score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('application control groups'), and the parenthetical CMDB path (application/group) disambiguates which object family is being read. No sibling tool shares this resource, so differentiation is implicit rather than stated, which keeps it just below a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus alternatives, no prerequisite context beyond the implicit device scope, and no mention of what to do if a vdom is required. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ap_profilesB
List FortiAP profiles (platform, radios, SSIDs per radio).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only listing and mentions some returned fields, but does not disclose permissions, pagination, response format, or other operational behavior beyond the basic 'List' verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. The parenthetical efficiently adds useful detail about what a profile includes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only list with full schema coverage and no output schema, the description is minimally adequate. However, it omits output structure details and any indication of how this tool relates to nearby wireless tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the input schema. The description adds no parameter-specific meaning beyond what the schema provides, which is the expected baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'List FortiAP profiles', and clarifies the returned contents (platform, radios, SSIDs per radio). It implicitly distinguishes profiles from sibling resources like list_managed_aps and list_wireless_ssids, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus related wireless siblings such as list_managed_aps, list_wireless_ssids, or get_wifi_controller_settings. The list operation is straightforward, but no exclusions, prerequisites, or alternative-selection criteria are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_arp_tableA
Show the ARP table (IP, MAC, interface, age).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'Show' strongly implies a non-destructive read, which is the key behavioral fact. However, it does not disclose whether the call is VDOM-scoped, whether it is a slow monitor-style command, or how results are returned/paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the verb and resource front-loaded and no wasted words. The parenthetical field list is compact and informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with 100% schema coverage and only one required parameter, this is largely sufficient; the field enumeration substitutes for a missing output schema. The remaining gap is guidance on VDOM scoping and when this table is the right source of truth.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device_id ('FortiGate device identifier') and vdom ('Virtual Domain'); baseline is 3. The description adds the output field list, which gives useful context about what the call yields, slightly above baseline for a two-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and resource ('ARP table') and even enumerates the returned fields (IP, MAC, interface, age), which is more than the name alone conveys. It does not explicitly distinguish itself from near-neighbors such as list_lldp_neighbors or get_routing_table, so an agent still has to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says nothing about when to use this versus alternatives like list_lldp_neighbors, list_interface_counters, or get_routing_table, and offers no prerequisite or scoping context. The agent is left to infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ca_certificatesC
List trusted CA certificates installed on the device.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read-only operation, but nothing states scope of return, pagination, whether per-vdom certificates are included, or any permission requirements. For a tool with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste, but it is arguably too terse given the three overlapping certificate tools in the sibling list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple read-only list tool with only two well-documented parameters and no output schema, so little is strictly required. Still, with no annotations and no explanation of what is returned or how certificates are categorized, an agent lacks context to disambiguate it from sibling certificate tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with both parameters documented ('vdom' as Virtual Domain, 'device_id' as FortiGate device identifier), so the schema already does the work. The description adds no extra meaning, such as scoping by vdom or what device_id format is expected; baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List trusted CA certificates installed on the device'), which is more precise than a bare 'list certificates'. However, it never names the sibling tools that overlap most (list_local_certificates, list_remote_certificates), so an agent must infer the distinction from the adjective 'trusted CA' rather than being told.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this rather than the other two certificate-listing siblings, nor any prerequisites or exclusions. The implicit 'list' usage is all an agent gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_central_snat_rulesC
List central SNAT map rules.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. 'List' implies a read-only operation, but nothing is said about permission requirements, whether results are scoped by device/VDOM, pagination, or what the rule objects contain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler. It is efficient, though the brevity edges toward under-specification rather than optimal density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must explain the read-only nature and the shape of returned rules, and it does not. The device/VDOM scoping semantics that determine result correctness are also left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'vdom' and 'device_id' are documented inline. The description adds nothing about what 'central' means or how vdom defaults affect results, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('central SNAT map rules'), so an agent knows exactly what is returned. It does not clarify scope (per-device, per-VDOM) or distinguish itself from adjacent listing tools, but no sibling covers SNAT so ambiguity is low.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to reach for this tool, no prerequisites (e.g., that a device_id must come from list_devices), and no mention of alternatives. The agent must infer the usage context entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List the identifiers of all registered FortiGate devices.
This tool returns the device IDs of every FortiGate currently registered with the MCP server. Use get_device_status with a specific device ID to retrieve that device's system, connection, and configuration details.
Returns:
The registered device IDs
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the disclosure burden and clearly establishes a read-only listing operation that returns all registered device IDs. It does not mention permissions, empty-result behavior, or ordering, but those gaps are minor for a zero-parameter identity-list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and appropriately short, but the return value is stated three times in slightly different ways. It remains efficient overall, though one of those repetitions could be removed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a zero-parameter list tool with no output schema, the description sufficiently explains that it returns registered device IDs and how to proceed for more detail. It does not describe empty results or ID formatting, but these are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics to explain. The baseline for a no-parameter tool applies, and the description does not confuse the agent with irrelevant parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing identifiers of registered FortiGate devices. It also explicitly distinguishes this from get_device_status, so the agent can select the correct tool without inspecting schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to use this tool to obtain device IDs and directs it to get_device_status when system, connection, or configuration details are needed. The alternative and selection condition are explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dhcp_leasesA
List active DHCP leases (ip, mac, hostname, interface, expiry, reserved flag).
Useful to find a PC's MAC address before creating a reservation.
Parameters:
device_id: Identifier of the FortiGate device
interface: Optional interface name to filter on (e.g. "vlan10")
vdom: Virtual Domain name (optional)
Returns:
One line per lease sorted by interface and IP
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| interface | No | Filter by interface name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the whole behavioral burden. It does disclose the return shape ("One line per lease sorted by interface and IP"), which is genuine behavioral context, but says nothing about permissions, whether results are live versus cached, or limits on result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, and the Parameters/Returns sections are compact. The parameter block duplicates schema text verbatim, which is some wasted space but not disruptive.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the Returns note is valuable and adequately compensates. For a read-only three-parameter list tool this covers what an agent needs, though a line on vdom scoping behavior would close the remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so all three parameters are already documented in the schema and the description's parameter block largely restates them. The one addition is an example filter value ("vlan10") for interface, which is helpful but marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List active DHCP leases") and enumerates the fields returned (ip, mac, hostname, interface, expiry, reserved flag), so the agent knows exactly what it gets. It does not explicitly distinguish itself from adjacent read tools like list_arp_table or list_dhcp_servers, which also surface IP/MAC mappings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Useful to find a PC's MAC address before creating a reservation" gives a concrete trigger and ties it to the create_dhcp_reservation workflow. It offers no exclusions, though — nothing says when to prefer list_arp_table or list_dhcp_servers instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dhcp_serversB
List DHCP servers configured on a FortiGate device, including their reservations.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
Per server: id, interface, status, IP range, gateway/netmask, DNS, lease time, reserved addresses (id, ip, mac, description)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses the return shape per server (id, interface, status, IP range, gateway/netmask, DNS, lease time, reserved addresses), which signals a read-only enumeration. It does not mention permissions, pagination, or behavior for an invalid device_id/vdom, so gaps remain for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence followed by clearly labeled Parameters and Returns blocks. The parameter list duplicates the schema slightly, but the Returns block earns its place given there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating return fields including nested reservation fields, so an agent knows what it will get back. Parameter coverage is complete via the schema; only permission/error behavior is unaddressed, a minor gap for a simple list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description's parameter list ('Identifier of the FortiGate device', 'Virtual Domain name (optional)') essentially restates the schema and adds no format hints or guidance on when vdom matters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'List DHCP servers configured on a FortiGate device, including their reservations.' An agent can tell it is a read of DHCP server configuration rather than leases. However, it does not explicitly differentiate from sibling tools like list_dhcp_leases or create_dhcp_reservation, which an agent could plausibly confuse with 'reservations'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use/when-not guidance and no named alternatives. The description never states how this differs from list_dhcp_leases (runtime leases) or when to pick it over create_dhcp_reservation/delete_dhcp_reservation, leaving the agent to infer from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_domain_filtersC
List DNS filter domain lists (dnsfilter/domain-filter).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It implies a read-only list operation but says nothing about permissions, pagination, empty results, or whether results are vdom-scoped. Only the read-only implication from 'List' provides any behavioral signal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with the resource and API path front-loaded, no filler. Efficient, though extremely terse for a tool with no annotations or output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and a 2-parameter mutation-free tool, the description should disclose more — at minimum the return shape or the vdom scoping behavior. As written, an agent knows what it lists but little about how results behave.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id and vdom documented in the schema. The description adds nothing beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (DNS filter domain lists), with the API path (dnsfilter/domain-filter) reinforcing what is returned. It is clearly distinct from siblings like list_url_filters or list_ips_custom_signatures, though it doesn't explicitly say so.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus alternatives, no prerequisites, no exclusions. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_endpoint_devicesB
List devices seen by the device inventory (monitor/user/device/query): IP, MAC, hostname, OS, interface.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read-only listing and describes returned fields, but does not disclose permissions, pagination, rate limits, or whether results are scoped by device_id/vdom.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It states the action, scope, and returned fields compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool, the description gives the essential scope and returned fields. However, without annotations or an output schema, it leaves gaps around pagination, permissions, and vdom behavior that an agent might need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the input schema. The description adds no parameter-level semantics beyond the schema, which is acceptable at baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List devices seen by the device inventory,' and names the fields returned (IP, MAC, hostname, OS, interface). It does not explicitly distinguish the tool from siblings such as list_devices or list_wifi_clients, but the inventory-scoped wording is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states what the tool lists but gives no explicit guidance on when to use it, when not to use it, or which sibling tools are alternatives. An agent must infer its role relative to tools like list_devices, list_arp_table, or list_wifi_clients.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_auth_sessionsA
List users currently authenticated against identity-based firewall policies.
Requires an API profile with permission on the user monitor (otherwise FortiOS returns 403).
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
Username, source IP, method, duration per authenticated user
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the permission requirement and the failure mode (403), and 'list' implies a read-only operation. It doesn't discuss pagination, VDOM scoping behavior, or whether results are cached/live, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then the prerequisite, then compact Parameters/Returns blocks. The parameter block duplicates schema text and could be dropped, which is the only meaningful waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description covers purpose, prerequisite, parameters, and the shape of returned fields (username, source IP, method, duration). An agent has what it needs to call it correctly; only edge behaviors like empty results or VDOM defaults are unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameter descriptions are already in the schema, so the parameter list here largely restates it. The only value added is flagging vdom as optional, which makes this baseline-level rather than genuinely additive.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific verb and resource: listing users currently authenticated against identity-based firewall policies. That is concrete enough to separate it from generic session tools, but it never names a sibling (e.g. list_active_sessions or list_ssl_vpn_sessions) to make the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear usage context by naming the prerequisite: an API profile with user-monitor permission, otherwise FortiOS returns 403. It doesn't state when to choose this over list_active_sessions or other session-listing siblings, so exclusions are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firewall_policiesA
List all firewall policies configured on a FortiGate device.
This tool retrieves and displays all firewall security policies from the specified device and Virtual Domain, showing traffic control rules and settings.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Policy ID and name
Source and destination addresses
Services and ports
Action (allow/deny)
Policy status (enabled/disabled)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It discloses the returned fields and the VDOM defaulting behavior, but says nothing about whether output is paginated/truncated, whether it requires admin privileges, or how it behaves on an unreachable device. Read-only nature is only weakly implied by 'retrieves and displays'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded one-sentence purpose, then a clarifying sentence, then compact Parameters and Returns blocks. The Returns list is slightly long for a list tool and the second sentence partly restates the first, but nothing is wasted outright.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by enumerating the returned fields (id/name, addresses, services, action, status). It is nearly complete for a simple two-parameter list call; the missing pieces are pagination/size limits and any failure behavior, which matter for a device with many policies.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: 'vdom: Virtual Domain name (optional, uses device default)' explains the null-default semantics that the schema's bare 'Virtual Domain' description does not. device_id is only restated, not enriched.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb + resource: 'List all firewall policies configured on a FortiGate device', scoped to a device and VDOM, with a follow-up sentence clarifying that these are traffic control rules. It does not, however, distinguish itself from siblings like get_firewall_policy_detail or lookup_policy, which an agent must infer from names alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'list all' suggests a bulk enumeration, so an agent can guess that single-policy inspection belongs to get_firewall_policy_detail. There is no explicit when-to-use/when-not-to-use statement and no prerequisites (e.g., device reachability, VDOM existence) called out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_firmwareA
Show the running firmware and available upgrade images (monitor/system/firmware).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. The word "Show" signals a read-only monitor operation, and the content scope is stated. It still does not disclose prerequisites, device reachability requirements, failure behavior, or return shape, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-formed sentence with the core purpose front-loaded. The parenthetical monitor endpoint is compact and useful. There is no redundant or wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple two-parameter read tool, and the schema fully documents both parameters. But there is no output schema, and the description gives only a broad indication of returned content without return structure or use prerequisites. It is minimally adequate rather than complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id documented as the FortiGate identifier and vdom documented as Virtual Domain. The description adds no parameter-level meaning beyond the schema. Baseline 3 is appropriate because the schema does the parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: it shows running firmware and available upgrade images. That makes its purpose distinct from status, license, and general monitor tools in the sibling list. It does not explicitly name a sibling for differentiation, so it is clear but not fully sibling-aware.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The firmware/upgrade wording implies this is used when checking current firmware or available upgrades. However, it gives no explicit when-to-use or when-not-to-use guidance and does not name alternatives such as get_device_status or get_license_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fortitokensB
List FortiTokens and their status/assignment (monitor/user/fortitoken).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It implies a read operation but says nothing about whether results are scoped to a device or VDOM, whether the list is paginated or truncated, what permissions are needed, or what 'status' values can appear. The ambiguous parenthetical does little to close that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with no wasted words, and the resource is front-loaded. The trailing parenthetical is the only element whose value is unclear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with a fully described schema, this covers the essentials: what is listed and which attributes are included. No output schema exists, so a brief note on return shape would help, but the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the input schema. The description adds no syntax, format, or defaulting information beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list FortiTokens) and adds the scope of what is returned (status/assignment). The parenthetical '(monitor/user/fortitoken)' gestures at the data categories but is cryptic and not tied to any field. It is clearly distinguishable from siblings by resource name, though it never says so explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to call this versus other tools, no mention that a device_id is required, no prerequisites or scope conditions. The agent must infer everything from the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_fsso_agentsB
List FSSO collector agents (passwords redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the whole behavioral burden, and it does disclose one genuinely useful trait: passwords are redacted in the output. It says nothing about read-only semantics, permission requirements, error behavior, or pagination, so the disclosure is partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with no waste; the resource name is front-loaded and the parenthetical adds a useful caveat rather than filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with full schema coverage and no output schema, the description is minimally adequate: it states the resource returned but omits whether results are scoped per device or VDOM, and gives nothing on return shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id ('FortiGate device identifier') and vdom ('Virtual Domain') documented in the schema. The description adds no parameter meaning of its own, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (List) and resource (FSSO collector agents), which is unambiguous. It does not need sibling differentiation because no other FSSO-related tool exists among the siblings, though it also gives no scope detail beyond the resource name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to call this tool versus alternatives, nor about prerequisites or exclusions. Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interface_countersC
Show per-interface traffic counters and link state (monitor/system/interface).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It implies a read operation via 'Show' and names the returned data, but says nothing about whether device_id must be reachable, whether counters are point-in-time or averaged, error behavior for an offline device, or response shape — significant gaps for a monitor tool with no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler and the resource stated before the endpoint hint. It is efficient, though the terseness is partly what leaves the guidance gaps noted in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and no output schema, the description is minimally sufficient — an agent knows what it returns. What is missing is the differentiation from get_interface_status/list_interfaces and any behavioral context, which matters because no annotations exist to backfill it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with only two parameters, both documented in the schema ('FortiGate device identifier', 'Virtual Domain'), so baseline 3 applies. The description adds no semantics for vdom scoping or device_id formatting beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Show') plus resource ('per-interface traffic counters and link state') makes the output content unambiguous, and the '(monitor/system/interface)' hint anchors it to the FortiGate monitor endpoint. However, it does not distinguish itself from adjacent siblings such as get_interface_status or list_interfaces, so the agent cannot tell which of the three to pick from the description alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance. With get_interface_status and list_interfaces in the sibling set covering overlapping territory, the absence of routing language forces the agent to infer the choice purely from tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_interfacesB
List all network interfaces configured on a FortiGate device.
This tool retrieves information about all network interfaces, including physical ports, VLANs, and virtual interfaces.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Interface names and types
IP address configurations
Interface status (up/down)
VLAN and zone assignments
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It clearly signals a read-only retrieval operation and lists the kind of data returned, which is useful, but it does not mention pagination, authentication requirements, or explicitly confirm absence of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core action and organized into parameters and returns sections. It is appropriately sized, though the first two sentences partially repeat the same idea about listing all interfaces.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description does well to summarize return fields and parameter defaults. However, it omits routing guidance relative to sibling tools and does not cover operational details such as pagination or authentication, leaving gaps for an agent choosing among interface-related tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema by noting that vdom is optional and defaults to the device's default virtual domain. The device_id explanation mostly duplicates the schema, but the vdom default behavior is a genuine addition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: listing all network interfaces on a FortiGate device, including physical ports, VLANs, and virtual interfaces. This is clear and specific, but it does not differentiate from nearby siblings such as get_interface_status or list_interface_counters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool returns but gives no guidance on when to use it instead of alternatives like get_interface_status, list_interface_counters, or list_zones. There are no exclusions, prerequisites, or routing cues for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_internet_service_namesA
List FortiGuard Internet Service names that policies can reference (large list; use cmdb_list with a filter for lookups).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. It helpfully warns that the result is a 'large list', which is a real performance/response-size signal. It says nothing about permissions, pagination, or what the entries look like, leaving gaps for a zero-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence with a parenthetical caveat; the resource is front-loaded and the redirect to cmdb_list follows. Every clause earns its place, with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only two-parameter list tool with full schema coverage and no output schema, the description covers purpose, bulk-vs-filtered choice, and a size warning. Only permission/pagination behavior is absent, which is minor here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, so the schema already documents device_id and vdom fully. The description adds no parameter-level meaning (e.g., how vdom defaults to the device's management VDOM). Baseline 3 applies when the schema does the lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List FortiGuard Internet Service names') plus the scope constraint ('that policies can reference'), which is meaningfully more informative than the name alone. Sibling differentiation is partial: it hints at the cmdb_list relationship but doesn't distinguish it from the many other list_* tools in the family.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes targeted lookups to the alternative: 'use cmdb_list with a filter for lookups.' It names both the alternative and the condition that selects it. It stops short of saying when this bulk tool is preferred (e.g., enumerating all names for policy creation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ip_poolsC
List NAT IP pools (type, start/end IP, ARP reply).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'List' implies a read-only enumeration, but it discloses nothing about permission requirements, whether vdom=null means all VDOMs, pagination, or result size, and never clarifies whether ARP reply is a returned flag or a filter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence with the resource up front and the returned fields in a parenthetical. Nothing is wasted, though the terseness leaves room for one more clause of guidance without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description covers the resource and the shape of the returned records. It stops short of explaining the required device scoping and the vdom default, which an agent needs to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: device_id is documented as the FortiGate identifier and vdom as the Virtual Domain, so the schema does the heavy lifting. The description adds nothing about either parameter, leaving the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb and resource ('List NAT IP pools') and enumerates the main returned attributes (type, start/end IP, ARP reply). An agent can tell what it does without opening the schema, though it doesn't explicitly contrast with the closest sibling, list_central_snat_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as list_central_snat_rules or list_static_routes for related NAT/routing data. The agent must infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ips_custom_signaturesC
List custom IPS signatures (ips/custom).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden and does not meet it. It says nothing about read-only semantics, required device permissions, pagination or result size, or whether the call is scoped to a single VDOM — all relevant for a device-backed listing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero waste; the parenthetical API path adds useful orientation at no cost. It is arguably under-specified rather than verbose, but structurally it is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema, the description is minimally adequate — the agent knows what is being listed and which device to target. It stops short of describing return contents or behaviour when a VDOM is omitted, which leaves meaningful inference to the caller.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with 'device_id' documented as the FortiGate device identifier and 'vdom' as Virtual Domain, so the schema already does the explanatory work. The description adds no semantics beyond that, which is acceptable at full coverage but earns no bonus.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb 'List' plus a precise resource 'custom IPS signatures', reinforced by the API path '(ips/custom)'. No sibling in the tool list covers IPS signatures, so an agent can identify this tool's domain without ambiguity, though the scope (global vs per-VDOM, custom vs built-in) is only implied by the word 'custom'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no mention of alternatives or related tools (e.g. list_security_profiles). The agent must infer that this is a read-only inventory call from the verb 'List' alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ipsec_phase1A
List IPsec phase-1 interfaces: type, remote gateway, IKE version, proposals, peer settings (PSKs redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it discloses one important behavior ('PSKs redacted'), which is real value beyond structured fields. But it says nothing about permissions, pagination, or whether the list is scoped to a single device/vdom.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence, front-loaded with the verb and resource and then the field list. Nothing redundant, and the security caveat is parenthetical rather than buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the field enumeration ('type, remote gateway, IKE version, proposals, peer settings') usefully describes the return shape for a simple two-parameter list tool. Only the redaction/scope behavior is thin.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id and vdom both documented in-schema, so the baseline of 3 applies. The description adds no parameter meaning — not even that results are limited to the given device.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List IPsec phase-1 interfaces') and enumerates the returned fields, which cleanly separates it from siblings like list_ipsec_phase2 and list_ipsec_tunnels. An agent can pick it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the 'List' verb — read-only retrieval of phase-1 config. It never says when to prefer this over list_ipsec_phase2, list_ipsec_tunnels, or get_bgp_config-style detail tools, and gives no prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ipsec_phase2B
List IPsec phase-2 selectors: phase-1 name, local/remote subnets, proposals, auto-negotiate.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It implicitly signals a read-only enumeration by naming returned fields, but does not state that it is non-mutating, whether results can be empty, or anything about permissions for the target device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence naming the resource and its key fields. Efficient, though it could carry one more clause on sibling differentiation without becoming bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description partially compensates by listing returned fields. But it leaves the phase-1 vs phase-2 vs tunnels distinction and read-only nature unaddressed, which an agent needs to call it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id and vdom documented in the schema, so baseline is 3. The description adds no further parameter meaning beyond what the schema already supplies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List IPsec phase-2 selectors') and enumerates the returned fields (phase-1 name, local/remote subnets, proposals, auto-negotiate). However, it does not distinguish this from the sibling list_ipsec_phase1 or list_ipsec_tunnels, leaving the agent to infer why phase-2 selectors differ.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The listing intent implies when to use it, but there is no explicit guidance on when to prefer it over list_ipsec_phase1 or list_ipsec_tunnels, nor any mention of prerequisites like needing a device_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ipsec_tunnelsB
List IPsec VPN tunnels with status, remote gateway, phase-2 selectors and traffic counters.
Dial-up tunnels show the number of connected clients instead of a gateway.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
One block per tunnel: state (UP/PARTIAL/DOWN/dialup), gateway, bytes in/out, phase-2 entries
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does valuable work by describing the returned state set (UP/PARTIAL/DOWN/dialup) and the dial-up edge case where clients are reported instead of a gateway, but it omits permissions requirements, pagination, or volume/rate considerations for a device-scoped listing call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core statement and the dial-up caveat, then cleanly separated Parameters/Returns blocks. The parameter block duplicates the schema and is the only real wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the Returns section usefully compensates by describing the per-tunnel block and state enumeration. Missing only a note on how this relates to the IPsec config siblings and any scoping/cost caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents both parameters. The description's parameter block essentially restates the schema text ('Identifier of the FortiGate device', 'Virtual Domain name (optional)') without adding format, default, or behavior detail. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List IPsec VPN tunnels') and enumerates the fields returned (status, gateway, phase-2 selectors, traffic counters). It implicitly distinguishes itself from the config-oriented siblings list_ipsec_phase1/list_ipsec_phase2 by emphasizing runtime status, but never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_ipsec_phase1, list_ipsec_phase2, or execute_ipsec_tunnel_action. The mention of dial-up tunnel behavior is a data-shape note, not a usage rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ipv6_routesA
Show the IPv6 routing table (monitor/router/ipv6).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. 'Show' implies a read-only operation and the path suggests a monitoring command, but it does not explicitly state that it is safe, what permissions are needed, or what the response format looks like. Some behavioral context is present but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with zero wasted words. It efficiently conveys the tool's purpose and the underlying path.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with full schema coverage and no output schema, the description is largely complete. It could be slightly improved by noting that it is read-only or what the routing table output contains, but it is sufficient for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters fully. The description adds no additional meaning about device_id or vdom beyond what the schema provides, matching the baseline for high-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Show') and resource ('IPv6 routing table'), and the explicit IPv6 qualifier distinguishes it from the sibling get_routing_table (likely IPv4). The monitor/router/ipv6 path further clarifies scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, prerequisites, or alternatives are provided. It does not mention when to choose this over get_routing_table or how it relates to other routing tools, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ldap_serversA
List LDAP servers (server, port, DN, bind type, secure mode; passwords redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does disclose a genuinely useful behavior: passwords are redacted, so an agent knows it cannot retrieve bind credentials. It does not confirm read-only semantics, whether results span all VDOMs, or any permission requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence with the resource stated first and returned fields tucked into a parenthetical; every clause carries information and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with no output schema, enumerating the returned fields plus the redaction note covers the essential return-shape question. Only VDOM scoping behavior is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id ('FortiGate device identifier') and vdom ('Virtual Domain') both documented in the schema. The description adds no parameter-level detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List LDAP servers') and enumerates the fields returned (server, port, DN, bind type, secure mode), which distinguishes it from sibling auth-server listings such as list_radius_servers, list_tacacs_servers, and list_saml_servers by name alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to call this versus the other authentication-server list tools, nor any stated prerequisites (a FortiGate device_id is required). Usage is only inferable from the tool name and the read-only 'List' framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_lldp_neighborsB
Show LLDP neighbors (switch ports, neighbor system names).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. 'Show' implies a read-only operation, but the description does not confirm that, state permission or reachability requirements, clarify vdom scope, or describe any output/pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted text. The parenthetical is compact and adds useful detail about what the neighbor listing contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and no output schema, the description is adequate but thin. It does not explain when the tool is appropriate, whether the device must be reachable, or how vdom scoping affects results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, documenting both device_id and vdom. The description adds no parameter-specific meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific resource, 'LLDP neighbors,' and parenthetically clarifies that results include switch ports and neighbor system names. This is clear enough to understand the tool's purpose, but it does not explicitly distinguish it from nearby inventory/diagnostic siblings such as list_managed_switches or list_switch_port_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says only what the tool shows. It gives no guidance on when to use it versus related tools like list_managed_switches, list_interface_counters, or list_arp_table, and it does not mention prerequisites such as device reachability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_local_certificatesB
List local (device) certificates with subject, issuer and validity (private keys redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It usefully notes that private keys are redacted and that subject, issuer, and validity are returned, but it does not describe permissions, pagination, device reachability requirements, or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that states the resource, the returned fields, and the redaction behavior without unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with full schema coverage and no output schema, the description gives enough context about what is returned and what is redacted. It is only slightly incomplete because it omits usage guidance relative to sibling certificate-listing tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the schema. The description does not add meaning beyond the schema for either parameter, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: list local device certificates, and it names returned fields (subject, issuer, validity). It distinguishes itself from remote certificates by specifying 'local (device)', but it does not explicitly differentiate from the sibling tools list_ca_certificates or list_remote_certificates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus list_remote_certificates, list_ca_certificates, or other certificate-related siblings. Usage is only implied by the verb 'List'; there are no stated prerequisites, conditions, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_local_usersB
List local user accounts defined on the FortiGate (status, type, two-factor, email).
Passwords are never returned by FortiOS.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
One line per user
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden, and it does add one genuinely useful behavioral fact: passwords are never returned by FortiOS, which tells the agent not to expect credentials. It says nothing about read-only nature beyond "List", permission requirements, pagination, or how vdom scoping affects results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded purpose sentence, then short parameter and return sections with no filler. Mildly redundant with the schema, but the structure is easy to scan and nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates partially by saying the return is "one line per user" and naming the fields shown. For a simple two-parameter list tool that is nearly enough; the only gap is unstated default vdom behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description's restatement ("device_id: Identifier of the FortiGate device", "vdom: Virtual Domain name (optional)") adds no semantics beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("List local user accounts defined on the FortiGate") and enumerates the fields returned (status, type, two-factor, email), so the agent knows exactly what entity is being fetched. It does not explicitly distinguish itself from near neighbors like list_admins, list_api_users, or list_user_groups, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no exclusion of alternatives, and no prerequisites (e.g., whether the device must be reachable or which vdom applies by default). The agent must infer from the name that this is for local user accounts rather than administrators, API users, or user groups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_managed_apsB
Show managed FortiAPs with status, IP, clients and firmware (monitor/wifi/managed_ap).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Show' implies a read-only operation and the field list signals the shape of the response, which is useful given there is no output schema. However, it omits prerequisites (e.g. that a FortiGate with WiFi controller enabled is required), permission expectations, and any pagination or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the returned-field list is packed efficiently. The trailing API-path parenthetical borders on noise but is short enough not to hurt readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the returned fields, and the two parameters are fully documented in the schema, which is sufficient for a simple read-only list tool. Gaps are minor: no clarification of monitor-vs-config data source implications or the vdom scoping behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both device_id ('FortiGate device identifier') and vdom ('Virtual Domain') documented in the schema, so baseline 3 applies. The description adds nothing about parameter usage—notably it never clarifies that the optional vdom scopes the listing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Show managed FortiAPs') and enumerates the returned fields (status, IP, clients, firmware). It is clearly distinct from siblings like list_ap_profiles (configuration profiles) and list_rogue_aps, though it does not explicitly name those siblings to sharpen the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use / when-not-to-use guidance and no mention of alternatives such as list_rogue_aps or list_wifi_clients. The parenthetical API path (monitor/wifi/managed_ap) is an implementation detail, not usage guidance, so selection is left to inference from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_managed_switchesB
List FortiSwitch units managed by the switch controller (monitor/switch-controller/managed-switch).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full behavioral burden. 'List' implies a read-only operation and the endpoint path hints at a monitor query, but nothing is said about pagination, whether the FortiGate must be online, permissions, or failure behavior for an unmanaged device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource scope first and the underlying endpoint in parentheses. No filler, nothing truncated in a way that loses meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool with full schema coverage and no output schema, the description is nearly sufficient: it identifies the resource and data source. The only meaningful gap is which device-level context is required before calling, which is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% (both 'vdom' and 'device_id' are documented in the schema), so the schema already does the parameter work. The description adds no extra meaning such as whether vdom defaults to the device's management VDOM, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource (list FortiSwitch units managed by the switch controller) and even names the underlying monitor endpoint, so an agent knows exactly what comes back. It does not explicitly differentiate from nearby siblings like list_switch_port_stats or list_managed_aps, though the resource name itself is distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description only restates what the tool does; it gives no conditions for choosing it over list_switch_port_stats, list_managed_aps, or list_devices, and no prerequisites (e.g., the device must be reachable/managed). An agent must infer all usage decisions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_onetime_schedulesB
List one-time firewall schedules (start/end datetime).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation and mentions returned datetime fields, but says nothing about device scoping, permissions, pagination, or what happens with the optional vdom parameter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that identifies the resource and its key characteristics with zero waste. It is appropriately sized for a simple list operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and no output schema, the description is adequate. However, without annotations it could disclose more about scope (per-device, optional vdom behavior) and the read-only nature of the operation, leaving some gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (device_id and vdom) are already documented in the schema. The description adds no meaning beyond the schema — it only references the schedule's datetime content, not parameter semantics. Baseline 3 is appropriate when the schema already handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (list one-time firewall schedules) and adds distinguishing detail with start/end datetime. It implicitly distinguishes itself from the sibling list_recurring_schedules via 'one-time', but does not explicitly name that alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no when-to-use guidance, no prerequisites, and does not mention the recurring-schedule sibling as an alternative. An agent must infer usage purely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_policy_routesC
List policy-based routes (router/policy).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it discloses almost nothing beyond the verb. It does not state that the operation is read-only, whether results are per-VDOM scoped, whether a device connection must be established first, or how large result sets are returned. Only the word 'List' hints at a safe read.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, with zero filler. It is efficient but borders on under-specification rather than being deliberately tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A simple two-parameter read tool with a fully documented schema and no output schema, so the bar is modest. Still, with no annotations, the description should say more about scope (per-VDOM? per-device?) and the fact that this returns policy-route configuration rather than live routes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: device_id is documented as the FortiGate device identifier and vdom as Virtual Domain. The description adds no meaning beyond that, so the baseline 3 applies — the schema does the work, not the prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List policy-based routes', with the FortiOS config path '(router/policy)' as clarification. It is distinguishable by name from siblings like list_static_routes or get_routing_table, but the description never explicitly contrasts with those routing siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of when to prefer this over list_static_routes, get_routing_table, or lookup_route, and no prerequisites stated. The agent must infer from the name alone that this returns policy-route configuration rather than the active routing table.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_prefix_listsC
List router prefix lists.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, yet it discloses nothing beyond the bare verb. It does not state that this is a read-only, non-destructive operation, whether the device must be reachable, or how results are shaped/paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste and the core verb front-loaded. It is efficient but borders on under-specification rather than well-earned brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with a fully documented schema the description could get by with little, but with no annotations and no output schema, the agent gets no information about read-only safety, prerequisites, or result shape, leaving it under-contextualized relative to the 100+ sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters (device_id, vdom) are fully documented in the schema at 100% coverage, so the baseline is 3. The description adds no interpretation of what vdom=null means (global vs. default vdom) or how device_id maps to the list_discover flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'List' and resource 'router prefix lists' are stated, so the basic operation is identifiable. However, the description never clarifies what a prefix list is in this context (route-map matching objects on a FortiGate) or what scope it returns, and it does nothing to distinguish it from the many other list_* read tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus alternatives such as get_routing_table, list_route_maps, or the generic cmdb_list, and no mention that a specific device must already be registered (device_id required) or that vdom scoping may change results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_radius_serversA
List RADIUS servers (addresses, auth type, NAS IP; secrets redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add one genuinely useful behavioral fact — that secrets are redacted in the output — which goes beyond the schema. It omits whether this is strictly read-only and any pagination/result-size behavior, so it's only partially complete for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with a compact parenthetical that discloses return fields. It is efficient; only the lack of any usage clause keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only list tool with fully documented parameters and no output schema, the description covers what is queried and what comes back (including the redaction caveat). Sufficient for an agent to call it correctly, though noting read-only semantics or scope would round it out.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with device_id and the optional vdom both documented in the schema. The description adds no additional parameter meaning, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List RADIUS servers') and even enumerates returned fields (addresses, auth type, NAS IP), so an agent can tell it apart from the nearby list_ldap_servers/list_tacacs_servers siblings by name alone. No explicit sibling routing is given, which keeps it at 4.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the read-only 'List' verb and the required device_id, but there is no explicit when-to-use guidance or statement of alternatives (e.g., use list_ldap_servers for LDAP directory configs). Adequate but leaves the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recurring_schedulesB
List recurring firewall schedules (days and time window).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'List' implies a read-only operation and the parenthetical discloses the returned shape, which is useful. However, it says nothing about pagination, permission requirements, or whether vdom scoping changes results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no wasted words that conveys both the operation and the result payload.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema documentation and no output schema, the description covers purpose and return fields adequately. Minor gaps remain around device scoping and pagination, but nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with device_id (required) and vdom fully documented in the schema. The description adds no syntax, format, or default behavior beyond what the schema already provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('recurring firewall schedules') and clarifies the returned content (days and time window). 'Recurring' implicitly distinguishes it from the sibling list_onetime_schedules, though it does not name that sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this versus alternatives such as list_onetime_schedules, nor any prerequisites. Usage is only inferable from the name and resource noun.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_remote_certificatesC
List remote certificates (vpn.certificate/remote).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. Beyond implying a read via 'List', it discloses nothing about permissions, whether vdom defaults to the device's management vdom, pagination, or what the entries look like.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero waste and the resource front-loaded. It is terse to the point of under-specification, which costs a little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and no output schema, the description is minimally sufficient to invoke correctly, but it should say more about the vdom scoping and what the returned certificates represent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device_id and vdom; the description adds no extra parameter meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List remote certificates') and adds the FortiOS config path (vpn.certificate/remote), which is precise. It implies distinction from list_local_certificates/list_ca_certificates via 'remote', but never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_local_certificates or list_ca_certificates, and no prerequisites or context for the required device_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_rogue_apsB
Show detected rogue/neighbor access points (monitor/wifi/rogue_ap).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It implies a read-only listing but does not state whether results are live, cached, paginated, or require specific permissions, leaving significant gaps for a tool that may return sensitive network data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. The parenthetical endpoint reference is compact and useful context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema and no annotations, the description adequately identifies the resource but omits important context such as what constitutes a rogue/neighbor AP, whether results are real-time, and what fields are returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds no additional meaning about device_id or vdom beyond what is in the schema, which is the expected baseline when schema coverage is complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a clear verb ('Show') and specific resource ('detected rogue/neighbor access points'), making the purpose immediately understandable. It implicitly distinguishes itself from siblings like list_managed_aps and list_wifi_clients, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives such as list_managed_aps or list_wifi_clients. Use is only implied by the resource name, with no context about prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_route_mapsC
List router route maps.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not mention permissions, pagination, whether output includes default or hidden route maps, or any other operational behavior beyond the bare action of listing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It is concise, though the extreme terseness reflects under-specification rather than ideal information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with full schema coverage, the description is minimally adequate. It omits what route maps are in this context and does not describe return shape, but the low-complexity operation and documented parameters keep the gap moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and both parameters (device_id and vdom) are documented in the schema. The description adds no parameter-specific meaning beyond what the schema already provides, so the baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List router route maps"), so an agent can understand the basic operation. However, it does not distinguish this tool from closely related siblings such as list_policy_routes, list_static_routes, or get_routing_table, which weakens selection clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus alternatives, no preconditions, and no exclusions. The agent must infer usage from the name alone, which is risky given the many routing-related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_running_processesB
List running processes with CPU/memory usage (monitor/system/running-processes).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; 'List' implies a read-only, non-destructive operation and the mention of CPU/memory discloses what data comes back. It does not say whether output is paginated, sorted, or limited, nor whether elevated access on the FortiGate is required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler; the resource, the returned metrics, and the endpoint hint all fit in one line.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only list tool with a fully described schema, the description covers the essentials. It lacks any note on result volume, filtering, or ordering, and with no annotations and no output schema there is nothing else to fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented in the schema. The description adds no parameter meaning (e.g., that vdom scopes results to a virtual domain), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List running processes') and adds the returned data ('CPU/memory usage'), which separates it from generic resource tools like get_system_resources and get_performance_status. It does not explicitly name a sibling, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no prerequisites, and no pointer to alternatives such as get_system_resources or get_performance_status for aggregate views. The only context is an embedded endpoint path, which is usage-adjacent but not a selection criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_saml_serversB
List SAML identity providers (entity IDs, SSO/SLO URLs).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, yet it never says this is a read-only query, nor that it requires a target FortiGate device_id, nor anything about permissions or behavior when the device has no SAML servers. The only behavioral hint is the implicit read-only nature of 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly written sentence with the resource front-loaded and the return fields in a compact parenthetical. Nothing is wasted and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with no output schema, the description is minimally adequate: the resource and returned fields are clear. However, it omits that a device_id is required to scope the call and gives no sense of behavior if the device is unreachable or unconfigured, leaving gaps an agent must fill from the schema alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (device_id, vdom) are documented in the schema, so the baseline of 3 applies. The description adds no meaning about scoping to a device or virtual domain beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('SAML identity providers') and the parenthetical enumerates the returned fields (entity IDs, SSO/SLO URLs), so an agent knows exactly what this tool yields. It is distinguishable from sibling listers like list_ldap_servers or list_radius_servers by the SAML resource name, though no explicit sibling comparison is made.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the other authentication-server listers (LDAP, RADIUS, TACACS+, FSSO), nor any prerequisites. Only the implied usage of 'looking up SAML IdP configuration' can be inferred from the name and output fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sdwan_health_checksB
Show SD-WAN health-check results per member (latency, jitter, packet loss).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. 'Show' implies a read-only monitoring operation and the description lists returned metrics, but it does not disclose permission needs, device/vdom scoping behavior, or whether the device must be online.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single front-loaded sentence with no filler. It states the resource, scope, and key output metrics efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only monitoring tool with two fully documented parameters and no output schema, the description provides enough about the returned metrics to call it correctly. It is slightly incomplete in not mentioning usage context or device scoping.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented. The description adds only 'per member,' which does not materially clarify parameter semantics beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: showing SD-WAN health-check results per member, with the measured metrics. It distinguishes itself from siblings like get_sdwan_config and list_sdwan_members by focusing on health-check results, though it does not explicitly name alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no prerequisites such as requiring a reachable FortiGate, and no comparison to sibling tools like list_sdwan_members or get_sdwan_config. The purpose implies usage, but the description provides no selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_sdwan_membersB
Show SD-WAN member interface status and traffic.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation but does not state permissions, whether the call is safe, what data format is returned, or any rate limits. Only the purpose is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple read operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with complete schema coverage and no output schema, the description is minimally adequate. However, it does not describe the return structure or clarify what 'member interface status and traffic' includes, which would help an agent interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description adds no parameter-specific semantics, which is acceptable given the schema's completeness but leaves little added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Show SD-WAN member interface status and traffic.' This clearly identifies the tool's domain, but it does not explicitly differentiate it from related siblings like get_sdwan_config or list_sdwan_health_checks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. The agent must infer usage from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_security_profilesB
List security (UTM) profiles of one type with a short summary each.
Parameters:
device_id: Identifier of the FortiGate device
profile_type: application | webfilter | antivirus | ips | dnsfilter | ssl-ssh
vdom: Virtual Domain name (optional)
Returns:
Profile names, comments and a per-type summary (entry counts, block counts, ...)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| profile_type | Yes | Profile type |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It does useful work by disclosing the return shape (names, comments, per-type entry/block counts), which signals this is a lightweight summary call rather than a full dump. However, it says nothing about read-only semantics, required admin permissions, pagination, or behavior when the type has zero profiles.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the one-line purpose, then parameters and returns in labeled blocks. The parameter list is somewhat redundant against a 100%-covered schema, but overall it is compact and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema present, the description compensates by outlining the return payload, and all three parameters are covered. The remaining gap is situational: it never tells the agent when to follow up with get_security_profile_detail or how to handle multiple profile types simultaneously.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters; the description's parameter block largely restates them. It does add the enumeration of valid profile_type values, but that is already present as a schema enum, and no semantics are added for vdom (e.g., default/global VDOM behavior) or device_id resolution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List security (UTM) profiles') with an explicit scope constraint ('of one type') and a note that each result carries a summary. This implicitly separates it from get_security_profile_detail, which returns full detail for a single profile, though the sibling is never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance and no alternatives named. The only inference available is that 'of one type' means profile_type is mandatory, which the schema already enforces via the required list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_groupsB
List service groups with their member services resolved to protocol/ports.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
Group name, members with resolved ports, comment
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does add useful return context, including group name, resolved member ports, and comments, but it does not mention pagination, permissions, or whether the operation is guaranteed read-only beyond the implication of 'List'.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded with the core action, and structured with clear Parameters and Returns sections. It is efficient, though the parameter section partly duplicates information already available in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description appropriately explains the return contents: group name, resolved member ports, and comment. For a simple two-parameter list tool this is nearly complete, though it does not address pagination or response size.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the description merely repeats the two parameters already documented in the schema. The optional nature of vdom is noted, but no additional semantics or examples are added beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'List service groups', and adds the distinctive behavior that members are 'resolved to protocol/ports'. This clearly separates it from list_service_objects and list_address_groups, though it does not explicitly name an alternative sibling for routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not state when an agent should choose this tool over related siblings such as list_service_objects or list_address_groups. It provides no prerequisites, exclusions, or usage context beyond the literal action of listing groups.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_service_objectsB
List all service objects configured on a FortiGate device.
This tool retrieves all network service objects defined on the device, including TCP/UDP port definitions and protocol specifications.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Service name and protocol
Port configurations
Comments and descriptions
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. It does disclose that the call is a full enumeration ("all") and lists the category of returned fields, which is useful, but says nothing about pagination, result volume, behavior when the device is unreachable, or required permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose sentence is front-loaded and the Parameters/Returns blocks are scannable. Some space is spent restating schema-derived parameter descriptions, but the structure is efficient overall.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-resource list with no output schema, the description covers scope, parameters, and the shape of the response, which covers what an agent needs to invoke it. Minor gaps remain around pagination and vdom enumeration, which a sibling tool (discover_vdoms) implies the agent may need.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description restates both parameters but adds one genuinely new detail: vdom is optional and falls back to the device default, which goes slightly beyond the schema's bare "Virtual Domain" text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("List all service objects configured on a FortiGate device") and the second sentence narrows it to TCP/UDP port and protocol definitions. An agent can distinguish it from list_service_groups or list_address_objects by name alone, but the description never explicitly states that differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to prefer this tool over siblings such as list_service_groups, cmdb_list, or the create/update/delete service object tools. It also omits any prerequisite context, such as needing a valid registered device_id or how vdom selection changes scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_shaping_policiesC
List traffic shaping policies.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden, yet it only says 'List'. It doesn't disclose that the call is device-scoped (device_id required), how vdom affects the result, whether results are paginated, or what fields policies contain. This is inadequate disclosure for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It's a single short sentence with no filler, which is structurally efficient. However, that brevity comes at the cost of substance—there is nothing front-loaded beyond the bare purpose, so conciseness here is under-specification rather than disciplined editing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema, no-annotation tool, the definition is too thin. It omits what a 'traffic shaping policy' contains, how vdom scopes results, and what the caller should expect back, leaving the agent to guess at the tool's actual output surface.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the schema. The description adds no extra meaning about these parameters (e.g., whether vdom defaults to the device's management VDOM or filters results), so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a verb and resource ('list traffic shaping policies'), which is clear enough, but it essentially restates the tool name. It does nothing to distinguish this from nearby siblings such as list_traffic_shapers, list_firewall_policies, or list_policy_routes, which an agent could easily confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, no prerequisites mentioned (e.g., that a device must first be added via add_device), and no indication of how it relates to the shaping-related siblings. The agent must infer usage entirely.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_snmp_communitiesB
List SNMP v1/v2c communities and their hosts (community strings redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The redaction of community strings is a genuinely useful disclosure (an agent learns it cannot retrieve credentials), and 'List' implies read-only, but permission requirements, output shape beyond 'communities and their hosts', and pagination/emptiness behavior are unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with zero padding; the redaction caveat is attached inline where it matters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, it covers the essentials (what is listed, what is withheld). It leaves gaps on device/vdom scoping semantics and on whether results are per-device or global, which affects call correctness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters (device_id, vdom), so the schema already documents both. The description adds nothing about vdom scoping or the effect of omitting it, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: 'List SNMP v1/v2c communities and their hosts', plus a scope detail (strings redacted). It is distinguishable from the nearby get_snmp_sysinfo sibling, though the description never explicitly contrasts with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites (e.g. device must be onboarded), and no mention of alternatives such as get_snmp_sysinfo for system-level SNMP data. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssl_vpn_portalsC
List SSL-VPN portals (tunnel mode, split tunneling, IP pools, web mode).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden, yet it says nothing about read-only nature, permissions, pagination, or whether an unknown device_id errors versus returns empty. The parenthetical feature list describes the data, not the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The parenthetical enumeration is slightly redundant given it describes returned fields rather than the tool's action, but it is not wasteful enough to penalize heavily.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description identifies the resource but leaves the agent guessing about result shape, vdom default behavior, and how it relates to get_ssl_vpn_settings. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (device_id, vdom) are documented in the schema, so the baseline of 3 applies. The description adds no extra meaning about vdom scoping or device_id format beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List SSL-VPN portals') and enumerates the notable sub-features (tunnel mode, split tunneling, IP pools, web mode) that the returned portals carry. It is clearly distinguishable from list_ip_pools or get_ssl_vpn_settings, though it does not explicitly name those siblings as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus the closely related siblings (get_ssl_vpn_settings, list_ssl_vpn_sessions), and no mention of prerequisites such as the device needing to be reachable or how vdom scoping affects results. Usage is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ssl_vpn_sessionsB
List active SSL-VPN sessions (user, source host, login time, duration).
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
One line per session
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the behavioral burden; 'List active' implies a read-only operation and the Returns section hints at output shape ('one line per session'). However, it does not define what 'active' means (currently connected vs. all configured), whether vdom scoping changes results, or any error/auth behavior, leaving real gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose, then clearly sectioned into Parameters and Returns, with zero filler. Slightly terse on the Returns side, but every sentence is doing work.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only list tool this covers the essentials: purpose, both parameters, and an output sketch. It falls short given the absence of annotations and output schema, since it never explains what 'active' entails, whether vdom filters results, or how empty/error results appear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter semantics are already documented in the schema. The description restates device_id and vdom with almost no added meaning beyond confirming vdom is optional, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List active SSL-VPN sessions') and enumerates the fields returned (user, source host, login time, duration). It does not distinguish itself from nearby siblings such as list_firewall_auth_sessions or list_active_sessions, so the agent must infer that SSL-VPN is the narrower scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this tool versus alternatives, no prerequisites (device reachability, permissions), and no exclusion of related tools. The only guidance is an implicit 'active' scope, which an agent could easily confuse with list_active_sessions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_static_routesB
List all static routes configured on a FortiGate device.
This tool retrieves all manually configured static routes from the device's routing table, showing destination networks and gateways.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Route destinations and gateways
Interface assignments
Administrative distances
Route status (enabled/disabled)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It clearly implies a non-mutating read ("retrieves", "list") and enumerates what comes back (destinations, gateways, interfaces, distances, status), which is valuable given there is no output schema. It does not address permissions/auth needs, pagination, or behavior when no static routes exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well front-loaded: the purpose sentence comes first, followed by elaboration and then returns. The Parameters block largely duplicates a 100%-covered schema, which is minor waste, while the Returns block earns its place because there is no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read-only list tool with no output schema, the description covers purpose, both parameters, and the shape of the returned data. The remaining gap is routing relative to sibling routing tools and any failure/empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description restates them but does add one piece of meaning beyond the schema: vdom is optional and falls back to the device default, which is not stated in the schema's "Virtual Domain" description. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ("List all static routes configured on a FortiGate device") and clarifies the scope as "manually configured" routes from the routing table, which usefully separates it from dynamic/policy routes. It never names the siblings it should be distinguished from, though, notably get_routing_table, list_policy_routes, and list_ipv6_routes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as get_routing_table (full routing table) or lookup_route (finding the route for a destination). The purpose sentence implies the usage, but with many closely related routing tools in the sibling list, the absence of any routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_switch_port_statsC
Show FortiSwitch port statistics (monitor/switch-controller/port-stats).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden and does very little: it never explicitly states the operation is read-only, does not say whether stats are current vs. cumulative counters, gives no pagination or return-format hints, and says nothing about permissions or per-VDOM scoping behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the resource and API endpoint are stated immediately. It is efficient but borders on under-specified rather than optimally sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter read tool with full schema coverage and no output schema, the description is minimally adequate but leaves the agent guessing what 'statistics' comprises (rx/tx, errors, discards) and how results are scoped by device_id/vdom across multiple switches.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both device_id and vdom are already documented in the schema and the description adds no parameter-level meaning. Baseline 3 applies; the parenthetical API path adds slight orientation but not parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Show') plus a clearly scoped resource ('FortiSwitch port statistics'), with the underlying API path in parentheses. An agent can distinguish it from list_interface_counters or list_managed_switches because the description names switch-port stats explicitly, though it never states the contrast outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use or when-not-to-use guidance is given, and no alternative is named even though nearby siblings (list_interface_counters, list_lldp_neighbors, get_interface_status) could plausibly overlap. The agent must infer conditions from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_syslog_settingsC
Show the primary syslog server settings (log.syslogd/setting).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the entire behavioral burden for a device-touching call. 'Show' implies a read, but the description does not state read-only guarantees, permission requirements, error behavior, or what the settings payload contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the resource named first and the config path as supporting detail; nothing is padded. The parenthetical is terse but useful for disambiguation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (2 params, no nested objects, no output schema) and the schema covers both parameters, but with no annotations the description should at least say whether results are global or per-vdom and confirm read-only behavior. Adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so device_id and vdom are already documented in the schema. The description adds no extra meaning about vdom scoping or the device_id format, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Show') and resource ('primary syslog server settings') and includes the underlying config path (log.syslogd/setting), which makes the target object unambiguous. It does not, however, contrast itself with the closely related sibling get_log_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to use this versus get_log_settings or the generic cmdb_get/log_get tools, and no prerequisites or exclusions are given. Usage has to be inferred from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tacacs_serversB
List TACACS+ servers (secrets redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full load; it does usefully disclose that secrets are redacted in the response, which is genuine behavioral context an agent would otherwise guess wrong about. However it never states explicitly that this is a non-destructive read, nor anything about permissions or response shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short front-loaded sentence with no filler; every word earns its place. It's borderline under-specified rather than padded, so it loses a point only because brevity here comes at the cost of guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with a fully documented schema, the description covers the core action and one important output caveat (redaction). Without an output schema or annotations, though, an agent still lacks any sense of return shape, pagination, or error conditions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the schema. The description adds no extra meaning such as whether vdom is required for multi-VDOM devices or what happens if it's omitted. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (TACACS+ servers), which cleanly separates it from the auth-server siblings (list_radius_servers, list_ldap_servers, list_saml_servers). It doesn't mention the device scope that the required device_id implies, but the resource name alone is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use this versus the other AAA server listings, no prerequisites (e.g., device must be reachable/added), and no conditions under which it would fail or be the wrong choice. The agent must infer everything from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_traffic_shapersB
List shared traffic shapers (guaranteed/maximum bandwidth, priority).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. 'List' makes the read-only nature apparent and the parenthetical discloses key content fields, but it does not cover permissions, pagination, return shape, or device-scope behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. It communicates the operation and resource immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter list tool with full schema coverage, the definition is minimally sufficient to invoke it. However, with no output schema and no annotations, it omits return-shape expectations and sibling differentiation that would help an agent use it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both device_id and vdom. The description adds no parameter-specific meaning beyond the schema, which is acceptable at the baseline when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, 'List', and a specific resource, 'shared traffic shapers', plus parenthetical detail on the represented fields. It is clear about what it does, but it does not differentiate itself from the sibling list_shaping_policies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool, when not to use it, prerequisites such as device access, or alternatives such as list_shaping_policies. The intended usage is only implied by the tool name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_url_filtersB
List static URL filter tables used by web filter profiles (entries with action).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'List' implies a read-only operation and the parenthetical clarifies what subset is returned, but nothing is said about permissions, whether device_id/vdom context affects results, or pagination/result size.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the verb and resource, with the scope qualifier attached where it is useful. No filler, though it is arguably too short given the gaps elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only place an agent could learn what the returned entries look like; it gestures at this ('entries with action') but does not describe the fields or shape. Adequate for a simple list tool, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: device_id (required) and vdom are already documented in the schema. The description adds no parameter-level detail beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List static URL filter tables') and narrows scope to tables used by web filter profiles with entries carrying an action. That scope note helps distinguish it from generic config-listing siblings, though it never names a specific alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus other list_* tools (e.g. list_security_profiles, list_dns_domain_filters, list_application_groups). The parenthetical implies these are only the static/action-bearing tables, but no exclusion or prerequisite is spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_user_groupsB
List user groups and their members (local users and remote-server matches).
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional)
Returns:
Group name, type, members, remote group matches
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that results include group name, type, members, and remote group matches — useful return context — but says nothing about read-only safety, required device permissions, device reachability, or result size/pagination limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose line is front-loaded and the parameter/return blocks are scannable. The parameter block largely duplicates the schema, which is mild redundancy, but there is no filler prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must carry the return contract; it does so briefly (name, type, members, remote matches), which is helpful. However, for a device-scoped read tool it omits pagination behavior and whether vdom omission defaults to the root domain, leaving gaps an agent would hit in practice.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both device_id and the optional vdom already carry descriptions in the schema. The description restates them ('Identifier of the FortiGate device', 'Virtual Domain name (optional)') with essentially no extra meaning — no format hints, no default-scope consequences for omitting vdom. Baseline 3 applies when the schema does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List user groups') and adds scope detail — group members including local users and remote-server matches — which helps distinguish it from the plain user-listing siblings like list_local_users. It never explicitly names an alternative tool, so it stays at 4 rather than 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no when-to-use or when-not-to-use guidance, and does not point to list_local_users, list_admins, or list_fsso_agents for related queries. The usage is only implied by the tool name and its position among read-only list tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_vip_groupsB
List virtual IP groups and their member VIPs.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, but 'List' at least implies a read-only operation. It discloses one useful behavioral fact — that member VIPs are returned alongside each group — but says nothing about pagination, VDOM scoping behavior, or output volume across a device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with no waste, front-loading the verb and resource. Nothing redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with fully described schema and no output schema, the description is minimally adequate. It hints at return contents but leaves the agent without any sense of result shape, VDOM behavior, or scope of a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both device_id and vdom are already documented in the schema; baseline 3 applies. The description adds no extra meaning about how vdom affects results or what happens when it is omitted (default null).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'List virtual IP groups', and adds that member VIPs are included in the result. This distinguishes it from list_virtual_ips by resource type, but does not explicitly name or contrast with that sibling, leaving the agent to infer the group-vs-individual distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_virtual_ips or get_virtual_ip_detail, and no prerequisites or exclusions. The agent must infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_virtual_ipsA
List all Virtual IPs configured on a FortiGate device.
This tool retrieves all Virtual IP objects defined on the device, including port forwarding configurations and NAT mappings.
Parameters:
device_id: Identifier of the FortiGate device
vdom: Virtual Domain name (optional, uses device default)
Returns:
Virtual IP name and configuration
External and mapped IP addresses
Port forwarding settings
Interface assignments
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It makes the read-only nature clear via 'List'/'retrieves' and usefully enumerates what is returned (external/mapped IPs, port forwarding, interface assignments), but it says nothing about permissions, device reachability, or whether results are paginated or vdom-scoped by default beyond the parameter note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose statement is front-loaded, then parameters and returns are cleanly sectioned. There is mild redundancy between the opening sentence and the following sentence, but every line still carries usable information for an agent that has no output schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description compensates well by listing the return fields and the two parameters. The remaining gap is the lack of any routing guidance relative to sibling VIP/pool tools, which matters in such a dense tool catalog.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema. The description restates them and adds only a small clarification that omitting vdom uses the device default; that is genuine added meaning, but the baseline for full schema coverage is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('List all Virtual IPs configured on a FortiGate device') and even names the object semantics (port forwarding, NAT mappings). It does not distinguish itself from close siblings like list_vip_groups or get_virtual_ip_detail, which an agent might reasonably confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Coverage of when to use this tool is only implied by the word 'List' versus detail-oriented siblings. There is no explicit statement such as 'use this to enumerate VIPs; use get_virtual_ip_detail for a single object's config' or any prerequisite/device-context guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wifi_clientsB
Show connected Wi-Fi clients (SSID, MAC, IP, signal, AP).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It implies a safe read and discloses the returned fields (SSID, MAC, IP, signal, AP), which is real value, but says nothing about whether it queries the live controller vs cached data, VDOM scoping behavior, or what happens if no clients are associated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single parenthetical-rich sentence with zero waste and the key noun front-loaded. It is arguably too terse, since no guidance sentence follows, which keeps it off a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter list tool the core need is covered, and the description compensates for the missing output schema by naming the returned attributes. Still, no pagination/limits or empty-result behavior is described, leaving gaps for an agent planning a call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device_id and vdom. The description adds no parameter meaning beyond that, and notably does not explain how scoping to a VDOM affects the result set. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Show') and a specific resource ('connected Wi-Fi clients'), then enumerates the fields returned. The distinction from siblings like list_wireless_ssids, list_managed_aps and list_rogue_aps is implicit in 'clients' rather than stated, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The qualifier 'connected' is the only usage signal: it bounds the tool to currently associated stations rather than historical or disconnected ones. No exclusions, no alternatives, and no prerequisite context (e.g. device reachability) are given, leaving usage inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_wireless_ssidsA
List SSIDs (wireless-controller/vap): security mode, VLAN, broadcast, schedule (passphrases redacted).
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It does add useful behavioral context by naming the returned fields and noting that passphrases are redacted, which signals safe read behavior. It stops short of describing permissions, pagination, or scope behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted words. The core action comes first, followed by the useful output-field summary and redaction note.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only list tool with a fully described schema and no output schema, the description is nearly complete: it names what is listed and summarizes the returned fields. A brief note on vdom scoping or pagination would make it fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (device_id and optional vdom) are already documented in the schema. The description adds no further meaning about these parameters, which matches the baseline for fully covered schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List SSIDs') and scopes it to wireless-controller/vap. It also names the fields returned, so an agent can tell it is a configuration-listing tool, though it does not explicitly distinguish itself from siblings like list_ap_profiles or get_wifi_controller_settings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the name and the listed output fields: this is the tool for viewing SSID configuration. However, there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling Wi-Fi tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_zonesB
List interface zones and their member interfaces.
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. 'List' implies a read-only operation, but nothing is said about permissions, pagination, whether zones span all vdoms by default, or whether member interfaces are expanded inline. That is thin for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; nothing is repeated from the schema and nothing wasteful is included.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with a fully described schema, this is minimally adequate. It still leaves open the default scoping behavior of vdom and the shape of the returned zone/member data, which matter when no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters are documented ('Virtual Domain', 'FortiGate device identifier'), so the schema does the heavy lifting. The description adds nothing about how vdom defaults or whether omitting it returns all domains, leaving it at the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List interface zones') and adds scope ('their member interfaces'), which distinguishes it from list_interfaces. However, it never names or contrasts a sibling such as list_interfaces or discover_vdoms, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance, no mention that a device_id is required, and no indication of how the optional vdom scopes results. The agent gets no routing help between this and list_interfaces/get_interface_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
log_getA
Read raw log records from any log endpoint (GET /api/v2/log/{path}).
path is "{memory|disk}/{type}/{subtype}", e.g. "memory/event/system", "memory/event/vpn", "memory/utm/webfilter", "memory/traffic/local", "disk/traffic/forward". Prefer query_traffic_log / query_event_log / query_utm_log for formatted output.
Parameters:
device_id: Identifier of the FortiGate device
path: log path
rows: Maximum records (default 50, max 500)
filter_expr: Optional FortiOS filter, e.g. "srcip==10.0.0.5" ("&" joins several)
vdom: Virtual Domain name (optional)
Returns:
The raw JSON log records
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | log path, e.g. memory/event/system | |
| rows | No | Maximum records | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| filter_expr | No | FortiOS filter expression(s), '&'-joined |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full load, and it does disclose the row cap (max 500), the filter conjunction syntax, and that the return is unformatted JSON. It omits operational traits an agent would want: memory vs disk retention semantics, permission requirements, and any rate/latency behavior for large pulls.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and API path, then a compact Parameters/Returns block that is easy to scan. The cost is that the parameter list largely duplicates a schema that is already 100% documented, so a few lines do not earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a five-parameter read tool with no output schema: path grammar, filter syntax, row bounds, and sibling alternatives are all present. Gaps are the memory-vs-disk distinction and multi-VDOM requirements, which materially affect how the call behaves.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine value beyond it: the path grammar "{memory|disk}/{type}/{subtype}" with five concrete examples, and the note that "&" joins multiple filter expressions. device_id and vdom are only restated, which keeps it from a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ("Read raw log records") plus resource (any log endpoint) with the underlying REST path GET /api/v2/log/{path}. It explicitly contrasts with the sibling query_traffic_log/query_event_log/query_utm_log tools, so an agent can distinguish it without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the three formatter siblings and the condition that favors them ("for formatted output"), which gives clear routing logic. It stops short of saying when raw access is actually preferable (parsing custom fields, unsupported log types) or what to do if a path is invalid.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_policyA
Ask the FortiGate which firewall policy a hypothetical flow would match (monitor/firewall/policy-lookup), without sending any traffic.
Use it to answer "would host X reach server Y on port Z, and through which rule?".
Parameters:
device_id: Identifier of the FortiGate device
source_ip: Source IPv4 address
destination_ip: Destination IPv4 address
destination_port: Destination port
protocol: tcp (default), udp, icmp, sctp or a protocol number
source_interface: Optional ingress interface name (improves accuracy)
source_port: Optional source port
vdom: Virtual Domain name (optional)
Returns:
Matching policy id/name/action, or "no matching policy" (implicit deny)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| protocol | No | tcp, udp, icmp, sctp or protocol number | tcp |
| device_id | Yes | FortiGate device identifier | |
| source_ip | Yes | Source IPv4 address | |
| source_port | No | Source port | |
| destination_ip | Yes | Destination IPv4 address | |
| destination_port | Yes | Destination port | |
| source_interface | No | Ingress interface name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden and discloses important behavior: it performs a policy lookup without sending traffic and returns the matching policy or implicit deny. It does not discuss permissions or rate limits, but the core safety-relevant behavior is clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded and appropriately sized for an 8-parameter tool. It moves directly from purpose to use case to parameters to return behavior with no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description fills the important gaps by explaining the return value and the no-traffic behavior. It is nearly complete, though it could mention prerequisites such as the device needing to be known or accessible.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description restates most parameters and adds a small note that source_interface improves accuracy, but otherwise does not add much beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: asking the FortiGate which firewall policy a hypothetical flow would match. It also clarifies the monitoring endpoint and that no traffic is sent, which distinguishes it from policy listing/detail tools and from traffic-sending tools like ping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: answering whether host X reaches server Y on port Z and through which rule. It does not explicitly name alternatives or when-not-to-use conditions, but the hypothetical/no-traffic framing provides strong implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lookup_routeB
Ask the routing table which route, interface and gateway reach a destination (monitor/router/lookup).
Parameters:
device_id: Identifier of the FortiGate device
destination: Destination IPv4 address
vdom: Virtual Domain name (optional)
Returns:
Matched route details (interface, gateway, type, distance, metric)
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| destination | Yes | Destination IPv4 address |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the disclosure burden. It does usefully signal a read-only query against the routing table and enumerates what fields come back (interface, gateway, type, distance, metric), but it does not mention permissions, VDOM scoping behavior, or what happens when no route matches.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose line is front-loaded and efficient, and the Returns section earns its place given there is no output schema. The Parameters block, however, duplicates schema content and adds bulk without value, slightly dragging down an otherwise well-structured definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the Returns section usefully compensates by naming the fields an agent should expect. Combined with a precise one-line purpose statement, an agent has enough to call this correctly, though the lack of guidance on no-match behavior and VDOM scoping leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents device_id, destination, and vdom. The Parameters section in the description essentially restates those schema descriptions verbatim with no added syntax, format, or defaulting guidance, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (lookup) and resource (route) and explains the question the tool answers: which route, interface, and gateway reach a destination. This is clear and distinct in phrasing, though it does not explicitly distinguish itself from close siblings like get_routing_table or lookup_policy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'reach a destination' and the '(monitor/router/lookup)' endpoint hint, giving an agent a reasonable idea of when to reach for it. However there are no explicit when/when-not statements and no mention of the alternative siblings (get_routing_table, lookup_policy), which are easy to confuse with this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
monitor_getA
Read any live-status endpoint (GET /api/v2/monitor/{path}).
Examples: "system/status", "router/ipv4", "vpn/ipsec", "license/status", "system/interface", "firewall/policy/select", "switch-controller/managed-switch", "wifi/client". Optional query parameters are passed through as params.
Parameters:
device_id: Identifier of the FortiGate device
path: monitor path without the /api/v2/monitor/ prefix
params: Optional query parameters as JSON object
vdom: Virtual Domain name (optional)
Returns:
The raw JSON response (secret fields redacted, large output truncated)
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | monitor path, e.g. system/status | |
| vdom | No | Virtual Domain | |
| params | No | Query parameters | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and usefully discloses that this is a GET-based read endpoint, that secret fields are redacted, and that large output is truncated. It does not cover permissions, error behavior, or rate limits, but the key output-handling traits are explained.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core operation and examples, then organizes parameters and returns clearly. Some parameter text repeats the schema, but the path-prefix and return-handling details make the length mostly justified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description must explain return behavior, which it does by stating that raw JSON is returned with secret fields redacted and large output truncated. For a generic monitor-passthrough endpoint, this is largely complete, though error and permission context are absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description adds meaningful guidance beyond the schema: path must exclude the /api/v2/monitor/ prefix and params are optional query parameters passed through as JSON. It also lists all four parameters, including optional vdom.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it reads any live-status endpoint via GET /api/v2/monitor/{path}. The examples make the intended scope concrete, but the tool is not explicitly differentiated from sibling-specific getters such as get_license_status, get_interface_status, or get_device_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied as a generic passthrough for monitor endpoints, with optional query parameters passed through. However, the description does not say when an agent should choose this broad tool versus the many specific sibling getters that cover the same domains.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_firewall_policyA
Move a firewall policy before or after another policy in the evaluation order.
FortiGate evaluates policies top-down and applies the first match, so a host-specific policy must sit above the broader policy it is meant to override. Newly created policies are appended at the bottom; use this tool to position them.
Parameters:
device_id: Identifier of the FortiGate device
policy_id: ID of the policy to move
position: "before" or "after"
reference_id: ID of the policy to position relative to
vdom: Virtual Domain name (optional)
Returns:
Move status
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| position | Yes | Place the policy before or after reference_id | |
| device_id | Yes | FortiGate device identifier | |
| policy_id | Yes | Policy ID to move | |
| reference_id | Yes | Policy ID to position relative to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full behavioral burden and does disclose important domain behavior: FortiGate evaluates top-down and first-match, and newly created policies are appended last. However, it omits mutation-specific context such as permissions required, failure behavior if reference_id is invalid, and whether reordering has side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The first sentence is front-loaded and precise, followed by useful evaluation-order context. The parameter and return lists are somewhat redundant given full schema coverage, but overall the description remains readable and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the ordering rationale, all required parameters, optional vdom, and a brief return value. Since no output schema exists, the return explanation is minimal but sufficient for an agent to invoke the tool; deeper error semantics would be the main remaining gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema. The description repeats the same parameter meanings without adding format, constraints, or edge-case guidance beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: move a firewall policy before or after another policy in evaluation order. It also explains the FortiGate top-down evaluation context, which makes the tool's purpose distinct from general policy update or create siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use condition: newly created policies are appended at the bottom, so this tool should be used to position them. It does not explicitly name sibling alternatives such as update_firewall_policy, but the intended workflow is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ping_from_deviceA
Ping a host from the FortiGate itself (monitor/network/diag-icmp-ping), useful to check reachability from the firewall's own perspective (e.g. through a VPN tunnel).
Parameters:
device_id: Identifier of the FortiGate device
target: IPv4 address or hostname to ping
source_interface: Optional source interface
vdom: Virtual Domain name (optional)
Returns:
Packets sent/received and round-trip statistics as reported by the device
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| target | Yes | IPv4 address or hostname to ping | |
| device_id | Yes | FortiGate device identifier | |
| source_interface | No | Source interface |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose the origin of the diagnostic (the device itself) and what comes back ('packets sent/received and round-trip statistics'), but is silent on whether the call blocks for the ping duration, how many packets are sent, or what privileges/vdom scoping are required.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and context, then a compact parameter and return listing. The parameter list partially duplicates the schema, but the overall length is small and every line is scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter diagnostic with no annotations, the description covers purpose, origin of execution, parameters, and even a Returns summary despite no output schema. The remaining gap is operational behavior (blocking/timeout, packet count, permissions), which keeps it below complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the four parameters are already documented. The description's parameter list restates the schema almost verbatim ('IPv4 address or hostname to ping', 'Source interface') and adds no format hints, defaults, or interaction notes (e.g. how source_interface and vdom combine).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource ('Ping a host from the FortiGate itself') and even cites the backing CLI path (monitor/network/diag-icmp-ping), which unambiguously separates it from generic siblings like execute_monitor_action or test_device_connection. The use case ('reachability from the firewall's own perspective') further pins the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear when-to-use context, including a concrete scenario ('e.g. through a VPN tunnel'). It does not address when not to use it or name an alternative sibling (e.g. test_device_connection, execute_monitor_action) for source-of-ping selection, so it falls short of an explicit routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_event_logA
Query event logs by category: system (admin logins, config changes), vpn (tunnel up/down, dial-up logins), user (authentication), router, wireless, endpoint, ha, sdwan and more.
Parameters:
device_id: Identifier of the FortiGate device
category: system (default), vpn, user, router, wireless, endpoint, ha, security-rating, fortiextender, connector, sdwan, cifs, compliance-check
rows: Maximum records (default 50, max 500)
raw_filter: Optional FortiOS filter, e.g. "user==admin" or "logdesc=@login"
source: "memory" (default) or "disk"
vdom: Virtual Domain name (optional)
Returns:
One line per record: time, level, description, user, message
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Maximum records | |
| vdom | No | Virtual Domain | |
| source | No | Log source | memory |
| category | No | Event category (system, vpn, user, router, wireless, ...) | system |
| device_id | Yes | FortiGate device identifier | |
| raw_filter | No | Raw FortiOS filter expression |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden itself and does well: it discloses default and maximum row counts, the memory-vs-disk source tradeoff, filter syntax examples, and the returned record format. It omits any note on pagination/time-window behavior and whether disk queries are slower or require log storage to be enabled.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded summary followed by compact Parameters and Returns blocks - easy to scan and no filler prose. It does repeat parameter names and defaults already present in the schema, which is mild duplication rather than waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the Returns section usefully describes the per-record line format, and defaults/limits are covered. The notable gap is the absence of any time-range parameter or statement that results are limited only by rows, which an agent could otherwise misread as a time-windowed query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description genuinely adds value: it enumerates far more category values than the truncated schema hint and gives real FortiOS raw_filter examples ("user==admin", "logdesc=@login"). The vdom parameter is restated but not explained beyond "Virtual Domain name".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Query event logs") and then enumerates the concrete categories it covers (system, vpn, user, router, wireless, endpoint, ha, sdwan), which implicitly but clearly separates it from siblings like query_traffic_log, query_utm_log, and log_get.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The category list and parameter defaults make the intended usage inferable, but there is no explicit when-to-use / when-not guidance, and the obvious alternatives (query_traffic_log, query_utm_log, log_get) are never named or contrasted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_traffic_logA
Query forward traffic logs with optional filters (most recent first).
Use it to answer "why is this host blocked / which policy handled this flow". Memory logs are the default (models without a log disk); pass source="disk" on models that log to disk.
Parameters:
device_id: Identifier of the FortiGate device
source_ip, destination_ip, destination_port, policy_id, action: Optional filters (action examples: deny, accept, close, timeout)
rows: Maximum records (default 50, max 500)
source: "memory" (default) or "disk"
raw_filter: Optional FortiOS filter expression, e.g. "srcip==192.0.2.25"
vdom: Virtual Domain name (optional)
Returns:
One line per log record: time, action, src -> dst, service, policy, bytes
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Maximum records | |
| vdom | No | Virtual Domain | |
| action | No | Action filter (deny, accept, close, ...) | |
| source | No | Log source | memory |
| device_id | Yes | FortiGate device identifier | |
| policy_id | No | Policy ID filter | |
| source_ip | No | Source IPv4 filter | |
| raw_filter | No | Raw FortiOS filter expression | |
| destination_ip | No | Destination IPv4 filter | |
| destination_port | No | Destination port filter |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: result ordering (most recent first), the memory-vs-disk default and its hardware dependency, row cap (default 50, max 500), and the exact return line format. It omits whether raw_filter overrides the typed filters and gives no permission or pagination context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and use case, then grouped Parameters/Returns blocks. Some parameter lines restate schema text, but the examples and defaults added to them justify the space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 10 parameters, no output schema, and no annotations, the description covers purpose, filters, defaults, and return shape, which is enough to call it correctly. The main residual gap is filter-combination behavior (typed filters vs raw_filter) for a log-query tool where that could change results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% so baseline would be 3, but the description earns extra: action value examples, an explicit raw_filter syntax example ('srcip==192.0.2.25'), and the semantic rationale for the source enum (models without a log disk). The interaction between raw_filter and the other filters remains unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Query forward traffic logs') plus scoping ('optional filters, most recent first'). The 'forward traffic' qualifier cleanly separates it from the event-log and UTM-log siblings without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete question-shaped use cases ('why is this host blocked / which policy handled this flow') and tells the agent when to pick source='disk' vs the memory default. It does not, however, state when to prefer a sibling like log_get or query_event_log instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_utm_logA
Query UTM (security) logs: webfilter, app-ctrl, ips, virus, dns, emailfilter, dlp, ssl, anomaly, waf, file-filter, ssh, voip, icap, virtual-patch.
Use it to see which site or application was blocked for a host and by which profile.
Parameters:
device_id: Identifier of the FortiGate device
log_type: webfilter (default) or one of the types above
rows: Maximum records (default 50, max 500)
source_ip: Optional source IPv4 filter
raw_filter: Optional FortiOS filter, e.g. "action==blocked"
source: "memory" (default) or "disk"
vdom: Virtual Domain name (optional)
Returns:
One line per record: time, action, src -> dst, hostname/application/attack, policy
| Name | Required | Description | Default |
|---|---|---|---|
| rows | No | Maximum records | |
| vdom | No | Virtual Domain | |
| source | No | Log source | memory |
| log_type | No | UTM log type (webfilter, app-ctrl, ips, virus, dns, ...) | webfilter |
| device_id | Yes | FortiGate device identifier | |
| source_ip | No | Source IPv4 filter | |
| raw_filter | No | Raw FortiOS filter expression |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It helpfully discloses the return format ('One line per record: time, action, src -> dst, hostname/application/attack, policy') and the maximum row limit (500), but it does not mention permission requirements, device availability, or rate limits for a log query operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded: it opens with the core purpose, then lists parameter meanings and return format as bullet points. Every section earns its place, though the parameter list slightly repeats schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description provides a useful summary of return values. Given the high schema coverage and the read-only nature of a query tool, the description is nearly complete, lacking only explicit notes on permissions or device state requirements.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaningful details beyond the schema: the maximum row limit (500), an example raw_filter ('action==blocked'), and the default log_type. These additions improve parameter understanding without being redundant.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Query') and resource ('UTM (security) logs') and enumerates all supported log types. It implicitly distinguishes itself from sibling log tools like query_traffic_log and query_event_log by focusing on UTM security logs, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a concrete use case ('to see which site or application was blocked for a host and by which profile'). However, it provides no explicit when-not-to-use guidance or named alternatives, leaving the agent to infer when to choose this tool over query_traffic_log or query_event_log.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_address_group_membersA
Remove address objects from an address group.
FortiOS requires a group to keep at least one member; removing the last member is refused -- delete the group instead.
Parameters:
device_id: Identifier of the FortiGate device
name: Address group name
members: Address object names to remove
vdom: Virtual Domain name (optional)
Returns:
Which members were removed and the new member count
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address group name | |
| vdom | No | Virtual Domain | |
| members | Yes | Address object names to remove | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does real work: it discloses the FortiOS invariant that a group must retain at least one member and that the call is refused otherwise. It also states the return payload (removed members and new count) since no output schema exists. Minor gaps remain on idempotency when removing a non-member and on required device permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, followed by the critical constraint, then structured Parameters/Returns blocks. The parameter restatements duplicate schema content and are the only mild waste; the constraint sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations and no output schema, the description supplies the safety constraint, the parameter roles, and the return shape, which is nearly everything an agent needs. Missing only permission/error semantics and behavior for member names not currently present in the group.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters. The description's parameter list largely restates those descriptions verbatim without adding format, syntax, or behavior details (e.g. whether an unknown member name errors or is silently ignored). Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Remove address objects from an address group') with unambiguous scope. It is clearly distinguishable from siblings like add_address_group_members and delete_address_group without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the condition that changes the approach: when the last member would be removed, the operation is refused and the group should be deleted instead, which implicitly routes the agent to delete_address_group. It doesn't cover other edge cases (e.g. a member name that isn't in the group), but the key decision point is stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_deviceA
Remove a FortiGate device from the MCP server.
This tool unregisters a FortiGate device from the server, removing all associated configuration and terminating active connections.
Parameters:
device_id: Identifier of the device to remove
Returns:
Removal status confirmation
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | Device identifier to remove |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, and it does disclose real consequences: it unregisters the device, drops associated configuration, and terminates active connections. It stops short of stating irreversibility or required permissions, but the destructive side effects are clearly surfaced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Content is front-loaded with the action and its consequences before the parameter list, and every sentence carries information. The Parameters block largely restates the schema and costs a little space, though the Returns section compensates since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter destructive tool with no annotations and no output schema, the description covers what is removed, what breaks (active connections), and what comes back (removal status). Missing only irreversibility and authorization context, which is a modest gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% description coverage and documents device_id identically, so the description's parameter section adds no meaning beyond it. Single-parameter baseline with full coverage puts this at 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence gives a specific verb and resource ("Remove a FortiGate device") and the second sentence clarifies the scope as unregistering from the MCP server rather than deleting the appliance. This distinguishes it from add_device and list_devices, though the phrase "removing all associated configuration" stays slightly ambiguous about whether the device's own config or only the server-side record is affected.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the inverse of add_device and is used when a device should no longer be managed. There is no explicit statement of when to use it versus alternatives, no prerequisites, and no warning about when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
test_device_connectionA
Test network connectivity to a specific FortiGate device.
This tool performs a connection test to verify that the MCP server can successfully communicate with the specified FortiGate device.
Parameters:
device_id: Identifier of the FortiGate device to test
Returns:
Connection status (success/failure)
Response time information
Error details if connection fails
| Name | Required | Description | Default |
|---|---|---|---|
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool returns connection status, response time, and error details, and 'connection test' implies a non-mutating operation, but it does not explicitly state that it is read-only, what permissions are required, or whether the device must already be configured.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is reasonably structured and front-loads the core purpose, followed by parameter and return details. There is slight redundancy between the opening sentence and the 'performs a connection test' sentence, but no major waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one required parameter and no output schema, and the description compensates by explaining the return content: connection status, response time, and error details. It is mostly complete for invocation, though it could mention whether the device must already be added.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the single device_id parameter is already documented. The description repeats that device_id identifies the FortiGate device to test but adds no format, validation, or lookup semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb and resource: test network connectivity to a FortiGate device. It distinguishes this from general device listing or status tools by focusing on MCP-server-to-device communication, but it does not explicitly contrast itself with siblings such as health_check or get_device_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied by 'verify that the MCP server can successfully communicate with the specified FortiGate device.' However, it does not explicitly state when to choose this over alternatives like get_device_status, health_check, or ping_from_device, nor does it provide exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_address_objectA
Update an existing address object (comment, subnet, range, FQDN, ...).
Only the fields present in address_data change; FortiOS merges them into the object. Example address_data: {"subnet": "192.0.2.40 255.255.255.255", "comment": "HR workstation"}
Parameters:
device_id: Identifier of the FortiGate device
name: Address object name
address_data: Fields to change as JSON object
vdom: Virtual Domain name (optional)
Returns:
Update status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Address object name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| address_data | Yes | Fields to change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the merge/patch semantics and the return value ("Update status") — both genuinely useful. It says nothing about required permissions, what happens on a nonexistent object name, or whether vdom defaults to the device's management VDOM, leaving material behavioral gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the merge rule, then a compact example, then a short parameter list. Slight waste in the parameter block, which repeats the input schema descriptions almost verbatim and adds little, though it costs only four lines.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter mutation tool with no annotations and no output schema, the description covers the essentials: what changes, how merge semantics work, an example payload, and the return value. Only failure modes and vdom defaulting behavior remain unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds a concrete address_data example ({"subnet": "192.0.2.40 255.255.255.255", "comment": "HR workstation"}) for a free-form nested object with additionalProperties: true — real added value the schema cannot provide. The remaining parameter lines largely restate schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ("Update an existing address object") and enumerates the object subtypes it covers (comment, subnet, range, FQDN), which lets an agent distinguish it from update_service_object, update_firewall_policy, or generic update_cmdb_object. It stops short of explicitly naming those siblings as alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The second sentence establishes the crucial partial-update contract: "Only the fields present in address_data change; FortiOS merges them into the object." That tells an agent exactly how to safely call it without overwriting untouched fields. There are no exclusions or explicit pointers to create_address_object for new objects.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_cmdb_objectA
Change fields of an existing configuration object (PUT /api/v2/cmdb/{path}/{key}).
Only the fields in data change. Example: path "system/interface", key "vlan60-guest", data {"description": "Guest Wi-Fi"}.
Parameters:
device_id: Identifier of the FortiGate device
path: cmdb table path
key: Object key
data: Fields to change as JSON
vdom: Virtual Domain name (optional)
Returns:
Update status
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Object key | |
| data | Yes | Fields to change | |
| path | Yes | cmdb table path | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full burden, and it does disclose the key behavioral trait that this is a merge-style partial update rather than a full replace. It does not state permission requirements, reversibility, whether changes are applied to the live config immediately, or what "Update status" actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the operation and endpoint, followed by the critical partial-update caveat and a concrete example. The trailing parameter and return lists largely duplicate schema text that is already at 100% coverage, so they are mild filler rather than wasted space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description at least signals the return ("Update status"), while the example disambiguates the nested `data` object and the path format. What remains missing is error/failure behavior and the effect of the optional vdom on which object is targeted.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so baseline is 3, but the worked example (path "system/interface", key "vlan60-guest", data {"description": "Guest Wi-Fi"}) adds real interpretive value by showing the path/key/data relationship concretely. The per-parameter bullet list otherwise just restates the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Change fields of an existing configuration object") plus the underlying endpoint (PUT /api/v2/cmdb/{path}/{key}), making it clearly distinct from the create/delete/get CMDB siblings. An agent can route between update_cmdb_object and create_cmdb_object without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase "Only the fields in data change" is useful partial-update guidance, but there is no explicit when-to-use / when-not-to-use statement and no routing to alternatives such as cmdb_get (to read before writing) or create_cmdb_object. Prerequisites like needing a valid device_id and vdom scope are left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_firewall_policyC
Update an existing firewall policy on a FortiGate device.
This tool modifies the configuration of an existing firewall policy, allowing changes to rules, addresses, services, and other settings.
Parameters:
device_id: Identifier of the FortiGate device
policy_id: ID of the policy to update
policy_data: Updated policy configuration as JSON object
vdom: Virtual Domain name (optional, uses device default)
Returns:
Update status
Configuration changes applied
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| policy_id | Yes | Policy ID to update | |
| policy_data | Yes | Updated policy configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full load, and it omits the critical question for a mutation: does policy_data replace the whole policy or merge into it, and are omitted fields preserved or cleared? It also omits permission/API-user prerequisites and reversibility. The brief Returns section ('Update status') is the only behavioral context offered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded opening sentence followed by scoped Parameters and Returns sections; 'rules, addresses, services, and other settings' usefully sketches what a policy contains. The Returns block is thin filler ('Update status') and slightly dilutes focus.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with zero annotations, no output schema, and a free-form nested object parameter, the description should cover replace-vs-merge semantics and failure modes. It does not, leaving an agent unable to predict the effect of a call beyond 'something changes.'
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description's parameter list mostly restates the schema. It adds minor value with 'vdom: uses device default,' but leaves the nested policy_data object's expected keys and structure entirely unspecified anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource plus the platform: 'Update an existing firewall policy on a FortiGate device.' The verb 'update' plus 'existing' implicitly separates it from create_firewall_policy and delete_firewall_policy, but no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Says nothing about when to prefer this over create_firewall_policy, move_firewall_policy, or update_cmdb_object, nor whether get_firewall_policy_detail should be called first to obtain a valid base configuration. 'Existing' is the only precondition hinted at.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_service_objectB
Update an existing custom service object (ports, protocol, comment).
Example service_data: {"tcp-portrange": "3389", "comment": "RDP"}
Parameters:
device_id: Identifier of the FortiGate device
name: Service object name
service_data: Fields to change as JSON object
vdom: Virtual Domain name (optional)
Returns:
Update status
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Service object name | |
| vdom | No | Virtual Domain | |
| device_id | Yes | FortiGate device identifier | |
| service_data | Yes | Fields to change |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It signals a mutation and gives a concrete service_data example ("tcp-portrange": "3389"), which is helpful, but it never says whether unspecified fields are preserved or wiped (merge vs replace), whether the object name can be changed, what permissions are needed, or what 'Update status' actually contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose, example, parameter list and return value in a few front-loaded lines. The parameter list largely repeats the 100%-covered schema, but it is short enough that the redundancy costs nothing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation with no annotations, no output schema, and a nested free-form object, the description should cover merge semantics, prerequisites and the shape of the result. 'Returns: Update status' is too thin, and the vdom scoping implications are not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but service_data is an open object (additionalProperties: true) whose schema says only 'Fields to change'. The worked example showing FortiOS key naming fills a real gap that the schema cannot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing custom service object') and names the fields it touches (ports, protocol, comment), which distinguishes it cleanly from create_service_object, delete_service_object and list_service_objects. It doesn't explicitly name those siblings, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'existing' implies the object must already be present, but there is no explicit when-to-use guidance, no prerequisites (device registered, object created first), and no mention of when to use this versus the generic update_cmdb_object sibling. The agent must infer all of that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_static_routeB
Update an existing static route on a FortiGate device.
This tool modifies the configuration of an existing static route, allowing changes to destination, gateway, or other settings.
Parameters:
device_id: Identifier of the FortiGate device
route_id: ID of the route to update
route_data: Updated configuration as JSON
vdom: Virtual Domain name (optional, uses device default)
Returns:
Update status
Configuration changes applied
| Name | Required | Description | Default |
|---|---|---|---|
| vdom | No | Virtual Domain | |
| route_id | Yes | Route identifier | |
| device_id | Yes | FortiGate device identifier | |
| route_data | Yes | Route configuration |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that configuration changes are applied and claims to return 'Update status' and 'Configuration changes applied,' but omits critical semantics: whether route_data replaces or merges with the existing route, permission requirements, error behavior, and whether changes are idempotent or reversible.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by parameters and returns in a scannable structure. The second sentence ('This tool modifies... allowing changes to destination, gateway, or other settings') is somewhat redundant with the first but earns partial credit by giving concrete examples of updatable fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the what, the parameters, and return values (valuable since no output schema exists), and handles a nested-object mutation reasonably. However, it leaves out merge-vs-replace semantics for route_data and any safety or permission context, which are important for a configuration-changing tool with no annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description largely repeats schema text but does add one useful clarification: vdom is optional and 'uses device default,' which is not spelled out in the schema. It adds little else beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing static route on a FortiGate device') and clarifies that it modifies an existing route rather than creating one. However, it never names or contrasts with siblings such as create_static_route, delete_static_route, or get_static_route_detail, leaving differentiation implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'existing static route' implies the route must already exist, which is a useful precondition. But there is no explicit guidance on when to use this versus create_static_route or get_static_route_detail, and no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_virtual_ipB
Update an existing Virtual IP on a FortiGate device.
This tool modifies the configuration of an existing Virtual IP object, allowing changes to IP addresses, ports, or other settings.
Parameters:
device_id: Identifier of the FortiGate device
name: Name of the Virtual IP to update
vip_data: Updated configuration as JSON
vdom: Virtual Domain name (optional, uses device default)
Returns:
Update status
Configuration changes applied
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Virtual IP name | |
| vdom | No | Virtual Domain | |
| vip_data | Yes | Virtual IP configuration | |
| device_id | Yes | FortiGate device identifier |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It says the tool 'modifies the configuration' but never states whether vip_data is a full replacement or a partial merge, whether the VIP name itself can be changed, whether a commit/apply step is needed, or whether changes are reversible — all critical for a firewall config mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening sentence is well front-loaded, but the Parameters and Returns lists mostly duplicate the schema verbatim and the Returns section ('Update status', 'Configuration changes applied') is vague filler rather than useful information. Roughly half the text does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a mutation tool with zero annotations, no output schema, and a free-form nested vip_data object (additionalProperties: true) whose expected keys are documented nowhere. An agent can call it, but cannot know what configuration body to send or how to interpret the vague return.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all four parameters; the description largely restates them. The one genuine addition is that vdom is optional and falls back to the device default, but vip_data — an unconstrained object — gets no field-level guidance beyond 'Updated configuration as JSON'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Update an existing Virtual IP on a FortiGate device') and the second sentence clarifies scope to configuration changes on an existing object. The verb 'update' implicitly distinguishes it from create_virtual_ip, delete_virtual_ip, get_virtual_ip_detail and list_virtual_ips, but no sibling is ever named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'existing Virtual IP' — the object must already exist — but the description never says so directly nor states what happens if the name is absent. There is no routing guidance against create_virtual_ip for new objects or update_cmdb_object for generic configuration edits.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
137 tool updates
v1.1.0- First observed
add_address_group_members - First observed
add_device - First observed
backup_config - First observed
cmdb_get - First observed
cmdb_list - First observed
create_address_group - First observed
create_address_object - First observed
create_cmdb_object - First observed
create_dhcp_reservation - First observed
create_firewall_policy - First observed
create_service_object - First observed
create_static_route - First observed
create_virtual_ip - First observed
delete_address_group - First observed
delete_address_object - First observed
delete_cmdb_object - First observed
delete_dhcp_reservation - First observed
delete_firewall_policy - First observed
delete_service_object - First observed
delete_static_route - First observed
delete_virtual_ip - First observed
discover_vdoms - First observed
execute_ipsec_tunnel_action - First observed
execute_monitor_action - First observed
geoip_lookup - First observed
get_address_group_detail - First observed
get_bgp_config - First observed
get_device_status - First observed
get_dns_settings - First observed
get_firewall_policy_detail - First observed
get_fortianalyzer_settings - First observed
get_fortiview_top - First observed
get_ha_status - First observed
get_interface_status - First observed
get_license_status - First observed
get_log_settings - First observed
get_ntp_settings - First observed
get_ospf_config - First observed
get_performance_status - First observed
get_routing_table - First observed
get_sdwan_config - First observed
get_security_profile_detail - First observed
get_security_rating - First observed
get_server_info - First observed
get_snmp_sysinfo - First observed
get_ssl_vpn_settings - First observed
get_static_route_detail - First observed
get_system_global - First observed
get_system_resources - First observed
get_system_time - First observed
get_virtual_ip_detail - First observed
get_wifi_controller_settings - First observed
health_check - First observed
list_active_sessions - First observed
list_address_groups - First observed
list_address_objects - First observed
list_admins - First observed
list_ap_profiles - First observed
list_api_users - First observed
list_application_groups - First observed
list_arp_table - First observed
list_ca_certificates - First observed
list_central_snat_rules - First observed
list_devices - First observed
list_dhcp_leases - First observed
list_dhcp_servers - First observed
list_dns_domain_filters - First observed
list_endpoint_devices - First observed
list_firewall_auth_sessions - First observed
list_firewall_policies - First observed
list_firmware - First observed
list_fortitokens - First observed
list_fsso_agents - First observed
list_interface_counters - First observed
list_interfaces - First observed
list_internet_service_names - First observed
list_ip_pools - First observed
list_ips_custom_signatures - First observed
list_ipsec_phase1 - First observed
list_ipsec_phase2 - First observed
list_ipsec_tunnels - First observed
list_ipv6_routes - First observed
list_ldap_servers - First observed
list_lldp_neighbors - First observed
list_local_certificates - First observed
list_local_users - First observed
list_managed_aps - First observed
list_managed_switches - First observed
list_onetime_schedules - First observed
list_policy_routes - First observed
list_prefix_lists - First observed
list_radius_servers - First observed
list_recurring_schedules - First observed
list_remote_certificates - First observed
list_rogue_aps - First observed
list_route_maps - First observed
list_running_processes - First observed
list_saml_servers - First observed
list_sdwan_health_checks - First observed
list_sdwan_members - First observed
list_security_profiles - First observed
list_service_groups - First observed
list_service_objects - First observed
list_shaping_policies - First observed
list_snmp_communities - First observed
list_ssl_vpn_portals - First observed
list_ssl_vpn_sessions - First observed
list_static_routes - First observed
list_switch_port_stats - First observed
list_syslog_settings - First observed
list_tacacs_servers - First observed
list_traffic_shapers - First observed
list_url_filters - First observed
list_user_groups - First observed
list_vip_groups - First observed
list_virtual_ips - First observed
list_wifi_clients - First observed
list_wireless_ssids - First observed
list_zones - First observed
log_get - First observed
lookup_policy - First observed
lookup_route - First observed
monitor_get - First observed
move_firewall_policy - First observed
ping_from_device - First observed
query_event_log - First observed
query_traffic_log - First observed
query_utm_log - First observed
remove_address_group_members - First observed
remove_device - First observed
test_device_connection - First observed
update_address_object - First observed
update_cmdb_object - First observed
update_firewall_policy - First observed
update_service_object - First observed
update_static_route - First observed
update_virtual_ip
TDQS
Scored across 137 tools
Most tools target distinct FortiGate resources or actions, but generic cmdb_list/cmdb_get/create_cmdb_object/monitor_get/log_get overlap heavily with many dedicated list/get/query tools. Descriptions do clarify when to use typed versus generic tools, but the sheer breadth of 137 tools makes misselection likely.
Predominantly consistent verb_noun snake_case naming (list_, get_, create_, update_, delete_, query_, execute_), which is predictable. A few deviations such as cmdb_list, cmdb_get, monitor_get, and log_get are minor but noticeable.
137 tools is far beyond a well-scoped set; even for a broad FortiGate management domain, this exceeds the 50+ extreme mismatch threshold. Many list/get tools could be consolidated or handled by the generic cmdb/monitor/log tools.
The surface covers core configuration CRUD for policies, addresses, services, VIPs, routes, and DHCP, plus extensive monitoring, logs, VPN, routing, wireless, HA, certificates, users, and generic cmdb/monitor/log escape hatches. There are no obvious dead ends for the stated domain.
Maintenance
Related MCP Connectors
- GentkeyOAuthcom.gentkey
One MCP URL for all your connectors — scoped writes, enforced constraints, and a full audit trail.
Read-only MCP access to a documented IT fleet: state, changes, posture. 15 tools.
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
XFA's remote MCP server — query device posture, compliance, policies & CVEs. Read-only.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for the FortiMonitor v2 monitoring API. 241 tools across 33 modules covering server management, outage monitoring, maintenance windows, metrics, notifications, cloud monitoring, SNMP, dashboards, reporting, and more. Unofficial community project, not affiliated with Fortinet. Python, MIT license, Docker and local deployment supported.3MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables natural language management of FortiGate firewalls via the FortiOS REST API, offering 393 tools for system, policy, routing, VPN, and security configuration.MIT
- AlicenseNot gradedqualityAmaintenanceManage a fleet of OPNsense firewalls from an AI agent, inside guardrails it can't drive around. MCP server for central management of OPNsense firewall fleets. 129 tools across devices, config sync, tasks, schedules, templates, backups and remote consoles - destructive actions confirmation-gated, MCP-issued tokens lifetime-bounded, backup and storage secrets excluded from the toolset entirely.Apache 2.0
- AlicenseAqualityDmaintenanceAn MCP server for managing and monitoring FortiGate firewalls via the FortiOS REST API, enabling natural language queries for status, policies, VPNs, and sessions.9MIT