Skip to main content
Glama
aplaceforallmystuff

MCP Pi-hole Server

MCP Pi-hole Server

npm version CI License: MIT MCP

Architecture

An MCP (Model Context Protocol) server that connects AI assistants like Claude to your Pi-hole network-wide ad blocker. Manage DNS blocking, view statistics, control whitelists/blacklists, and more through natural language.

Why Use This?

If you're running Pi-hole on your network, this MCP server lets you:

  • Monitor DNS traffic - View query statistics, top blocked domains, and client activity

  • Control blocking - Enable/disable Pi-hole blocking instantly or with a timer

  • Manage lists - Add or remove domains from whitelist and blacklist without opening the web UI

  • View query logs - See recent DNS queries with detailed information

  • Maintain your Pi-hole - Update gravity (blocklists) and flush DNS cache

Related MCP server: Pi-hole MCP Server

Features

Category

Tools

Statistics

Query totals, blocking percentage, top domains, top clients

Blocking Control

Enable, disable (with optional timer), check status

Domain Lists

Whitelist/blacklist CRUD operations

Query Log

Recent DNS queries with client, status, response time

Maintenance

Update gravity, flush cache

Visualizations

ASCII art dashboards and bar charts with ANSI colors

Prerequisites

  • Node.js 18+

  • Pi-hole v6 with API enabled

  • Pi-hole app password (generated in Pi-hole settings)

  • Network access to Pi-hole from your machine

Installation

npx mcp-pihole-server

Or install globally:

npm install -g mcp-pihole-server

Option 2: Clone and Build

git clone https://github.com/aplaceforallmystuff/mcp-pihole.git
cd mcp-pihole
npm install
npm run build

Configuration

1. Get Your Pi-hole App Password

  1. Open your Pi-hole web interface

  2. Go to Settings > API

  3. Generate a new app password

  4. Copy the password (it's only shown once)

2. Configure Your MCP Client

For Claude Desktop

Add to your Claude Desktop config file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "pihole": {
      "command": "npx",
      "args": ["-y", "mcp-pihole-server"],
      "env": {
        "PIHOLE_URL": "http://your-pihole-address:8080",
        "PIHOLE_PASSWORD": "your-app-password"
      }
    }
  }
}

For Claude Code

Add to ~/.claude.json:

{
  "mcpServers": {
    "pihole": {
      "command": "npx",
      "args": ["-y", "mcp-pihole-server"],
      "env": {
        "PIHOLE_URL": "http://your-pihole-address:8080",
        "PIHOLE_PASSWORD": "your-app-password"
      }
    }
  }
}

Environment Variables

Variable

Description

Example

PIHOLE_URL

Pi-hole web interface URL

http://pihole.local:8080

PIHOLE_PASSWORD

Pi-hole app password

Your app password from settings

Usage Examples

Once configured, you can interact with Pi-hole through natural language:

View Statistics

"Show me Pi-hole stats"

"What are the top blocked domains?"

"Which clients are making the most queries?"

Control Blocking

"Is Pi-hole blocking enabled?"

"Disable Pi-hole for 5 minutes"

"Re-enable Pi-hole blocking"

Manage Domain Lists

"Add example.com to the whitelist"

"Block ads.trackersite.com"

"Show me all whitelisted domains"

View Query Log

"Show me the last 50 DNS queries"

"What domains has my phone been querying?"

Visual Dashboards

"Show me Pi-hole stats with visualize: true"

"Get top blocked domains with visualization"

Available Tools

Statistics

  • pihole_get_stats - Get comprehensive Pi-hole statistics

  • pihole_get_top_blocked - Get top blocked domains

  • pihole_get_top_permitted - Get top permitted domains

  • pihole_get_top_clients - Get top clients by query count

  • pihole_get_query_log - Get recent DNS queries

Blocking Control

  • pihole_get_blocking_status - Check if blocking is enabled

  • pihole_enable_blocking - Enable DNS blocking

  • pihole_disable_blocking - Disable blocking (optionally with timer)

