Skip to main content
Glama
forticrevs
by forticrevs

FortiAnalyzer MCP Server

A Python Model Context Protocol server for the FortiAnalyzer JSON-RPC API. It provides structured tools for system health, ADOM and device inventory, alerts, reports, LogView searches, and documented long-tail read endpoints.

The bundled offline catalog contains searchable factual metadata derived from the public FortiAnalyzer JSON-RPC API documentation. It includes generated summaries and links back to each source page; the source documentation itself is not redistributed in this repository. See NOTICE for provenance and licensing details.

The searchable catalog preserves the guide's published endpoint paths. Endpoint compatibility can vary by appliance release, so validate the tools you plan to use in a non-production environment first.

This is an independent project and is not affiliated with or endorsed by Fortinet. Fortinet and FortiAnalyzer are trademarks of Fortinet, Inc.

Highlights

  • API-key and username/password session authentication

  • Secure TLS verification by default, with custom CA support

  • Lazy, concurrency-safe login and one read retry after documented session expiry (-10)

  • Bounded LogView submit/poll/fetch/cleanup workflows

  • Structured MCP output with request and endpoint metadata

  • Offline API-document metadata search plus an opt-in generic read tool

  • Server-managed credentials and session IDs are never exposed in tool schemas or server-generated metadata

  • Generic state-changing access disabled by default

  • stdio, Streamable HTTP, and SSE transports

Related MCP server: Zabbix MCP Server

Requirements

  • Python 3.10 or newer

  • Network access to a FortiAnalyzer appliance

  • A least-privileged FortiAnalyzer API user

  • A FortiAnalyzer release that supports the selected JSON-RPC endpoints

Install

git clone https://github.com/forticrevs/fortianalyzer-mcp.git
cd fortianalyzer-mcp
python3 -m venv .venv
. .venv/bin/activate
python -m pip install .

Copy the example environment file and configure one authentication method:

cp .env.example .env

API-key authentication is preferred for long-running automation:

FAZ_HOST=https://fortianalyzer.example.com
FAZ_API_KEY=replace-with-a-secret-from-your-secret-store
FAZ_VERIFY_SSL=true

Session authentication is also supported:

FAZ_HOST=https://fortianalyzer.example.com
FAZ_USERNAME=mcp-readonly
FAZ_PASSWORD=replace-with-a-secret-from-your-secret-store
FAZ_VERIFY_SSL=true

Do not commit .env; it is ignored by Git.

Run the stdio server:

fortianalyzer-mcp

An MCP client can launch that executable directly. A representative client configuration is:

{
  "mcpServers": {
    "fortianalyzer": {
      "command": "/absolute/path/to/.venv/bin/fortianalyzer-mcp",
      "env": {
        "FAZ_HOST": "https://fortianalyzer.example.com",
        "FAZ_API_KEY": "${FAZ_API_KEY}",
        "FAZ_VERIFY_SSL": "true"
      }
    }
  }
}

Environment interpolation depends on the MCP client. If it is unsupported, use the client's secret facility or arrange for the server process to inherit the variables.

Tools

Tool

Purpose

faz_search_api_docs

Search bundled API-guide metadata and public source URLs

faz_connection_info

Show non-secret local connection settings

faz_get_system_status

Read version, model, license, disk, and memory status

faz_get_system_performance

Read CPU, memory, and disk performance

faz_list_adoms, faz_get_adom

Inspect administrative domains

faz_list_devices

List managed devices in an ADOM

faz_list_unregistered_devices

List unregistered devices

faz_list_alerts

Query bounded event-management alerts

faz_list_event_handlers

Read basic and correlation event-handler configuration

faz_list_report_layouts

List SQL report layouts

faz_list_report_templates

List report templates

faz_list_report_schedules

List report schedules

faz_list_log_forwarders

Read global log-forwarding configuration

faz_search_logs

Run a bounded one-page LogView workflow

faz_start_log_search

