Track MCP LogoTrack MCP
Track MCP LogoTrack MCP

The world's largest repository of Model Context Protocol servers. Discover, explore, and submit MCP tools.

Product

  • Categories
  • Top MCP
  • New & Updated
  • Submit MCP

Company

  • About

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy

© 2026 TrackMCP. All rights reserved.

Built with ❤️ by Krishna Goyal

    Toolkit Mcp Server

    A Model Context Protocol server providing LLM Agents with system utilities and tools, including IP geolocation, network diagnostics, system monitoring, cryptographic operations, and QR code generation.

    14 stars
    TypeScript
    Updated Oct 30, 2025
    cryptography
    developer-tools
    geolocation
    llm
    llm-agent
    mcp
    model-context-protocol
    networking
    system-utilities
    typescript

    Table of Contents

    • Tools
    • toolkit_hash_value
    • toolkit_generate_id
    • toolkit_generate_qr
    • toolkit_encode_value
    • toolkit_geolocate_ip
    • toolkit_check_network
    • toolkit_check_system
    • Features
    • Getting started
    • Prerequisites
    • Installation
    • Configuration
    • Running the server
    • Local development
    • Docker
    • Project structure
    • Development guide
    • Contributing
    • License

    Table of Contents

    • Tools
    • toolkit_hash_value
    • toolkit_generate_id
    • toolkit_generate_qr
    • toolkit_encode_value
    • toolkit_geolocate_ip
    • toolkit_check_network
    • toolkit_check_system
    • Features
    • Getting started
    • Prerequisites
    • Installation
    • Configuration
    • Running the server
    • Local development
    • Docker
    • Project structure
    • Development guide
    • Contributing
    • License

    Documentation

    ---

    Tools

    Seven tools. Five are always on and need no configuration — pure-compute utilities plus an SSRF-free IP lookup. Two probe the server host and stay absent from tools/list until you opt in, fail-closed.

    ToolDescription
    toolkit_hash_valueGenerate a cryptographic digest (sha256/sha512/sha1/md5), or constant-time-compare a value against an expected digest.
    toolkit_generate_idMint cryptographically-random identifiers — UUIDv4, UUIDv7, or ULID — singly or in batches up to 1000.
    toolkit_generate_qrEncode text or a URL into a QR code as SVG markup, base64 PNG, or a terminal-renderable string.
    toolkit_encode_valueEncode or decode a value across base64, base64url, hex, or URL percent-encoding, in either direction.
    toolkit_geolocate_ipResolve a public IP or hostname to geographic and network metadata — country, city, coordinates, ASN, timezone.
    toolkit_check_networkGated, off by default. Read-only network diagnostics from the server host — ping, traceroute, TCP connectivity, or egress-IP detection.
    toolkit_check_systemGated, off by default. Report a facet of the server host's system state — OS, CPU, memory, load average, or network interfaces.

    toolkit_hash_value

    Generate a digest, or constant-time-verify a value against an expected one.

    • operation: generate (lowercase-hex digest) or compare (timing-safe check via timingSafeEqual)
    • Algorithms: sha256 (default) and sha512 for security; sha1 and md5 are exposed for checksum and file-integrity compatibility only — never for passwords or signatures
    • inputEncoding reads value as utf8 (default), hex, or base64, so binary blobs skip a decode round-trip
    • Canonical use: match a download against a vendor-published checksum

    ---

    toolkit_generate_id

    Mint cryptographically-random identifiers from the platform CSPRNG — the correct source for IDs that must be unpredictable, unlike model-invented values.

    • type: uuid_v4 (random, default), uuid_v7 (time-ordered, sortable by creation), or ulid (26-char Crockford base32, lexicographically sortable)
    • count mints a batch up to 1000 in one call; the returned ids array always holds exactly count values
    • uuid_v7 and ulid batches are monotonic — strictly increasing even within the same millisecond — so ids stays in sorted creation order
    • Not read-only — each call is fresh entropy, so a client won't cache it or auto-approve it as side-effect-free

    ---

    toolkit_generate_qr

    Encode text or a URL into a QR code.

    • format: svg (inline markup), png_base64 (raster bytes with mimeType and byteLength), or terminal (Unicode block string)
    • errorCorrection (L/M/Q/H) trades data capacity for damage tolerance; margin sets the quiet-zone width; scale sets pixels per module for raster output
    • The returned version (1–40) reflects how dense the encoded data is
    • data is capped at 2953 bytes — the absolute ceiling (version 40, level L, byte mode); usable capacity is lower at higher errorCorrection levels, so over-capacity input is rejected with a typed data_too_large error rather than a generic failure

    ---

    toolkit_encode_value

    Encode or decode a value, in either direction.

    • encoding: base64, base64url (URL-safe alphabet), hex, or url (percent-encoding)
    • operation: encode (raw UTF-8 → encoding) or decode (encoded value → text)
    • Malformed decode input returns a typed decode_failed error with a recovery hint, not a silent best-effort

    ---

    toolkit_geolocate_ip

    Resolve a public IP or hostname to geographic and network metadata.

    • Returns country, region, city, latitude/longitude, ASN, owning organization, and timezone
    • A hostname is DNS-resolved first; resolvedIp echoes the IP actually located, and source names the answering provider
    • SSRF-free — the server calls the provider, never the target; the resolved IP is re-checked against private ranges, and private/reserved addresses are rejected (they have no public geolocation)
    • Best-effort and provider-bounded: VPNs, proxies, mobile NAT, and anycast all defeat IP-to-location, accuracy is city-level at best, and absent fields are reported as unknown rather than invented
    • Keyless by default (ip-api free tier); results are cached in memory by resolved IP

    ---

    toolkit_check_network

    Gated — registered only when TOOLKIT_ENABLE_NET_DIAGNOSTICS=true. Read-only network diagnostics from the server host.

    • mode: ping (ICMP round-trip), traceroute (hop path to the target), connectivity (raw TCP connect to target on port), or public_ip (the host's own egress IP)
    • A host that does not respond is reported as reachable: false — a valid result, not an error
    • Diagnoses the server's own network, so it is useful on a local or self-hosted deployment; reaching a private/reserved/internal target additionally requires TOOLKIT_ALLOW_PRIVATE_NETWORK=true, which keeps the cloud-metadata endpoint blocked by default

    ---

    toolkit_check_system

    Gated — registered only when TOOLKIT_ENABLE_SYSTEM_INFO=true. Report a facet of the server host's system state, read-only.

    • what: os, cpu, memory, load, or interfaces
    • Exactly one facet object is populated per call, matching what
    • Describes the host this server runs on, not the calling client — meaningful on a local or self-hosted deployment; gated off by default because os and interfaces disclose host topology and version details

    Features

    Built on [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core):

    • Declarative tool definitions — single file per tool, framework handles registration and validation
    • Unified error handling — handlers throw, framework catches, classifies, and formats
    • Typed error contracts — each fallible tool declares its failure reasons with recovery hints the agent can act on
    • Pluggable auth: none, jwt, oauth
    • Structured logging with optional OpenTelemetry tracing
    • STDIO and Streamable HTTP transports

    Toolkit-specific:

    • Fail-closed gating — the two host-probing tools are absent from tools/list unless explicitly enabled, so a hosted instance exposes no SSRF or info-disclosure surface
    • Two-tier network gate — even with diagnostics enabled, private/reserved/loopback/link-local targets (including the cloud-metadata endpoint) stay blocked until a second flag permits them
    • CSPRNG-backed primitives — identifiers and digests come from the platform crypto source, and hash comparison is constant-time via timingSafeEqual
    • SSRF-free geolocation — the server calls the provider, then re-checks the DNS-resolved IP against private ranges before the lookup, so a hostname cannot smuggle a request to an internal address

    Agent-friendly output:

    • Provenance — geolocation echoes the resolved IP and names the answering provider; absent upstream fields are reported as unknown, never invented
    • Down-but-valid results — an unreachable host returns reachable: false instead of an error, so callers branch on data, not exception text
    • Typed failure reasons — decode failures, missing digests, and blocked private targets each carry a structured reason plus a next-step recovery hint

    Getting started

    Add the following to your MCP client configuration file. No API key is required — the five always-on tools and the default keyless geolocation tier work out of the box.

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

    Or with npx (no Bun required):

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

    Or with Docker:

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

    To enable the gated host-probing tools, add their flags to env (or -e for Docker):

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

    For Streamable HTTP, set the transport and start the server:

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

    Prerequisites

    • Bun v1.3.2 or higher (or Node.js v24+).
    • No API key needed — geolocation uses the keyless ip-api free tier by default.

    Installation

    1. Clone the repository:

    sh
    git clone https://github.com/cyanheads/toolkit-mcp-server.git

    2. Navigate into the directory:

    sh
    cd toolkit-mcp-server

    3. Install dependencies:

    sh
    bun install

    Configuration

    Every variable is optional. Server-specific options are validated at startup via the Zod schema in src/config/server-config.ts.

    VariableDescriptionDefault
    TOOLKIT_ENABLE_NET_DIAGNOSTICSRegister the gated toolkit_check_network tool. Leave off for hosted or shared deployments.false
    TOOLKIT_ENABLE_SYSTEM_INFORegister the gated toolkit_check_system tool. Meaningful only on a local or self-hosted deployment.false
    TOOLKIT_ALLOW_PRIVATE_NETWORKWith network diagnostics on, permit private/reserved/loopback targets. The second explicit gate.false
    TOOLKIT_GEO_PROVIDERIP-geolocation provider id. The default ip-api tier is keyless.ip-api
    TOOLKIT_GEO_API_KEYAPI key for the geolocation provider, if it requires one.none
    TOOLKIT_GEO_BASE_URLBase URL for the geolocation provider.http://ip-api.com
    TOOLKIT_GEO_CACHE_TTL_SECONDSIn-memory geolocation cache TTL in seconds.3600
    TOOLKIT_GEO_RATE_LIMIT_PER_MINMax geolocation requests per minute.45
    MCP_TRANSPORT_TYPETransport: stdio or http.stdio
    MCP_HTTP_PORTPort for the HTTP server.3010
    MCP_AUTH_MODEAuth mode: none, jwt, or oauth.none
    MCP_LOG_LEVELLog level (RFC 5424).info
    OTEL_ENABLEDEnable OpenTelemetry instrumentation (spans, metrics, completion logs).false

    See [.env.example](./.env.example) for the full list of optional overrides.

    Running the server

    Local development

    • Build and run:
    sh
    # One-time build
      bun run rebuild
    
      # Run the built server
      bun run start:stdio
      # or
      bun run start:http
    • Run checks and tests:
    sh
    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

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

    The Dockerfile defaults to HTTP transport, stateless session mode, and logs to /var/log/toolkit-mcp-server. OpenTelemetry peer dependencies are installed by default — build with --build-arg OTEL_ENABLED=false to omit them.

    Project structure

    DirectoryPurpose
    src/index.tscreateApp() entry point — registers tools and inits services, with fail-closed gating for the two host-probing tools.
    src/configServer-specific environment variable parsing and validation with Zod.
    src/mcp-server/toolsTool definitions (*.tool.ts). Seven tools — five always-on, two gated.
    src/services/geoGeolocation service — DNS resolution, provider call with retry/backoff, normalization, in-memory cache.
    src/services/networkNetwork-diagnostic service plus the shared target validator and private-range classifier.
    tests/Unit and integration tests mirroring the src/ structure.

    Development guide

    See [CLAUDE.md / AGENTS.md](./AGENTS.md) for development guidelines and architectural rules. The short version:

    • Handlers throw, framework catches — no try/catch in tool logic
    • Use ctx.log for request-scoped logging, ctx.state for tenant-scoped storage
    • Register new tools in the createApp() arrays in src/index.ts
    • The two host-probing tools register behind their enable-flags; the network target gate validates after DNS resolution — never fabricate a result for an unlocatable or unreachable target

    Contributing

    Issues and pull requests are welcome. Run checks and tests before submitting:

    sh
    bun run devcheck
    bun run test

    License

    Apache-2.0 — see LICENSE for details.

    Similar MCP

    Based on tags & features

    • AN

      Anilist Mcp

      TypeScript·
      57
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • FA

      Fal Mcp Server

      Python·
      8
    • ME

      Metmuseum Mcp

      TypeScript·
      14

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k
    View All MCP Servers

    Similar MCP

    Based on tags & features

    • AN

      Anilist Mcp

      TypeScript·
      57
    • MC

      Mcp Ipfs

      TypeScript·
      11
    • FA

      Fal Mcp Server

      Python·
      8
    • ME

      Metmuseum Mcp

      TypeScript·
      14

    Trending MCP

    Most active this week

    • PL

      Playwright Mcp

      TypeScript·
      22.1k
    • SE

      Serena

      Python·
      14.5k
    • MC

      Mcp Playwright

      TypeScript·
      4.9k
    • MC

      Mcp Server Cloudflare

      TypeScript·
      3.0k