Crafty Controller API Skill
⚙️ CONFIGURATION — SET THESE BEFORE ANYTHING ELSE
CODEBLOCK0
Where to find your API key:
Log into Crafty Controller → click your username (top right) → API Key tab → copy the token.
Overview
Crafty Controller exposes a REST API under /api/v2. All endpoints require Bearer token authentication. The API covers:
| Domain | What you can do |
|---|
| Servers | List, create, start, stop, restart, kill, delete |
| Console |
Send commands, stream logs |
|
Stats | CPU, RAM, player counts, ping, world size |
|
Backups | List, trigger, restore, delete |
|
Schedules | List, create, update, delete cron tasks |
|
Files | Browse, read, write, upload, delete server files |
|
Users | List, create, update, delete, assign roles |
|
Roles | List, create, assign permissions |
|
Crafty Config | Server-wide settings, announcements |
Python Helper Setup
Install dependencies first:
CODEBLOCK1
Base client to reuse everywhere:
CODEBLOCK2
1. Servers
List All Servers
CODEBLOCK3
Get Single Server Details
CODEBLOCK4
Create a New Server
CODEBLOCK5
Update Server Settings
CODEBLOCK6
Delete a Server
def delete_server(server_id: str):
"""Permanently delete a server from Crafty (does NOT delete files by default)."""
return crafty_delete(f"/servers/{server_id}")
2. Server Power Actions
All power actions POST to /servers/{server_id}/action/{action}.
CODEBLOCK8
3. Console & Commands
Send a Console Command
CODEBLOCK9
Common Command Shortcuts
CODEBLOCK10
Get Server Logs
def get_logs(server_id: str):
"""Retrieve recent console log output for a server."""
return crafty_get(f"/servers/{server_id}/logs")
4. Server Stats
CODEBLOCK12
Get Stats for All Servers
def get_all_stats():
"""Snapshot stats for every registered server."""
return crafty_get("/servers/stats")
5. Backups
List Backups for a Server
CODEBLOCK14
Trigger a Manual Backup
CODEBLOCK15
Get Backup Config
CODEBLOCK16
Update Backup Config
CODEBLOCK17
Delete a Backup
def delete_backup(server_id: str, backup_filename: str):
return crafty_delete(f"/servers/{server_id}/backups/{backup_filename}")
6. Schedules
List Schedules
CODEBLOCK19
Create a Schedule
CODEBLOCK20
Update a Schedule
CODEBLOCK21
Delete a Schedule
def delete_schedule(server_id: str, schedule_id: str):
return crafty_delete(f"/servers/{server_id}/schedules/{schedule_id}")
7. File Management
List Files / Browse Directory
CODEBLOCK23
Read a File
CODEBLOCK24
Write / Update a File
CODEBLOCK25
Create a Directory
CODEBLOCK26
Delete a File or Directory
CODEBLOCK27
Upload a File
def upload_file(server_id: str, local_file_path: str, upload_dir: str = ""):
"""Upload a local file into the server's directory."""
url = f"{CRAFTY_BASE_URL}/servers/{server_id}/files/upload"
with open(local_file_path, "rb") as f:
files = {"file": f}
data = {"path": upload_dir}
# Note: don't pass Content-Type header for multipart
auth_headers = {"Authorization": f"Bearer {CRAFTY_API_KEY}"}
resp = requests.post(url, headers=auth_headers, files=files, data=data, verify=False)
resp.raise_for_status()
return resp.json()
8. Users
List All Users
CODEBLOCK29
Get a User
CODEBLOCK30
Create a User
CODEBLOCK31
Update a User
CODEBLOCK32
Delete a User
CODEBLOCK33
Update User Server Permissions
def set_user_server_permissions(user_id: str, server_id: str, permissions: list):
"""
Permissions list can contain any of:
"Commands", "Terminal", "Logs", "Schedule", "Backup",
"Files", "Config", "Players"
"""
return crafty_patch(f"/users/{user_id}", {
"server_permissions": {server_id: permissions}
})
9. Roles
List Roles
CODEBLOCK35
Get Role Details
CODEBLOCK36
Create a Role
CODEBLOCK37
Update a Role
CODEBLOCK38
Delete a Role
CODEBLOCK39
Assign Role to User
def assign_role_to_user(user_id: str, role_id: str):
return crafty_patch(f"/users/{user_id}", {"roles": [role_id]})
10. Crafty System Info
Get Crafty Version & System Stats
CODEBLOCK41
Get All Audit Log Entries
def get_audit_log():
return crafty_get("/crafty/audit-log")
Error Handling
All functions can raise requests.HTTPError. Wrap calls for production use:
CODEBLOCK43
Common Patterns
Full Server Status Dashboard
CODEBLOCK44
Restart All Running Servers
CODEBLOCK45
Edit server.properties Value
def set_property(server_id: str, key: str, value: str):
"""
Read server.properties, change one key, write it back.
Example: set_property(sid, "max-players", "50")
"""
result = read_file(server_id, "server.properties")
content = result.get("data", {}).get("content", "")
lines = content.splitlines()
new_lines = []
found = False
for line in lines:
if line.startswith(f"{key}="):
new_lines.append(f"{key}={value}")
found = True
else:
new_lines.append(line)
if not found:
new_lines.append(f"{key}={value}")
write_file(server_id, "server.properties", "\n".join(new_lines))
print(f"✅ Set {key}={value}")
API Response Structure
Every Crafty API response follows this envelope:
CODEBLOCK47
Always check response["status"] == "ok" before using response["data"].
Notes
- - SSL: Crafty uses a self-signed certificate by default. The helpers above pass
verify=False. In production, provide your real cert path: verify="/path/to/cert.pem". - API version: This skill targets Crafty Controller v4 (
/api/v2 routes). Crafty 3 uses a different API. - Permissions: Your API key inherits the permissions of the user it belongs to. For full access, generate the key from a superuser account.
- Rate limiting: Crafty does not enforce rate limiting by default, but avoid hammering the stats endpoint — poll at most once per 5 seconds.
Crafty Controller API 技能
⚙️ 配置 — 请先设置以下内容
python
============================================================
CRAFTY CONTROLLER 连接设置
编辑以下三个值以匹配您的 Crafty 实例
============================================================
CRAFTY_HOST = https://your-server-ip-or-domain # 例如 https://192.168.1.50 或 https://crafty.myserver.com
CRAFTY_PORT = 8443 # 默认 Crafty 端口 — 如果使用自定义端口请修改
CRAFTYAPIKEY = yourapikey_here # 在 Crafty UI → 个人资料 → API 密钥 中查找
派生基础 URL — 请勿编辑
CRAFTY
BASEURL = f{CRAFTY
HOST}:{CRAFTYPORT}/api/v2
每次请求使用的标准请求头
HEADERS = {
Authorization: fBearer {CRAFTY
APIKEY},
Content-Type: application/json
}
============================================================
如何找到您的 API 密钥:
登录 Crafty Controller → 点击您的用户名(右上角)→ API 密钥 选项卡 → 复制令牌。
概述
Crafty Controller 在 /api/v2 下提供 REST API。所有端点都需要 Bearer 令牌认证。API 涵盖以下内容:
| 领域 | 可执行操作 |
|---|
| 服务器 | 列出、创建、启动、停止、重启、强制终止、删除 |
| 控制台 |
发送命令、流式查看日志 |
|
统计 | CPU、内存、玩家数量、延迟、世界大小 |
|
备份 | 列出、触发、恢复、删除 |
|
计划任务 | 列出、创建、更新、删除 cron 任务 |
|
文件 | 浏览、读取、写入、上传、删除服务器文件 |
|
用户 | 列出、创建、更新、删除、分配角色 |
|
角色 | 列出、创建、分配权限 |
|
Crafty 配置 | 服务器范围设置、公告 |
Python 辅助工具设置
首先安装依赖:
bash
pip install requests urllib3
可复用的基础客户端:
python
import requests
import urllib3
import json
如果使用自签名证书(本地 Crafty 安装常见),禁用 SSL 警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def crafty_get(path, params=None):
向 Crafty API 发送 GET 请求。
url = f{CRAFTYBASEURL}{path}
resp = requests.get(url, headers=HEADERS, params=params, verify=False)
resp.raiseforstatus()
return resp.json()
def crafty_post(path, payload=None):
向 Crafty API 发送 POST 请求。
url = f{CRAFTYBASEURL}{path}
resp = requests.post(url, headers=HEADERS, json=payload or {}, verify=False)
resp.raiseforstatus()
return resp.json()
def crafty_patch(path, payload=None):
向 Crafty API 发送 PATCH 请求。
url = f{CRAFTYBASEURL}{path}
resp = requests.patch(url, headers=HEADERS, json=payload or {}, verify=False)
resp.raiseforstatus()
return resp.json()
def crafty_delete(path):
向 Crafty API 发送 DELETE 请求。
url = f{CRAFTYBASEURL}{path}
resp = requests.delete(url, headers=HEADERS, verify=False)
resp.raiseforstatus()
return resp.json()
1. 服务器
列出所有服务器
python
def list_servers():
返回 Crafty 中注册的所有服务器。
data = crafty_get(/servers)
for s in data.get(data, []):
print(f[{s[server
id]}] {s[servername]} — 运行中: {s[running]})
return data
获取单个服务器详情
python
def get
server(serverid: str):
获取特定服务器的完整详情。
return crafty
get(f/servers/{serverid})
创建新服务器
python
def create_server(
name: str,
java_path: str = java,
jar_path: str = server.jar,
min_ram: int = 512,
max_ram: int = 2048,
port: int = 25565,
crash_detection: bool = True,
auto_start: bool = False,
):
payload = {
name: name,
java
path: javapath,
jar
path: jarpath,
min
ram: minram,
max
ram: maxram,
port: port,
crash
detection: crashdetection,
auto
start: autostart,
}
return crafty_post(/servers, payload)
更新服务器设置
python
def update
server(serverid: str, changes: dict):
更新任意服务器字段组合。
示例 changes: {maxram: 4096, autostart: True}
return craftypatch(f/servers/{serverid}, changes)
删除服务器
python
def delete
server(serverid: str):
从 Crafty 永久删除服务器(默认不删除文件)。
return crafty
delete(f/servers/{serverid})
2. 服务器电源操作
所有电源操作通过 POST 请求发送到 /servers/{server_id}/action/{action}。
python
def serveraction(serverid: str, action: str):
有效操作:
start_server — 启动服务器
stop_server — 优雅停止
restart_server — 停止后启动
kill_server — 强制终止(SIGKILL)
backup_server — 立即触发备份
return craftypost(f/servers/{serverid}/action/{action})
便捷封装
def start
server(serverid): return server
action(serverid, start_server)
def stop
server(serverid): return server
action(serverid, stop_server)
def restart
server(serverid): return server
action(serverid, restart_server)
def kill
server(serverid): return server
action(serverid, kill_server)
3. 控制台与命令
发送控制台命令
python
def send
command(serverid: str, command: str):
向运行中的服务器发送任意控制台命令。
示例:say Hello!、op PlayerName、weather clear、stop
return craftypost(f/servers/{serverid}/action/send_command, {command: command})
常用命令快捷方式
python
def op
player(serverid, player): return send
command(serverid, fop {player})
def deop
player(serverid, player): return send
command(serverid, fdeop {player})
def kick
player(serverid, player, reason=):
cmd = fkick {player} + (f {reason} if reason else )
return send
command(serverid, cmd)
def ban
player(serverid, player, reason=):
cmd = fban {player} + (f {reason} if reason else )
return send
command(serverid, cmd)
def say
message(serverid, message): return send
command(serverid, fsay {message})
def set
time(serverid, time): return send
command(serverid, ftime set {time})
def set
weather(serverid, weather): return send
command(serverid, fweather {weather})
def give
item(serverid, player, item, amount=1):
return send
command(serverid, fgive {player} {item} {amount})
def teleport(server_id, player, x, y, z):
return send
command(serverid, ftp {player} {x} {y} {z})
获取服务器日志
python
def get
logs(serverid: str):
获取服务器的最近控制台日志输出。
return crafty
get(f/servers/{serverid}/logs)
4. 服务器统计
python
def getserverstats(server_id: str):
返回实时统计:
- running (bool)
- online_players (int)
- max_players (int)
- cpu (float, %)
- mem (float, MB)
- world_size (str)
- server_port (int)
- version (str)
- desc (str, MOTD)
return craftyget(f/servers/{serverid}/stats)
def printserverstats(server