mcp-fritzbox
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-fritzboxlist my smart home devices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-fritzbox
A Model Context Protocol (MCP) server for interfacing with AVM FRITZ!Box routers (FRITZ!OS 8.20+). Control smart home devices, monitor network status, and administer your router through any MCP-compatible client.
Design Architecture
MCP Client (Claude Desktop, Claude Code, etc.)
│ stdio or HTTP/SSE
MCP Server (server.ts)
│ routes tool calls
├── SmartHomeClient ──→ REST API (/api/v0/smarthome/)
├── TR064Client ──────→ SOAP (TR-064 UPnP)
└── AuthProvider ─────→ SID login (login_sid.lua) + HTTP DigestComponents
Component | File | Responsibility |
AuthProvider |
| MD5 challenge-response SID login, HTTP digest credentials for TR-064, lazy re-auth on session expiry |
SmartHomeClient |
| REST calls to the FRITZ!Box Smart Home API for thermostats and switches |
TR064Client |
| SOAP calls for router administration (WAN status, bandwidth, guest WiFi, etc.) |
HTTP Client |
| Shared axios instance with 403 interceptor for automatic SID renewal |
MCP Server |
| Tool registration and error handling — maps MCP tool calls to client methods |
Related MCP server: FastMCP
Tools
Smart Home
Tool | Arguments | Output |
| none |
|
|
| Updated thermostat state (target temp, current temp, battery) |
|
| Updated switch state with current power reading (mW) and total energy (Wh) |
|
| Temperature history or energy consumption statistics |
Router Administration (TR-064)
Tool | Arguments | Output |
| none |
|
| none |
|
| none |
|
|
|
|
|
| Array of recent system log lines (default: 20) |
| none |
|
Setup Guide
1. Create a FRITZ!Box User
Open your FRITZ!Box web UI at
http://fritz.boxNavigate to System → FRITZ!Box Users → Add User
Set a username and password
Enable these permissions:
Smart Home — required for thermostat/switch control
FRITZ!Box Settings — required for TR-064 (WAN status, guest WiFi, etc.)
Access from the Internet — only if you need remote access
Click Apply
2. Install
From GitHub:
git clone https://github.com/ghbalf/mcp-fritzbox.git
cd mcp-fritzbox
npm install
npm run build3. Configure
Set environment variables:
export FRITZBOX_HOST=fritz.box # default, or use IP: 192.168.178.1
export FRITZBOX_USERNAME=your_user
export FRITZBOX_PASSWORD=your_passOr pass CLI flags:
node dist/index.js --host 192.168.178.1 --user admin --pass secretCLI flags override environment variables.
4. Connect to an MCP Client
Claude Code — add a .mcp.json to your project root:
{
"mcpServers": {
"fritzbox": {
"command": "node",
"args": ["/path/to/mcp-fritzbox/dist/index.js"],
"env": {
"FRITZBOX_HOST": "fritz.box",
"FRITZBOX_USERNAME": "your_user",
"FRITZBOX_PASSWORD": "your_pass"
}
}
}
}Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"fritzbox": {
"command": "node",
"args": ["/path/to/mcp-fritzbox/dist/index.js"],
"env": {
"FRITZBOX_HOST": "fritz.box",
"FRITZBOX_USERNAME": "your_user",
"FRITZBOX_PASSWORD": "your_pass"
}
}
}
}HTTP/SSE mode (for remote clients):
node dist/index.js --http --port 3000
# SSE endpoint: http://localhost:3000/sse
# Message endpoint: http://localhost:3000/messages5. Verify Connection
FRITZBOX_USERNAME=your_user FRITZBOX_PASSWORD=your_pass npm run test:integrationDevelopment
npm run start:dev # Run with tsx (no build needed)
npm run build # Compile TypeScript
npm test # Run unit tests
npm run test:watch # Watch mode
npm run test:integration # Live FRITZ!Box connection testTroubleshooting
Error | Cause | Fix |
| Wrong username or password | Verify credentials in FRITZ!Box UI under System → FRITZ!Box Users |
| FRITZ!Box unreachable | Check |
| Network issue or wrong port | Ensure you're on the same LAN; check no firewall blocks port 80/49000 |
| User lacks permissions | Enable "Smart Home" and "FRITZ!Box Settings" in the user's FRITZ!Box permissions |
| Invalid AIN | Run |
| Out of range | Temperature must be 8.0–28.0°C, or |
SOAP fault on guest WiFi | No guest network configured | Set up a guest network in FRITZ!Box UI first (WiFi → Guest Access) |
TR-064 401 Unauthorized | Digest auth rejected | User needs "FRITZ!Box Settings" permission; some models require explicit TR-064 access |
License
MIT
Available Tools
10 toolsget_bandwidth_statsB
Get total bandwidth usage and max line rates
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosing behavior. It only states the basic function (get stats) and does not specify details like units, time range, aggregation scope, or whether the data is real-time or historical. No side effects or authorization needs are mentioned, leaving significant ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It immediately conveys the tool's purpose and is appropriately concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless getter, the description is adequate but not complete. It mentions the two outputs (total usage and max line rates) but omits units, scope (e.g., all interfaces, current session), and any caveats. Without an output schema, the description should convey more about what the returned data represents.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty, so nothing is needed to clarify parameter meanings. The description does not add parameter details, but none are required. Baseline 4 is appropriate for no-parameter tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb and resource: 'Get total bandwidth usage and max line rates.' This clearly states what the tool does and is not a tautology. However, it does not explicitly distinguish itself from sibling tools like get_device_stats, though the scope ('total') hints at aggregate-level data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. It does not mention whether to use it for overall network monitoring or differentiate from get_wan_status or get_device_stats. There is no explicit context or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_logA
Get recent FRITZ!Box system log entries
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of log entries to return (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies a read-only operation but does not explicitly state that it has no side effects, nor does it disclose the format of the returned log entries, pagination behavior, or the meaning of 'recent'. Since annotations are absent, the description carries the full burden, but the simple get semantics and the word 'recent' provide some basic transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence with no filler. Every word contributes meaning, and it is front-loaded with the verb and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one optional parameter and no output schema, the description adequately states the core purpose and is sufficiently complete for a straightforward log-retrieval tool. Minor gaps include lack of usage context or return value format, but these are not critical given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the 'count' parameter with a default and description, so the description adds no additional parameter semantics. Baseline of 3 is appropriate given 100% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Get' with a clear resource 'FRITZ!Box system log entries', making it distinct from sibling tools like get_system_info or get_wan_status. It immediately conveys what the tool does without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as get_system_info or get_device_stats. There is no mention of typical use cases, prerequisites, or exclusions, leaving the agent to infer when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_statsA
Get temperature history or energy consumption statistics for a smart home device
| Name | Required | Description | Default |
|---|---|---|---|
| ain | Yes | Actor Identification Number of the device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It says 'Get' but doesn't disclose how the tool decides between temperature history and energy consumption, what happens if the device lacks such data, or any other behavioral details like rate limits or error scenarios. The ambiguity of 'or' is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the purpose without any unnecessary words. It is appropriately concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter and no output schema. The description states what it returns (temperature history or energy stats) but leaves ambiguity about whether it returns both or one depending on device type. Without an output schema, the description could have clarified the return structure, but for a simple tool it is minimally adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema fully describes the single parameter 'ain' with its purpose (Actor Identification Number). The description adds no additional meaning to the parameter, so the baseline of 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get temperature history or energy consumption statistics for a smart home device'. The verb 'Get' and the specific resource (device stats) distinguish it from siblings like get_system_info, get_bandwidth_stats, and get_device_log.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage (when you need temperature or energy stats) but does not explicitly mention when not to use it or provide alternatives. No exclusions or comparisons with sibling tools are given, so it only offers implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Get FRITZ!Box system information including model, firmware version, and serial number
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the tool 'gets' information, implying a read-only operation, and explicitly enumerates the data returned (model, firmware version, serial number). This adds value beyond the tool name, though it could mention the absence of side effects or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately states the action and resource, followed by examples of the returned data. Every word contributes meaning, with no redundancy or tangential information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple zero-parameter getter with no output schema, this description is largely complete. It names the key return fields, giving the agent enough context to anticipate the response. However, it does not specify the exact response structure or list all possible fields, leaving a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing to explain. The baseline score for 0-parameter tools is 4, and the description does not need to add parameter semantics. It correctly focuses on the output rather than inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Get' and resource 'FRITZ!Box system information', and lists concrete examples (model, firmware version, serial number). This clearly distinguishes it from sibling tools like get_wan_status or get_device_stats, which target other aspects of the device.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: it is for retrieving general system information. It does not explicitly state when not to use it or alternatives, but the resource is distinct enough that no exclusions are necessary. The tool has no parameters, so usage is straightforward.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_wan_statusA
Get WAN connection status including external IP, uptime, and link state
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the burden. The verb 'Get' implies a read-only operation, and the listed outputs give a sense of what to expect. However, it does not explicitly confirm that no side effects occur or mention any prerequisites/failure modes, which would be more transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the main purpose and lists the key outputs. Every word earns its place; there is no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only tool with no parameters and no output schema, the description covers the essential return values (IP, uptime, link state). It gives the agent enough to know what the tool provides. It could add a note about read-only behavior, but that is largely inferred and not critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so there are no parameters to describe. The schema coverage is effectively 100% (empty schema fully covered), and according to the rubric, 0 parameters warrants a baseline of 4. The description adds no param info because none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Get') with a clear resource ('WAN connection status') and lists key fields (external IP, uptime, link state). It clearly distinguishes from sibling tools like get_bandwidth_stats or get_system_info by focusing on WAN-specific status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the straightforward 'get' semantics and the resource name, but there is no explicit guidance on when to prefer this tool over siblings like get_bandwidth_stats or get_system_info, nor are any alternatives or exclusions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_devicesA
List all smart home actors and network devices connected to the FRITZ!Box
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. The word 'all' conveys comprehensive scope and the two categories add context, but it does not disclose authentication requirements or the return format, which would be expected without an output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It states the exact scope and resource compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity (no parameters, no output schema), the description is minimally viable but lacks information about the structure of returned device data and how it might be used with sibling tools. Without an output schema, more detail on return values would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties, so the description need not explain parameters. With no parameters, a baseline of 4 is appropriate, and the description adequately implies that no inputs are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly uses the verb 'list' and specifies the resource as 'smart home actors and network devices connected to the FRITZ!Box', distinguishing it from sibling tools that control devices or retrieve stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. It simply states what it does without mentioning sibling tools or possible exclusions, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reconnect_wanA
Force a WAN reconnect to obtain a new external IP address
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does not disclose that forcing a WAN reconnect is disruptive (causing temporary disconnection), may require permissions, or might not always yield a new IP. The word 'force' hints at abruptness but leaves significant side effects unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the action and outcome. Every word earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a disruptive action tool with no annotations and no output schema, the description lacks essential context about consequences (e.g., internet downtime), failure modes, or what response to expect. It is not complete enough for safe invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema is trivially complete. The description adds no parameter details, which is acceptable given no params exist. Baseline for 0 params is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Force a WAN reconnect') and the desired outcome ('obtain a new external IP address'). It is specific and distinguishes this tool from siblings like get_wan_status, which is read-only.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'to obtain a new external IP address' implies the use case, but there is no explicit guidance on when to use this vs. alternatives, nor any mention of prerequisites or exclusions. It provides implied usage but lacks clear context compared to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_thermostatA
Set the target temperature on a FRITZ!DECT thermostat
| Name | Required | Description | Default |
|---|---|---|---|
| ain | Yes | Actor Identification Number of the thermostat | |
| temperature | Yes | Target temperature in °C (8.0–28.0), or 'ON' (boost) / 'OFF' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It states 'Set' implying a mutation, but does not disclose any side effects, permission requirements, reversibility, or what happens if the thermostat is unreachable. This is a significant gap for a mutating tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that clearly conveys the tool's purpose without any redundant or extraneous information. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter with a well-defined schema, the description is adequate but not complete. It lacks usage guidance, behavioral transparency, and any information about return values (no output schema). The schema covers parameters well, but the overall context is minimal.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already clearly documented in the input schema (ain as Actor Identification Number, temperature with range and ON/OFF). The description adds no additional meaning beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Set') and the specific resource ('target temperature on a FRITZ!DECT thermostat'). It distinguishes itself from sibling tools like toggle_switch and get_device_stats by explicitly targeting thermostats and temperature setting.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The intended usage is implied by the verb and resource: use this tool when you want to set a thermostat's target temperature. However, no explicit guidance is given about when to use this vs. alternatives like toggle_switch, nor are any exclusions or prerequisites mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_guest_wifiA
Enable or disable the FRITZ!Box guest WiFi network
| Name | Required | Description | Default |
|---|---|---|---|
| enable | Yes | true = enable, false = disable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full behavioral burden. It discloses the core state-change behavior (enable or disable) but does not mention potential side effects such as disconnecting connected devices or a brief network interruption. For a simple boolean toggle, this is minimally acceptable but lacks deeper transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single succinct sentence that gets straight to the point with no redundant words. It effectively front-loads the action and target, earning a perfect score for conciseness and structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description adequately covers the purpose and effect. It lacks explicit mention of the return value or error handling, but the complexity is low enough that the current description is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents the only parameter 'enable' with a clear description ('true = enable, false = disable'). The tool description adds no additional meaning beyond the schema, so the baseline of 3 applies given 100% schema description coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Enable or disable') and the exact resource ('FRITZ!Box guest WiFi network'). It distinguishes itself from the broader sibling 'toggle_switch' by targeting a specific feature, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: this tool is for controlling the guest WiFi network. However, it does not explicitly state when to use this tool over alternatives or mention any exclusion criteria. The usage context is clear but not formally guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toggle_switchA
Turn a FRITZ!DECT smart plug on or off
| Name | Required | Description | Default |
|---|---|---|---|
| ain | Yes | Actor Identification Number of the switch | |
| state | Yes | true = on, false = off |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for disclosing behavior. It clearly indicates a mutating action, but it does not mention any prerequisites, side effects, error handling, or reversibility. For a state-changing tool, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the complete purpose without any redundant or vague wording. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity, two well-documented parameters, and no notable output schema, the description covers the core action and target device. It lacks information about return values or failure modes, but these are not critical for such a straightforward toggle operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides thorough descriptions for both parameters (ain and state) with 100% coverage. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Turn') and resource ('FRITZ!DECT smart plug') and explicitly states the action ('on or off'). This clearly distinguishes it from sibling tools like toggle_guest_wifi or set_thermostat, which target different devices or actions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for controlling smart plugs, but it provides no explicit guidance on when to use this tool versus alternatives. There is no mention of exclusions or prerequisites, so usage is inferred rather than stated.
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.
10 tool updates
v0.1.0- First observed
get_bandwidth_stats - First observed
get_device_log - First observed
get_device_stats - First observed
get_system_info - First observed
get_wan_status - First observed
list_devices - First observed
reconnect_wan - First observed
set_thermostat - First observed
toggle_guest_wifi - First observed
toggle_switch
TDQS
Scored across 10 tools
Each tool targets a distinct resource and action: listing devices, setting thermostats, toggling switches, retrieving stats, system info, WAN status, bandwidth, guest WiFi, logs, and reconnect. No two tools overlap in purpose; even get_device_stats and get_device_log are clearly differentiated as statistics vs. log entries.
All tool names follow a consistent verb_noun pattern with imperative verbs (list, set, toggle, get, reconnect). No mixed conventions like camelCase or vague verbs, making the set predictable and easy to navigate.
With 10 tools, the server is well-scoped for managing a FRITZ!Box. It covers both smart home device control (thermostats, switches) and network administration (WAN, WiFi, logs, connectivity) without unnecessary bloat or missing essential operations.
The tool surface covers the core lifecycle for both domains: listing, controlling, and retrieving information. Minor gaps exist, such as no explicit 'get current state' for thermostats/switches (though list_devices and stats may cover this) and no advanced configuration options like firmware updates, but these are not critical for typical usage.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol (MCP) server for Selise Blocks Cloud integration
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for seamless integration with peripheral devices connected to your computer. Control, monitor, and manage hardware devices through a unified API.5MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that bridges MCP clients with local LLM services, enabling seamless integration with MCP-compatible applications through standard tools like chat completion, model listing, and health checks.-
- AlicenseAqualityCmaintenanceA Model Context Protocol (MCP) server for Firebird databases intended for local use. It reads connection details from FlameRobin's fr_databases.conf so no extra configuration is needed — if you have FlameRobin set up with your Firebird databases, this server works out of the box.292MIT
- AlicenseCqualityAmaintenanceA spec-driven MCP server that exposes the entire Freebox OS API as ~230 MCP tools, enabling control of your Freebox Server (LAN, wifi, PVR, VPN, etc.) through any MCP client.100MIT