Domain Management

  • pihole_get_whitelist - List all whitelisted domains

  • pihole_get_blacklist - List all blacklisted domains

  • pihole_add_to_whitelist - Add domain to whitelist

  • pihole_add_to_blacklist - Add domain to blacklist

  • pihole_remove_from_whitelist - Remove domain from whitelist

  • pihole_remove_from_blacklist - Remove domain from blacklist

Maintenance

  • pihole_update_gravity - Update blocklists (gravity)

  • pihole_flush_cache - Flush DNS cache

ASCII Visualizations

This server supports colorful ASCII art visualizations rendered directly in your terminal using ANSI escape codes.

Supported Tools

The following tools support the optional visualize: true parameter:

Tool

Visualization

pihole_get_stats

Full dashboard with summary stats, top clients, blocked domains, and permitted domains

pihole_get_top_blocked

Red bar chart of blocked domains

pihole_get_top_permitted

Green bar chart of permitted domains

pihole_get_top_clients

Blue bar chart of client activity

Usage

Pass visualize: true to any supported tool:

{
  "name": "pihole_get_stats",
  "arguments": {
    "visualize": true
  }
}

When visualize is not set or false, tools return JSON data as usual.

Example Output

╔════════════════════════════════════════════════════════════════════════════╗
║                         🛡️  PI-HOLE DASHBOARD                          ║
╠════════════════════════════════════════════════════════════════════════════╣
║                                                                            ║
║ 📊 SUMMARY                                                                 ║
║ ────────────────────────────────────────────────────────────────────────── ║
║ Total Queries:      73K             Domains Blocked:    2.4M               ║
║ Blocked:            22K             Active Clients:     28                 ║
║ Block Rate:         29.7%           Total Clients:      115                ║
╠════════════════════════════════════════════════════════════════════════════╣
║ 🔝 TOP CLIENTS                                                             ║
║ ────────────────────────────────────────────────────────────────────────── ║
║ 192.168.1.52     ████████████████████████████████████████   28K (38%)      ║
║ 192.168.1.51     ███████████████████▋                       14K (19%)      ║
╚════════════════════════════════════════════════════════════════════════════╝

(Colors appear in terminals that support ANSI escape codes)

Development

# Run in development mode (auto-reloads)
npm run watch

# Build for production
npm run build

# Run the built version
node dist/index.js

Troubleshooting

"PIHOLE_URL and PIHOLE_PASSWORD environment variables are required"

Ensure both environment variables are set in your MCP config.

"Authentication failed"

Your app password is invalid or expired. Generate a new one from Pi-hole Settings > API.

"API request failed: 401"

Session expired. The server will automatically re-authenticate, but if issues persist, check your password.

Connection refused

Ensure Pi-hole is running and the URL is correct. Check that you can access the Pi-hole web interface from your machine.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE for details.

Available Tools

16 tools
pihole_add_to_blacklistC

Add a domain to the Pi-hole blacklist (block list)

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to blacklist (e.g., ads.example.com)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states the basic action without disclosing behavioral traits. It doesn't mention whether this requires admin permissions, if the change is immediate or requires a restart, potential rate limits, or what happens if the domain is already blacklisted.

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, efficient sentence that directly states the tool's purpose with zero wasted words. It's appropriately sized and front-loaded, making it easy to understand at a glance.

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

Completeness2/5

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 is insufficient. It doesn't explain what happens after adding (e.g., success confirmation, error handling), nor does it provide context about the blacklist's role in Pi-hole's blocking system, leaving gaps in understanding the tool's impact.

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?

