Skip to main content
Glama

fritzbox-mcp

MCP-Server (stdio) für die AVM FRITZ!Box. Er spricht TR-064 über fritzconnection und liefert einem MCP-Client wie Claude Code Mesh, WLAN, Geräte, Protokoll, DSL, Anrufliste und Anrufbeantworter als lesbaren deutschen Text.

Standardmäßig ist er rein lesend. Schreibende Aktionen (z. B. Gast-WLAN, WLAN-Kanal, Neustart) gibt es nur, wenn du sie per Umgebungsvariable einschaltest, und jede läuft in zwei Schritten: planen, dann mit Token ausführen.

Was er kann

Werkzeug

Liefert

zugang_pruefen

Modell, FRITZ!OS und Rechte des Box-Benutzers

mesh_uebersicht

Alle Mesh-Zugangspunkte: Rolle, Uplink-Raten, Kanal/Bandbreite/Auslastung je Funkteil, Zahl der Clients

geraet

Wo hängt ein Gerät? Suche nach Name, IP oder MAC: Zugangspunkt, Band, Signal, Raten

wlan_status

WLAN-Funkteile (2,4 GHz, 5 GHz, Gast): an/aus, SSID, Kanal, Autokanal, Geräte

protokoll

Box-Protokoll, neueste zuerst; Filter seit (ISO-Datum/-Zeit), stichwort, limit

dsl_status

DSL-Leitung: Sync, Maximalrate, Marge, Dämpfung, CRC/FEC

hosts

Bekannte Geräte mit IP, MAC, aktiv/inaktiv, Anschlussart; Filter nur_aktive, name, limit

anrufliste

Anrufe; Filter art (eingehend, verpasst, ausgehend, blockiert, AB), tage, limit

anrufbeantworter

Status und Nachrichten (Zeit, Anrufer, Dauer, neu/gehört). Markiert nichts

anrufbeantworter_audio

Lädt eine AB-Nachricht als WAV nach FRITZ_DOWNLOAD_DIR. Markiert nichts als gehört

Related MCP server: UniFi MCP Server

Installation

Voraussetzung: Python ab 3.11.

pipx install git+https://github.com/Schimmilab/fritzbox-mcp-server
# oder ohne Installation:
uvx --from git+https://github.com/Schimmilab/fritzbox-mcp-server fritzbox-mcp

In Claude Code registrieren:

claude mcp add fritzbox -s user \
  -e FRITZ_USER=mcp-lesen -e FRITZ_PASSWORD=... \
  -- fritzbox-mcp

Bei uvx: -- uvx --from git+https://github.com/Schimmilab/fritzbox-mcp-server fritzbox-mcp.

Anderer MCP-Client (JSON):

{
  "mcpServers": {
    "fritzbox": {
      "command": "fritzbox-mcp",
      "env": { "FRITZ_USER": "mcp-lesen", "FRITZ_PASSWORD": "..." }
    }
  }
}

Fehlt FRITZ_USER oder das Passwort, beendet sich der Server mit einer deutschen Fehlermeldung auf stderr (Exit-Code 2).

Box vorbereiten

  1. In der Box einen eigenen Benutzer anlegen (System → FRITZ!Box-Benutzer), nicht dein Admin-Konto.

  2. Heimnetz → Netzwerk → Netzwerkeinstellungen → „Zugriff für Anwendungen zulassen“ (TR-064) einschalten.

Rechte:

  • Nur lesen: Empfohlen ist ein Benutzer ohne Schreibrechte. zugang_pruefen weist darauf hin, wenn der Benutzer volle Rechte hat, der Server aber nur liest.

  • Schreiben: Der Benutzer braucht „FRITZ!Box Einstellungen“ (intern BoxAdmin). Mit FRITZ_WRITE=1 ohne dieses Recht warnt zugang_pruefen.

  • Welches einzelne Lesewerkzeug welches Recht minimal braucht (z. B. Telefonie für Anrufliste und Anrufbeantworter), ist nicht systematisch geprüft. Teste mit deinem Benutzer; ein fehlendes Recht zeigt sich als Fehlermeldung des Werkzeugs. Für Telefonbuch, Anrufbeantworter und Rufumleitung ist das Recht „Telefonie“ naheliegend, aber nicht gegengeprüft.

