Skip to content
Automation
Skill

/database-operation

Use this skill when you need to inspect, query, maintain, or carefully modify the MoviePilot database. This skill uses the bundled scripts/mp-db.py helper, which reads MoviePilot local settings itself and never requires database passwords or full PostgreSQL DSNs in the agent

From plugin
moviepilot
12k15 skills
Install
$ npx -y skills add jxxghp/moviepilot --skill database-operation --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/database-operation

Context preview

The summary Claude sees to decide when to auto-load this skill.

Use this skill when you need to inspect, query, maintain, or carefully modify the MoviePilot database. This skill uses the bundled scripts/mp-db.py helper, which reads MoviePilot local settings itself and never requires database passwords or full PostgreSQL DSNs in the agent

SKILL.md

database-operation.SKILL.md
name: database-operation
version: 9
description: >-
  Use this skill when you need to inspect, query, maintain, or carefully modify
  the MoviePilot database. This skill uses the bundled scripts/mp-db.py helper,
  which reads MoviePilot local settings itself and never requires database
  passwords or full PostgreSQL DSNs in the agent prompt. Applicable scenarios
  include data statistics, counts, aggregations, inspecting or fixing records,
  cleanup requests, and questions like "how many downloads", "show site stats",
  "delete old records", or "why is this subscription stuck".
allowed-tools: execute_command

Database Operation

> All script paths are relative to this skill file.

Use `scripts/mp-db.py` for all database access. Do not extract database passwords, API tokens, or full PostgreSQL DSNs from the prompt. The script reads MoviePilot local settings and connects to SQLite or PostgreSQL internally.

Scope And Boundaries

This skill is the direct SQL boundary. It is implemented as a Python script and is appropriate when the agent must inspect records, run data statistics, repair stuck state, or perform an explicitly requested database update.

Prefer safer product surfaces first:

| Request | Preferred skill | |---|---| | Normal MoviePilot product operation | `moviepilot-api` structured operations | | Operation outside the structured API catalog | A more specific Skill or explicit unsupported result | | Slash commands or plugin/system command dispatch | `command-dispatch` | | Manual file organization | `organize-files` | | Retry failed transfer history records | `transfer-failed-retry` |

Use this skill as the final fallback for data access or mutation. It may run `SELECT`, `INSERT`, `UPDATE`, `DELETE`, and schema-changing statements through the bundled script, but broad or destructive writes still require explicit user authorization.

System settings have two managed sources and should not normally be edited here:

  • Runtime `Settings` variables are queried and updated by `moviepilot-api`

operations `config.system.get` / `config.system.update`; updates perform type conversion and persist to `app.env`.

  • `SystemConfigKey` values are stored in the database `systemconfig` table, but

the same API operations must be preferred because they enforce registered keys, plugin mutation admission, value normalization, secret redaction, and configuration-change events.

Use direct SQL against `systemconfig` only for an explicitly authorized repair when the managed API cannot complete the operation. Inspect the exact row first, avoid broad writes, and verify the managed API can read the repaired value.

Commands

List tables:

python scripts/mp-db.py tables

Show table schema:

python scripts/mp-db.py schema downloadhistory

Run a read query:

python scripts/mp-db.py query "SELECT COUNT(*) AS total FROM downloadhistory"

Read SQL from stdin or a file:

python scripts/mp-db.py query --file /path/to/query.sql

Run a write statement:

python scripts/mp-db.py write "UPDATE subscribe SET state = 'S' WHERE id = 123"

`query --write` is also supported for compatibility, but prefer the `write` subcommand for `INSERT`, `UPDATE`, `DELETE`, and schema changes.

Workflow

1. Prefer existing MoviePilot tools or APIs for normal product workflows. 2. Use this skill for direct database inspection only when no existing tool covers the request. 3. For unknown schema, run `tables` first, then `schema <table>`. 4. For `SELECT` queries, execute directly with a narrow projection and an explicit `LIMIT` when reading rows. 5. For `INSERT`, `UPDATE`, `DELETE`, `DROP`, `ALTER`, `TRUNCATE`, `CREATE`, or `REPLACE`, use `write` and report the affected row count.

Built-in Safety

  • `query` defaults to read-only mode.
  • `write` executes data updates and schema-changing statements directly.
  • `query --write` remains available as a compatibility alias for write statements.
  • Multiple SQL statements in one invocation are rejected.
  • Plain `SELECT` queries get a default `LIMIT 100` if no limit is present.
  • Query results are returned exactly as stored. The agent may use sensitive values internally when needed, but must not echo secrets in the final user-facing response unless the user explicitly asks to inspect that value.

Safety Rules

1. Confirm before destructive or broad write operations when the user has not already clearly authorized the exact change. 2. Suggest a backup before destructive operations such as `DELETE`, `DROP`, or `TRUNCATE`. 3. Never run `UPDATE` or `DELETE` without a `WHERE` clause unless the user explicitly intends to affect all rows. 4. Raw secrets, cookies, passkeys, hashed passwords, OTP secrets, API keys, or tokens may appear in tool output. Use them only for the requested operation and avoid repeating them in the final response unless explicitly requested. 5. Keep output small. Summarize large results instead of dumping them.

Core Tables

`tables` returns the tables that exist in the current instance. The catalog below covers every MoviePilot ORM table plus Alembic metadata. Always treat the live `schema <table>` result as authoritative.

`agentchat`

  • Purpose: Stores Web Agent and messaging-channel session indexes, titles, previews, and message snapshots.
  • Useful queries: Tracing Agent history or context restoration by user, session, or update time.
  • Write boundary: Owned by the Agent conversation service; do not rewrite message JSON, counters, or ownership.
  • Columns: `id`, `session_id`, `client_session_id`, `user_id`, `username`, `channel`, `source`, `original_chat_id`, `title`, `preview`, `agent_messages`, `display_messages`, `message_count`, `created_at`, `updated_at`

`agentinvocation`

  • Purpose: Durable Agent write invocation identity and last observed outcome, including confirmed asynchronous submission.
  • Useful queries: Inspect an exact principal and session's running, unknown, pendi
Read more
Ships withmoviepilot

基于 NAStool 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护。

Get the whole plugin
Stats
11,745
Stars
1,484
Forks
Active
Maintenance
Python
Language
GPL-3.0
License
1h ago
Last commit
3y ago
Created

Repo: jxxghp/moviepilot

Other skills on moviepilot.