The input schema has 100% description coverage, with the 'domain' parameter clearly documented. The description adds no additional parameter semantics beyond what's in the schema, so it meets the baseline of 3 for high schema coverage.

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 action ('Add') and resource ('domain to the Pi-hole blacklist'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'pihole_remove_from_blacklist' beyond the obvious add/remove distinction, which is why it doesn't earn a 5.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_add_to_whitelist' or 'pihole_remove_from_blacklist'. It lacks context about prerequisites, such as whether Pi-hole must be enabled or if the domain should be validated first.

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

pihole_add_to_whitelistC

Add a domain to the Pi-hole whitelist (allow list)

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to whitelist (e.g., example.com)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the write action ('Add') but doesn't mention permission requirements, whether the change is immediate or requires a restart, what happens if the domain is already whitelisted, or any rate limits. For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that communicates the core purpose without unnecessary words. The parenthetical '(allow list)' adds helpful clarification without bloating the text. Every word earns its place.

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

Completeness2/5

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 is incomplete. It doesn't explain what happens after adding (e.g., success confirmation, error conditions), whether the change persists, or how it interacts with Pi-hole's blocking system. Given the complexity of whitelist management and lack of structured coverage, more context is needed.

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 100% with the single 'domain' parameter fully documented in the schema. The description doesn't add any parameter-specific information beyond what's already in the schema (e.g., format constraints, validation rules, or examples beyond the schema's example). Baseline 3 is appropriate 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.

Purpose4/5

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

The description clearly states the action ('Add a domain to') and the resource ('Pi-hole whitelist'), with the parenthetical '(allow list)' providing helpful clarification. It distinguishes from obvious opposites like 'pihole_add_to_blacklist' but doesn't explicitly differentiate from all siblings like 'pihole_get_whitelist' or 'pihole_remove_from_whitelist'.

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 about when to use this tool versus alternatives. The description doesn't mention prerequisites (e.g., Pi-hole must be running), when whitelisting is appropriate versus other actions, or how this relates to siblings like 'pihole_remove_from_whitelist' or 'pihole_get_whitelist'.

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

pihole_disable_blockingA

Disable Pi-hole DNS blocking, optionally for a specific duration

ParametersJSON Schema
NameRequiredDescriptionDefault
durationNoDuration in seconds to disable blocking. If not specified, blocking is disabled indefinitely.

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly indicates this is a mutation tool (disabling is a write operation) and mentions the duration option, but lacks details on permissions required, side effects (e.g., impact on network traffic), or what happens after the duration expires. It adds some value but leaves 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.

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core purpose and includes the key optional feature. There's no wasted language, and every word earns its place in conveying essential information.

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 mutation tool with no annotations and no output schema, the description is minimally adequate. It covers the basic action and parameter, but lacks information on permissions, side effects, or response format. Given the complexity (a write operation affecting DNS blocking), it should do more to be complete.

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 100%, so the schema fully documents the 'duration' parameter. The description adds marginal value by reinforcing that duration is optional and implying indefinite disabling if omitted, but doesn't provide additional semantics beyond what the schema already states (e.g., units clarification or behavioral nuances).

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 specific action ('Disable Pi-hole DNS blocking') and resource ('Pi-hole DNS blocking'), distinguishing it from siblings like 'pihole_enable_blocking' and 'pihole_get_blocking_status'. It uses a precise verb ('Disable') that directly contrasts with sibling tools.

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 for usage by mentioning the optional duration parameter, which helps differentiate when to use this tool (e.g., for temporary vs. indefinite disabling). However, it doesn't explicitly state when not to use it or name alternatives like 'pihole_enable_blocking' for re-enabling.

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

pihole_enable_blockingB

Enable Pi-hole DNS blocking

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It states the action but doesn't mention whether this requires admin permissions, what happens to existing DNS queries during the transition, or if there are any side effects like temporary service disruption. This leaves significant 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.

Conciseness5/5

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

The description is a single, focused sentence with no wasted words. It's perfectly front-loaded with the essential information and achieves maximum efficiency given the tool's simple purpose.

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

Completeness2/5

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 is insufficient. It doesn't explain what 'enabling blocking' entails operationally, what the expected outcome looks like, or how to verify success. Given the complexity of DNS blocking systems and the lack of structured metadata, more context would be helpful.

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 with 100% schema description coverage, so no parameter documentation is needed. The description appropriately doesn't discuss parameters, earning a high baseline score since it doesn't need to compensate for any schema gaps.

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 action ('Enable') and resource ('Pi-hole DNS blocking'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'pihole_disable_blocking' beyond the obvious verb difference, which prevents a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_disable_blocking' or 'pihole_get_blocking_status'. There's no mention of prerequisites, timing considerations, or typical use cases, leaving the agent with minimal contextual direction.

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

pihole_flush_cacheB

Flush Pi-hole's DNS cache

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden. 'Flush' implies a write/mutation operation, but it doesn't disclose behavioral traits like whether this requires admin permissions, if it's reversible, potential side effects (e.g., increased DNS load after flush), or rate limits. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

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, efficient sentence with zero wasted words. It's front-loaded with the core action ('Flush') and immediately specifies the target ('Pi-hole's DNS cache'). Every word earns its place, 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.

Completeness2/5

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

Given the tool's complexity (a mutation operation with potential side effects), no annotations, and no output schema, the description is incomplete. It lacks critical context like what 'flush' entails behaviorally, what happens after execution, or error conditions. For a tool that modifies system state, this minimal description leaves too many unknowns for safe agent use.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add param info, which is appropriate. Baseline for 0 params is 4, as the description correctly focuses on the tool's purpose rather than redundant parameter details.

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 'Flush Pi-hole's DNS cache' clearly states the action (flush) and target resource (Pi-hole's DNS cache). It distinguishes itself from siblings like pihole_get_stats or pihole_update_gravity by focusing on cache management rather than querying or updating lists. However, it doesn't explicitly differentiate from all siblings (e.g., pihole_disable_blocking also modifies system behavior), so it's not a perfect 5.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., Pi-hole must be running), consequences (e.g., temporary DNS resolution delays), or suggest alternatives like pihole_update_gravity for broader updates. Without any usage context, the agent must infer timing 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.