Konfiguration

Alles über Umgebungsvariablen.

Variable

Bedeutung

Standard

FRITZ_ADDRESS

Adresse der Box

fritz.box

FRITZ_USER

Box-Benutzer (Pflicht)

–

FRITZ_PASSWORD

Passwort des Benutzers (Pflicht, außer Keychain-Fallback)

–

FRITZ_KEYCHAIN_SERVICE

Nur macOS: Name eines Schlüsselbund-Eintrags (Account = FRITZ_USER), aus dem das Passwort gelesen wird, wenn FRITZ_PASSWORD leer ist

–

FRITZ_DOWNLOAD_DIR

Zielordner für anrufbeantworter_audio; ohne ihn kein Audio-Download

–

FRITZ_WRITE

Schaltet 🟢- und 🟡-Schreibaktionen frei

aus

FRITZ_WRITE_CRITICAL

Schaltet zusätzlich 🔴-Aktionen frei; wirkt nur zusammen mit FRITZ_WRITE

aus

Als „an“ gelten 1, true, yes (Groß-/Kleinschreibung egal); alles andere ist aus. Das Zeitlimit für Box-Aufrufe ist fest 10 s.

Schreiben

Aus. Ohne FRITZ_WRITE existieren die Schreibwerkzeuge gar nicht erst.

Pro Aktion gibt es zwei Werkzeuge: <aktion>_planen und <aktion>_ausfuehren.

  1. Planen: liest den echten Ist-Zustand der Box, zeigt Stufe, Folge, Vorher und Nachher und gibt ein Freigabe-Token aus. Geschrieben wird nichts.

  2. Ausführen: mit Token und denselben Parametern. Das Token ist einmalig, 5 Minuten gültig und gebunden an Aktion, Parameter und die Identität des Ziels (z. B. die MAC hinter einer IP). Hat sich das Ziel seit dem Plan geändert, wird abgelehnt.

  3. Rücklesen: Der Server meldet den Ist-Zustand aus der Box. Ist der nach dem Anwenden nicht lesbar (z. B. beim Neustart), steht dort „Ist-Zustand nicht lesbar“, kein erfundener Erfolg.

Weitere Schutzregeln im Code:

  • Eine Internetsperre für die IP des Rechners, auf dem der Server läuft, wird abgelehnt.

  • Telefonbuch: nur neue Einträge; bestehende werden nie überschrieben.

  • Unbekannte Ziele (MAC, IP, Nachricht) lehnt schon der Plan ab, bevor ein Token entsteht.

  • 🔴-Pläne beginnen mit einem Warnblock.

Aktionen

🟢 harmlos (FRITZ_WRITE)

Aktion

Parameter

Folge

wake_on_lan

mac

Das Gerät wird per Netzwerk eingeschaltet.

gast_wlan

an

Gäste-WLAN wird ein- bzw. ausgeschaltet; verbundene Gäste fliegen beim Ausschalten raus.

ab_nachricht_gehoert

ab, nachricht, gehoert

Die Nachricht wird als gehört/ungehört markiert (Anzeige am Telefon ändert sich).

🟡 spürbar (FRITZ_WRITE)

Aktion

Parameter

Folge

wlan_kanal

band, kanal

Alle WLAN-Geräte dieses Bands trennen sich kurz und verbinden neu; Mesh-Repeater folgen dem Kanal.

wlan_funk_an

band

Das Funkband wird eingeschaltet; Geräte dieses Bands können sich wieder verbinden.

anrufbeantworter

ab, an

Der Anrufbeantworter nimmt Anrufe an bzw. nicht mehr an.

rufumleitung

umleitung, an

Anrufe werden umgeleitet bzw. nicht mehr umgeleitet.

internet_sperre

ip, sperren

Das Gerät verliert bzw. erhält den Internetzugang (LAN bleibt).

