Skip to main content
Glama
hackyeaster-solver

hackyeaster-solver

HackyEaster Solver

MCP server for Claude-driven HackyEaster CTF solving. Uses Scrapling for page fetching and exposes CTF utility tools so Claude can reason through challenges, submit answers via Playwright, and iterate.

Setup

Quick install (no clone needed)

Add to your ~/.mcp.json:

{
  "mcpServers": {
    "hackyeaster": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/cloudwarriors-ai/hackyeaster-solver", "hackyeaster-mcp"]
    }
  }
}

Restart Claude Code. The he_* tools will appear in the MCP servers panel.

Local development

If you want to modify the server or keep persistent state in a known location:

git clone https://github.com/cloudwarriors-ai/hackyeaster-solver.git
cd hackyeaster-solver
uv sync

Then in ~/.mcp.json, point at your local clone:

{
  "mcpServers": {
    "hackyeaster": {
      "command": "bash",
      "args": ["-c", "uv run --directory /path/to/hackyeaster-solver python -m hackyeaster_mcp.server"]
    }
  }
}

Related MCP server: Claude Memory

Tools

Scraping

Tool

Description

he_discover_challenges

Scrape hackyeaster.com and return available challenges

he_fetch_challenge

Fetch and parse a specific challenge page

he_fetch_raw

Fetch any URL and return raw HTML

CTF Utilities

Tool

Description

he_decode

Decode: base64, hex, url, binary, morse, decimal, octal, base32

he_transform

Transform: caesar, rot13, swap_pairs, reverse, rail_fence, vigenere, xor, atbash

he_analyze_image

Download image for visual analysis + QR/barcode detection

he_hash

Compute hashes: md5, sha1, sha256, sha512

State

Tool

Description

he_log_attempt

Record a solve attempt

he_get_progress

View all attempts and solved challenges

he_validate_flag

Check if text matches flag format he20XX{...}

How It Works

Claude is the solver. The MCP server provides the tools; Claude provides the reasoning.

  1. he_discover_challenges — scrape the site for challenges

  2. he_fetch_challenge — read challenge content, hints, embedded data

  3. Claude reasons about the puzzle, calls he_decode / he_transform / he_analyze_image as needed

  4. Playwright MCP (separate, already available in Claude Code) handles form interaction and answer submission

  5. he_log_attempt tracks what was tried and what worked

Requirements

  • Python 3.11+

  • uv

  • Claude Code with MCP support

  • Playwright MCP server (for answer submission when challenges go live)

Architecture

Claude (solver brain)
  |
  +-- hackyeaster MCP -- Scrapling fetch + CTF utils + state
  |
  +-- playwright MCP --- form interaction, submit answers, screenshots

Available Tools

12 tools
he_analyze_imageA

Download an image URL and return it as base64 for visual analysis. Also attempts QR code / barcode detection if pyzbar is available.

Inputs: url (required).

he_decodeB

Decode data using a specified encoding: base64, hex, url, binary, morse, decimal, octal, base32.

Inputs: data (required), encoding (required).

he_discover_challengesB

Scrape hackyeaster.com and return a list of available challenges with titles, URLs, descriptions, and embedded data.

Inputs: dynamic.

he_download_fileA

Download a challenge's attached file via the authenticated HackyEaster API. Fetches /app/rest/user/challenge/{id}/file and saves to the data/ directory. Returns the saved path, filename, content-type, and size in bytes.

Inputs: challenge_id (required).

he_fetch_challengeA

Fetch a specific challenge page and return parsed content: title, description, hints, code blocks, images, links.

Inputs: url (required), dynamic.

he_fetch_rawC

Fetch any URL and return the raw HTML. Useful for following links or checking resources.

Inputs: url (required), dynamic.

he_get_progressA

Return all solve attempts grouped by challenge, with summary of total attempts and solved count.

Inputs: no named parameters.

he_hashB

Compute a hash of the given data. Algorithms: md5, sha1, sha256, sha512.

Inputs: data (required), algorithm.

he_log_attemptB

Record a solve attempt for a challenge. Tracks answer, correctness, and notes.

Inputs: answer (required), correct (required), challenge_id (required), notes.

he_submit_flagA

Submit a flag for a challenge via the authenticated HackyEaster API. POSTs to /app/rest/user/challenge/{id}/checkflag. Returns the API response (accepted/rejected/already-solved).

Inputs: flag (required), challenge_id (required).

he_transformB

Apply a cipher/transform: caesar (with shift param), rot13, swap_pairs, reverse, rail_fence (with rails param), vigenere (with key param), xor (with key param), atbash, caesar_bruteforce.

Inputs: data (required), method (required), key, rails, +2 more.

he_validate_flagA

Check if a string matches the HackyEaster flag format (he20XX{...}).

Inputs: text (required).

Tool Schema Changelog

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

    TDQS

    A3.7/5.0

    Scored across 12 tools

    Disambiguation5/5

    Each tool has a distinct purpose: image analysis, hashing, logging, progress tracking, flag handling, file download, challenge discovery, page fetching, raw HTML fetching, decoding, and transformation. No overlapping functionality.

    Naming Consistency5/5

    All tools use the 'he_' prefix and snake_case. Most follow verb_noun pattern (e.g., analyze_image, validate_flag) with a few single-verb names (hash, decode, transform) that are clear in context.

    Tool Count5/5

    12 tools cover all necessary operations for the HackyEaster puzzle solver domain: discovery, fetching, analysis, decryption/transformation, flag submission, and progress tracking. Neither too sparse nor too many.

    Completeness4/5

    The toolset covers core workflows well, including image analysis with QR/barcode detection, hashing, decoding, cipher transformations, and flag lifecycle. Minor gaps like encoding or OCR are not essential for the domain.

    Related MCP Connectors

    Related MCP Servers