Skip to main content
Glama
cyanheads

toolkit-mcp-server

by cyanheads

Version License Docker MCP SDK npm TypeScript Bun

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

Öffentlich gehosteter Server: https://toolkit.caseyjhand.com/mcp


Tools

Sieben Tools. Fünf sind dauerhaft aktiv und benötigen keine Konfiguration – reine Rechenwerkzeuge plus eine SSRF-freie IP-Suche. Zwei prüfen den Server-Host und bleiben so lange ohne Eintrag in tools/list, bis Sie sie aktivieren; sie sind fail-closed.

Tool

Description

toolkit_hash_value

Erzeugt einen kryptografischen Digest (sha256/sha512/sha1/md5) oder vergleicht einen Wert in konstanter Zeit mit einem erwarteten Digest.

toolkit_generate_id

Erzeugt kryptografisch zufällige Bezeichner – UUIDv4, UUIDv7 oder ULID – einzeln oder in Stapeln bis zu 1000.

toolkit_generate_qr

Kodiert Text oder eine URL in einen QR-Code als SVG-Markup, base64-PNG oder eine im Terminal darstellbare Zeichenfolge.

toolkit_encode_value

Kodiert oder dekodiert einen Wert in base64, base64url, hex oder URL-Prozentkodierung, in beide Richtungen.

toolkit_geolocate_ip

Löst eine öffentliche IP oder einen Hostnamen in geografische und Netzwerk-Metadaten auf – Land, Stadt, Koordinaten, ASN, Zeitzone.

toolkit_check_network

Per Flag freigeschaltet, standardmäßig deaktiviert. Schreibgeschützte Netzwerkdiagnosen vom Server-Host – Ping, Traceroute, TCP-Verbindung oder Egress-IP-Erkennung.

toolkit_check_system

Per Flag freigeschaltet, standardmäßig deaktiviert. Meldet einen Aspekt des Systemzustands des Server-Hosts – OS, CPU, Speicher, Lastdurchschnitt oder Netzwerkschnittstellen.

toolkit_hash_value

Erzeugt einen Digest oder verifiziert einen Wert in konstanter Zeit gegen einen erwarteten.

  • operation: generate (Digest in Kleinbuchstaben-Hex) oder compare (zeitlich sicherer Vergleich über timingSafeEqual)

  • Algorithmen: sha256 (Standard) und sha512 für Sicherheit; sha1 und md5 sind nur für Prüfsummen- und Dateiintegritätskompatibilität verfügbar – niemals für Passwörter oder Signaturen

  • inputEncoding liest value als utf8 (Standard), hex oder base64, sodass binäre Blobs einen Decodier-Roundtrip überspringen

  • Kanonischer Anwendungsfall: einen Download gegen eine vom Anbieter veröffentlichte Prüfsumme prüfen


toolkit_generate_id

Erzeugt kryptografisch zufällige Bezeichner aus dem CSPRNG der Plattform – die richtige Quelle für IDs, die unvorhersehbar sein müssen, anders als von Modellen erfundene Werte.

  • type: uuid_v4 (zufällig, Standard), uuid_v7 (zeitlich geordnet, nach Erstellung sortierbar) oder ulid (26 Zeichen Crockford-Basis32, lexikografisch sortierbar)

  • count erzeugt einen Stapel bis zu 1000 in einem Aufruf; das zurückgegebene ids-Array enthält immer genau count Werte

  • uuid_v7- und ulid-Stapel sind monoton – selbst innerhalb derselben Millisekunde streng steigend – sodass ids in sortierter Erstellungsreihenfolge bleibt

  • Schreibgeschützt – das Erzeugen ändert nichts – aber niemals idempotent, sodass ein Client einen Stapel nicht zwischenspeichert oder dedupliziert


toolkit_generate_qr

Kodiert Text oder eine URL in einen QR-Code.

  • format: svg (Inline-Markup), png_base64 (Rasterbytes mit mimeType und byteLength) oder terminal (Unicode-Blockzeichenfolge)

  • errorCorrection (L/M/Q/H) tauscht Datenkapazität gegen Schadenstoleranz; margin legt die Breite der Ruhezone fest; scale legt Pixel pro Modul für die Rasterausgabe fest

  • Die zurückgegebene version (1–40) spiegelt wider, wie dicht die kodierten Daten sind

  • png_base64 wird außerdem als MCP-Bildinhaltsblock geliefert, sodass ein Client, der content[] liest, den Code rendern kann, ohne structuredContent zu dekodieren

  • Ein gerendertes PNG ist auf 2048 px pro Seite begrenzt — (modules + 2 × margin) × scale — daher wird ein dichtes Symbol bei hohem scale mit einem typisierten raster_too_large-Fehler abgelehnt, der einen passenden scale-Wert nennt; svg und terminal sind unbegrenzt

  • data ist auf 2953 Bytes begrenzt — die absolute Obergrenze (Version 40, Stufe L, Bytemodus); die nutzbare Kapazität ist bei höheren errorCorrection-Stufen geringer, sodass übermäßige Eingaben mit einem typisierten data_too_large-Fehler statt mit einem allgemeinen Fehler abgelehnt werden


