Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
Solver
Your AI-Powered Server Assistant
Solver is a lightweight AI admin assistant for Minecraft (Paper/Folia/Purpur) built around Fyrx, your built-in AI assistant. It started as a crash-report translator — say goodbye to scrolling through hundreds of lines of cryptic Java stack traces — and has grown into a full moderation and sanctions toolkit, all driven by the AI provider of your choice: Anthropic Claude, Google Gemini, or any OpenAI-compatible endpoint (including local/self-hosted models).
Whenever your server hits an error, a crash, a lag spike, or a chat incident, Fyrx analyzes it in the background and gives you a human-readable explanation and actionable next steps directly in your console or in-game.
Key Features
Diagnostics
- AI Crash Analysis: Automatically intercepts native JVM crashes and standard Minecraft crash reports, explaining exactly which plugin, memory issue, or broken chunk caused the disaster.
- Early Startup Error Detection: Captures plugin incompatibility errors that happen before the server even fully starts, alerting you immediately upon boot.
- Lag & Freeze Detection (TickMonitor): Continuously monitors your server's TPS. If the main thread freezes for more than a few seconds (deadlocks), Fyrx analyzes the thread dump and tells you which plugin is choking the server. Runs natively on Folia, which handles its own watchdog.
AI Chat Moderation
- Reads the whole conversation, not a word blacklist: Fyrx evaluates the real CONTEXT of a chat exchange to tell insistent harassment apart from harmless banter between friends.
- Fixed categories, every offender flagged: verdicts come back tagged as
TOXIC,HARASSMENT,THREAT,HATE_SPEECH,SCAM, orSPAM— one entry per player actually misbehaving, not a single guessed word for the whole scan. - Confidence meter: every verdict shows how sure Fyrx is that it's correct (0-100%), separate from how severe the behavior is.
- Configurable response: alert-only, private warning, or full auto mute/kick by severity threshold — your call.
Sanctions System (BETA)
/solver warn|mute|tempmute|kick|ban|tempban <player> [duration] <reason>— every sanction gets a real ID and a persistent history (/solver history,/solver check <id>).- Bans are actually enforced on reconnect, not just a one-time kick. Mutes work even with AI chat moderation turned off.
Fully Customizable Messages
- Every message the plugin sends (help, errors, sanctions, moderation alerts) lives in
messages.ymlwith full MiniMessage support — colors, gradients, hover text, whatever you want. - Multi-language out of the box:
en_US,es_ESfully translated; 7 more locales supported for AI prompts.
🔌 Optional Integrations (BETA)
-
PlaceholderAPI support —
%solver_muted%,%solver_warns%,%solver_active_sanctions%, and more for your scoreboard/tab-list/chat plugins. Does nothing if you don't have PlaceholderAPI installed. -
Clean & Beautiful UI: AI responses are beautifully formatted using native Minecraft color codes / MiniMessage directly in your console and in-game.
-
100% Asynchronous & Zero-Lag: All AI processing, file reading, database access, and network requests run off the main thread. Your server's TPS won't drop while Fyrx is thinking.

How to use
- Drop
Solver-0.7.0.jarinto yourpluginsfolder. - Start the server once to generate
config.yml. - Open
plugins/Solver/config.yml, pick a provider (anthropic,google, orother), and paste its API key. - Restart the server. Fyrx is now monitoring! Run
/solver helpin-game or console for the full command list.
(Want to test it safely? Use /solver crashme dry-run for a synthetic crash analysis, or /solver moderation test <message> to try the moderation AI — neither one touches your real server.)
Requirements
- Server Type: Paper, Folia, Purpur, or forks. (Chat moderation needs Paper's
AsyncChatEvent— Spigot isn't supported yet, it's on the roadmap). - Minecraft Version: 1.20.x (backwards compatible with older versions).
- Java: Java 17 or higher.
- API Key: From your chosen provider — Anthropic, Google Gemini (has a free tier), or any OpenAI-compatible endpoint.