telefonbuch_eintrag

telefonbuch, name, nummer

Ein neuer Telefonbuch-Eintrag wird angelegt. Bestehende Einträge werden nie überschrieben. Nicht umkehrbar per Server.

🔴 kritisch (FRITZ_WRITE und FRITZ_WRITE_CRITICAL)

Aktion

Parameter

Folge

wlan_funk_aus

band

Das Funkband wird ausgeschaltet; alle Geräte dieses Bands verlieren die Verbindung. Läuft der Server selbst über dieses Band, trennt er sich damit selbst (zurück nur an der Box oder per LAN).

neustart

–

Die FRITZ!Box startet neu: Internet, WLAN, Telefonie und Smart-Home-Geräte sind ca. 2–4 min weg, laufende Telefonate brechen ab.

neu_verbinden

–

Die Internetverbindung wird getrennt und neu aufgebaut: neue öffentliche IP, laufende Verbindungen, VPNs und Telefonate brechen ab.

ab_nachricht_loeschen

ab, nachricht

Die Anrufbeantworter-Nachricht wird gelöscht. Nicht umkehrbar.

Als band gilt "2,4" oder "5".

⛔ Das Token ist keine Freigabe durch einen Menschen

Das Token bindet nur Parameter und Ziel. Es beweist nicht, dass jemand zugestimmt hat; ein Modell kann Plan und Ausführung direkt hintereinander aufrufen. Die eigentliche Sperre ist die Werkzeug-Berechtigung deines MCP-Clients: Setze *_ausfuehren-Werkzeuge nie auf eine Allowlist und aktiviere dafür kein Auto-Approve. Der Client muss bei jedem Ausführen nachfragen.

Reichweite: was jeder Schalter dem Modell erlaubt

Schalter

Was das Modell kann

Schlimmster Fall

ohne FRITZ_WRITE (Standard)

nur lesen (Mesh, WLAN, Hosts, Protokoll, DSL, Anrufliste, AB-Liste; mit FRITZ_DOWNLOAD_DIR AB-Aufnahmen als WAV)

Offenlegung: wer wann angerufen hat, welche Geräte im Haus sind, Inhalt von Sprachnachrichten. Keine Änderung an der Box.

FRITZ_WRITE=1

🟢 WoL, Gast-WLAN, AB-Nachricht gehört · 🟡 WLAN-Kanal, Funkband an, AB an/aus, Rufumleitung an/aus, Internetsperre je Gerät, neuer Telefonbucheintrag

Gerät ohne Internet, AB nimmt nicht mehr an, Anrufe umgeleitet, irreführender Telefonbucheintrag. Umkehrbar, heilt aber nicht von selbst.

+ FRITZ_WRITE_CRITICAL=1

🔴 Funkband aus, Neustart, Neuverbinden, AB-Nachricht löschen

WLAN weg (ggf. auch für den Server), 2–4 min Totalausfall, neue öffentliche IP, unwiederbringlich gelöschte Sprachnachricht.

Das Ausschalten eines Funkbands (wlan_funk_aus) ist bewusst 🔴: Es kann den Server selbst abhängen, und zurück geht es dann nur an der Box oder per LAN. Das Einschalten (wlan_funk_an) ist 🟡.

Bewusste Entscheidungen

  • Private Adressen in den Fixtures: 192.168.x.x und andere private IPv4-Adressen (RFC 1918, nicht routbar) bleiben in tests/fixtures unverändert, damit die Netzstruktur testbar bleibt. Öffentliche Adressen, MACs, Rufnummern, Namen und Anbieterkennungen sind pseudonymisiert.

  • Kein TLS zur Box (noch): fritzconnection schaltet die Zertifikatsprüfung ab. Session-ID und WAV-Download laufen im LAN als unverschlüsseltes HTTP. Betreibe den Server nur in einem Netz, dem du traust.

  • Box-Texte sind Daten: Namen, SSIDs und Protokollzeilen werden vor der Ausgabe einzeilig gemacht, von Steuerzeichen und führenden Markdown-Markern befreit und gekürzt; die Server-Instruktionen nennen sie ausdrücklich Daten, keine Anweisungen. Das ist eine Schutzschicht gegen Prompt-Injection, keine Garantie.