toolkit_encode_value

Kodiert oder dekodiert einen Wert in beide Richtungen.

  • encoding: base64, base64url (URL-sicheres Alphabet), hex oder url (Prozentkodierung)

  • operation: encode (rohes UTF-8 → Kodierung) oder decode (kodierter Wert → Text)

  • Fehlerhafte Decodierungseingabe gibt einen typisierten decode_failed-Fehler mit einem Wiederherstellungshinweis zurück, keine stillschweigende Best-Effort-Lösung


toolkit_geolocate_ip

Löst eine öffentliche IP oder einen Hostnamen in geografische und Netzwerk-Metadaten auf.

  • Gibt Land, Region, Stadt, Breiten-/Längengrad, ASN, besitzende Organisation und Zeitzone zurück

  • proxy, hosting und mobile kennzeichnen, ob die Adresse ein Proxy/VPN/Tor-Ausgang, ein Rechenzentrumsnetzwerk oder ein mobiler Träger ist – ein true bei einem von ihnen bedeutet, dass die Koordinaten Infrastruktur beschreiben, nicht eine Person. Fehlt, wenn der Anbieter sie nicht meldet

  • Ein Hostname wird zuerst per DNS aufgelöst; resolvedIp gibt die tatsächlich geortete IP wieder, und source nennt den antwortenden Anbieter

  • SSRF-frei – der Server ruft den Anbieter auf, niemals das Ziel; die aufgelöste IP wird erneut gegen private Bereiche geprüft, und private/reservierte Adressen werden abgelehnt (sie haben keine öffentliche Geolokalisierung)

  • Best-Effort und durch den Anbieter begrenzt: VPNs, Proxys, mobiles NAT und Anycast verhindern alle eine IP-zu-Standort-Zuordnung; die Genauigkeit ist bestenfalls auf Stadtebene, und fehlende Felder werden als unbekannt statt erfunden gemeldet

  • Vom Anbieter gelieferte Zeichenfolgen werden gekürzt und von Steuerzeichen befreit, bevor sie in die Antwort gelangen, sodass von der Registry kontrollierter Text (org, isp, as) den Kontext eines Modells nicht überfluten oder formatieren kann

  • Standardmäßig schlüssellos (ip-api-Kostenlostarif, der Klartext-HTTP verwendet – siehe TOOLKIT_GEO_BASE_URL); Ergebnisse werden im Speicher nach aufgelöster IP unter einer festen Eintragsobergrenze zwischengespeichert


toolkit_check_network

Per Flag freigeschaltet – wird nur registriert, wenn TOOLKIT_ENABLE_NET_DIAGNOSTICS=true gesetzt ist. Schreibgeschützte Netzwerkdiagnosen vom Server-Host.

  • mode: ping (ICMP-Roundtrip), traceroute (Hop-Pfad zum Ziel), connectivity (rohe TCP-Verbindung zu target auf port) oder public_ip (die eigene Egress-IP des Hosts)

  • Ein Host, der nicht antwortet, wird als reachable: false gemeldet — ein gültiges Ergebnis, kein Fehler

  • Diagnostiziert das eigene Netzwerk des Servers, daher ist es bei einer lokalen oder selbst gehosteten Bereitstellung nützlich; das Erreichen eines privaten/reservierten/internen Ziels erfordert zusätzlich TOOLKIT_ALLOW_PRIVATE_NETWORK=true, wodurch der Cloud-Metadaten-Endpunkt standardmäßig blockiert bleibt


toolkit_check_system

Per Flag freigeschaltet – wird nur registriert, wenn TOOLKIT_ENABLE_SYSTEM_INFO=true gesetzt ist. Meldet einen Aspekt des Systemzustands des Server-Hosts, schreibgeschützt.

  • what: os, cpu, memory, load oder interfaces

  • Pro Aufruf wird genau ein Facettenobjekt entsprechend what befüllt

  • Beschreibt den Host, auf dem dieser Server läuft, nicht den aufrufenden Client – sinnvoll bei einer lokalen oder selbst gehosteten Bereitstellung; standardmäßig deaktiviert, weil os und interfaces Host-Topologie und Versionsdetails offenlegen

Related MCP server: IT Tools MCP Server

Funktionen

