agentsclimarketplace

Pterodactyl skills

Skill mrifqidaffaaditya/pterodactyl-skills

Full-featured Pterodactyl Panel API skill for AI agents. Provides complete admin-level (Application API) and client-level (Client API) access to Pterodactyl Panel. Manage users, servers, nodes, locations, nests, eggs, files, databases, backups, schedules, and more through natural language.From its SKILL.md

Install
npx -y skills add mrifqidaffaaditya/pterodactyl-skills

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

17.1 KB, ~4.7k tokens by cl100k_base, as published. Nobody here has run it

๐Ÿฆ– Pterodactyl Panel AI Agent Skill

You are an AI agent with full administrative access to a Pterodactyl Panel instance. You can manage the entire panel infrastructure through its REST API.


๐Ÿ” Step 0: Configuration Check (ALWAYS DO THIS FIRST)

Before executing ANY API call, you MUST verify that credentials are configured.

Run the configuration checker:

python3 scripts/check_config.py

Location of this script: Relative to this SKILL.md file's directory.

If NOT configured (exit code 1):

The script returns JSON with "configured": false. In this case:

  1. Inform the user that Pterodactyl credentials are not set up
  2. Ask the user to provide:
    • Panel URL (e.g., https://panel.example.com)
    • Application API Key (starts with ptla_ โ€” for admin operations)
    • Client API Key (starts with ptlc_ โ€” for client operations)
  3. Run the setup wizard interactively:
    python3 scripts/setup.py
    
  4. Or create the config file manually:
    mkdir -p ~/.pterodactyl
    cat > ~/.pterodactyl/config.json << 'EOF'
    {
      "panel_url": "USER_PROVIDED_URL",
      "application_api_key": "USER_PROVIDED_APP_KEY",
      "client_api_key": "USER_PROVIDED_CLIENT_KEY"
    }
    EOF
    chmod 600 ~/.pterodactyl/config.json
    

If configured (exit code 0):

The script returns JSON with "configured": true. Proceed with the user's request. Note the has_application_api and has_client_api booleans โ€” some operations require specific key types.

Alternative: Environment Variables

Users can also set credentials via environment variables:

export PTERODACTYL_PANEL_URL="https://panel.example.com"
export PTERODACTYL_APP_KEY="ptla_xxxxxxxxxxxx"
export PTERODACTYL_CLIENT_KEY="ptlc_xxxxxxxxxxxx"

๐Ÿ› ๏ธ How to Make API Requests

Use the provided helper script for all API calls:

python3 scripts/api_request.py <METHOD> <ENDPOINT> [JSON_BODY]

The script automatically:

  • Loads credentials from config file or environment
  • Selects the correct API key based on endpoint prefix (/api/application/* or /api/client/*)
  • Sets required headers (Authorization, Accept, Content-Type)
  • Handles errors with structured JSON output
  • Respects rate limits

Direct curl (if script unavailable)

You can also construct raw curl commands:

# For Application API (admin)
curl -s "https://PANEL_URL/api/application/ENDPOINT" \
  -H "Authorization: Bearer ptla_API_KEY" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -H "Content-Type: application/json"

# For Client API
curl -s "https://PANEL_URL/api/client/ENDPOINT" \
  -H "Authorization: Bearer ptlc_API_KEY" \
  -H "Accept: Application/vnd.pterodactyl.v1+json" \
  -H "Content-Type: application/json"

๐Ÿ“‹ Application API โ€” Admin Endpoints

Base: /api/application Key Required: Application API Key (ptla_) Permissions: Full administrative access

Users

MethodEndpointDescription
GET/api/application/usersList all users
GET/api/application/users/{id}Get user by ID
GET/api/application/users/external/{external_id}Get user by external ID
POST/api/application/usersCreate user
PATCH/api/application/users/{id}Update user
DELETE/api/application/users/{id}Delete user

Create user example:

python3 scripts/api_request.py POST /api/application/users '{
  "email": "[email protected]",
  "username": "newuser",
  "first_name": "John",
  "last_name": "Doe",
  "root_admin": false,
  "password": "SecurePass123!"
}'

Query params for listing: filter[email], filter[username], filter[uuid], filter[external_id], include=servers, sort=id, page, per_page

Servers

MethodEndpointDescription
GET/api/application/serversList all servers
GET/api/application/servers/{id}Get server by internal ID
GET/api/application/servers/external/{external_id}Get server by external ID
POST/api/application/serversCreate a server
PATCH/api/application/servers/{id}/detailsUpdate server details
PATCH/api/application/servers/{id}/buildUpdate build configuration
PATCH/api/application/servers/{id}/startupUpdate startup config
POST/api/application/servers/{id}/suspendSuspend server
POST/api/application/servers/{id}/unsuspendUnsuspend server
POST/api/application/servers/{id}/reinstallReinstall server
DELETE/api/application/servers/{id}Safe delete server
DELETE/api/application/servers/{id}/forceForce delete server

Create server example:

python3 scripts/api_request.py POST /api/application/servers '{
  "name": "MC Server",
  "user": 1,
  "egg": 1,
  "docker_image": "ghcr.io/pterodactyl/yolks:java_17",
  "startup": "java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}}",
  "environment": {"SERVER_JARFILE": "server.jar", "VANILLA_VERSION": "latest"},
  "limits": {"memory": 1024, "swap": 0, "disk": 5120, "io": 500, "cpu": 100},
  "feature_limits": {"databases": 2, "backups": 3, "allocations": 1},
  "allocation": {"default": 1}
}'

Update build example:

python3 scripts/api_request.py PATCH /api/application/servers/1/build '{
  "allocation": 1,
  "memory": 2048,
  "swap": 0,
  "disk": 10240,
  "io": 500,
  "cpu": 200,
  "feature_limits": {"databases": 5, "backups": 5, "allocations": 5}
}'

Query params for listing: filter[name], filter[uuid], filter[uuidShort], filter[external_id], include=allocations,user,subusers,nest,egg,variables,location,node,databases

Server Databases (Admin)

MethodEndpointDescription
GET/api/application/servers/{id}/databasesList databases
GET/api/application/servers/{id}/databases/{db_id}Get database details
POST/api/application/servers/{id}/databasesCreate database
POST/api/application/servers/{id}/databases/{db_id}/reset-passwordReset password
DELETE/api/application/servers/{id}/databases/{db_id}Delete database

Nodes

MethodEndpointDescription
GET/api/application/nodesList all nodes
GET/api/application/nodes/{id}Get node details
GET/api/application/nodes/{id}/configurationGet Wings config
POST/api/application/nodesCreate a node
PATCH/api/application/nodes/{id}Update a node
DELETE/api/application/nodes/{id}Delete a node

Create node example:

python3 scripts/api_request.py POST /api/application/nodes '{
  "name": "Node-01",
  "location_id": 1,
  "fqdn": "node1.example.com",
  "scheme": "https",
  "memory": 32768,
  "memory_overallocate": 0,
  "disk": 102400,
  "disk_overallocate": 0,
  "upload_size": 100,
  "daemon_sftp": 2022,
  "daemon_listen": 8080
}'

Query params for listing: filter[name], filter[fqdn], filter[uuid], include=allocations,location,servers, sort=id,-memory,-disk

Node Allocations

MethodEndpointDescription
GET/api/application/nodes/{id}/allocationsList allocations
POST/api/application/nodes/{id}/allocationsCreate allocations
DELETE/api/application/nodes/{id}/allocations/{alloc_id}Delete allocation

Create allocations example:

python3 scripts/api_request.py POST /api/application/nodes/1/allocations '{
  "ip": "192.168.1.100",
  "alias": "node1.example.com",
  "ports": ["25565", "25566-25570"]
}'

Locations

MethodEndpointDescription
GET/api/application/locationsList all locations
GET/api/application/locations/{id}Get location details
POST/api/application/locationsCreate location
PATCH/api/application/locations/{id}Update location
DELETE/api/application/locations/{id}Delete location

Create location example:

python3 scripts/api_request.py POST /api/application/locations '{
  "short": "us-east",
  "long": "US East - New York"
}'

Nests & Eggs

MethodEndpointDescription
GET/api/application/nestsList all nests
GET/api/application/nests/{id}Get nest details
GET/api/application/nests/{nest_id}/eggsList eggs in nest
GET/api/application/nests/{nest_id}/eggs/{id}Get egg details

Query params: include=eggs,servers (nests), include=nest,servers,config,script,variables (eggs)


๐ŸŽฎ Client API โ€” Server Management Endpoints

Base: /api/client Key Required: Client API Key (ptlc_) Permissions: User-level server access

Root

MethodEndpointDescription
GET/api/clientList all accessible servers
GET/api/client/permissionsList all available permissions

Account

MethodEndpointDescription
GET/api/client/accountGet account details
PUT/api/client/account/emailUpdate email
PUT/api/client/account/passwordUpdate password
GET/api/client/account/two-factorGet 2FA QR code
POST/api/client/account/two-factorEnable 2FA
POST/api/client/account/two-factor/disableDisable 2FA
GET/api/client/account/api-keysList API keys
POST/api/client/account/api-keysCreate API key
DELETE/api/client/account/api-keys/{id}Delete API key
GET/api/client/account/ssh-keysList SSH keys
POST/api/client/account/ssh-keysAdd SSH key
POST/api/client/account/ssh-keys/removeRemove SSH key
GET/api/client/account/activityAccount activity logs

Servers

Note: {server} = server short UUID (first 8 characters of UUID)

MethodEndpointDescription
GET/api/client/servers/{server}Server details
GET/api/client/servers/{server}/websocketWebSocket credentials
GET/api/client/servers/{server}/resourcesLive resource usage
GET/api/client/servers/{server}/activityActivity logs
POST/api/client/servers/{server}/commandSend console command
POST/api/client/servers/{server}/powerPower action

Power signals: start, stop, restart, kill

Files

MethodEndpointDescription
GET/api/client/servers/{server}/files/list?directory=/List files
GET/api/client/servers/{server}/files/contents?file=/file.txtRead file
GET/api/client/servers/{server}/files/download?file=/file.txtDownload URL
PUT/api/client/servers/{server}/files/renameRename/move files
POST/api/client/servers/{server}/files/copyCopy file
POST/api/client/servers/{server}/files/write?file=/file.txtWrite file
POST/api/client/servers/{server}/files/compressCompress files
POST/api/client/servers/{server}/files/decompressDecompress archive
POST/api/client/servers/{server}/files/deleteDelete files
POST/api/client/servers/{server}/files/create-folderCreate folder
GET/api/client/servers/{server}/files/uploadGet upload URL
PUT/api/client/servers/{server}/files/chmodChange permissions
POST/api/client/servers/{server}/files/pullPull remote file

Databases

MethodEndpointDescription
GET/api/client/servers/{server}/databasesList databases
POST/api/client/servers/{server}/databasesCreate database
POST/api/client/servers/{server}/databases/{db}/rotate-passwordRotate password
DELETE/api/client/servers/{server}/databases/{db}Delete database

Backups

MethodEndpointDescription
GET/api/client/servers/{server}/backupsList backups
POST/api/client/servers/{server}/backupsCreate backup
GET/api/client/servers/{server}/backups/{backup}Backup details
GET/api/client/servers/{server}/backups/{backup}/downloadDownload URL
POST/api/client/servers/{server}/backups/{backup}/lockToggle lock
POST/api/client/servers/{server}/backups/{backup}/restoreRestore backup
DELETE/api/client/servers/{server}/backups/{backup}Delete backup

Schedules

MethodEndpointDescription
GET/api/client/servers/{server}/schedulesList schedules
POST/api/client/servers/{server}/schedulesCreate schedule
GET/api/client/servers/{server}/schedules/{id}Schedule details
PATCH/api/client/servers/{server}/schedules/{id}Update schedule
DELETE/api/client/servers/{server}/schedules/{id}Delete schedule
POST/api/client/servers/{server}/schedules/{id}/executeExecute now
POST/api/client/servers/{server}/schedules/{id}/tasksCreate task
PATCH/api/client/servers/{server}/schedules/{id}/tasks/{task}Update task
DELETE/api/client/servers/{server}/schedules/{id}/tasks/{task}Delete task

Task actions: command, power, backup

Network / Allocations

MethodEndpointDescription
GET/api/client/servers/{server}/network/allocationsList allocations
POST/api/client/servers/{server}/network/allocationsAssign allocation
POST/api/client/servers/{server}/network/allocations/{id}Set note
POST/api/client/servers/{server}/network/allocations/{id}/primarySet primary
DELETE/api/client/servers/{server}/network/allocations/{id}Unassign

Subusers

MethodEndpointDescription
GET/api/client/servers/{server}/usersList subusers
POST/api/client/servers/{server}/usersCreate subuser
GET/api/client/servers/{server}/users/{uuid}Subuser details
POST/api/client/servers/{server}/users/{uuid}Update permissions
DELETE/api/client/servers/{server}/users/{uuid}Delete subuser

Startup

MethodEndpointDescription
GET/api/client/servers/{server}/startupList startup variables
PUT/api/client/servers/{server}/startup/variableUpdate variable

Settings

MethodEndpointDescription
POST/api/client/servers/{server}/settings/renameRename server
POST/api/client/servers/{server}/settings/reinstallReinstall server

๐ŸŒ WebSocket API

Connection Flow

  1. Get credentials: GET /api/client/servers/{server}/websocket
  2. Connect to wss:// URL from response
  3. Send auth: {"event": "auth", "args": ["<token>"]}
  4. Listen for events: console output, status, stats, etc.
  5. Send commands: {"event": "send command", "args": ["your command"]}
  6. Handle token refresh on token expiring event

๐Ÿ“ Important Notes for Agent Behavior

Server Identifier Types

  • Application API: Uses internal numeric ID ({id})
  • Client API: Uses short UUID โ€” first 8 characters of the server UUID ({server})

Response Format

All list responses follow this structure:

{
  "object": "list",
  "data": [ /* array of resources */ ],
  "meta": {
    "pagination": {
      "total": 50,
      "count": 25,
      "per_page": 25,
      "current_page": 1,
      "total_pages": 2
    }
  }
}

Single resource responses:

{
  "object": "resource_type",
  "attributes": { /* resource data */ }
}

Rate Limiting

  • Default: 240 requests/minute
  • If you get HTTP 429, wait before retrying
  • The response headers include rate limit info

Error Handling

Always check for error responses:

{
  "errors": [{
    "code": "ErrorCode",
    "status": "422",
    "detail": "Error description"
  }]
}

Security Best Practices

  • NEVER output or log API keys in full
  • Always mask keys when displaying: ptla_...last6chars
  • Warn users if their config file has loose permissions (not 600)
  • Remind users to use IP restrictions on API keys in production

๐Ÿ“š Additional Reference

For complete request/response body schemas with all fields, see: references/api_endpoints.md

This file contains:

  • Full request body examples for every endpoint
  • All available query parameters
  • Available include relationships per resource
  • Complete permissions list for subusers
  • WebSocket event reference
  • Error code reference table

What ships with it: 7 files

48.2 KB alongside SKILL.md, 3 of them executable

references/

scripts/

Keep looking

Skills are one crate of 326,144. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.