pihole_get_blacklistA

Get all domains on the Pi-hole blacklist

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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 states the tool gets domains but doesn't describe behavioral traits such as whether this is a read-only operation, if it requires authentication, potential rate limits, or the format of the returned data (e.g., list, JSON). This leaves significant gaps for an agent to understand how to invoke it effectively.

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, clear sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and efficiently communicates the essential information, making it easy for an agent to parse and understand quickly.

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?

Given the tool's low complexity (0 parameters, no output schema, no annotations), the description is adequate but not complete. It covers the basic purpose but lacks details on behavioral aspects like data format or operational constraints. For a simple read tool, this is minimally viable, but additional context on output or usage would improve completeness.

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 0 parameters, and the schema description coverage is 100%, so there are no parameters to document. The description appropriately doesn't add parameter details, as none are needed. This meets the baseline for tools with no parameters, where minimal description is sufficient.

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 specific action ('Get all domains') and the resource ('on the Pi-hole blacklist'), making the purpose immediately understandable. It distinguishes this tool from siblings like 'pihole_get_whitelist' by specifying the blacklist, and from 'pihole_get_top_blocked' by indicating it retrieves all domains rather than just top ones.

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 needing to retrieve the complete blacklist, but it does not explicitly state when to use this tool versus alternatives. For example, it doesn't clarify if this should be used for checking blacklist contents versus 'pihole_get_top_blocked' for analytics, or mention prerequisites like Pi-hole being enabled. The context is clear but lacks explicit guidance on alternatives or exclusions.

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

pihole_get_blocking_statusA

Check if Pi-hole blocking is currently enabled or disabled

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the tool's read-only nature ('Check') but doesn't mention potential authentication requirements, rate limits, or what specific status values are returned. It provides basic behavioral context but lacks operational details.

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, clear sentence that directly states the tool's purpose with zero wasted words. It's perfectly front-loaded and appropriately sized for a simple status-checking 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 0-parameter tool with no annotations and no output schema, the description provides adequate basic purpose but could be more complete by specifying the return format (e.g., boolean enabled/disabled) or any prerequisites. It meets minimum viability but has room for enhancement.

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 0 parameters with 100% schema coverage, so the schema already fully documents the lack of inputs. The description appropriately doesn't add parameter information, maintaining focus on the tool's purpose without unnecessary details.

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 specific action ('Check') and resource ('Pi-hole blocking status'), distinguishing it from siblings like pihole_disable_blocking or pihole_enable_blocking by focusing on read-only status verification rather than modification.

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 context (when you need to know if blocking is active), but doesn't explicitly state when to use this tool versus alternatives like pihole_get_stats or provide exclusion criteria. It's clear but lacks explicit sibling differentiation.

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

