Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
Avatar for TIS199

AI-powered Minecraft server administration plugin for PaperMC. Use natural language to inspect live server data, manage

Report MCAIA?

MCAIA Wiki

AI-powered administration for Paper servers.

Ask what you want to accomplish, and MCAIA can inspect supported live server data, plan a structured response, execute allowed commands, consume command output, and continue multi-step tasks.

Latest Release Hangar Discord License


What is MCAIA?

MCAIA is a Paper server plugin that connects Minecraft administration with AI.

Instead of requiring a server owner to remember every command and every argument, MCAIA lets them describe the desired outcome in natural language.

For example:

/ai how many players are online?

or:

/ai show me the server TPS

For more advanced workflows, MCAIA can use a structured loop:

Player request
      ↓
AI understands the goal
      ↓
Query live server state
      ↓
Execute an allowed action
      ↓
Capture the result
      ↓
Return the result to the AI
      ↓
Continue or answer

This makes MCAIA more than a simple chat interface. The AI can work with current server state instead of relying only on its training data.


✨ Features

💬 Natural-language administration

Use /ai to ask questions or request supported server actions using normal language.

Examples:

/ai how many players are online?
/ai show me the current TPS
/ai list the worlds on this server
/ai tell me information about Steve

🔎 Live server information

MCAIA provides structured server queries for information such as:

Query Information
player_list Online player names and player count
player_info:<name> UUID, gamemode, health, food, world, coordinates, OP state and ping
world_list Worlds, environments and player counts
plugin_list Loaded plugin names, versions and enabled state
tps 1m / 5m / 15m TPS and a basic health indicator
server_info Server version, Minecraft version, player counts, MOTD and online-mode state

The AI can request these through its structured server-query system when it needs current information.


🔁 Multi-step AI workflows

A simple chatbot normally looks like:

Question → Answer

MCAIA can go further:

Question
   ↓
server_query
   ↓
real server result
   ↓
execute allowed command
   ↓
captured command output
   ↓
AI evaluates the result
   ↓
another step or final answer

MCAIA limits the number of internal iterations with:

ai:
  max-iterations: 8

This prevents an AI workflow from continuing forever.

Command output capture is also bounded. MCAIA can feed up to approximately 8,000 characters of captured command feedback into the next AI step.


🧠 Supported AI providers

MCAIA supports:

  • Google Gemini
  • Groq
  • OpenRouter
  • OpenAI
  • Anthropic Claude
  • xAI Grok

Configure at least one provider in:

plugins/MCAIA/config.yml

Example:

ai:
  providers:
    gemini:
      api-key: "YOUR_GEMINI_API_KEY"

Multiple providers can be configured at the same time.


🔄 Provider & model fallback

MCAIA separates:

  1. Provider priority
  2. Model priority within each provider

These are configured in:

plugins/MCAIA/models.yml

Example:

provider-order:
  - anthropic
  - openai
  - openrouter

anthropic:
  models:
    - claude-sonnet-4-5

openai:
  models:
    - gpt-4o-mini
    - gpt-4.1-mini

openrouter:
  models:
    - deepseek/deepseek-r1:free
    - openai/gpt-oss-120b:free

With smart switching enabled:

ai:
  smart-switching: true

MCAIA can move to another configured model when retryable provider failures occur, such as common rate-limit or temporary availability failures.

Provider quotas, model availability, pricing and account access are controlled by the provider and can change at any time.


🛡️ Command safety

MCAIA can execute commands, so command execution is treated as a security-sensitive operation.

The command guard includes built-in restrictions for sensitive operations such as:

stop
restart
restartserver
reload
rl
op
deop
whitelist
ban-ip
pardon-ip
lp
luckperms
pex
permissions
plugman
plugmanx
pluginmanager
function
schedule
sudo

It also detects:

  • command chaining with ;
  • newline-separated commands
  • pipe-based chaining
  • && chaining
  • nested execute ... run ... wrappers
  • malformed wrappers
  • namespaced command labels
  • certain formatting/homoglyph tricks
  • excessive wrapper depth

You can add server-specific command roots in:

plugins/MCAIA/banned-commands.yml

Important security warning

The command guard is a safeguard, not a complete sandbox.

Do not treat AI access as equivalent to a perfectly isolated environment.

Recommended production practice:

  • give MCAIA only the permissions it actually needs
  • keep mcaia.player restricted to trusted users
  • maintain server backups
  • review banned-commands.yml
  • test new models and prompts on a staging server
  • review logs when diagnosing unexpected behavior
  • never expose API keys or webhook URLs

👤 Player mode

MCAIA has two main access levels.

Administrator access

mcaia.use

This provides full AI command access.

Player-scoped access

mcaia.player

Player mode is disabled by default.

Enable it:

permissions:
  player-command-mode:
    enabled: true

Then grant:

mcaia.player

In player mode, MCAIA builds a list of commands available to the player and passes the permitted-command context to the AI.

The requested command is still checked against the player's actual permissions before it is dispatched.