config.yml
# ███████╗ ██████╗ ██╗ ██╗ ██╗███████╗██████╗
# ██╔════╝██╔═══██╗██║ ██║ ██║██╔════╝██╔══██╗
# ███████╗██║ ██║██║ ██║ ██║█████╗ ██████╔╝
# ╚════██║██║ ██║██║ ██║ ██║██╔══╝ ██╔══██╗
# ███████║╚██████╔╝███████╗╚██████╔╝███████╗██║ ██║
# ╚══════╝ ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝
# Solver Configuration
commandspy:
enabled: true
# "*" watches every command. Otherwise list specific command names (without the leading /) to
# watch only those, e.g. ["op", "gamemode", "give"].
watch-patterns:
- '*'
# Player names (case-insensitive) never relayed, regardless of who's watching.
exempt-players: []
# Anyone holding one of these permissions is never relayed either.
exempt-permissions: []
inspect:
# Keep refreshing the opened inventory every few ticks instead of a one-time snapshot. This is
# polling, not a real push update (Bukkit has no "inventory changed" event to react to).
live-refresh: false
live-refresh-interval-ticks: 10
standalone-commands:
reports: true
staff-mode: true # /vanish, /freeze, /staffchat
sanctions: true # /warn, /mute, /tempmute, /kick, /ban, /tempban, /unban, /unmute, /unwarn, /history, /check, /note
moderation: true # /moderation
# Language (en_US, es_ES, pt_BR, ru_RU, de_DE, fr_FR, ja_JP, ko_KR, eo_EO)
localization: es_ES
# Automatically analyze whether there was a crash when the server starts up
check-crash-on-startup: true
# Monitor the entire console for errors (red text)
monitor-console: true
# Avoid analyzing the same error multiple times (minutes to wait)
error-cooldown-minutes: 10
# Solver Main Configuration
# Show the giant ASCII art banner in the console on startup?
show-banner: true
# AI Provider Configuration
ai-provider:
# Provider: 'anthropic', 'google' or 'other'
provider: google
# Model to use
# Anthropic: Sonnet, Haiku, Opus
# Google: Pro, Flash
# Other: Model name (e.g: gpt-4o, mistral-large)
model: gemini-3-flash-preview
# API Keys
anthropic-key: ''
google-key: AQ.Ab8RN6J4nC7mXDU49iOe5F-KMajwFrFbS1WRDZsCd5ffFoK13A
# Configuration for the 'other' provider (OpenAI-compatible)
other-key: ''
other-url: https://api.openai.com/v1/chat/completions
# Analysis configuration
analysis:
# Automatically analyze exceptions
auto-analyze: true
# Timeout for analysis (seconds)
timeout: 60
# Save analysis to file
save-to-file: true
# Reports directory
reports-directory: crash-reports
# How many days to keep analyses saved in analysis-logs/ before deleting them.
# 0 = keep forever.
reports-retention-days: 0
# Notifications
notifications:
# Notify admins in-game when there's an error
notify-admins: true
# Send analysis to chat (in addition to console)
send-to-chat: false
# AI Chat Moderation (Fyrx reads chat and evaluates the CONTEXT of the conversation,
# not a word blacklist. Enabling this sends chat content to the AI provider configured
# above in 'ai-provider'. Disabled by default for privacy.
chat-moderation:
enabled: true
# If true (default), OPs are automatically exempt from chat moderation.
# Set to false so OPs are also examined like any other player. The
# solver.moderation.bypass permission still works independently to exempt a specific
# player (OP or not), regardless of this value.
exempt-ops: false
# Maximum recent messages to remember per player / globally
buffer-size: 50
# Time window of context sent to the AI (minutes)
context-window-minutes: 5
# How often (seconds) to check whether there's new chat to analyze (unconditional
# sweep, never depends on the pre-filter: nothing can be hidden from the AI this way)
analysis-interval-seconds: 45
# How to scan chat each cycle:
# bulk: 1 single AI call with the whole mixed conversation. Cheap, but with many
# players talking at once the AI can confuse who said what.
# individual: 1 AI call PER player with new activity. The offender is already known
# beforehand (the AI doesn't have to guess), so this eliminates that confusion
# risk, but the cost scales with how many players are active per cycle - on a
# busy server this can burn through the provider's rate limit fast.
scan-mode: bulk
# How often the AI actually gets called to check chat (0-3). scan-mode above decides HOW
# the AI is called; this decides WHEN.
# 0 = never call the AI - the pre-filter above decides entirely on its own (cheaper/faster,
# less accurate; works with no AI provider configured at all).
# 1 = only call the AI once the pre-filter already flagged something suspicious (balanced).
# 2 = default/classic behavior: the AI reviews all new chat every cycle, regardless of
# whether the pre-filter flagged anything.
# 3 = real-time: every message is sent to the AI immediately as it arrives, instead of
# waiting for analysis-interval-seconds (much faster reaction, at the cost of many more calls).
llm-analysis-level: 2
# Lightweight pre-filter: computes an urgency score (0.0-1.0) combining several signals.
# NEVER decides whether something is harassment nor blocks the analysis - the sweep
# above still reads all the chat regardless. It only decides whether it's worth WAKING
# Fyrx up early instead of waiting for the full interval, to react faster in obvious cases.
pre-filter:
# Raises the urgency score if the same player receives several messages in a row from
# others (possible insistent harassment toward a fixed target).
trigger-on-repeated-target: true
# Fraction (0.0-1.0) of a message in UPPERCASE from which it's considered "shouted"
# and adds urgency score (0.6 = 60% or more of the message in caps).
trigger-on-caps-ratio: 0.6
# How many messages from a player need to build up before the pre-filter starts
# evaluating the "repeated target" pattern described above.
min-messages-before-trigger: 3
# Minimum score (0.0-1.0) to trigger an immediate analysis instead of waiting
urgent-score-threshold: 0.65
# What to do when the AI reports a toxic/harassment verdict
action:
# alert-only: only notifies players with the solver.notify permission
# warn-player: alert-only + a private notice to the flagged player
# auto-action: warn-player + automatic mute/kick based on severity (1-5)
mode: alert-only
# Severity (1-5, set by the AI on each verdict) at which "auto-action" automatically
# mutes the player instead of just warning them.
severity-threshold-mute: 4
# Severity at which "auto-action" automatically kicks the player instead of muting them.
# Should be >= severity-threshold-mute for the escalation to make sense.
severity-threshold-kick: 5
# Duration in minutes of the automatic mute applied by "auto-action" when crossing
# severity-threshold-mute (does not affect the manual /solver mute|tempmute).
mute-duration-minutes: 10
# Multi-signal corroboration: the AI verdict alone can only trigger a real warn/mute/kick
# when it's at least this confident AND this severe. Below that, it also needs at least one
# corroborating pre-filter signal (caps/insult/repeated-target/burst - see pre-filter above);
# without one it stays as a staff-only alert for manual review via /solver check, never an
# automatic sanction. Confidence 0-100, severity 1-5.
min-confidence-to-act-alone: 85
min-severity-to-act-alone: 4
# Save every detected incident to moderation-reports/
log-incidents-to-file: true
# Also show in console the result of /solver moderation test <message> when a player
# runs it (the console always sees it already if it's the one running the command).
log-test-results-to-console: true
# How many days to keep incidents saved in moderation-reports/ before deleting them.
# 0 = keep forever.
reports-retention-days: 0
# ⚠ BETA: Sanctions System (warn/mute/kick/ban via /solver, persistent history in
# sanctions.db). Double-check /solver history after any sanction until you're fully
# comfortable with how it behaves on your server.
punishments:
mysql:
host: localhost
port: 3306
database: solver
user: solver
password: ''
reason-templates: {}
warn-escalation: {}
appeals:
# Show a line pointing to /solver appeal <id> <reason> in warn/mute/kick/ban messages.
show-in-sanction-message: true
# Where sanction history is stored.
storage: sqlite
# ⚠ BETA: Staff Mode Toolkit (vanish/freeze/staff chat via /solver).
staff-mode:
profiles: {}
vanish:
invulnerable-while-vanished: false
# Also subtract vanished players from the online-player count shown in the server list (MOTD)
hide-from-server-list: true
freeze:
# Commands allowed while a player is frozen (without the leading /)
allowed-commands:
- msg
- tell
- r
- helpop
Commands
Base command: /solver (alias: /as)
Commands
/solver help: Displays the list of available commands.
/solver reload: Reloads the plugin's configuration and messages.
/solver analyze-last: Re-analyzes the last detected crash/error.
/solver crashme <exception|deadlock|oom|dry-run>: Triggers a synthetic error for testing the AI analysis pipeline.
/solver moderation status: Shows the current chat moderation diagnostics (buffer, last verdict, action mode, scan mode, AI analysis level, etc).
/solver moderation test <message>: Runs a message through the AI moderation prompt without it being a real chat message.
/solver warn <player> <reason>: Issues a warning.
/solver mute <player> <reason>: Mutes a player indefinitely.
/solver tempmute <player> <duration> <reason>: Mutes a player for a set duration.
/solver kick <player> <reason>: Kicks a player.
/solver ban <player> <reason>: Bans a player indefinitely.
/solver tempban <player> <duration> <reason>: Bans a player for a set duration.
/solver unban <player>: Lifts an active ban/tempban.
/solver unmute <player>: Lifts an active mute/tempmute.
/solver unwarn <player>: Revokes the player's most recent active warning.
/solver history <player>: Shows a player's full sanction history.
/solver check <id>: Shows the details of a single sanction by its ID.
/solver note <player> <text>: Attaches a staff-only note to a player, without issuing a sanction.
/solver vanish: Toggles your own vanish (hidden from other players, mob targeting, join/quit messages, and the server list count).
/solver freeze <player>: Toggles a freeze on a player (can't move, can't run most commands, can't break/place blocks, can't deal or take combat damage).
/solver staffchat: Toggles staff-chat mode (your normal chat messages go to staff only instead of public chat).
/solver staffchat <message>: Sends a one-off message to staff chat without toggling the mode.
Permissions
## Permissionssolver.admin: Full access to every command below (includes all 3 groups). Default: op.
solver.notify: Receive error and chat-moderation staff alerts. Default: op.
solver.moderation.bypass: Exempts this specific player from chat moderation, regardless of OP status. Default: false.
solver.diagnostics.*: All diagnostics commands (reload/analyze-last/crashme/moderation). Default: false.
solver.diagnostics.reload: Allows /solver reload.
solver.diagnostics.analyzelast: Allows /solver analyze-last.
solver.diagnostics.crashme: Allows /solver crashme.
solver.diagnostics.moderation: Allows /solver moderation status|test.
solver.sanctions.*: All sanctions commands. Default: false.
solver.sanctions.warn: Allows /solver warn.
solver.sanctions.mute: Allows /solver mute.
solver.sanctions.tempmute: Allows /solver tempmute.
solver.sanctions.kick: Allows /solver kick.
solver.sanctions.ban: Allows /solver ban.
solver.sanctions.tempban: Allows /solver tempban.
solver.sanctions.unban: Allows /solver unban.
solver.sanctions.unmute: Allows /solver unmute.
solver.sanctions.unwarn: Allows /solver unwarn.
solver.sanctions.history: Allows /solver history.
solver.sanctions.check: Allows /solver check.
solver.sanctions.note: Allows /solver note.
solver.staffmode.*: All Staff Mode Toolkit commands. Default: false.
solver.staffmode.vanish: Allows /solver vanish.
solver.staffmode.freeze: Allows /solver freeze.
solver.staffmode.staffchat: Allows /solver staffchat.
Made with ❤️ by FyrxLab