pihole_get_query_logC

Get recent DNS queries from the query log

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of queries to return (default: 100)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool retrieves data ('Get'), implying a read-only operation, but doesn't mention potential side effects, authentication needs, rate limits, or return format. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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, efficient sentence that directly states the tool's purpose without unnecessary words. It's appropriately sized and front-loaded, making it easy to parse quickly.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what the query log contains, how 'recent' is defined, the format of returned data, or error handling. For a data retrieval tool with no structured support, more context is needed to guide effective use.

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?

The description doesn't mention parameters at all, but the input schema has 100% description coverage, documenting the single parameter 'count' with its type and default. This meets the baseline of 3, as the schema adequately handles parameter semantics without needing description compensation.

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 action ('Get') and resource ('recent DNS queries from the query log'), making the purpose immediately understandable. It doesn't explicitly differentiate from siblings like 'pihole_get_stats' or 'pihole_get_top_clients', but the focus on 'query log' provides some implicit distinction.

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 like 'pihole_get_stats' or 'pihole_get_top_clients'. The description lacks context about use cases, prerequisites, or exclusions, leaving the agent without direction on tool selection.

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

pihole_get_statsA

Get Pi-hole statistics including total queries, blocked queries, blocking percentage, active clients, and domains being blocked

ParametersJSON Schema
NameRequiredDescriptionDefault
visualizeNoReturn ASCII art dashboard with bar charts instead of JSON

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only states what data is returned, not behavioral aspects like authentication requirements, rate limits, performance characteristics, or whether this is a read-only operation. While 'Get' implies reading, explicit confirmation would help agents understand safety and constraints.

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?

Single sentence efficiently lists all key statistics without unnecessary words. Front-loaded with the core purpose, every element (queries, blocked queries, percentage, clients, domains) earns its place by specifying the data scope.

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 read-only statistics tool with one optional parameter and no output schema, the description adequately covers what data is returned. However, without annotations or output schema, it lacks details on return format (e.g., JSON structure), error conditions, or whether the visualization option changes output type, leaving some gaps for agent invocation.

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 single parameter has 100% schema description coverage, so the schema already documents the 'visualize' boolean. The description doesn't add parameter details, but with only one optional parameter and high schema coverage, baseline 3 applies. The description's enumeration of statistics provides context for what 'visualize' might affect, justifying a slightly higher score.

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 'Get' and the specific resource 'Pi-hole statistics', then enumerates the exact data points returned (total queries, blocked queries, blocking percentage, active clients, domains being blocked). This distinguishes it from sibling tools that focus on blacklist/whitelist management, blocking status, or query logs.

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 for retrieving statistical overviews rather than detailed logs or management actions, but doesn't explicitly state when to use this vs. alternatives like pihole_get_query_log or pihole_get_top_blocked. No explicit exclusions or prerequisites are mentioned.

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

pihole_get_top_blockedB

Get the top blocked domains

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of domains to return (default: 10)
visualizeNoReturn ASCII art bar chart instead of JSON

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't cover important traits like whether it's read-only (implied by 'Get' but not explicit), performance characteristics, rate limits, authentication needs, or what happens if parameters are omitted. For a tool with no annotations, this is a significant gap in transparency.

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, efficient sentence with zero wasted words. It's front-loaded with the core purpose ('Get the top blocked domains'), making it immediately understandable. Every part of the sentence earns its place by conveying essential information without redundancy.

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?

Given the tool's low complexity (2 optional parameters, no output schema, no annotations), the description is minimally complete. It states the purpose but lacks context on usage, behavioral traits, or output format. While adequate for a simple read operation, it doesn't fully address the agent's needs for informed tool selection and invocation, especially with no output schema to clarify returns.

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?