Start a manual/paginated LogView task

faz_get_log_search

Poll or page through a LogView task

faz_cancel_log_search

Cancel and release a LogView task

faz_raw_get

Call an appliance-local endpoint with JSON-RPC get

faz_raw_write is registered only when FAZ_ENABLE_WRITE_TOOLS=true. It requires confirm=true, cannot call authentication or reboot endpoints, and does not automatically replay a mutation after session expiry or an ambiguous transport failure. The confirmation argument and MCP annotations are not an authorization or human-approval boundary. Enabling this tool grants connected clients broad mutation capability within the FortiAnalyzer account's permissions; use a separate least-privileged account and an external approval control. Keep it disabled for read-only deployments.

Log search behavior

Device scope is always explicit. Use a concrete list such as ["branch-fgt-01"]; use ["All_FortiGate"] only intentionally.

Relative searches default to the last hour. Absolute times must be paired, FortiAnalyzer-local timestamps:

2025-01-15 09:00:00

By default:

  • a specific-device search is limited to 24 hours;

  • an all-device search is limited to 1 hour;

  • one tool result is limited to 200 rows;

  • LogView fetch pages never exceed the appliance limit of 500 rows;

  • at most eight LogView searches can be active or starting concurrently;

  • the convenience workflow times out after 30 seconds;

  • task deletion is attempted after completion, timeout, errors, and server shutdown; failed cleanup remains tracked for a later shutdown retry.

For pagination, start a task and retrieve each required offset. A completed full page does not prove that all rows were consumed, so the server conservatively keeps that task alive even when cleanup_when_done=true. Set cleanup_when_done=false while managing pages explicitly, then call faz_cancel_log_search. The convenience faz_search_logs workflow intentionally returns one page and always attempts to release its task.

Configuration

Variable

Default

Meaning

FAZ_HOST

required

HTTPS origin, optionally ending in /jsonrpc

FAZ_AUTH_MODE

auto

auto, api_key, or session

FAZ_API_KEY

Bearer API key (FAZ_API_TOKEN is an alias)

FAZ_USERNAME, FAZ_PASSWORD

Session credentials

FAZ_VERIFY_SSL

true

Verify the appliance certificate

FAZ_CA_BUNDLE

PEM bundle for a private CA

FAZ_ALLOW_HTTP

false

Explicit development-only HTTP opt-in

FAZ_TIMEOUT_SECONDS

30

Normal API timeout

FAZ_DEFAULT_ADOM

root

Default ADOM

FAZ_MAX_RESULTS

200

Maximum rows accepted by bounded tools

FAZ_LOG_SEARCH_TIMEOUT_SECONDS

30

Convenience search timeout

FAZ_MAX_LOG_SEARCH_HOURS

24

Specific-device search window

FAZ_MAX_ALL_DEVICES_SEARCH_HOURS

1

All-device search window

FAZ_MAX_ACTIVE_LOG_SEARCHES

8

Maximum active/starting LogView tasks

FAZ_ENABLE_WRITE_TOOLS

false

Register the guarded raw mutation tool

FAZ_MCP_TRANSPORT

stdio

stdio, streamable-http, or sse

FAZ_MCP_BIND_HOST

127.0.0.1

Network transport bind address

FAZ_MCP_PORT

8000

Network transport port

FAZ_MCP_ALLOWED_ORIGINS

Comma-separated browser-origin allowlist

FAZ_MCP_ALLOWED_HOSTS

Additional comma-separated Host header allowlist

FAZ_MCP_STATELESS

false

Streamable HTTP stateless mode

FAZ_MCP_JSON_RESPONSE

true

Use JSON rather than SSE response bodies

FAZ_LOG_LEVEL

INFO

Server logging level

For self-signed appliance certificates, install the issuing CA and set FAZ_CA_BUNDLE. FAZ_VERIFY_SSL=false is available for development but should not be used in production.