Datenschutz

Was das Modell zu sehen bekommt, ist das, was die Werkzeuge ausgeben:

  • Anrufliste mit Namen und Rufnummern, Anrufbeantworter-Metadaten (Zeit, Anrufer, Dauer), Geräteliste mit Namen, IPs und MACs, Protokoll, WLAN-SSIDs.

  • Das Passwort und Session-IDs (sid) werden aus jeder Ausgabe und jeder Fehlermeldung geschwärzt.

  • AB-Audio wird nur lokal in FRITZ_DOWNLOAD_DIR gespeichert; das Modell bekommt den Dateipfad und die Größe, nicht den Inhalt. Der Ordner wird mit Modus 0700 angelegt, Dateien mit 0600. Dateinamen werden aus Datum, Nummer und Index gebildet, nie aus Pfaden der Box. Download-Links zu fremden Hosts werden abgelehnt, die Größe ist auf 20 MB begrenzt.

  • Nachrichten werden dabei nicht als gehört markiert.

Der Server kontaktiert nur die konfigurierte Box.

Entwicklung

python -m venv .venv && .venv/bin/pip install -e '.[dev]'
.venv/bin/pytest -q
  • Die Tests laufen offline gegen anonymisierte Aufnahmen einer echten Box in tests/fixtures.

  • Eigene Aufnahme: FRITZ_USER=... FRITZ_PASSWORD=... python tools/record_fixtures.py (nur lesend). tools/anonymize.py ersetzt MACs (HMAC-Pseudonyme mit Zufallsgeheimnis pro Lauf), Rufnummern, Namen, SSIDs, öffentliche IPs und Zugangsdaten.

  • tests/test_fixtures_clean.py ist ein unabhängiger Wächter mit Allowlist. Er muss grün sein, bevor Fixtures committet werden.

  • CI (GitHub Actions) läuft auf Ubuntu mit Python 3.11 und 3.13.

Getestet mit

FRITZ!Box 7690, FRITZ!OS 8.50, fritzconnection 1.15.1, FastMCP 3.4. Andere Modelle und Versionen sind nicht geprüft.

Lizenz

MIT, siehe LICENSE.

Available Tools

10 tools
anrufbeantworterB

Anrufbeantworter: Status und Nachrichten (Zeit, Anrufer, Dauer, neu/gehört). Markiert nichts.

NameRequiredDescriptionDefault
abNo

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It does establish the non-mutating contract via 'Markiert nichts' and enumerates the returned fields, but says nothing about permissions, pagination, or what the single parameter controls.

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

Conciseness4/5

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

A single compact sentence with the resource front-loaded and the field list in parentheses; nothing is padded. It is terse to the point of omitting the one parameter, but no wording is wasted.

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?

Because an output schema exists, the description needn't explain return values, which offsets some of its brevity. However, for a tool with zero annotations and an undocumented input parameter, more behavioral and parameter context was warranted.

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

Parameters2/5

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

The one parameter 'ab' has 0% schema description coverage and is not mentioned in the description at all, so the agent cannot tell whether it is an offset, a mailbox index, or a filter. This is the definition's largest gap given the parameter is optional and defaults to 0.

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?

Names the resource (Anrufbeantworter) and states it returns status plus messages with the concrete fields Zeit, Anrufer, Dauer, neu/gehört. That is specific enough to distinguish it from anrufliste, though it never explicitly rules out the audio sibling anrufbeantworter_audio.

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?

'Markiert nichts' functions as a partial exclusion, hinting at a counterpart that does mark messages as heard, but no sibling is named and no condition for choosing this tool over anrufliste or anrufbeantworter_audio is given. Usage is only implied by the read-only framing.

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

anrufbeantworter_audioB

Lädt eine AB-Nachricht als WAV nach FRITZ_DOWNLOAD_DIR. Markiert nichts als gehört.