The input schema has 100% description coverage, with clear documentation for both parameters ('count' and 'visualize'). The description doesn't add any semantic details beyond what the schema provides, such as explaining the format of the ASCII art or default behavior. Since schema coverage is high, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 'Get' and resource 'top blocked domains', making the purpose specific and understandable. However, it doesn't explicitly differentiate from sibling tools like 'pihole_get_top_permitted' (which gets top permitted domains) or 'pihole_get_blacklist' (which gets the full blacklist), missing an opportunity for clearer sibling distinction.

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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'pihole_get_top_permitted' for permitted domains or 'pihole_get_blacklist' for the full list, nor does it specify contexts such as monitoring blocked traffic or troubleshooting. This lack of usage context leaves the agent without clear direction.

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

pihole_get_top_clientsC

Get the top clients by query count

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of clients to return (default: 10)
visualizeNoReturn ASCII art bar chart instead of JSON

TDQS

C2.9/5.0
Behavior2/5

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 mentions retrieving top clients by query count but fails to describe key behaviors such as whether this is a read-only operation, how data is sorted or limited, potential rate limits, or what the output format entails beyond the optional ASCII art. This leaves significant gaps in understanding 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.

Conciseness5/5

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

The description is a single, efficient sentence that directly states the tool's purpose without any unnecessary words. It is front-loaded and wastes no space, making it easy to parse quickly while conveying the core functionality.

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

Completeness2/5

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

Given the lack of annotations and output schema, the description is incomplete for a tool that retrieves data. It doesn't explain the return format (e.g., JSON structure or ASCII art details), sorting criteria, or any behavioral traits like read-only nature. For a data-fetching tool with no structured support, more context is needed to ensure the agent can use it effectively.

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?

The input schema has 100% description coverage, with clear documentation for both parameters ('count' and 'visualize'). The description adds no additional semantic context beyond what the schema provides, such as explaining what 'top clients' means or how the ASCII art is formatted. Given the high schema coverage, a baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

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 'Get' and the resource 'top clients by query count', making the purpose specific and understandable. However, it doesn't explicitly distinguish this tool from its sibling 'pihole_get_top_blocked' or 'pihole_get_top_permitted', which also retrieve top lists but by different metrics, leaving some ambiguity about when to choose this specific tool.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_get_top_blocked' or 'pihole_get_top_permitted'. It lacks context about use cases, prerequisites, or exclusions, leaving the agent to infer usage from the tool name alone, which is insufficient for optimal selection.

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

pihole_get_top_permittedC

Get the top permitted (allowed) domains

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of domains to return (default: 10)
visualizeNoReturn ASCII art bar chart instead of JSON

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. While 'Get' implies a read operation, it doesn't specify whether this requires authentication, what format the data returns in (beyond the 'visualize' parameter hint), whether there are rate limits, or how the data is sourced. This leaves significant behavioral gaps for the agent.

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, efficient sentence that communicates the core purpose without any wasted words. It's appropriately sized for a simple query tool and gets straight to the point.

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

Completeness2/5

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

Given that this is a query tool with no annotations and no output schema, the description should do more to explain what 'top permitted domains' means (e.g., by time period, query volume, etc.) and what format the data returns in. The current description is too minimal for the agent to fully understand the tool's behavior and output.

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?

The schema description coverage is 100%, with both parameters ('count' and 'visualize') clearly documented in the schema. The description adds no additional parameter information beyond what's already in the structured schema, so it meets the baseline expectation without adding extra value.

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 'Get' and the resource 'top permitted (allowed) domains', making the purpose immediately understandable. However, it doesn't distinguish this tool from its sibling 'pihole_get_top_blocked' beyond the 'permitted' vs 'blocked' distinction in the name, which is why it doesn't reach a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_get_stats' or 'pihole_get_query_log'. It doesn't mention prerequisites, timing considerations, or what context this tool is most appropriate for.

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