Network transports do not add client authentication to the MCP endpoint. Keep the default loopback binding or place the server behind an authenticated, TLS-protected gateway.

Browser clients must be explicitly allowed. For example:

FAZ_MCP_ALLOWED_ORIGINS=http://model.example.test,https://another-ui.example

Origins are exact HTTP(S) origins without paths or trailing slashes. A terminal port wildcard such as http://model.example.test:* is supported. The setting drives both DNS-rebinding validation and CORS/preflight responses. Localhost origins remain allowed automatically. If a proxy forwards a non-local Host header, allow that separately, for example FAZ_MCP_ALLOWED_HOSTS=model.example.test,model.example.test:*. These allowlists are request-validation controls, not client authentication.

Development

Install the development extra and run the test suite:

python -m pip install -e '.[dev]'
pytest

Rebuild the offline catalog from a documentation tree you are authorized to use:

python scripts/build_catalog.py \
  --source /path/to/fortianalyzer-api-docs \
  --output src/fortianalyzer_mcp/data/api_catalog.json

The automated suite uses mocked HTTP transports and does not require an appliance. Validate against your appliance because releases can differ in endpoint-specific request and response fields.

faz_raw_get accepts any syntactically valid appliance-local path except blocked authentication paths; catalog membership is guidance, not an enforced allowlist. It prevents request-field overrides and always sends JSON-RPC get, but returns endpoint data without field-level redaction or a generic response-size cap. Use a least-privileged account, call only trusted endpoints, and pass endpoint-specific limit, range, or field-selection parameters.

Available Tools

19 tools
faz_connection_infoA
Read-onlyIdempotent

Show non-secret connection and safety configuration.

This does not make an appliance request and never returns credentials or session identifiers.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnly, idempotent, and non-destructive hints, but the description adds significant context: no appliance request and no credentials/session identifiers. This goes beyond the annotations to clarify network behavior and sensitive data handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and every sentence adds value. It is concise without being under-specified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with an output schema, the description covers the essential context: what it shows (connection/safety config), what it doesn't do (no appliance request), and what it excludes (credentials/session IDs). This is complete for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so per the rubric the baseline is 4. The description doesn't need to explain parameters; it adds context about the nature of the result (non-secret configuration) without redundancy.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

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 ('connection and safety configuration'), making the tool's purpose immediately clear. It is clearly distinct from sibling tools which focus on lists, searches, and system metrics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by stating it does not make an appliance request and never returns credentials, implying it's a safe local info tool. However, it does not explicitly mention alternatives or exclusions relative to sibling tools, so it loses a point.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_get_adomA
Read-onlyIdempotent

Get one ADOM. An empty ADOM uses FAZ_DEFAULT_ADOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent behavior, so the description doesn't need to repeat that. It adds a useful behavioral detail: an empty adom parameter falls back to FAZ_DEFAULT_ADOM. This goes beyond the schema, which provides no description for the parameter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is remarkably concise—two sentences that cover purpose and a key parameter behavior. It is properly front-loaded with the primary action in the first sentence and no extraneous content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter getter with rich annotations and an output schema, the description covers the essential purpose and a critical edge case (empty ADOM). It does not address invalid ADOM names, but that is not necessary given the annotations and output schema; the description is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining the parameter's behavior: an empty ADOM uses FAZ_DEFAULT_ADOM. It directly clarifies what the 'adom' string means and how the default value works, which is essential for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Get one ADOM') using a specific verb and resource, distinguishing it from sibling tools like faz_list_adoms by indicating it retrieves a single item. The additional sentence about empty ADOM adds relevant context without muddling the purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes clear context: this tool fetches a single ADOM, and notes behavior when no ADOM is specified. It does not explicitly mention alternatives or exclude other tools, but the 'one' versus 'list' differentiation is implied by the verb and the sibling tool names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_get_system_performanceA
Read-onlyIdempotent