NameRequiredDescriptionDefault
abNo
nachrichtYes

Output Schema

NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the whole behavioral burden. It usefully discloses that a file is written to FRITZ_DOWNLOAD_DIR and that the message's "heard" state is NOT changed, but says nothing about permissions or remote-access prerequisites, filename/path resolution, or what happens if the message index is invalid.

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

Conciseness5/5

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

Two short sentences, purpose front-loaded, with the notable non-side-effect placed second. No filler or repetition.

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

Completeness3/5

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

An output schema exists, so return values need not be described, and the tool is low-complexity with only two parameters. However, for a tool that writes to disk, the undocumented 'ab' parameter and absent error/prerequisite information leave meaningful gaps.

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

Parameters2/5

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

Schema description coverage is 0%, so the description had to compensate and largely does not. "Nachricht" is inferable from "AB-Nachricht", but the 'ab' parameter (which answering-machine mailbox, default 0) is never mentioned, leaving a required-shaped integer completely opaque.

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?

States a specific verb ("Lädt") plus resource ("AB-Nachricht als WAV") and the destination (FRITZ_DOWNLOAD_DIR), which is far more informative than the tool name alone. It does not explicitly distinguish itself from the sibling 'anrufbeantworter' (listing) tool, so it stops short of a 5.

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

Usage Guidelines3/5

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

Usage is only implied: fetch a message's audio. The sentence "Markiert nichts als gehört" hints that a different tool/step is needed to mark as heard, but no alternative is named and no preconditions are stated.

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

anruflisteC

Anrufliste. art: eingehend | verpasst | ausgehend | blockiert | AB. tage: nur die letzten n Tage.

NameRequiredDescriptionDefault
artNo
tageNo
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden, and it discloses almost nothing: neither read-only/safety character, nor whether results are ordered or paginated, nor what the default limit of 30 implies. Only the 'letzte n Tage' recency constraint hints at behavior. For a tool with zero annotation coverage this is a substantial gap.

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

Conciseness3/5

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

Two telegraphic fragments carry a fair amount of information with no filler, and the filter details are front-loaded. But the leading 'Anrufliste.' merely restates the tool name and the fragmentary, punctuation-light style makes the key/value mapping harder to parse than a single clean sentence would.

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?

An output schema exists, so return values need not be described, and all three parameters are optional, keeping the call surface simple. Still, the undocumented 'limit' parameter, its default of 30, and the nullable 'art'/'tage' semantics leave real gaps for an agent deciding how to control result size and filtering.

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

Parameters3/5

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

Schema description coverage is 0%, and the description genuinely adds the allowed values for 'art' (eingehend | verpasst | ausgehend | blockiert | AB), which the schema only types as a bare string. However, 'limit' (default 30) is completely undocumented and the interaction between 'art' and 'tage' plus what a null 'art' means are left unstated, so it only partly compensates for the coverage gap.

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 names the resource ('Anrufliste') and enumerates the call categories it covers (eingehend, verpasst, ausgehend, blockiert, AB), which tells an agent this is a call-history listing with type-based scoping. It is terse and noun-only, and it does not distinguish the tool from the closely related sibling anrufbeantworter, but the scope is inferable without opening the schema.

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

Usage Guidelines2/5

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

There is no statement of when to use this tool versus the siblings anrufbeantworter, anrufbeantworter_audio, or protokoll, even though 'AB' in the type list clearly overlaps with the answering-machine tools. Usage is only implied by the resource name; no prerequisites, exclusions, or alternatives are given.

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

dsl_statusC

DSL-Leitung: Sync, Maximalrate, Marge, Dämpfung, CRC/FEC.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are supplied, so the description carries the full disclosure burden, and it discloses almost nothing behavioral. It does not state that this is a read-only query, whether it requires an established DSL connection, whether the values are instantaneous or averaged, or how it behaves during a sync loss — all relevant for a line-status tool.

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

Conciseness3/5

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

