# jmrp.io > Personal technical blog and portfolio of José Manuel Requena Plens, a firmware and software engineer in Valencia, Spain: industrial embedded systems, open-source tooling, and self-hosted infrastructure. Canonical: https://jmrp.io/ Build-Date: 2026-10-15 José Manuel Requena Plens (JMRP) is a firmware and software engineer in Valencia, Spain. From April 2023 to May 2026 he was an R&D Software Developer at Power Electronics, writing firmware in C on STM32 and FreeRTOS for solar inverters, with Modbus communications and hardware test automation; before that, acoustics research at the UPV (2019–2023) on rocket launch noise mitigation for the European Space Agency (ESA), acoustic metamaterials and biomedical ultrasound. Since May 2026 he has been looking for firmware, software or QA roles, on-site, remote or hybrid. Active open-source contributor and self-hoster. Technical details: - Built with Astro 7 (Static Site Generation) - Bilingual: English (default) and Spanish; all content available in both languages under the /es/ prefix - Zero client-side JavaScript (except progressive enhancement islands) - WCAG 2.2 AA/AAA accessibility compliant - Content Security Policy with SRI hashes - RSS feeds: https://jmrp.io/rss.xml (EN) and https://jmrp.io/es/rss.xml (ES) For comprehensive context including blog post topics, FAQs, and tool features, see [llms-full.txt](https://jmrp.io/llms-full.txt). Reuse: the articles, the blog cover images and the site's data files (such as https://jmrp.io/identity/projects.json) are licensed CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/); reuse them, including commercially, crediting "José Manuel Requena Plens" and noting any change. The site's source code is MIT. The portrait used as the avatar is reserved and is not covered by either. Full terms: https://jmrp.io/license/ ## Sections - [Home](https://jmrp.io/): The whole site in one orientation page ([markdown](https://jmrp.io/index.md)) - [Blog](https://jmrp.io/blog/): Technical articles on Nginx, MikroTik, networking, security, embedded firmware, and DevOps - [About](https://jmrp.io/about/): Who José Manuel Requena Plens is: firmware & software engineer, background, featured open-source projects, and the editorial & corrections policy ([markdown](https://jmrp.io/about/index.md)) - [CV](https://jmrp.io/cv/): Professional curriculum vitae and experience ([markdown](https://jmrp.io/cv/index.md)) - [Publications](https://jmrp.io/publications/): Academic papers on acoustics, metamaterials, and ultrasound ([markdown](https://jmrp.io/publications/index.md)) - [Homelab](https://jmrp.io/homelab/): Self-hosted infrastructure: Mastodon, Matrix, AT Protocol PDS, MCP servers, Tor relays ([markdown](https://jmrp.io/homelab/index.md)) - [Projects](https://jmrp.io/projects/): Curated open-source software he authors and maintains: MCP servers, acoustics tooling, network security; language, license, source and docs per project ([markdown](https://jmrp.io/projects/index.md)) - [Open-source contributions](https://jmrp.io/projects/contributions/): Code and documentation merged into GitHub and GitLab projects he does not maintain, accepted GitHub Discussions answers, and packaging PRs, grouped by project ([markdown](https://jmrp.io/projects/contributions/index.md)) - [Tools](https://jmrp.io/tools/): Free browser-based developer tools; all run in the browser, and two make a request you trigger: the certificate inspector looks the domain up in public Certificate Transparency logs and the HTTP header analyzer fetches the URL through a proxy on this site - [Feeds](https://jmrp.io/feeds/): RSS feed URLs for both languages, plus the eight curated Bluesky feeds the author runs ([markdown](https://jmrp.io/feeds/index.md)) - [Uses](https://jmrp.io/uses/): Hardware, software, and homelab kept in rotation ([markdown](https://jmrp.io/uses/index.md)) - [Privacy](https://jmrp.io/privacy/): What the site measures and what it does not: no cookies, no third-party scripts, no ads; the access log fields and their one-year retention, the edge worker, and the report a browser can send back on its own, all named rather than summarized ([markdown](https://jmrp.io/privacy/index.md)) - [License](https://jmrp.io/license/): Reuse terms, stated per kind of work: articles, blog cover images and data files under CC BY 4.0, the site source MIT-licensed, and the portrait reserved because it identifies a person ([markdown](https://jmrp.io/license/index.md)) ## Sections (Español) - [Inicio](https://jmrp.io/es/): Versión en español del sitio completo ([markdown](https://jmrp.io/es/index.md)) - [Blog](https://jmrp.io/es/blog/): Artículos técnicos sobre Nginx, MikroTik, redes, seguridad, firmware embebido y DevOps - [Perfil](https://jmrp.io/es/about/): Quién es José Manuel Requena Plens: ingeniero de firmware y software, trayectoria, proyectos destacados y la política editorial y de correcciones ([markdown](https://jmrp.io/es/about/index.md)) - [CV](https://jmrp.io/es/cv/): Currículum profesional y experiencia ([markdown](https://jmrp.io/es/cv/index.md)) - [Publicaciones](https://jmrp.io/es/publications/): Artículos académicos sobre acústica, metamateriales y ultrasonidos ([markdown](https://jmrp.io/es/publications/index.md)) - [Homelab](https://jmrp.io/es/homelab/): Infraestructura autoalojada: Mastodon, Matrix, PDS de AT Protocol, servidores MCP, relés Tor ([markdown](https://jmrp.io/es/homelab/index.md)) - [Proyectos](https://jmrp.io/es/projects/): Software libre que escribe y mantiene: servidores MCP, herramientas de acústica, seguridad de red ([markdown](https://jmrp.io/es/projects/index.md)) - [Aportaciones open source](https://jmrp.io/es/projects/contributions/): Código y documentación fusionados en proyectos de GitHub y GitLab que no mantiene, respuestas aceptadas en GitHub Discussions y PR de empaquetado, agrupados por proyecto ([markdown](https://jmrp.io/es/projects/contributions/index.md)) - [Herramientas](https://jmrp.io/es/tools/): Herramientas gratuitas que se ejecutan en el navegador; dos hacen una petición cuando las usas: el inspector de certificados busca el dominio en registros públicos de Certificate Transparency y el analizador de cabeceras HTTP consulta la URL a través de un proxy de este sitio - [Feeds](https://jmrp.io/es/feeds/): URLs de los feeds RSS en ambos idiomas, más los ocho feeds curados de Bluesky que mantiene el autor ([markdown](https://jmrp.io/es/feeds/index.md)) - [Uses](https://jmrp.io/es/uses/): Hardware, software e infraestructura en uso ([markdown](https://jmrp.io/es/uses/index.md)) - [Privacidad](https://jmrp.io/es/privacy/): Qué mide el sitio y qué no: sin cookies, sin scripts de terceros, sin anuncios; los campos del registro de acceso y su retención de un año, el worker del borde, y el informe que un navegador puede enviar por su cuenta, todos nombrados en vez de resumidos ([markdown](https://jmrp.io/es/privacy/index.md)) - [Licencia](https://jmrp.io/es/license/): Condiciones de reutilización, por tipo de obra: artículos y portadas del blog bajo CC BY 4.0, código del sitio bajo MIT, y retrato reservado por identificar a una persona ([markdown](https://jmrp.io/es/license/index.md)) ## Series - [Series](https://jmrp.io/blog/series/): Curated reading paths through the blog: Nginx hardening, dual-stack MikroTik networking, ESP32-S3 firmware, and GitLab's API held to a running GitLab. ([markdown](https://jmrp.io/blog/series/index.md)) - [Hardening Nginx, edge inward](https://jmrp.io/blog/series/nginx-hardening/): Five Nginx guides in reading order: mTLS, CSP, HTTP/3, virtual files and a tarpit, one edge hardened decision by decision. ([markdown](https://jmrp.io/blog/series/nginx-hardening/index.md)) - [Dual-stack MikroTik, from the ISP to the firewall](https://jmrp.io/blog/series/mikrotik-dual-stack/): Three RouterOS guides: a dual-stack WireGuard VPN, PPPoE with DHCPv6 prefix delegation, and a honeypot that auto-blocks scanners. ([markdown](https://jmrp.io/blog/series/mikrotik-dual-stack/index.md)) - [Kleidos firmware: three decisions under hard constraints](https://jmrp.io/blog/series/kleidos-firmware/): Three deep dives from a hardware password manager on ESP32-S3: packed i18n strings, an encrypt-then-MAC vault, and device-bound key derivation. ([markdown](https://jmrp.io/blog/series/kleidos-firmware/index.md)) - [gitlab-mcp-server: GitLab's API, held to a running GitLab](https://jmrp.io/blog/series/gitlab-mcp-server/): Two deep dives from gitlab-mcp-server: checking GitLab's API against a booted GitLab, and deriving what a fine-grained token needs for each action. ([markdown](https://jmrp.io/blog/series/gitlab-mcp-server/index.md)) ## Series (Español) - [Series](https://jmrp.io/es/blog/series/): Itinerarios de lectura por el blog: endurecer Nginx, red MikroTik dual-stack, firmware sobre un ESP32-S3 y la API de GitLab ante un GitLab real. ([markdown](https://jmrp.io/es/blog/series/index.md)) - [Endurecer Nginx, desde el borde hacia dentro](https://jmrp.io/es/blog/series/nginx-hardening/): Cinco guías de Nginx en orden de lectura: mTLS, CSP, HTTP/3, ficheros virtuales y un tarpit, un borde endurecido decisión a decisión. ([markdown](https://jmrp.io/es/blog/series/nginx-hardening/index.md)) - [MikroTik dual-stack, del ISP al cortafuegos](https://jmrp.io/es/blog/series/mikrotik-dual-stack/): Tres guías de RouterOS: una VPN WireGuard dual-stack, PPPoE con delegación de prefijo DHCPv6 y un honeypot que bloquea escáneres solo. ([markdown](https://jmrp.io/es/blog/series/mikrotik-dual-stack/index.md)) - [Firmware de Kleidos: tres decisiones bajo restricciones duras](https://jmrp.io/es/blog/series/kleidos-firmware/): Tres análisis de un gestor de contraseñas hardware sobre ESP32-S3: cadenas i18n empaquetadas, bóveda encrypt-then-MAC y claves ligadas al dispositivo. ([markdown](https://jmrp.io/es/blog/series/kleidos-firmware/index.md)) - [gitlab-mcp-server: la API de GitLab ante un GitLab real](https://jmrp.io/es/blog/series/gitlab-mcp-server/): Dos análisis de gitlab-mcp-server: contrastar la API de GitLab con un GitLab arrancado y deducir qué necesita un token de grano fino para cada acción. ([markdown](https://jmrp.io/es/blog/series/gitlab-mcp-server/index.md)) ## Blog Posts - [Mastering Mutual TLS (mTLS) with Nginx: A Deep Dive](https://jmrp.io/blog/001-secure-nginx-client-certificates/): Implement Mutual TLS (mTLS) with Nginx — create a CA, generate client certificates, configure CRL and OCSP revocation, and enable Zero Trust. ([plain text](https://jmrp.io/blog/001-secure-nginx-client-certificates/index.md)) - [Mastering Virtual Files in Nginx: A Complete Guide](https://jmrp.io/blog/002-serve-virtual-files-nginx/): Serve virtual files in Nginx without disk I/O. Covers root vs alias vs try_files, named locations, Kubernetes health endpoints, and containers. ([plain text](https://jmrp.io/blog/002-serve-virtual-files-nginx/index.md)) - [Content Security Policy (CSP) with Nginx: The Complete Guide](https://jmrp.io/blog/003-implementing-content-security-policy-nginx/): Master Content Security Policy from zero to A+ — nonces, hashes, strict-dynamic, Trusted Types, bypass prevention, and production Nginx configs. ([plain text](https://jmrp.io/blog/003-implementing-content-security-policy-nginx/index.md)) - [Mastering QUIC and HTTP/3 with Nginx: The Complete Guide](https://jmrp.io/blog/004-enabling-quic-http3-nginx/): Deep dive into QUIC and HTTP/3 — technical architecture, security features, and step-by-step Nginx configuration for production deployment. ([plain text](https://jmrp.io/blog/004-enabling-quic-http3-nginx/index.md)) - [Implementing a Tarpit in Nginx: Trap Malicious Scanners](https://jmrp.io/blog/005-implementing-tarpit-nginx/): Implement an Nginx tarpit to slow down and trap malicious bots, vulnerability scanners, and brute-force attackers. Includes CrowdSec integration. ([plain text](https://jmrp.io/blog/005-implementing-tarpit-nginx/index.md)) - [MikroTik Honeypot: Trap & Auto-Block Port Scanners](https://jmrp.io/blog/006-implementing-mikrotik-honeypot/): Configure a MikroTik honeypot to detect port scanners, log malicious activity, and auto-block attackers using firewall address lists and the RAW table. ([plain text](https://jmrp.io/blog/006-implementing-mikrotik-honeypot/index.md)) - [MikroTik WireGuard VPN: Dual-Stack IPv4/IPv6 Configuration](https://jmrp.io/blog/007-mikrotik-wireguard-dual-stack-vpn/): Configure WireGuard VPN on MikroTik RouterOS with full IPv4/IPv6 dual-stack. Access your home network with native IPv6 from any connection. ([plain text](https://jmrp.io/blog/007-mikrotik-wireguard-dual-stack-vpn/index.md)) - [MikroTik PPPoE + DHCPv6-PD: Dual-Stack for DIGI Spain](https://jmrp.io/blog/008-mikrotik-pppoe-dualstack-digi/): Configure PPPoE with DHCPv6 Prefix Delegation on MikroTik RouterOS for DIGI Spain. VLAN tagging, SLAAC, prefix change handling, and firewall rules. ([plain text](https://jmrp.io/blog/008-mikrotik-pppoe-dualstack-digi/index.md)) - [Running a Tor Bridge on Linux: obfs4 and WebTunnel Guide](https://jmrp.io/blog/009-running-tor-bridge/): Guide to running obfs4 and WebTunnel Tor bridges on Linux with Nginx camouflage, firewall hardening, Prometheus monitoring, and CrowdSec. ([plain text](https://jmrp.io/blog/009-running-tor-bridge/index.md)) - [What the Linker Won't Do: Packing i18n Strings on an MCU](https://jmrp.io/blog/010-packed-i18n-string-pool/): A build-time generator packs firmware UI translations into one string pool indexed by uint16 offsets, halving the index table on a 32-bit MCU. ([plain text](https://jmrp.io/blog/010-packed-i18n-string-pool/index.md)) - [A Vault File That Fails Closed: Encrypt-then-MAC on an MCU](https://jmrp.io/blog/011-encrypt-then-mac-vault/): How a hardware password manager authenticates every vault file before it decrypts: encrypt-then-MAC, verify-before-decrypt, and fail-closed reads. ([plain text](https://jmrp.io/blog/011-encrypt-then-mac-vault/index.md)) - [Your 4-Digit PIN Is Fine: Device-Bound Keys on ESP32-S3](https://jmrp.io/blog/012-device-bound-key-derivation/): Why PBKDF2 iterations can't protect a 4-digit PIN on a microcontroller, and how an eFuse-HMAC device secret plus HKDF stops offline brute force. ([plain text](https://jmrp.io/blog/012-device-bound-key-derivation/index.md)) - [What building a GitLab MCP server taught me about GitLab's API](https://jmrp.io/blog/013-gitlab-mcp-server-api-lessons/): Building and checking an MCP server against GitLab found a 401 that meant 403 and writes answered as successes that saved nothing; each went upstream. ([plain text](https://jmrp.io/blog/013-gitlab-mcp-server-api-lessons/index.md)) - [GitLab fine-grained personal access tokens, one action at a time](https://jmrp.io/blog/014-gitlab-fine-grained-tokens-per-action/): A GitLab fine-grained token holds a grant, not scopes: REST refuses outside it, GraphQL answers null. I derive what each API action needs, ahead of time. ([plain text](https://jmrp.io/blog/014-gitlab-fine-grained-tokens-per-action/index.md)) ## Blog Posts (Español) - [Dominando Mutual TLS (mTLS) con Nginx: Una Guía Completa](https://jmrp.io/es/blog/001-secure-nginx-client-certificates/): Implementa Mutual TLS (mTLS) con Nginx — crea una CA, genera certificados de cliente, configura revocación CRL y OCSP, y habilita Zero Trust. ([texto plano](https://jmrp.io/es/blog/001-secure-nginx-client-certificates/index.md)) - [Domina los archivos virtuales en Nginx: Guía completa](https://jmrp.io/es/blog/002-serve-virtual-files-nginx/): Sirve archivos virtuales en Nginx sin I/O de disco. Cubre root vs alias vs try_files, named locations, endpoints de salud en Kubernetes y containers. ([texto plano](https://jmrp.io/es/blog/002-serve-virtual-files-nginx/index.md)) - [Content Security Policy (CSP) con Nginx: La Guía Completa](https://jmrp.io/es/blog/003-implementing-content-security-policy-nginx/): Domina Content Security Policy de cero a A+ — nonces, hashes, strict-dynamic, Trusted Types, prevención de bypass y configuraciones Nginx en producción. ([texto plano](https://jmrp.io/es/blog/003-implementing-content-security-policy-nginx/index.md)) - [Dominando QUIC y HTTP/3 con Nginx: La Guía Completa](https://jmrp.io/es/blog/004-enabling-quic-http3-nginx/): Inmersión profunda en QUIC y HTTP/3 — arquitectura técnica, seguridad y configuración paso a paso de Nginx para despliegue en producción. ([texto plano](https://jmrp.io/es/blog/004-enabling-quic-http3-nginx/index.md)) - [Implementar un Tarpit en Nginx: Atrapa a los Escáneres Maliciosos](https://jmrp.io/es/blog/005-implementing-tarpit-nginx/): Implementa un tarpit en Nginx para ralentizar bots maliciosos, escáneres de vulnerabilidades y ataques de fuerza bruta. Integración con CrowdSec incluida. ([texto plano](https://jmrp.io/es/blog/005-implementing-tarpit-nginx/index.md)) - [Honeypot en MikroTik: Atrapa y Bloquea Escáneres de Puertos](https://jmrp.io/es/blog/006-implementing-mikrotik-honeypot/): Configura un honeypot en MikroTik para detectar escáneres de puertos, registrar actividad maliciosa y bloquear atacantes automáticamente con la tabla RAW. ([texto plano](https://jmrp.io/es/blog/006-implementing-mikrotik-honeypot/index.md)) - [WireGuard en MikroTik: configuración dual-stack IPv4/IPv6](https://jmrp.io/es/blog/007-mikrotik-wireguard-dual-stack-vpn/): Configura WireGuard en MikroTik RouterOS con dual-stack IPv4/IPv6 completo. Accede a tu red doméstica con IPv6 nativo desde cualquier conexión. ([texto plano](https://jmrp.io/es/blog/007-mikrotik-wireguard-dual-stack-vpn/index.md)) - [MikroTik PPPoE + DHCPv6-PD: Dual-Stack para DIGI España](https://jmrp.io/es/blog/008-mikrotik-pppoe-dualstack-digi/): Configura PPPoE con DHCPv6 Prefix Delegation en MikroTik RouterOS para DIGI España. VLAN tagging, SLAAC, gestión de cambios de prefijo y firewall. ([texto plano](https://jmrp.io/es/blog/008-mikrotik-pppoe-dualstack-digi/index.md)) - [Bridge Tor en Linux: guía completa de obfs4 y WebTunnel](https://jmrp.io/es/blog/009-running-tor-bridge/): Guía para ejecutar bridges Tor obfs4 y WebTunnel en Linux con camuflaje Nginx, firewall, monitorización Prometheus e integración CrowdSec. ([texto plano](https://jmrp.io/es/blog/009-running-tor-bridge/index.md)) - [Lo que el linker no hará: empaquetar cadenas i18n en un MCU](https://jmrp.io/es/blog/010-packed-i18n-string-pool/): Un generador empaqueta las traducciones del firmware en un pool indexado por offsets uint16, reduciendo a la mitad la tabla índice en un MCU de 32 bits. ([texto plano](https://jmrp.io/es/blog/010-packed-i18n-string-pool/index.md)) - [Una bóveda con bloqueo ante fallos: Encrypt-then-MAC en un MCU](https://jmrp.io/es/blog/011-encrypt-then-mac-vault/): Cómo un gestor de contraseñas hardware autentica cada fichero antes de descifrar: Encrypt-then-MAC, verificación antes de descifrar y bloqueo ante fallos. ([texto plano](https://jmrp.io/es/blog/011-encrypt-then-mac-vault/index.md)) - [Un PIN de 4 dígitos basta: claves vinculadas al ESP32-S3](https://jmrp.io/es/blog/012-device-bound-key-derivation/): Por qué las iteraciones de PBKDF2 no protegen un PIN de 4 dígitos en un MCU, y cómo un secreto del dispositivo más HKDF frenan la fuerza bruta offline. ([texto plano](https://jmrp.io/es/blog/012-device-bound-key-derivation/index.md)) - [Lo que construir un servidor MCP me enseñó sobre la API de GitLab](https://jmrp.io/es/blog/013-gitlab-mcp-server-api-lessons/): Construir y contrastar un servidor MCP con GitLab destapó un 401 que era un 403 y escrituras aceptadas que no guardaban nada; cada caso acabó upstream. ([texto plano](https://jmrp.io/es/blog/013-gitlab-mcp-server-api-lessons/index.md)) - [Tokens de grano fino de GitLab, acción por acción](https://jmrp.io/es/blog/014-gitlab-fine-grained-tokens-per-action/): Un token de grano fino de GitLab lleva una concesión, no scopes: fuera de ella, REST rechaza y GraphQL responde null. Deduzco qué necesita cada acción. ([texto plano](https://jmrp.io/es/blog/014-gitlab-fine-grained-tokens-per-action/index.md)) ## Tool Categories - [Security Tools](https://jmrp.io/tools/categories/security/): Free security tools: a CSP policy builder and hash calculator, a certificate inspector, an HTTP header analyzer, and more. ([markdown](https://jmrp.io/tools/categories/security/index.md)) - [Developer Tools](https://jmrp.io/tools/categories/developer/): Free online developer utilities — Base64 encoder, regex tester, cron expression builder, Unix timestamp converter, and color contrast checker. ([markdown](https://jmrp.io/tools/categories/developer/index.md)) - [Network & Server Tools](https://jmrp.io/tools/categories/network/): Free network tools — an Nginx config generator and an IPv4/IPv6 subnet calculator with VLSM planning and reverse DNS. Both run in your browser. ([markdown](https://jmrp.io/tools/categories/network/index.md)) - [Embedded & Industrial Tools](https://jmrp.io/tools/categories/embedded/): Free embedded tools — a Modbus RTU/TCP frame builder with CRC, and a string-pool packer for firmware translation tables. Both run in your browser. ([markdown](https://jmrp.io/tools/categories/embedded/index.md)) - [MikroTik Tools](https://jmrp.io/tools/categories/mikrotik/): Free MikroTik RouterOS tools — WireGuard VPN config generator for dual-stack setups. All processing runs locally in your browser. ([markdown](https://jmrp.io/tools/categories/mikrotik/index.md)) ## Tool Categories (Español) - [Herramientas de seguridad](https://jmrp.io/es/tools/categories/security/): Herramientas de seguridad gratuitas — constructor de políticas y calculadora de hashes CSP, inspector de certificados, analizador de cabeceras y más. ([markdown](https://jmrp.io/es/tools/categories/security/index.md)) - [Herramientas para desarrolladores](https://jmrp.io/es/tools/categories/developer/): Utilidades gratuitas para desarrolladores — codificador Base64, probador regex, constructor cron, conversor timestamps y comprobador de contraste. ([markdown](https://jmrp.io/es/tools/categories/developer/index.md)) - [Herramientas de red y servidor](https://jmrp.io/es/tools/categories/network/): Herramientas de red gratuitas — generador de configuración Nginx y calculadora de subredes IPv4/IPv6 con VLSM y DNS inverso. Todo en tu navegador. ([markdown](https://jmrp.io/es/tools/categories/network/index.md)) - [Herramientas embebidas e industriales](https://jmrp.io/es/tools/categories/embedded/): Herramientas embebidas gratuitas — constructor de tramas Modbus RTU/TCP con CRC y empaquetador de string pool para traducciones de firmware. ([markdown](https://jmrp.io/es/tools/categories/embedded/index.md)) - [Herramientas MikroTik](https://jmrp.io/es/tools/categories/mikrotik/): Herramientas gratuitas para MikroTik RouterOS — generador de configuración WireGuard VPN para configuraciones dual-stack. Procesamiento local. ([markdown](https://jmrp.io/es/tools/categories/mikrotik/index.md)) ## Developer Tools - [Base64 Encoder / Decoder](https://jmrp.io/tools/base64-encoder/): Encode and decode Base64, Base64URL, URL encoding, hex, and HTML entities. File support for images and documents. Runs client-side. ([plain text](https://jmrp.io/tools/base64-encoder/index.md)) - [Certificate Inspector](https://jmrp.io/tools/cert-inspector/): Decode PEM SSL/TLS certificates or fetch from a URL client-side. Inspect subject, issuer, validity, SANs, key usage, and security assessment. ([plain text](https://jmrp.io/tools/cert-inspector/index.md)) - [Color Contrast Checker](https://jmrp.io/tools/color-contrast-checker/): Check color contrast ratios for WCAG 2.2 AA and AAA compliance with APCA support, color blindness simulation, and auto-fix suggestions. Runs client-side. ([plain text](https://jmrp.io/tools/color-contrast-checker/index.md)) - [Cron Expression Builder](https://jmrp.io/tools/cron-builder/): Visual cron expression builder with interactive field selectors, presets, next execution preview, and crontab output. Runs client-side. ([plain text](https://jmrp.io/tools/cron-builder/index.md)) - [CSP Hash Calculator](https://jmrp.io/tools/hash-calculator/): Generate SHA-256 hashes for inline scripts. Get ready-to-use CSP directives for your Content Security Policy. Runs client-side. ([plain text](https://jmrp.io/tools/hash-calculator/index.md)) - [CSP Policy Builder](https://jmrp.io/tools/csp-builder/): Build Content Security Policy headers interactively. Toggle directives, see the policy generated live, and get a security rating. Runs client-side. ([plain text](https://jmrp.io/tools/csp-builder/index.md)) - [Encrypt-then-MAC Envelope Visualizer](https://jmrp.io/tools/etm-envelope-visualizer/): Seal a secret into an encrypt-then-MAC envelope, flip a byte, and watch the read verify the tag before decrypting. Runs client-side. ([plain text](https://jmrp.io/tools/etm-envelope-visualizer/index.md)) - [HTTP Security Headers Analyzer](https://jmrp.io/tools/http-headers-analyzer/): Analyze HTTP response headers for security best practices. Get a security score, recommendations, and detailed analysis for each header. ([plain text](https://jmrp.io/tools/http-headers-analyzer/index.md)) - [IP / Subnet Calculator](https://jmrp.io/tools/subnet-calculator/): IPv4 and IPv6 subnet calculator with CIDR notation, VLSM planner, range-to-CIDR converter, and reverse DNS. Runs client-side. ([plain text](https://jmrp.io/tools/subnet-calculator/index.md)) - [Modbus Frame Builder](https://jmrp.io/tools/modbus-frame-builder/): Build and decode Modbus RTU/TCP/ASCII frames with CRC-16/LRC calculation, register interpretation, and byte visualization. Runs client-side. ([plain text](https://jmrp.io/tools/modbus-frame-builder/index.md)) - [Nginx Config Generator](https://jmrp.io/tools/nginx-config-generator/): Generate Nginx server blocks with upstream, QUIC/HTTP3, rate limiting, tarpit, OCSP stapling, and modern TLS. Runs client-side. ([plain text](https://jmrp.io/tools/nginx-config-generator/index.md)) - [Offline PIN Brute-Force Calculator](https://jmrp.io/tools/pin-brute-force-calculator/): Estimate how long an offline GPU takes to brute-force a PIN through PBKDF2 — then toggle device binding and watch it become infeasible. Runs client-side. ([plain text](https://jmrp.io/tools/pin-brute-force-calculator/index.md)) - [Password Generator](https://jmrp.io/tools/password-generator/): Generate strong passwords and passphrases using the Web Crypto API. Estimate entropy, crack time, and customize character sets — all client-side. ([plain text](https://jmrp.io/tools/password-generator/index.md)) - [Regex Tester](https://jmrp.io/tools/regex-tester/): Test regular expressions with real-time match highlighting, capture groups, replace mode, and common pattern presets. Runs in your browser. ([plain text](https://jmrp.io/tools/regex-tester/index.md)) - [String-Pool Packer](https://jmrp.io/tools/string-pool-packer/): Compare a pointer table vs a packed, tail-merged string pool with uint16 offsets. Paste strings and watch the bytes saved. Runs client-side. ([plain text](https://jmrp.io/tools/string-pool-packer/index.md)) - [Unix Timestamp to Date Converter](https://jmrp.io/tools/timestamp-converter/): A Unix timestamp counts seconds since 1970-01-01 UTC. Convert one to a date and back, seconds or milliseconds, in 11 time zones — all in your browser. ([plain text](https://jmrp.io/tools/timestamp-converter/index.md)) - [WireGuard Config Generator](https://jmrp.io/tools/wireguard-config-generator/): Generate MikroTik RouterOS WireGuard VPN configs with dual-stack IPv4/IPv6, firewall rules, NAT, peers, and client files. Runs client-side. ([plain text](https://jmrp.io/tools/wireguard-config-generator/index.md)) ## Developer Tools (Español) - [Analizador de Cabeceras HTTP de Seguridad](https://jmrp.io/es/tools/http-headers-analyzer/): Analiza cabeceras HTTP de respuesta y buenas prácticas de seguridad. Obtén puntuación, recomendaciones y análisis detallado de cada cabecera. ([texto plano](https://jmrp.io/es/tools/http-headers-analyzer/index.md)) - [Calculadora de fuerza bruta offline de PIN](https://jmrp.io/es/tools/pin-brute-force-calculator/): Estima cuánto tarda una GPU offline en romper un PIN con PBKDF2; activa la vinculación al chip y mira cómo se vuelve inviable. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/pin-brute-force-calculator/index.md)) - [Calculadora de Hashes CSP](https://jmrp.io/es/tools/hash-calculator/): Genera hashes SHA-256 para scripts inline. Obtén directivas CSP listas para usar en tu Content Security Policy. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/hash-calculator/index.md)) - [Calculadora de Subredes IP](https://jmrp.io/es/tools/subnet-calculator/): Calculadora de subredes IPv4 e IPv6 con notación CIDR, planificador VLSM, conversor de rangos a CIDR y DNS inverso. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/subnet-calculator/index.md)) - [Codificador / Decodificador Base64](https://jmrp.io/es/tools/base64-encoder/): Codifica y decodifica Base64, Base64URL, URL encoding, hex y entidades HTML. Soporte de archivos para imágenes y documentos. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/base64-encoder/index.md)) - [Constructor de Expresiones Cron](https://jmrp.io/es/tools/cron-builder/): Constructor visual de expresiones cron con selectores interactivos, presets, vista previa de ejecuciones y línea crontab. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/cron-builder/index.md)) - [Constructor de Políticas CSP](https://jmrp.io/es/tools/csp-builder/): Construye cabeceras Content Security Policy de forma interactiva. Activa directivas, genera la política y evalúa su seguridad. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/csp-builder/index.md)) - [Constructor de Tramas Modbus](https://jmrp.io/es/tools/modbus-frame-builder/): Construye y decodifica tramas Modbus RTU/TCP/ASCII con cálculo de CRC-16/LRC e interpretación de registros. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/modbus-frame-builder/index.md)) - [Conversor de Timestamp Unix a Fecha](https://jmrp.io/es/tools/timestamp-converter/): Un timestamp Unix cuenta segundos desde 1970-01-01 UTC. Conviértelo a fecha y al revés, en segundos o milisegundos y 11 zonas horarias. En tu navegador. ([texto plano](https://jmrp.io/es/tools/timestamp-converter/index.md)) - [Empaquetador de String Pool](https://jmrp.io/es/tools/string-pool-packer/): Compara una tabla de punteros con un pool de cadenas empaquetado con offsets uint16. Pega cadenas y observa el ahorro. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/string-pool-packer/index.md)) - [Generador de Configuración Nginx](https://jmrp.io/es/tools/nginx-config-generator/): Genera bloques de servidor Nginx con upstream, QUIC/HTTP3, rate limiting, tarpit, OCSP stapling y TLS moderno. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/nginx-config-generator/index.md)) - [Generador de Configuración WireGuard](https://jmrp.io/es/tools/wireguard-config-generator/): Genera configuraciones VPN WireGuard para MikroTik RouterOS con dual-stack IPv4/IPv6, firewall, NAT, peers y ficheros de cliente. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/wireguard-config-generator/index.md)) - [Generador de Contraseñas](https://jmrp.io/es/tools/password-generator/): Genera contraseñas y frases de contraseña seguras con la Web Crypto API. Estima entropía y tiempo de descifrado. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/password-generator/index.md)) - [Inspector de Certificados](https://jmrp.io/es/tools/cert-inspector/): Decodifica certificados SSL/TLS en formato PEM o descárgalos desde una URL en el navegador. Inspecciona sujeto, emisor, validez, SANs y seguridad. ([texto plano](https://jmrp.io/es/tools/cert-inspector/index.md)) - [Probador de Regex](https://jmrp.io/es/tools/regex-tester/): Prueba expresiones regulares con resaltado en tiempo real, capture groups, modo de reemplazo y presets de patrones comunes. Se ejecuta en tu navegador. ([texto plano](https://jmrp.io/es/tools/regex-tester/index.md)) - [Verificador de Contraste de Color](https://jmrp.io/es/tools/color-contrast-checker/): Comprueba ratios de contraste de color para WCAG 2.2 AA y AAA con soporte APCA, simulación de daltonismo y sugerencias automáticas. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/color-contrast-checker/index.md)) - [Visualizador del sobre Encrypt-then-MAC](https://jmrp.io/es/tools/etm-envelope-visualizer/): Sella un secreto en un sobre encrypt-then-MAC, altera un byte y observa cómo la lectura verifica el tag antes de descifrar. Todo en el navegador. ([texto plano](https://jmrp.io/es/tools/etm-envelope-visualizer/index.md)) ## MCP Servers (self-hosted, different domain) - [mcp.jmrp.io](https://mcp.jmrp.io/): Public Model Context Protocol servers the author runs on his own infrastructure, with a browser inspector to try them. Streamable HTTP transport; `POST` only: a `GET` on an endpoint returns 405 by design. - [gitlab](https://mcp.jmrp.io/gitlab): 850+ GitLab actions as tools (1,000+ depending on edition and deployment). Needs a `PRIVATE-TOKEN` header per request; the token is never stored server-side. Source: [gitlab-mcp-server](https://github.com/jmrplens/gitlab-mcp-server). - [libgen](https://mcp.jmrp.io/libgen): Search and download books, papers, comics, magazines and standards from Library Genesis. No credentials required. Source: [libgen-mcp](https://github.com/jmrplens/libgen-mcp). - [servers.json](https://mcp.jmrp.io/servers.json): The same list as machine-readable JSON, for automatic clients. ## Servidores MCP (autoalojados, en otro dominio) - [mcp.jmrp.io](https://mcp.jmrp.io/es/): Servidores públicos de Model Context Protocol que el autor ejecuta en su propia infraestructura, con un inspector en el navegador para probarlos. Transporte Streamable HTTP; solo `POST`: un `GET` a un endpoint devuelve 405 por diseño. - [gitlab](https://mcp.jmrp.io/gitlab): Más de 850 acciones de GitLab como tools (más de 1.000 según edición y despliegue). Requiere una cabecera `PRIVATE-TOKEN` por petición; el token nunca se guarda en el servidor. Código: [gitlab-mcp-server](https://github.com/jmrplens/gitlab-mcp-server). - [libgen](https://mcp.jmrp.io/libgen): Busca y descarga libros, artículos, cómics, revistas y normas de Library Genesis. Sin credenciales. Código: [libgen-mcp](https://github.com/jmrplens/libgen-mcp). - [servers.json](https://mcp.jmrp.io/servers.json): La misma lista como JSON legible por máquina, para clientes automáticos. ## Contact - [GitHub](https://github.com/jmrplens) - [GitLab](https://gitlab.com/jmrp) - [LinkedIn](https://www.linkedin.com/in/jmrplens) - [Mastodon](https://mstdn.jmrp.io/@jmrplens) - [Bluesky](https://bsky.app/profile/jmrp.io) - [Matrix](https://matrix.to/#/@jmrplens:matrix.jmrp.io) - [Keyoxide](https://keyoxide.org/0A993B268654DBBA52B7E8D3FCF653391E2C91FC) - [Codeberg](https://codeberg.org/jmrplens) - [Google Scholar](https://scholar.google.com/citations?user=9b0kPaUAAAAJ) - [ORCID](https://orcid.org/0000-0003-1250-6212) - [ResearchGate](https://www.researchgate.net/profile/Jose-Requena-Plens-2) - [MATLAB Central](https://www.mathworks.com/matlabcentral/profile/authors/5890853) - [PyPI](https://pypi.org/user/jmrplens/) - [Docker Hub](https://hub.docker.com/u/jmrplens) - [npmjs.com](https://www.npmjs.com/~jmrpio) - [nuget.org](https://www.nuget.org/profiles/jmrplens) - [mcptoplist.com](https://mcptoplist.com/u/jmrplens) - [community.home-assistant.io](https://community.home-assistant.io/u/jmrplens) - [forum.mikrotik.com](https://forum.mikrotik.com/u/jmrplens) - [sifa.id](https://sifa.id/p/jmrp.io) - [stackexchange.com](https://stackexchange.com/users/7889616/jmrplens) - [dsp.stackexchange.com](https://dsp.stackexchange.com/users/51783/jmrplens) - [stackoverflow.com](https://stackoverflow.com/users/5960262/jmrplens) - [tangled.org](https://tangled.org/jmrp.io) - [Email](mailto:mail@jmrp.io) ## Optional - [Person entity (JSON-LD)](https://jmrp.io/identity/person.jsonld): Machine-readable identity node for the author - [Project list (JSON)](https://jmrp.io/identity/projects.json): Every public project on /projects/ as one JSON document (name, status, license, repository, docs, listings), generated from the same source as the page - [Full context](https://jmrp.io/llms-full.txt): Both languages in one document: every tool in full, plus a linked index of every post - [RSS feed (EN)](https://jmrp.io/rss.xml): English blog feed - [RSS feed (ES)](https://jmrp.io/es/rss.xml): Spanish blog feed