Get current FortiAnalyzer CPU, memory, and disk performance metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds the 'current' aspect (snapshot rather than historical), which is useful context but does not disclose additional traits like rate limits or prerequisites.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no superfluous words. Every part contributes to explaining the tool's function.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (zero parameters) and the presence of an output schema, the description sufficiently covers the necessary context. Return values are presumably documented in the output schema, so no further detail is required.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the schema is empty. With 0 params, the baseline is 4, and the description appropriately adds no parameter-specific details since there is nothing to clarify.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the verb 'Get' and the resource 'FortiAnalyzer CPU, memory, and disk performance metrics', distinguishing it from sibling tools like faz_get_system_status. The scope (current metrics) is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context that this tool retrieves current performance metrics, making its intended use obvious. It does not explicitly list exclusions or alternatives, but no such guidance is necessary for such a straightforward read-only getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_get_system_statusA
Read-onlyIdempotent

Get FortiAnalyzer version, model, hostname, license, disk, and memory status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing a safe read operation. The description adds no extra behavioral context beyond listing the data returned; it does not mention potential delays, authentication requirements, or other side effects, but the annotations cover the primary safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. It immediately says 'Get FortiAnalyzer' and then lists the attributes, making it highly scannable and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no parameters, an output schema present, and annotations fully describing safety, the description fully covers the tool's purpose. There is no missing information; even return values are handled by the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, so schema coverage is effectively 100%. According to the rubric, 0 params yields a baseline score of 4. The description adds no parameter semantics, but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb ('Get') and resource ('FortiAnalyzer system status') and enumerates the exact attributes (version, model, hostname, license, disk, memory). This fully distinguishes it from siblings like faz_get_system_performance or faz_connection_info.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case (retrieving system status) via the name and content. It does not explicitly mention alternatives or exclusions, but the context is unambiguous and no caveats are needed for a parameterless read-only tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_adomsA
Read-onlyIdempotent

List administrative domains, optionally returning only selected fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, openWorld, idempotent, and non-destructive hints, so the safety profile is covered. The description adds the 'optionally returning only selected fields' behavior, but that is largely redundant with the schema. No additional behavioral traits (e.g., pagination, filtering scope) are disclosed, so it meets the minimum bar but does not exceed it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is concise and front-loaded. Every word contributes meaning, and there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. The tool has only one optional parameter and is a simple list operation. The description is sufficient for this simplicity, though it omits any mention of pagination or result limits, but these are not critical given the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for documenting the 'fields' parameter. It does clarify that the parameter controls which fields are returned, but it does not list valid field names or explain the format. This is marginal compensation for the single optional parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'administrative domains', which distinguishes it from singular tools like faz_get_adom and other list tools (devices, alerts, etc.). The optional fields clause adds specificity without confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives. It does not mention that faz_get_adom retrieves a single ADOM, nor does it provide exclusions or prerequisites. The context is implied only by the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_alertsA
Read-onlyIdempotent

List event-management alerts with bounded pagination.

Times are FortiAnalyzer-local values in YYYY-MM-DD HH:MM:SS form and must be supplied as a pair. filter_expression uses alert-filter syntax; prefer event_type and severity for common filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo
limitNo
offsetNo
end_timeNo
severityNo
event_typeNo
start_timeNo
filter_expressionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, non-destructive traits. The description adds important behavioral constraints: times must be supplied as a pair, filter_expression uses a specialized alert-filter syntax, and pagination is bounded. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences cover purpose and key usage guidance with no redundancy. Each sentence earns its place, and the most important information (what it lists) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list tool with annotations and an output schema, the description covers the critical usage aspects: purpose, time constraints, and filter preferences. It does not clarify adom or pagination details, but these are less central given the output schema and self-explanatory parameter names. Overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning for start_time/end_time (pair requirement, format), filter_expression (alert-filter syntax), and recommends event_type/severity for common filters. However, it does not explain other parameters like adom or the pagination semantics, leaving partial gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'List event-management alerts', identifying the specific verb and resource. This distinguishes it from sibling list tools like faz_list_devices and faz_list_report_layouts. 'Bounded pagination' adds useful scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context for using time parameters (must be paired, specific format) and suggests preferring event_type and severity over filter_expression for common filters. Does not explicitly mention alternatives or when-not-to-use, but the resource-specific naming makes usage context fairly clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_devicesA
Read-onlyIdempotent