pihole_get_whitelistA

Get all domains on the Pi-hole whitelist

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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 states the tool retrieves data but does not mention whether this is a read-only operation, if it requires authentication, potential rate limits, or the format of the returned data. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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, efficient sentence that directly states the tool's purpose without any wasted words. It is front-loaded with the core action and resource, making it easy to parse quickly. Every part of the sentence contributes essential information.

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?

Given the tool has 0 parameters, no annotations, and no output schema, the description is minimally adequate for a simple retrieval operation. However, it lacks details on return values (e.g., format, structure) and behavioral aspects like authentication needs, which are important for completeness in a no-annotation context. It meets basic needs but has clear gaps.

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 0 parameters, and schema description coverage is 100%, so no parameter information is needed. The description appropriately does not discuss parameters, aligning with the schema. A baseline score of 4 is applied as it effectively handles the lack of parameters without unnecessary details.

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 specific action ('Get all domains') and resource ('on the Pi-hole whitelist'), using a precise verb. It effectively distinguishes this tool from siblings like pihole_get_blacklist by specifying the whitelist focus, making the purpose immediately clear without redundancy.

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 for retrieving whitelist domains but provides no explicit guidance on when to use this tool versus alternatives like pihole_get_query_log or pihole_get_top_permitted. It lacks context on prerequisites, exclusions, or comparisons to sibling tools, leaving usage inferred rather than clearly defined.

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

pihole_remove_from_blacklistC

Remove a domain from the Pi-hole blacklist

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to remove from blacklist

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. While 'Remove' implies a mutation operation, it doesn't specify whether this requires admin permissions, whether the change is immediate or requires a service restart, what happens if the domain isn't currently blacklisted, or any rate limits. This leaves significant 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.

Conciseness5/5

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

The description is a single, efficient sentence that communicates the core functionality without any wasted words. It's appropriately sized for a simple tool with one parameter and gets straight to the point.

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

Completeness2/5

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 is insufficiently complete. It doesn't explain what happens after removal (e.g., whether queries for that domain will now be permitted), what the return value might be, or any error conditions. Given the tool's complexity and lack of structured behavioral information, the description should provide more operational context.

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?