It is a single short fragment with no wasted words, but it is terse to the point of under-specification — a colon-delimited keyword list rather than a sentence. Front-loading the resource is good, but the phrasing reads like a label, not guidance.

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?

A zero-parameter read with an output schema means the return values need no explanation, so the bar is low and the field list is largely sufficient for calling it. Still, with no annotations and no usage framing, an agent gets no signal about when this tool is the right pick among the ten siblings.

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 takes zero parameters, so there is nothing for the description to clarify beyond the schema; baseline 4 applies. The listed metric names are context about the return payload rather than parameter meaning, which is a reasonable use of the space.

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

Purpose3/5

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

The description is a noun phrase listing the DSL line's reported metrics (Sync, Maximalrate, Marge, Dämpfung, CRC/FEC) rather than a verb+resource statement, so the action (fetch current status) must be inferred from the tool name. It does, however, identify the resource and distinguish the content from siblings like wlan_status or mesh_uebersicht by naming DSL-specific fields.

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?

There is no indication of when to use this tool instead of zugang_pruefen, protokoll, or the other status-oriented siblings. No prerequisites, no exclusions, and no note that this reports live link metrics rather than diagnostics history.

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

geraetA

Wo hängt ein Gerät? Suche nach Name, IP oder MAC: Zugangspunkt, Band, Signal, Raten.

NameRequiredDescriptionDefault
sucheYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/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. It implicitly signals a read-only lookup and names the fields returned, but says nothing about matching semantics (exact vs. partial, case sensitivity), behavior on zero matches, or any permission requirements. Adequate for a low-risk read, but incomplete for a no-annotation tool.

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

Conciseness5/5

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

Two short, front-loaded sentences with zero filler: the question establishes intent, the colon list enumerates search keys and result fields. Nothing could be removed without losing information.

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

Completeness4/5

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