List managed devices in an ADOM, optionally selecting response fields.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo
fieldsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds scoping to an ADOM and the optional field selection, which is useful, but does not disclose return format or pagination behavior. This is consistent with a moderate-level addition beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, focused sentence of 11 words, front-loaded with the primary action and resource. Every word contributes meaning, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

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 tool with output schema present, this description covers the essential behavior, scope, and optionality. It does not need to describe return values since an output schema exists, and no critical information is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates partially: 'in an ADOM' gives meaning to the adom parameter, and 'optionally selecting response fields' explains the fields parameter. However, the explanations are basic and lack additional detail like examples or allowed field names, so the semantics are only moderately enriched.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (List), the resource (managed devices), and the scope (in an ADOM), which distinguishes it from sibling tools like faz_list_unregistered_devices and faz_list_adoms. The verb and resource are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context is clear: use this tool to list managed devices within an ADOM, as opposed to unregistered devices or other resource lists. However, it does not explicitly name alternatives or state when not to use the tool, so it falls short of the explicit guidance in the top-tier example.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_event_handlersA
Read-onlyIdempotent

List basic and correlation event handlers in an ADOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which establish the safety profile. The description adds no additional behavioral context such as pagination, permission requirements, or response structure. It simply restates the listing action, so it adds no extra transparency beyond annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the verb and resource. Every word contributes, and there is no redundant or filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with an output schema available, the description covers the fundamental purpose and scope. It does not mention edge cases like empty ADOM, but given the tool's simplicity and rich annotations, the description is largely sufficient. Some extra notes on ADOM behavior would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one optional parameter 'adom' with 0% description coverage. The description only says 'in an ADOM', which vaguely connects the parameter to the tool's scope but does not explain format, required vs optional, or default behavior. This minimal compensation falls short of fully documenting the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource as 'basic and correlation event handlers' scoped to 'an ADOM'. This clearly distinguishes it from sibling list tools such as faz_list_devices and faz_list_report_templates, which target other resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving event handlers when needed, and the unique resource name among siblings makes the use case obvious. However, it does not explicitly state when to use this over alternatives or mention any exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_log_forwardersA
Read-onlyIdempotent

List global FortiAnalyzer log-forwarding configurations.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds the 'global' scope, which is useful context, but it does not describe any additional behavioral traits or return format expectations. With annotations present, this is an acceptable baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no redundancy, directly stating the action and target. It is appropriately sized for a zero-parameter list operation and earns its place without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-parameter, read-only listing tool with an output schema and comprehensive annotations, the description is complete. It provides enough information for an agent to select and invoke the tool correctly without further detail.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the input schema is empty (100% coverage by default). The baseline for 0 parameters is 4 since there is no parameter information to convey. The description does not need to add parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' and identifies the resource as 'global FortiAnalyzer log-forwarding configurations', which is clear and distinguishes it from sibling list tools like faz_list_devices or faz_list_alerts. The scope 'global' adds precision beyond just the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by clearly naming what is listed, and the zero-parameter scope makes usage straightforward. However, it does not explicitly mention alternatives or when-not-to-use, though this is a simple, self-contained operation. Context is clear with no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_report_layoutsB
Read-onlyIdempotent