Basiert auf @cyanheads/mcp-ts-core:

  • Deklarative Tool-Definitionen – eine Datei pro Tool, das Framework übernimmt Registrierung und Validierung

  • Einheitliche Fehlerbehandlung – Handler werfen, das Framework fängt, klassifiziert und formatiert

  • Typisierte Fehlerverträge – jedes fehleranfällige Tool deklariert seine Fehlerursachen mit Wiederherstellungshinweisen, auf die der Agent reagieren kann

  • Plugbare Authentifizierung: none, jwt, oauth

  • Strukturierte Protokollierung mit optionalem OpenTelemetry-Tracing

  • STDIO- und Streamable-HTTP-Transports

Toolkit-spezifisch:

  • Fail-closed-Gating – die beiden Host-prüfenden Tools fehlen in tools/list, sofern sie nicht explizit aktiviert werden, sodass eine gehostete Instanz keine SSRF- oder Informationsoffenlegungsfläche bietet

  • Zweistufiges Netzwerk-Gate – selbst bei aktivierten Diagnosen bleiben private/reservierte/Loopback-/Link-Local-Ziele (einschließlich des Cloud-Metadaten-Endpunkts) blockiert, bis ein zweites Flag sie erlaubt

  • CSPRNG-gestützte Primitive – Bezeichner und Digests stammen aus der Krypto-Quelle der Plattform, und der Hash-Vergleich erfolgt in konstanter Zeit über timingSafeEqual

  • SSRF-freie Geolokalisierung – der Server ruft den Anbieter auf und prüft die DNS-aufgelöste IP vor der Abfrage erneut gegen private Bereiche, sodass ein Hostname keine Anfrage an eine interne Adresse schmuggeln kann

Agentenfreundliche Ausgabe:

  • Herkunft – Geolokalisierung gibt die aufgelöste IP wieder und nennt den antwortenden Anbieter; fehlende vorgelagerte Felder werden als unbekannt gemeldet, nie erfunden

  • Nicht erreichbar, aber gültige Ergebnisse – ein nicht erreichbarer Host gibt reachable: false statt eines Fehlers zurück, sodass Aufrufer anhand von Daten verzweigen, nicht anhand von Ausnahmetext

  • Typisierte Fehlerursachen – Dekodierungsfehler, fehlende Digests und blockierte private Ziele tragen jeweils eine strukturierte Ursache plus einen Hinweis für den nächsten Wiederherstellungsschritt

Erste Schritte

Öffentlich gehostete Instanz

Eine öffentliche Instanz ist unter https://toolkit.caseyjhand.com/mcp verfügbar – keine Installation erforderlich. Richten Sie einen beliebigen MCP-Client per Streamable HTTP darauf aus:

{
  "mcpServers": {
    "toolkit-mcp-server": {
      "type": "streamable-http",
      "url": "https://toolkit.caseyjhand.com/mcp"
    }
  }
}

Selbst gehostet / Lokal

Fügen Sie Folgendes zur Konfigurationsdatei Ihres MCP-Clients hinzu. Kein API-Schlüssel erforderlich – die fünf dauerhaft aktiven Tools und die standardmäßige schlüssellose Geolokalisierungsstufe funktionieren sofort.