The schema description coverage is 100%, with the single parameter 'domain' clearly documented in the schema. The description doesn't add any additional parameter semantics beyond what's already in the structured schema, so it meets the baseline expectation for tools with comprehensive schema coverage.

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 action ('Remove') and target resource ('domain from the Pi-hole blacklist'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'pihole_remove_from_whitelist' beyond the obvious blacklist vs whitelist distinction, which is why it doesn't reach a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_get_blacklist' to check what's currently blacklisted, or whether removal requires specific conditions. It simply states what the tool does without context about appropriate usage scenarios.

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

pihole_remove_from_whitelistC

Remove a domain from the Pi-hole whitelist

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesDomain to remove from whitelist

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full responsibility for behavioral disclosure. While 'Remove' implies a destructive mutation, it doesn't specify whether this requires admin permissions, if the change is permanent/reversible, what happens if the domain isn't in the whitelist, or any rate limits. This leaves significant 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.

Conciseness5/5

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

The description is a single, clear sentence with zero wasted words. It's front-loaded with the core action and resource, making it immediately scannable and efficient.

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

Completeness2/5

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 is insufficient. It doesn't explain what happens after removal (e.g., does blocking resume immediately?), potential error conditions, or return values. Given the complexity of modifying system configurations, more context is needed.

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?

The schema description coverage is 100% (the single 'domain' parameter is fully documented in the schema), so the baseline score is 3. The description doesn't add any parameter-specific information beyond what's already in the schema, but it doesn't need to since the schema is comprehensive.

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 action ('Remove') and resource ('domain from the Pi-hole whitelist'), making the tool's purpose immediately understandable. However, it doesn't explicitly differentiate from its sibling 'pihole_remove_from_blacklist' beyond the obvious whitelist vs blacklist distinction, which is why it doesn't achieve a perfect score.

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?

The description provides no guidance on when to use this tool versus alternatives like 'pihole_remove_from_blacklist' or 'pihole_add_to_whitelist'. It doesn't mention prerequisites (e.g., the domain must already be in the whitelist) or contextual considerations, leaving the agent to infer usage entirely 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.

pihole_update_gravityA

Update Pi-hole's gravity (refresh blocklists). This may take a minute to complete.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses that the operation 'may take a minute to complete,' which is valuable behavioral context about execution time. However, it doesn't mention whether this requires admin privileges, if it interrupts service, what happens on failure, or what the expected output/confirmation looks like.

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 concise sentences with zero waste. The first states the core purpose, the second adds crucial behavioral context about execution time. Every word earns its place, and the structure is front-loaded with the most important information.

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 zero-parameter tool with no output schema, the description provides adequate basic information about what the tool does and its timing characteristic. However, as a potentially system-affecting operation (updating core blocking functionality), it should ideally mention permission requirements, service impact, or confirmation of success/failure to be fully complete.

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 0 parameters with 100% schema description coverage, so the schema already fully documents the lack of inputs. The description appropriately doesn't discuss parameters, maintaining focus on the tool's purpose and behavior rather than repeating what's already clear from the schema.

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 specific action ('Update Pi-hole's gravity') and resource ('blocklists'), with the parenthetical 'refresh blocklists' providing helpful clarification. It distinguishes this tool from siblings like pihole_flush_cache or pihole_get_stats by focusing on updating/refreshing rather than retrieving or modifying lists.

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 blocklists need refreshing, but doesn't explicitly state when to use this tool versus alternatives like manually updating lists or other maintenance tools. No guidance on prerequisites, frequency, or exclusions is provided, leaving usage context somewhat vague.

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. Dates show when Glama detected each change.

  1. 16 tool updates
    • First observedpihole_add_to_blacklist
    • First observedpihole_add_to_whitelist
    • First observedpihole_disable_blocking
    • First observedpihole_enable_blocking
    • First observedpihole_flush_cache
    • First observedpihole_get_blacklist
    • First observedpihole_get_blocking_status
    • First observedpihole_get_query_log
    • First observedpihole_get_stats
    • First observedpihole_get_top_blocked
    • First observedpihole_get_top_clients
    • First observedpihole_get_top_permitted
    • First observedpihole_get_whitelist
    • First observedpihole_remove_from_blacklist
    • First observedpihole_remove_from_whitelist
    • First observedpihole_update_gravity

TDQS

A3.7/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. Tools are organized around specific actions on well-defined resources like blacklist, whitelist, blocking status, cache, logs, and statistics, making it easy for an agent to select the correct tool without confusion.

Naming Consistency5/5

All tools follow a consistent 'pihole_verb_noun' pattern throughout, using snake_case and starting with the server prefix. This predictable naming scheme enhances readability and makes the tool set easy to navigate and understand.

Tool Count5/5

With 16 tools, the server is well-scoped for managing a Pi-hole system, covering essential operations like blocking control, list management, statistics, and maintenance. Each tool earns its place by addressing a specific aspect of Pi-hole administration without being excessive or insufficient.

Completeness5/5

The tool surface provides complete CRUD/lifecycle coverage for Pi-hole management, including adding/removing from blacklist/whitelist, enabling/disabling blocking, flushing cache, updating gravity, and retrieving logs and stats. There are no obvious gaps that would hinder an agent's ability to perform core tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A server that exposes Pi-hole functionality as tools for AI assistants, allowing them to retrieve local DNS settings and query history through natural language.
    9
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables control of Pi-hole v6 ad blocking, allowing users to toggle DNS blocking status and retrieve real-time statistics like query counts and blocked domains. It provides a structured interface for monitoring and managing network-level ad filtering through the Pi-hole REST API.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to control Pi-hole DNS filtering, including domain management, query analysis, and system administration, with support for multiple Pi-hole instances and synchronization.
    8
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aplaceforallmystuff/mcp-pihole'

If you have feedback or need assistance with the MCP directory API, please join our Discord server