List SQL report layouts in an ADOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds only that the listing is scoped to an ADOM, which is also visible in the schema. It does not disclose any additional behavioral traits such as pagination or default behavior when adom is empty.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. It immediately communicates the action and resource, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter and has an output schema, but the description lacks parameter semantics and usage guidance. It is minimally viable for a list operation, yet leaves clear gaps about ADOM behavior and alternative selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description must compensate for the parameter meaning. It only repeats 'in an ADOM', which adds little beyond the parameter name 'adom'. It does not explain what values are valid, whether the parameter is required, or how it affects the result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List', the resource 'SQL report layouts', and the scope 'in an ADOM'. This distinguishes it from sibling tools like list_report_templates and list_report_schedules by naming a distinct resource type, though it does not explicitly contrast with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, or what happens if the adom parameter is omitted. There are no exclusions, prerequisites, or examples, leaving the agent to infer usage 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.

faz_list_report_schedulesA
Read-onlyIdempotent

List configured SQL report schedules in an ADOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which cover the safety profile. The description adds minimal behavioral context by specifying 'configured' schedules and the ADOM scope, but it does not disclose pagination, filtering, or authentication requirements. The description does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that starts with the verb 'List', immediately states the resource and scope, and contains no filler or redundant wording. It is appropriately concise for a simple list tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with an output schema and strong annotations, the description covers the core purpose adequately. However, it omits usage context and leaves the 'adom' parameter unexplained, which would require an agent to infer meaning or seek additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has one parameter 'adom' with no description (0% schema coverage). The description mentions 'in an ADOM' which aligns with the parameter but does not explain its format, optionality, or how to specify the ADOM name. This adds very little beyond the schema's bare title 'Adom'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'List' and identifies a distinct resource: 'configured SQL report schedules' within an ADOM. This clearly differentiates it from sibling tools like faz_list_report_templates and faz_list_report_layouts, which target different resources.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage through the tool's name and resource scope ('SQL report schedules', 'in an ADOM'), but it does not explicitly state when to use this tool versus alternatives or provide any prerequisites or exclusions. There is no direct guidance, but the context is somewhat inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_report_templatesA
Read-onlyIdempotent

List available report templates in an ADOM.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the description need not repeat safety traits. The description adds the 'in an ADOM' scope, which is useful context, but does not disclose any additional behavioral details such as authentication needs, defaults, or side effects. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that directly states the purpose. Every word earns its place; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with one optional parameter and an output schema, so return values need no explanation. However, the description omits parameter behavior (optionality/default), and given the many sibling list tools, it could clarify how report templates differ from layouts/schedules. This leaves minor but noticeable gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%; the 'adom' parameter has no description. The tool description mentions 'in an ADOM', which hints that the adom parameter specifies the ADOM, but it does not explain that the parameter is optional, possible values, or behavior when omitted. This insufficiently compensates for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and the resource ('available report templates') with a scope ('in an ADOM'). This is specific and distinguishes it from sibling tools like faz_list_report_layouts and faz_list_report_schedules by naming the exact resource type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you need report templates, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it mention alternatives among the many sibling list tools. Context is clear but exclusions and alternatives are absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_list_unregistered_devicesB
Read-onlyIdempotent

List devices that are visible to FortiAnalyzer but not registered.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no extra behavioral traits such as pagination, filtering semantics, or interpretation of 'visible.' It does not conflict with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler words. It efficiently states the tool's purpose without unnecessary detail. 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although the tool is simple and has annotations plus an output schema, the description leaves gaps about what 'visible' means and what 'registered' refers to in the FortiAnalyzer context. It is adequate for a minimal tool but doesn't provide a fuller operational picture.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single optional 'fields' parameter has 0% schema coverage and is not mentioned in the description. Since the description must compensate for the schema's lack of documentation and fails to do so, the parameter semantics are completely unaddressed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the action ('List') and the specific resource ('devices visible to FortiAnalyzer but not registered'). This distinguishes it from sibling tool faz_list_devices, which likely lists registered devices. The one-sentence summary is direct and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need unregistered devices) but provides no explicit when/when-not guidance or alternative tool names. It doesn't mention that faz_list_devices is for registered devices, but the wording implicitly separates the use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_raw_getA
Read-onlyIdempotent