{
  "mcpServers": {
    "toolkit-mcp-server": {
      "type": "stdio",
      "command": "bunx",
      "args": ["@cyanheads/toolkit-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

Oder mit npx (kein Bun erforderlich):

{
  "mcpServers": {
    "toolkit-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "@cyanheads/toolkit-mcp-server@latest"],
      "env": {
        "MCP_TRANSPORT_TYPE": "stdio",
        "MCP_LOG_LEVEL": "info"
      }
    }
  }
}

Oder mit Docker:

{
  "mcpServers": {
    "toolkit-mcp-server": {
      "type": "stdio",
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/toolkit-mcp-server:latest"]
    }
  }
}

Um die per Flag freigeschalteten Host-prüfenden Tools zu aktivieren, fügen Sie ihre Flags zu env (oder -e bei Docker) hinzu:

"env": {
  "MCP_TRANSPORT_TYPE": "stdio",
  "TOOLKIT_ENABLE_NET_DIAGNOSTICS": "true",
  "TOOLKIT_ENABLE_SYSTEM_INFO": "true"
}

Für Streamable HTTP setzen Sie den Transport und starten Sie den Server:

MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp

Voraussetzungen

  • Bun v1.3.2 oder höher (oder Node.js v24+).

  • Kein API-Schlüssel erforderlich – die Geolokalisierung nutzt standardmäßig den schlüssellosen ip-api-Kostenlostarif.

Installation

  1. Klonen Sie das Repository:

git clone https://github.com/cyanheads/toolkit-mcp-server.git
  1. Wechseln Sie in das Verzeichnis:

cd toolkit-mcp-server
  1. Installieren Sie die Abhängigkeiten:

bun install

Konfiguration

Jede Variable ist optional. Serverspezifische Optionen werden beim Start über das Zod-Schema in src/config/server-config.ts validiert.

Variable

Beschreibung

Standard

TOOLKIT_ENABLE_NET_DIAGNOSTICS

Registriert das gesperrte Tool toolkit_check_network. Für gehostete oder gemeinsam genutzte Bereitstellungen weglassen.

false

TOOLKIT_ENABLE_SYSTEM_INFO

Registriert das gesperrte Tool toolkit_check_system. Nur bei einer lokalen oder selbst gehosteten Bereitstellung sinnvoll.

false

TOOLKIT_ALLOW_PRIVATE_NETWORK

Bei aktivierter Netzwerkdiagnose erlaubt private/reservierte/Loopback-Ziele. Die zweite explizite Absicherung.

false

TOOLKIT_GEO_API_KEY

API-Schlüssel für den Geodienst-Endpunkt, falls erforderlich.

Keiner

TOOLKIT_GEO_BASE_URL

Basis-URL für einen ip-api-kompatiblen Geodienst-Endpunkt. Der Standard ist Klartext-HTTP – der HTTPS-Endpunkt von ip-api ist nicht Teil des schlüssellosen Free-Tarifs und antwortet ohne einen kostenpflichtigen Schlüssel mit 403 SSL unavailable for this endpoint. Leite dies auf einen HTTPS-Endpunkt um (mit TOOLKIT_GEO_API_KEY), um die Anforderung an den Anbieter zu verschlüsseln.

http://ip-api.com

TOOLKIT_GEO_CACHE_TTL_SECONDS

TTL des Geodienst-Caches im Arbeitsspeicher in Sekunden.

3600

TOOLKIT_GEO_RATE_LIMIT_PER_MIN

Maximale Anzahl von Geodienst-Anfragen pro Minute.

45

MCP_TRANSPORT_TYPE

Transport: stdio oder http.

stdio

MCP_HTTP_PORT

Port für den HTTP-Server.

3010

MCP_AUTH_MODE

Authentifizierungsmodus: none, jwt oder oauth.

none

MCP_LOG_LEVEL

Log-Level (RFC 5424).

info

OTEL_ENABLED

Aktiviere OpenTelemetry-Instrumentierung (Spans, Metriken, Fertigstellungsprotokolle).

false

Siehe .env.example für die vollständige Liste optionaler Überschreibungen.

Ausführen des Servers

Lokale Entwicklung

  • Erstellen und ausführen:

    # One-time build
    bun run rebuild
    
    # Run the built server
    bun run start:stdio
    # or
    bun run start:http
  • Checks und Tests ausführen:

    bun run devcheck   # Lint, format, typecheck, security, changelog sync
    bun run test       # Vitest test suite
    bun run lint:mcp   # Validate MCP definitions against spec

Docker

docker build -t toolkit-mcp-server .
docker run --rm -e MCP_TRANSPORT_TYPE=http -p 3010:3010 toolkit-mcp-server

Das Dockerfile verwendet standardmäßig HTTP-Transport, zustandslosen Sitzungsmodus und protokolliert nach /var/log/toolkit-mcp-server. OpenTelemetry-Peer-Abhängigkeiten werden standardmäßig installiert – erstelle mit --build-arg OTEL_ENABLED=false, um sie wegzulassen.

Projektstruktur

Verzeichnis

Zweck

src/index.ts

Einstiegspunkt createApp() – registriert Tools und initialisiert Dienste, mit Fail-Closed-Absicherung für die beiden Host-Überprüfungs-Tools.

src/config

Serverspezifische Umgebungsvariablen-Analyse und -Validierung mit Zod.

src/mcp-server/tools

Tool-Definitionen (*.tool.ts). Sieben Tools – fünf immer aktiv, zwei gesperrt.

src/services/geo

Geodienst – DNS-Auflösung, Anbieteraufruf mit Wiederholungs-/Backoff-Logik, Normalisierung, In-Memory-Cache.

src/services/network

Netzwerkdiagnose-Dienst plus der gemeinsame Ziel-Validator und der Klassifikator für private Bereiche.

tests/

Unit- und Integrationstests, die die src/-Struktur widerspiegeln.

Entwicklungsleitfaden

Siehe CLAUDE.md / AGENTS.md für Entwicklungsrichtlinien und Architekturregeln. Die Kurzfassung:

  • Handler werfen Fehler, das Framework fängt sie – kein try/catch in der Tool-Logik

  • Verwende ctx.log für anforderungsbezogenes Logging, ctx.state für mandantenbezogenen Speicher

  • Registriere neue Tools in den createApp()-Arrays in src/index.ts

  • Die beiden Host-Überprüfungs-Tools registrieren sich hinter ihren Aktivierungsflags; die Netzwerkziel-Absicherung validiert nach der DNS-Auflösung – fabriziere niemals ein Ergebnis für ein nicht auffindbares oder nicht erreichbares Ziel

Mitwirken

Issues und Pull-Requests sind willkommen. Führe Checks und Tests vor dem Einreichen aus:

bun run devcheck
bun run test

Lizenz

Apache-2.0 – siehe LICENSE für Details.

Available Tools

5 tools
toolkit_encode_valuetoolkit-mcp-server: encode valueA
Read-onlyIdempotent
Inspect

Encode or decode a value across base64, base64url, hex, or URL (percent) encoding, in either direction. Set operation to "encode" to transform raw UTF-8 text into the chosen encoding, or "decode" to recover the original text from an encoded value. base64url uses the URL-safe alphabet (- and _ instead of + and /); url applies encodeURIComponent / decodeURIComponent. Decoding a value that is malformed for the chosen encoding is reported as a recoverable error, not a silent best-effort.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe value to transform — raw text for encode, an encoded string for decode.
encodingYesThe encoding to apply: base64, URL-safe base64url, hex, or URL percent-encoding.
operationYes"encode" transforms text into the encoding; "decode" recovers text from an encoded value.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
resultNoThe transformed value (encoded text, or the decoded original).
encodingNoThe encoding that was applied.
operationNoThe operation that was performed.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already supply readOnlyHint and idempotentHint, and the description adds strong behavioral context beyond that: base64url alphabet substitution, encodeURIComponent/decodeURIComponent semantics, and recoverable-error behavior for malformed decodes. This tells the agent exactly what to expect without contradicting annotations.

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

Conciseness5/5

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

Three focused sentences: the first states scope, the second explains operation semantics, and the third adds essential encoding-specific and error behavior. No filler, repetition of schema fields, or unnecessary detail.

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

Completeness5/5

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

For a stateless encode/decode utility with an output schema and fully documented parameters, this is complete: it covers all four encodings, both directions, and the failure mode. Nothing necessary for correct invocation is missing.

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?

All three parameters are fully described in the schema (100% coverage), so the baseline is 3. The description adds extra practical meaning for encoding ('base64url uses the URL-safe alphabet', 'url applies encodeURIComponent / decodeURIComponent') and clarifies that value is raw text for encode vs an encoded string for decode, warranting a 4.

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?

States a specific verb+resource: encode or decode a value across four named encodings, in either direction. This clearly distinguishes it from siblings like hashing, ID generation, QR generation, and IP geolocation without needing to inspect them.

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

Usage Guidelines4/5

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

Provides explicit operation-level guidance: set operation to "encode" or "decode" depending on the desired direction, with clear expectations for each. It does not name alternative tools or exclusion criteria, so sibling differentiation is implicit by domain rather than explicitly stated.

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

toolkit_generate_idtoolkit-mcp-server: generate idA
Read-only
Inspect

Mint cryptographically-random identifiers using the platform CSPRNG — the correct source for IDs that must be unpredictable, unlike model-generated values. type selects the format: uuid_v4 (random, the default), uuid_v7 (time-ordered, sortable by creation), or ulid (26-char Crockford-base32, lexicographically sortable). Set count to mint a batch in one call (up to 1000); the returned ids array always contains exactly count values and is never truncated. For uuid_v7 and ulid, a batch is monotonic — strictly increasing even within the same millisecond — so the ids array stays in sorted creation order. IDs from this tool feed into toolkit_generate_qr (pass ids[0] as data) to create a scannable code.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoIdentifier format: uuid_v4 (random), uuid_v7 (time-ordered), or ulid (sortable Crockford-base32).uuid_v4
countNoHow many identifiers to mint (1–1000). The full batch is always returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idsNoThe minted identifiers — exactly count of them, in mint order; for uuid_v7 and ulid that order is strictly increasing (sorted by creation).
typeNoThe identifier format that was minted.
countNoThe number of identifiers minted (equals the requested count).
errorNoPresent when the call failed. Absent on success.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true and idempotentHint=false. The description enriches this by clarifying that the result is cryptographically random, that the ids array always contains exactly count values and is never truncated, and that batches for uuid_v7/ulid are monotonic and sorted. These behavioral details go beyond what annotations provide, though it does not mention failure modes or performance characteristics.

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 dense paragraph with zero filler. It front-loads the core purpose, then details types and count, then adds behavioral guarantees and a cross-reference to a related tool. Every sentence earns its place and the structure is logical.

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

Completeness5/5

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

Given only 2 parameters, 100% schema coverage, and a provided output schema, the description is complete. It covers the purpose, usage, parameter semantics, behavioral guarantees, and even a downstream use case. There is nothing an agent needs to know to call it correctly that is missing.

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 schema already provides 100% description coverage for both parameters. The description adds value by explaining the semantic difference between uuid_v4, uuid_v7, and ulid (including sortability), the default behavior, and the monotonic ordering within a batch — none of which are in the schema descriptions. It also clarifies the count semantics (exact return size).

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 opens with a specific action ('Mint cryptographically-random identifiers') and a precise resource ('platform CSPRNG'), and immediately distinguishes it from the alternative of model-generated values. It also names the three output formats with their distinct properties, so an agent can clearly tell this tool apart from siblings like toolkit_hash_value or toolkit_generate_qr.

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

Usage Guidelines5/5

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

It explicitly states when to use this tool ('IDs that must be unpredictable') and when not ('unlike model-generated values'), and it names a concrete downstream use case (feed ids[0] into toolkit_generate_qr). This leaves no ambiguity about the appropriate context of use.

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

toolkit_generate_qrtoolkit-mcp-server: generate QR codeA
Read-onlyIdempotent
Inspect

Encode text or a URL into a QR code. data is the content to encode (a link, a generated identifier such as toolkit_generate_id's ids[0], or any string). format selects the output: svg returns inline SVG markup, png_base64 returns base64-encoded PNG bytes (with mimeType and byteLength), and terminal returns a block of Unicode block characters renderable in a monospace terminal. errorCorrection (L/M/Q/H) trades data capacity for damage tolerance, margin sets the quiet-zone width, and scale sets pixels per module for raster output. The returned version (1–40) reflects how dense the encoded data is. png_base64 renders (modules + 2 × margin) × scale pixels per side and rejects anything past 2048 px with a typed raster_too_large error, so a dense symbol needs a lower scale; svg carries no such limit.

ParametersJSON Schema
NameRequiredDescriptionDefault
dataYesThe text or URL to encode. 2953 is the absolute ceiling (QR version 40, level L, byte mode); usable capacity drops at higher errorCorrection levels, so over-capacity data is rejected with a typed data_too_large error rather than a generic failure.
scaleNoPixels per module for raster (png_base64) output. Ignored for terminal. png_base64 also bounds the whole image at 2048 px per side, so a dense symbol or a wide margin admits a lower scale than 32.
formatNoOutput format: svg markup, png_base64 (raster bytes), or a terminal-renderable string.svg
marginNoQuiet-zone width in modules around the symbol. The spec recommends 4.
errorCorrectionNoError-correction level: L (~7% recoverable) to H (~30%). Higher tolerance lowers data capacity.M

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
formatNoThe format that was produced.
contentNoThe QR artifact: SVG markup, a terminal-renderable string, or base64 PNG bytes for png_base64.
versionNoQR symbol version (1–40); higher versions hold denser data and indicate denser content.
mimeTypeNoMIME type of content for image formats. Absent for the terminal format.
byteLengthNoDecoded byte size of the PNG. Present only for png_base64.

TDQS

A4.8/5.0
Behavior5/5

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

Beyond the annotations, the description discloses important runtime behavior: exact output forms per format, the returned QR version, the png_base64 pixel formula, the 2048-pixel rejection limit, and the typed raster_too_large error. It also notes that svg has no such size limit, which is valuable behavioral context an agent cannot infer from annotations or schema alone.

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 front-loaded with the core action and then proceeds logically through data, format, error correction, margin, scale, and constraints. Every sentence adds practical information, and the detail is proportionate to the tool's five-parameter complexity with no filler.

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

Completeness5/5

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

Given five parameters, an output schema, and the presence of siblings, the description covers everything needed to invoke the tool correctly: parameter semantics, format-specific behavior, capacity limits, error types, and interaction effects. Nothing essential is missing.

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

Parameters5/5

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

Even though schema description coverage is 100%, the description enriches the parameters substantially by explaining how they interact: errorCorrection trades capacity for damage tolerance, scale is bounded by image size, and dense data may force a lower scale. It also clarifies return-value details like mimeType and byteLength, adding meaning beyond the raw schema entries.

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 opens with a specific verb and resource: 'Encode text or a URL into a QR code.' It then enumerates the three output formats, making it unmistakable what the tool produces and clearly distinguishing it from siblings like toolkit_hash_value, toolkit_encode_value, and toolkit_generate_id.

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 clearly establishes when it is appropriate to use the tool by explaining its purpose and giving concrete examples of valid data, including a generated identifier from toolkit_generate_id. It does not explicitly list when-not-to-use cases or name alternative tools as a routing hint, so it stops short of a 5.

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

toolkit_geolocate_iptoolkit-mcp-server: geolocate IPA
Read-onlyIdempotent
Inspect

Resolve a public IP address (or hostname) to geographic and network metadata: country, region, city, latitude/longitude, the owning ASN and organization, timezone, and the proxy/hosting/mobile quality flags. target accepts an IPv4/IPv6 address or a hostname — a hostname is DNS-resolved first and the resolvedIp field echoes which IP was actually located. The provider is called directly (never the target), so this is SSRF-free and safe to expose anywhere. Results are best-effort and provider-bounded: VPNs, proxies, mobile NAT, and anycast all defeat IP-to-location, accuracy is city-level at best, and many fields can be absent for reserved or thinly-documented ranges — absent fields are reported as unknown, never invented. Read proxy, hosting, and mobile before trusting the coordinates: a true on any of them means the location describes infrastructure, not the user. Private/reserved addresses have no public geolocation and are rejected. The source field names which provider answered.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesA public IPv4/IPv6 address or a hostname (e.g. "8.8.8.8" or "example.com").

Output Schema

ParametersJSON Schema
NameRequiredDescription
asnNoAutonomous System number, e.g. "AS15169". Absent on providers that omit it.
orgNoOwning organization or ISP, e.g. "Google LLC". Absent when unknown.
cityNoCity name. Absent when unknown.
errorNoPresent when the call failed. Absent on success.
proxyNoTrue when the address is a known proxy, VPN, or Tor exit — the location describes the exit node, not the user. Absent when the provider does not report it.
mobileNoTrue when the address belongs to a mobile carrier network, where NAT can place the location far from the device. Absent when unreported.
regionNoRegion or state name. Absent when unknown.
sourceNoThe provider that answered the lookup, e.g. "ip-api".
targetNoThe target as supplied (IP or hostname).
countryNoCountry name. Absent when the provider does not report it.
hostingNoTrue when the address belongs to a hosting or datacenter network, so the location is a facility rather than a person. Absent when unreported.
latitudeNoLatitude in decimal degrees. Absent when unknown.
timezoneNoIANA timezone, e.g. "America/Los_Angeles". Absent when unknown.
longitudeNoLongitude in decimal degrees. Absent when unknown.
resolvedIpNoThe IP that was actually located (a supplied hostname is resolved to this first).
countryCodeNoISO 3166-1 alpha-2 country code. Absent when unknown.

TDQS

A4.6/5.0
Behavior5/5

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

With readOnlyHint=true and destructiveHint=false already in annotations, the bar is lower, yet the description still adds real context: the provider is called directly (never the target), so it is safe on untrusted input; accuracy is provider-bounded; behavior on private/reserved ranges is stated; proxy/VPN/mobile flags are defined as reliability warnings; and the source field is disclosed. Nothing contradicts the annotations.

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

Conciseness4/5

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

All four sentences are substantive and the operation is stated up front in the first sentence, with caveats and security notes after. No filler. Minor redundancy between 'accuracy is best-effort' and 'VPNs, proxies, anycast...' slightly thins the density, but nothing is wasted.

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

Completeness5/5

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

For a single-param, read-only tool whose output is not schema-described, the description covers: the input types, DNS resolution behavior, the output fields, the meaning of proxy/mobile flags for reliability, and failure modes (private ranges rejected). An agent has everything needed to call it correctly and interpret the result.

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 coverage is 100% (the single param is fully defined with three alternates: IPv4, IPv6, hostname). The description adds value beyond the schema by stating that hostnames are DNS-resolved first and that the resolved address is echoed in the response — behavior the schema cannot express. Slightly more caveat detail (e.g., punycode) would push to 5, but coverage is already high.

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 first sentence states a clear verb-resource pair — resolve a public IP or hostname to a set of geographic and network metadata — and enumerates every returned field, so an agent immediately knows what it does and what it returns. It also carves out scope (public only) that distinguishes it in a toolkit whose other tools are QR, hash, and weather related.

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 explains when results are reliable and when they are not (VPNs, proxies, anycast, mobile NAT, reserved ranges), which is implicit guidance to the caller on trusting the output. It does not explicitly contrast with a sibling geolocation alternative, but the sibling set contains no competing tool, so a 4 is appropriate rather than a 5.

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

toolkit_hash_valuetoolkit-mcp-server: hash valueA
Read-onlyIdempotent
Inspect

Generate a cryptographic digest of a value, or verify a value against an expected digest. Set operation to "generate" for a lowercase-hex digest, or "compare" to constant-time-check value against the expected digest — compare is timing-safe and avoids manual string equality checks. Algorithm defaults to sha256; sha512 is also secure, while md5 and sha1 are exposed for checksum and file-integrity compatibility ONLY and must not be used for passwords, signatures, or any security purpose. inputEncoding controls how value and expected are read before hashing (utf8 default, or hex/base64 for raw binary data) so binary blobs need no decode round-trip. The canonical use is matching a download against a vendor-published checksum.

ParametersJSON Schema
NameRequiredDescriptionDefault
valueYesThe data to hash, interpreted per inputEncoding (raw text by default).
expectedNoThe expected lowercase-hex digest to compare against. Required when operation is "compare".
algorithmNoDigest algorithm. sha256 (default) or sha512 for security; md5/sha1 are checksum/compat only — not for security.sha256
operationNo"generate" produces a digest; "compare" constant-time-checks value against expected.generate
inputEncodingNoHow value (and expected's pre-image, when relevant) is decoded before hashing: utf8 text, hex, or base64.utf8

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
digestNoLowercase-hex digest of value. Present for operation "generate".
matchesNoConstant-time equality of the computed digest against expected. Present for operation "compare".
algorithmNoThe algorithm used.
operationNoThe operation performed.
lengthInBytesNoDigest size in bytes (32 for sha256, 64 for sha512, 20 for sha1, 16 for md5). Present for "generate".

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, covering the tool's safety profile. The description adds value beyond these: it reveals the timing-safe nature of compare, security caveats for md5/sha1, and the encoding behavior that prevents decode round-trips for binary blobs. It does not contradict annotations or mention any side effects, so the behavioral disclosure is strong.

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 dense but logically structured, starting with the core purpose, then operation, algorithm, encoding, and a canonical use case. Each sentence carries specific information with minimal fluff. It is slightly longer than necessary but remains efficient, and the front-loaded purpose ensures quick comprehension.

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

Completeness4/5

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

With an output schema present, the description need not explain return values. It covers the key behaviors: operation modes, algorithm choices, encoding implications, and the primary use case. Minor gaps exist (e.g., error behavior for missing expected in compare), but these are covered by the schema's required field and are acceptable for an agent to infer.

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 100% (each param has a description), giving a baseline of 3. The description enhances this with meaningful additions: algorithm security guidance, operation semantics (timing-safe compare), and inputEncoding purpose (hex/base64 for raw binary). It clarifies the relationship between operation, expected, and inputEncoding, going beyond the bare schema definitions.

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 opens with a specific verb+resource pair: 'Generate a cryptographic digest of a value, or verify a value against an expected digest.' It clearly distinguishes between the two operations (generate/compare) and is unambiguous. The sibling tools (id generation, QR, encoding, geolocation) share no overlap, so the tool's purpose stands apart without needing additional differentiation.

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

Usage Guidelines4/5

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

Provides practical context: 'The canonical use is matching a download against a vendor-published checksum.' It also gives explicit algorithm guidance (sha256/sha512 for security, md5/sha1 only for checksum compatibility) and explains when compare is preferable ('constant-time-check ... timing-safe and avoids manual string equality checks'). While it doesn't name alternative tools, there are no direct competitors among siblings, so the guidance is sufficient for appropriate selection.

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

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct operation: hashing, ID generation, QR generation, encoding/decoding, and IP geolocation. Even the two 'value' tools are cleanly separated by function—one is a cryptographic digest, the other is reversible character encoding. There is no realistic overlap that would cause an agent to mis-select.

Naming Consistency5/5

All tools share the 'toolkit_' prefix and follow a snake_case verb_noun pattern: hash_value, generate_id, generate_qr, encode_value, geolocate_ip. The style is uniform and predictable, with no mixed case or arbitrary abbreviations.

Tool Count4/5

Five tools is within the comfortable range for a helper server, and each tool earns its place as a separate, non-redundant utility. The slight deduction is because the broad 'toolkit' framing implies a larger helper surface, so the set feels a little lean but not problematically so.

Completeness3/5

Each utility covers a solid subset: hash and compare, multiple ID formats, several output encodings, and QR generation with multiple formats. However, as a general-purpose toolkit there are missing adjacent capabilities such as QR decoding, HMAC or fingerprint support, and broader string utility functions, so the overall domain coverage is plausible but not comprehensive.

Maintenance

ActivityMaintained
ResponsivenessSyncing

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
    D
    maintenance
    A comprehensive Model Context Protocol server implementation that enables AI assistants to interact with file systems, databases, GitHub repositories, web resources, and system tools while maintaining security and control.
    81
    2
    MIT
  • A
    license
    B
    quality
    F
    maintenance
    A comprehensive Model Context Protocol server providing access to 70+ IT tools for developers and system administrators, including encoding/decoding, text manipulation, hashing, and network utilities.
    100
    153
    22
    TypeScript
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    A secure Model Context Protocol server providing HTTP endpoints for AI agent tool execution, including file system operations, shell commands, and LLM-based code generation.
    1

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/cyanheads/toolkit-mcp-server'

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