Player mode is designed around least privilege. Giving someone mcaia.player should not automatically give them access to commands they could not already use.


🔐 Permission backends

MCAIA works without additional permission plugins.

Supported integrations include:

  • Bukkit permissions
  • LuckPerms
  • Vault
  • OP/configured-player fallback

If LuckPerms is installed, Bukkit permission checks can use it.

Vault is detected as an alternative permission integration.

When neither is available, MCAIA can use its fallback behavior controlled by:

permissions:
  fallback-require-op: true

You can also explicitly configure permitted players in:

permissions:
  permitted-players:

🌐 Geyser & Floodgate

MCAIA can detect:

  • Geyser
  • Floodgate

Bedrock access can be enabled with:

geyser:
  allow-bedrock-players: true

Floodgate's player-name prefix can optionally be removed from logs:

geyser:
  strip-bedrock-prefix: true

Bedrock players use the same MCAIA permission model as Java players.


⌨️ Commands

The default command is:

/ai

The name can be changed with:

command-name: "ai"

A server restart is required after changing it.

Player / user commands

Command Description
/ai <prompt> Ask a question or request a server action
/ai help Show usage information and examples
/ai history View recent conversation history
/ai reset Clear your conversation history and pending follow-up

Administrative commands

Command Description
/aiadmin Show administrative help
/aiadmin status Show plugin, provider, permission and integration status
/aiadmin reload Reload MCAIA configuration
/aiadmin clearhistory <player> Clear history for an online player
/aiadmin clearhistory * Clear histories for all online players
/aiadmin debug Toggle debug mode at runtime

The console can use /ai as well.


🔑 Permissions

Permission Purpose Default
mcaia.use Full console-level AI command access Operators
mcaia.player Player-scoped AI access when player mode is enabled Not granted
mcaia.admin Access to /aiadmin Operators
mcaia.reload Declared reload permission node Operators
mcaia.bypass-rate-limit Bypass the /ai cooldown Operators
mcaia.history Access to conversation history Operators
mcaia.* Grants all MCAIA permissions Not granted

/aiadmin reload currently checks mcaia.admin.


⏱️ Rate limiting

MCAIA has a per-player cooldown to reduce accidental spam and unnecessary API usage.

Default:

rate-limit:
  enabled: true
  cooldown-seconds: 15

Administrators can bypass the cooldown with:

mcaia.bypass-rate-limit

💾 Conversation history

MCAIA keeps conversation context per player so follow-up requests can make sense.

Relevant settings:

ai:
  max-history-length: 10
  query-timeout-seconds: 60

Players can use:

/ai history

to view recent conversation history and:

/ai reset

to clear their own history and pending follow-up.

Administrators can clear online player histories with:

/aiadmin clearhistory <player>

or:

/aiadmin clearhistory *

💬 Follow-up questions

MCAIA can ask a player a follow-up question when the request is incomplete or ambiguous.

For example:

/ai teleport Steve

could require more context depending on the task.

When MCAIA is waiting for a player's answer, their next chat message is handled as a private response instead of being broadcast to the server.

The timeout is configurable:

ai:
  query-timeout-seconds: 60

📋 Configuration files

MCAIA creates its files under:

plugins/MCAIA/
File Purpose
config.yml Main settings, provider keys, AI options, permissions, rate limits, logging and messages
models.yml Provider and model priority/fallback
banned-commands.yml Additional command roots that should never be executed
logs/ Daily plugin log files when file logging is enabled

⚙️ Important configuration

Terms of Service

MCAIA intentionally requires explicit acceptance before processing requests.

tos-accepted: false

Set:

tos-accepted: true

only after reviewing the included terms.


AI limits

ai:
  max-tokens: 2048
  temperature: 0.3
  max-history-length: 10
  query-timeout-seconds: 60
  max-iterations: 8
  smart-switching: true
  command-output-wait-ticks: 30

max-tokens

Maximum response token budget.

temperature

Controls model randomness.

max-history-length

Number of conversation turns retained per player.

query-timeout-seconds

How long MCAIA waits for a player's answer to a follow-up question.

max-iterations

Maximum internal request → action → result loop iterations.

smart-switching

Allows fallback to other configured models after supported retryable provider errors.

command-output-wait-ticks

How long MCAIA waits for delayed command output before continuing.


📝 Logging

File logging is enabled by default:

logging:
  file-logging: true

Logs are stored under:

plugins/MCAIA/logs/

Debug mode can be enabled when troubleshooting:

logging:
  debug-mode: true

⚠️ Debug mode warning

Debug mode can write full AI request/response payloads to the console and log file.

Those payloads may contain server data or other sensitive information.

Use debug mode temporarily and disable it afterward.


🔔 Discord admin webhook

MCAIA can optionally notify an administrator Discord webhook about events.

logging:
  admin-webhook-url: ""

Available event types include:

logging:
  log-events:
    - AI_COMMAND_USED
    - COMMAND_EXECUTED
    - COMMAND_REFUSED
    - COMMAND_BLOCKED
    - ERRORS
    - RATE_LIMITED