For a one-parameter lookup with an output schema (so return structure needn't be explained), the description covers intent, accepted input formats and a hint at returned fields. The remaining gap is match semantics and not-found behavior, which is minor at this complexity level.

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?

Schema description coverage is 0% and the single parameter 'suche' is an undocumented string. The description compensates well by defining the accepted value space: name, IP address, or MAC address. It stops short of stating whether partial or fuzzy matches are accepted.

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?

States a specific question ('Wo hängt ein Gerät?') and the lookup keys (Name, IP, MAC) plus what is returned (Zugangspunkt, Band, Signal, Raten). That is a concrete verb+resource pair an agent can act on. It does not explicitly distinguish itself from the sibling 'hosts', which likely also enumerates devices, so sibling differentiation is left to inference.

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?

Usage is only implied by the question form: use this when you need to locate a specific device on the network. There is no explicit when-to-use/when-not guidance and no mention of 'hosts', 'wlan_status' or 'mesh_uebersicht' as alternatives for listing or checking connectivity.

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

hostsC

Bekannte Geräte der Box mit IP, MAC, aktiv/inaktiv, Anschlussart.

NameRequiredDescriptionDefault
nameNo
limitNo
nur_aktiveNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description only weakly implies a read-only inventory operation. It does not clarify whether device state is live or cached, whether inactive devices are included by default, or whether results can be truncated.

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

Conciseness4/5

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

The single compact phrase is easy to scan and puts the resource and principal data fields first, with no filler. Its brevity is efficient, although it leaves several operationally useful details unstated.

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?

The output schema reduces the need to document return fields, and the tool itself is relatively simple. Nevertheless, the complete absence of parameter documentation, behavioral context, and sibling differentiation leaves substantial gaps for correct selection and invocation.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not explain any of the three parameters. In particular, it never states that name filters devices, nur_aktive restricts results to active devices, or limit caps the result count; the mention of aktiv/inaktiv describes device data rather than filter behavior.

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

Purpose4/5

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

The description clearly identifies an inventory of known devices on the box and specifies IP, MAC, active/inactive state, and connection type as the available data. It does not explicitly state a listing verb or differentiate this overview from the sibling tools geraet and mesh_uebersicht.

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?

Usage is implicitly suggested when an agent needs an overview of known network devices and their connection details. There is no explicit guidance on when to choose hosts over geraet for an individual device or mesh_uebersicht for mesh topology.

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

mesh_uebersichtA

Alle Mesh-Zugangspunkte: Rolle, Uplink-Raten, Kanal/Bandbreite/Auslastung je Funkteil, Zahl der Clients.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden; it does imply a passive read by describing only returned attributes, but it never says the call is non-destructive or side-effect free. Nothing about what happens when no mesh nodes exist, whether data is cached/polled, or any rate/permission constraints is disclosed.

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

Conciseness5/5

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

A single dense sentence front-loads the resource and then lists the returned facets without filler. Every clause maps to real content an agent would care about.

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

Completeness4/5

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

For a zero-argument read tool with an output schema and no annotations, the description covers scope and the shape of the result, which is essentially enough to call it. The only shortfall is the missing routing hint relative to wlan_status and zugang_pruefen.

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 takes zero parameters, which is the baseline-4 case; the schema is also fully described. The description correctly adds no parameter guidance because none is needed, and instead spends its words on the reported fields.

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?

Names a specific resource scope ('Alle Mesh-Zugangspunkte') and enumerates exactly what is reported per access point (role, uplink rates, channel/bandwidth/utilization per radio, client count), so an agent can tell this is the mesh-topology inventory. It does not, however, distinguish itself from the nearby wlan_status or geraet siblings, and the verb ('list/return') stays implicit.

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?

There is no statement of when to reach for this over wlan_status (single-radio WLAN state) or zugang_pruefen (access check), and no preconditions or exclusions. The agent must infer usage purely from the noun phrase.

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

protokollC

Box-Protokoll (neueste zuerst). seit: ISO-Datum/-Zeit, stichwort: Textfilter.

NameRequiredDescriptionDefault
seitNo
limitNo
stichwortNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.5/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden. It discloses ordering (newest first), which is genuinely useful, but says nothing about read-only nature, pagination behavior, the default limit of 50, retention window, or result size.

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

Conciseness3/5

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

Compact and front-loaded with the resource and ordering first. But the terseness tips into under-specification rather than efficiency; the fragment style leaves the agent to guess at semantics.

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?

An output schema exists, so return values needn't be explained. Still, a 3-parameter tool with zero annotations and zero schema coverage deserves more than one fragment — the limit parameter and the overall read semantics are undocumented.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add real meaning for two of three parameters ("seit" is an ISO date/time bound, "stichwort" is a text filter), but "limit" is never mentioned, leaving the truncation behavior opaque.

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

Purpose3/5

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

Names the resource ("Box-Protokoll") and its ordering ("neueste zuerst"), which lets an agent distinguish it from siblings like dsl_status or anrufliste. However, there is no verb — it never says it lists or returns log entries — so the purpose is implied rather than stated.

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

Usage Guidelines2/5

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

No when-to-use guidance, no exclusions, and no mention of alternatives among the many sibling status tools. The agent must infer that this is the router event log rather than a device or call log.

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

wlan_statusA

WLAN-Funkteile der Box (2,4 GHz, 5 GHz, Gast): an/aus, SSID, Kanal, Autokanal, Geräte.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/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. It discloses the scope of data covered (bands, guest network, on/off, SSID, channel, auto-channel, connected devices), which is useful behavioral context, but it does not state that the operation is read-only, nor does it mention permissions, side effects, or rate limits.

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

Conciseness4/5

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

The description is a single compact phrase with the resource front-loaded and no wasted words. It is efficient but fragmentary, lacking a verb that would make the intent immediately unambiguous.

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

Completeness4/5

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

For a zero-parameter status tool with an output schema, the description is largely sufficient: it scopes which WLAN aspects are covered and notes guest-network and device coverage. The main gap is the absence of any read-only or safety framing, which matters more because no annotations are present.

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

Parameters4/5

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

The tool has zero parameters, so the baseline of 4 applies. The description adds no parameter meaning because none exist, which is appropriate.

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 names a specific resource – the box's WLAN radio components across 2.4 GHz, 5 GHz and guest networks – and enumerates the attributes covered (on/off, SSID, channel, auto-channel, devices). It is clearly distinguishable from siblings like dsl_status or mesh_uebersicht by resource, though it lacks an explicit verb such as 'returns' or 'reads'.

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?

Usage is only implied: the field list suggests it should be called to inspect WLAN status, but there is no explicit when-to-use guidance, no prerequisites, and no routing against related siblings such as dsl_status or mesh_uebersicht.

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

zugang_pruefenA

Modell, FRITZ!OS und Rechte des Box-Benutzers prüfen.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden; it does disclose what is inspected (model, FRITZ!OS, user rights), which signals a non-mutating inspection. However, it says nothing about whether authentication is required, what a failed or insufficient-rights result looks like, or any side effects — the output schema covers the return shape but not the failure semantics.

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?

A single front-loaded sentence fragment with zero filler, listing exactly the three things checked. Nothing could be removed without losing information.

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

Completeness4/5

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

The tool is simple (zero parameters), an output schema exists, and the description enumerates the returned subject matter, so an agent knows what it gets back. The only shortfall is the absence of guidance on when to invoke it and how to interpret insufficient permissions.

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 takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the sentence adds no parameter noise and correctly implies the tool operates on the current session's box.

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 gives a specific verb ('prüfen') with three concrete targets: box model, FRITZ!OS version, and the box user's permissions. This clearly separates it from the sibling tools (mesh_uebersicht, dsl_status, wlan_status, hosts, anrufliste), none of which report device model, firmware version, or access rights.

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?

There is no when-to-use guidance, no precondition, and no named alternative. The agent must infer that this is a pre-flight check before performing privileged operations, and nothing states what to do if the check fails.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updatesv0.1.0
    • First observedanrufbeantworter
    • First observedanrufbeantworter_audio
    • First observedanrufliste
    • First observeddsl_status
    • First observedgeraet
    • First observedhosts
    • First observedmesh_uebersicht
    • First observedprotokoll
    • First observedwlan_status
    • First observedzugang_pruefen

TDQS

B3.2/5.0

Scored across 10 tools

Disambiguation4/5

Most tools have clearly distinct targets (DSL, WLAN, mesh, log, calls, answering machine). The main overlap is between 'geraet' (locate a single device) and 'hosts' (list all known devices with IP/MAC), and secondarily 'wlan_status' vs 'mesh_uebersicht' since mesh reports per-radio data too; descriptions mostly disambiguate these.

Naming Consistency3/5

Naming follows mainly German compound nouns (dsl_status, wlan_status, mesh_uebersicht, anrufliste) but mixes in a bare singular ('geraet') and a verb-first form ('zugang_pruefen'), plus an inflected compound ('anrufbeantworter_audio'). It is readable and semi-predictable but not a single consistent convention.

Tool Count5/5

10 tools is well-scoped for a FRITZ!Box diagnostic server; each tool maps to a distinct subsystem (access, DSL, WLAN, mesh, devices, log, telephony) and none feel redundant.

Completeness4/5

The surface covers the main diagnostic domains: connectivity/access, line and radio status, device inventory/lookup, log, and telephony including audio retrieval. Gaps are minor and mostly read-only limitations (e.g. no way to mark AB messages heard or perform actions like reboots/WLAN toggles), which are documented rather than dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables interaction with Firewalla network security devices for network monitoring, device management, traffic analysis, and security rule configuration through MCP tools.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables MCP-capable clients to interact with UniFi Site Manager and UniFi Dream Machine telemetry, providing tools for client details, ISP metrics, and more.
    4
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server for interfacing with AVM FRITZ!Box routers. Control smart home devices, monitor network status, and administer your router through any MCP-compatible client.
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables MCP clients to query homelab infrastructure such as Proxmox VE, NetBox, systemd services, Grafana, InfluxDB, AdGuard Home, ping logs, and configured HTTP JSON endpoints through read-only tools.
    AGPL 3.0