Call an appliance-local read endpoint not covered by a high-level tool.

First use faz_search_api_docs to find the candidate path, then consult its linked source page for parameter placement. Catalog membership is not enforced. params contains members beside url; credentials, session, request id, method, and host cannot be overridden. Results are returned without field-level redaction, and response size is controlled by the selected endpoint. Use only trusted endpoints and pass documented limit/range/field selectors when available.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
paramsNo
jsonrpc_versionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds several behavioral constraints beyond annotations: credentials/session/request ID/method/host cannot be overridden, results have no field-level redaction, response size varies by endpoint, and catalog membership is not enforced. This complements the readOnlyHint, idempotentHint, and openWorldHint annotations without contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact paragraph of five sentences, each delivering actionable information without redundancy. It front-loads the core purpose and then provides necessary cautions and usage steps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-level raw GET tool with flexible params and an output schema, the description covers the prerequisite workflow, security constraints, override limitations, and result characteristics. It is sufficiently complete for an agent to select and invoke the tool appropriately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema description coverage at 0%, the description compensates by explaining that params can contain members such as url (while some fields cannot be overridden), and advising to consult the linked source page for parameter placement. It gives meaningful context, though the exact meaning of 'path' and 'jsonrpc_version' is left implicit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states this tool calls an appliance-local read endpoint not covered by a high-level tool, using a specific verb ('Call') and resource ('appliance-local read endpoint'). It distinguishes itself from siblings by positioning as a low-level fallback and instructing to search docs first.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly directs to use faz_search_api_docs first to find the path and source page for parameter placement, and advises to use only trusted endpoints with documented selectors. This provides clear when-to-use guidance and implicitly says not to use it when a high-level tool exists.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_search_api_docsA
Read-onlyIdempotent

Search metadata extracted from the FortiAnalyzer API guide.

Use this before faz_raw_get or when a high-level tool does not cover an endpoint. Results include JSON-RPC methods, API paths, generated summaries, relative source paths, and public documentation URLs. Consult the linked source page for exact request parameters. The catalog is local and does not contact the appliance.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
categoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

While the annotations already declare the tool read-only and non-destructive, the description adds valuable non-obvious context: 'The catalog is local and does not contact the appliance.' This tells the user that no network call is made, which is beyond what the annotations provide. It also lists result contents, giving a clear picture of what to expect.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place. The first sentence states the purpose, the second provides usage context and result contents, and the third adds a critical behavioral note plus a pointer for further details. It is front-loaded with the core purpose and avoids any redundant or filler wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage guidance, behavioral traits, and result content, which is sufficient for a search tool with an output schema. It mentions that results include JSON-RPC methods, API paths, summaries, source paths, and URLs, and advises consulting the source page for exact request parameters. The only notable gap is parameter semantics, but overall context is well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage for parameters, and the description does not explain any of the three parameters (query, limit, category). While 'query' and 'limit' are somewhat self-explanatory, 'category' is ambiguous, and the description does not compensate for the schema gaps by offering any hints about parameter syntax, defaults, or usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Search metadata extracted from the FortiAnalyzer API guide,' which clearly states a specific verb and resource. It also distinguishes itself from siblings by explicitly mentioning 'Use this before faz_raw_get or when a high-level tool does not cover an endpoint' and listing the types of results returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is provided: 'Use this before faz_raw_get or when a high-level tool does not cover an endpoint.' This gives clear when-to-use scenarios and names an alternative (faz_raw_get) as well as a general category of alternatives (high-level tools). The instruction to 'consult the linked source page for exact request parameters' further guides usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

faz_search_logsA

Run a bounded LogView submit/poll/fetch/cleanup workflow.