Keep webhook URLs private.


📊 bStats

MCAIA initializes bStats for anonymous plugin/server metrics.

See the bStats privacy policy for details about the metrics system.


🔒 Privacy

Using MCAIA normally sends prompts and relevant conversation context to the configured AI provider.

Depending on the request, the provider interaction may also include:

  • supported live server information
  • player-related server data requested by the AI
  • command results
  • conversation history
  • player-scoped allowed-command information

Command output can become part of the AI conversation.

Treat AI requests, server output, logs, webhook notifications and API credentials as potentially sensitive.

Never share

API keys
Bot tokens
Webhook URLs
Passwords
Private credentials
Unredacted sensitive server logs

Always follow the privacy policy and terms of the AI provider you choose.


📦 Installation

Requirements

  • Paper server
  • Java 25
  • A supported AI provider API key

Optional integrations:

  • LuckPerms
  • Vault
  • Geyser
  • Floodgate

MCAIA can run without the optional integrations.

Install

  1. Download the latest release from GitHub Releases.

  2. Put the JAR into your server's plugins/ directory.

  3. Start the server once.

  4. Open:

    plugins/MCAIA/config.yml
    
  5. Add at least one provider API key.

  6. Set:

    tos-accepted: true
    
  7. Restart the server.

  8. Run:

    /ai help
    
  9. Verify the installation with:

    /aiadmin status
    

After installation, do not immediately give MCAIA broad access.

Start with read-only requests.

Test 1 — Players

/ai how many players are online?

Test 2 — TPS

/ai show me the server TPS

Test 3 — Worlds

/ai list the worlds on this server

Test 4 — Plugins

/ai list the plugins installed on this server

Test 5 — Player information

/ai tell me information about Steve

Then test a safe multi-step workflow on a test server.


🎬 Demo

💬 Natural-language administration

▶️ Watch Demo 1

🧠 Live server intelligence

▶️ Watch Demo 2

⚡ Multi-step AI workflow

▶️ Watch Demo 3


🐛 Troubleshooting

MCAIA says it is disabled

Check:

tos-accepted: true

Then restart the server.


No provider is configured

Make sure at least one API key is present in:

plugins/MCAIA/config.yml

Then verify:

/aiadmin status

Provider authentication error

Check:

  • API key
  • provider name
  • provider account
  • model availability
  • API access permissions

Do not paste your API key into Discord support.


Rate limited

A provider may return a rate-limit response.

Check your provider quota and consider configuring multiple providers/models in models.yml.


A command is refused

Check:

  1. Your permissions
  2. mcaia.player player mode rules
  3. banned-commands.yml
  4. MCAIA's built-in command guard
  5. The server console/logs

Some commands are intentionally blocked and cannot simply be enabled through the normal blocklist.


AI gives incorrect information

AI models can make mistakes.

Try:

  • a more specific prompt
  • asking MCAIA to query current server state
  • using a stronger model
  • configuring a fallback provider
  • testing the request manually

Do not treat an AI response as proof that an action succeeded.


🐛 Reporting a bug

A useful bug report should contain:

Environment

MCAIA version:
Minecraft version:
Paper version:
Java version:
Other relevant plugins:

Reproduction

What did you do?
What prompt or command did you use?

Expected result

What should have happened?

Actual result

What happened instead?

Logs

Attach only the relevant logs.

Remove:

  • API keys
  • webhook URLs
  • tokens
  • passwords
  • sensitive player information
  • private infrastructure details

💡 Feature requests

Good feature requests explain the problem, not only the desired command.

A strong request answers:

  1. What is difficult today?
  2. Who has the problem?
  3. What would the ideal workflow look like?
  4. Where would AI actually help?
  5. Can you provide a realistic example prompt?

Example:

Server owners often need to inspect several pieces of server state before taking one action. It would be useful if MCAIA could summarize those values in one structured response.

That gives the project something concrete to design around.


🧑‍💻 Development

Clone the repository:

git clone https://github.com/TIS199/MCAIA.git
cd MCAIA

The project includes the Gradle wrapper.

Build:

./gradlew build

On Windows:

gradlew.bat build

The distributable JAR is generated under:

build/libs/

Before submitting changes:

./gradlew build

Make sure the project still builds successfully.


🤝 Contributing

Contributions are welcome.

Useful contributions include:

  • bug fixes
  • documentation
  • tests
  • compatibility improvements
  • provider improvements
  • security reviews
  • translations
  • example configurations
  • troubleshooting guides
  • feature proposals

For larger changes, open an issue first so the implementation can be discussed before development time is spent.

Please keep pull requests focused and include testing notes.


📌 Project status

MCAIA is actively developed.

Features, configuration and behavior can change between releases.

For production servers:

Back up first. Test first. Give the AI only the access it actually needs.



📄 License

MCAIA is licensed under GNU GPL-3.0-only.

See the LICENSE file for the complete license text.


MCAIA

Ask for the result. MCAIA handles the Minecraft-side work.