Install
$ agentstack add skill-hevangel-media-agent-skills-kavita ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Kavita API
Configuration
All settings are loaded from the .env file in the workspace root.
KAVITA_HOST=http://localhost/kavita
KAVITA_USERNAME=your_username
KAVITA_PASSWORD=your_password
KAVITA_API_KEY=your_api_key
Reference
- Kavita API documentation: https://www.kavitareader.com/docs/api/
- Code Snippets:
scripts/
Note: Scripts use config.py to load credentials from .env.
Available Scripts
| Script | Purpose | |--------|---------| | config.py | Configuration loader (from .env) | | list_libraries.py | List all libraries (JWT auth demo) | | get_library_books.py | Get all books/series from a library | | get_series_metadata.py | Detailed metadata (authors, genres, tags) | | dump_library_to_json.py | Export all books with full metadata | | scan_library.py | Trigger library rescan (supports force mode) |
Key Patterns
JWT Authentication
url = f"{SERVER_URL}/api/account/login"
payload = {"username": USERNAME, "password": PASSWORD}
response = requests.post(url, json=payload, timeout=10)
token = response.json().get('token')
headers = {"Authorization": f"Bearer {token}", "Content-Type": "application/json"}
Important: Library Filtering
libraryId must be a query parameter, not in the request body:
# Correct
params = {"libraryId": library_id, "PageNumber": 0, "PageSize": 0}
response = requests.post(f"{SERVER_URL}/api/series/all", headers=headers, params=params, json={})
# Wrong - returns ALL books from ALL libraries
response = requests.post(f"{SERVER_URL}/api/series/all", headers=headers, json={"libraryIds": [library_id]})
Usage Examples
cd skills/kavita/scripts
uv run python list_libraries.py
uv run python get_library_books.py
uv run python dump_library_to_json.py
uv run python scan_library.py
Notes
- Temporary files go in
$WORKSPACE_PATH/temp/.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: hevangel
- Source: hevangel/media-agent-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.