This convenience tool returns one result page and always attempts to delete its server-side task on completion, timeout, or error. Failed cleanup stays tracked for a shutdown retry. For manual pagination, use faz_start_log_search and faz_get_log_search instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
adomNo
limitNo
offsetNo
devicesYes
end_timeNo
log_typeNotraffic
max_logsNo
start_timeNo
time_orderNodesc
last_n_hoursNo
case_sensitiveNo
timeout_secondsNo
filter_expressionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses the cleanup behavior ('always attempts to delete its server-side task on completion, timeout, or error') and the failure handling ('stays tracked for a shutdown retry'). This goes beyond the annotations, which do not mention cleanup specifics, and adds valuable insight into the tool's side effects. No contradiction with annotations is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and every sentence adds value. It avoids fluff and clearly contrasts with alternatives, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the workflow, return limitation, and cleanup behavior, but it lacks parameter semantics, which is a major gap for a tool with 13 parameters. The output schema and annotations provide some context, but the description itself is incomplete for effective use without additional parameter guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description provides no parameter explanations. With 13 parameters, the agent must infer from schema titles and defaults only, which is insufficient for complex fields like 'filter_expression' or 'last_n_hours'. The description fails to compensate for the lack of schema documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Run a bounded LogView submit/poll/fetch/cleanup workflow' and specifies it returns one result page, distinguishing it from manual pagination tools. It names the resource (LogView logs) and the specific convenience behavior, making its purpose unmistakable, especially relative to siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says 'For manual pagination, use faz_start_log_search and faz_get_log_search instead,' which is a clear alternative. It also implies the tool is for a single page and handles cleanup automatically, giving the agent context on when to choose it over the manual tools.

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.

  1. 19 tool updatesv0.1.0
    • First observedfaz_cancel_log_search
    • First observedfaz_connection_info
    • First observedfaz_get_adom
    • First observedfaz_get_log_search
    • First observedfaz_get_system_performance
    • First observedfaz_get_system_status
    • First observedfaz_list_adoms
    • First observedfaz_list_alerts
    • First observedfaz_list_devices
    • First observedfaz_list_event_handlers
    • First observedfaz_list_log_forwarders
    • First observedfaz_list_report_layouts
    • First observedfaz_list_report_schedules
    • First observedfaz_list_report_templates
    • First observedfaz_list_unregistered_devices
    • First observedfaz_raw_get
    • First observedfaz_search_api_docs
    • First observedfaz_search_logs
    • First observedfaz_start_log_search

TDQS

A3.7/5.0

Scored across 19 tools

Disambiguation5/5

Each tool targets a distinct resource or lifecycle stage: list/get for different entity types, start/get/cancel/search for log search, and status vs performance are clearly separated. Even the raw_get fallback is distinct from high-level tools, and search_api_docs is unique. The only near-overlap (search_logs vs start+get) is clearly differentiated by description.

Naming Consistency4/5

Names consistently follow faz_<verb>_<noun> pattern for almost all tools (list_*, get_*, start_*, search_*). The lone outlier is faz_connection_info, which is a noun phrase rather than a verb phrase, and faz_raw_get mixes an adjective before the verb. Overall the pattern is highly predictable with minor deviations.

Tool Count4/5

19 tools is on the heavier side but appropriate for a comprehensive FortiAnalyzer management interface covering system, ADOMs, devices, alerts, reports, logs, and a raw API fallback. The count feels slightly above the ideal 3-15 range, but each tool serves a distinct function and nothing feels redundant.

Completeness4/5

The tool set covers a broad read-only surface: system status/perf, ADOM listing/getting, device listing (registered and unregistered), alerts, event handlers, reports (layouts/templates/schedules), log search with full lifecycle, and a raw read endpoint for uncovered paths. Missing write operations and per-item get-by-ID are notable but align with the apparent read/query purpose; the raw_get gap-filler increases completeness.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    A
    maintenance
    Provides advanced, programmable access to Zabbix monitoring data and management features, enabling querying, automation, and integration of Zabbix resources.
    53
    112 PyPI
    10
    MIT