Deivid Soto
a5f867eeea
refactor(ci): point Forgejo URLs at torrentclaw org (post-transfer)
...
CI / Lint commits (push) Failing after 0s
CI / Build & test (push) Failing after 43s
Repos were transferred from the deivid user to a dedicated torrentclaw
organisation; the workflows reference the org path.
2026-05-27 15:58:47 +02:00
Deivid Soto
ffac6fe22a
ci: port workflows from .github/ to .forgejo/ (Forgejo Actions)
...
GitHub torrentclaw org is shadow-banned; CI is hosted at git.torrentclaw.com
now. Move workflows into the runner's natively-watched .forgejo/workflows/
tree and adapt steps to run in the available 'docker'-labeled Forgejo runner
without GitHub-only tooling (gh CLI, third-party marketplace actions).
- Use container: image to ship the toolchain (no actions/setup-* needed).
- Drop GitHub-only marketplace actions in favour of upstream installers
invoked over curl/apt.
- Where a workflow created a GitHub Release (release.yml), substitute the
step with a curl call against the Forgejo Releases API
(POST /repos/<owner>/<repo>/releases).
2026-05-27 15:45:38 +02:00
Deivid Soto
f46cbc5156
chore: update maintainer info in LICENSE and glama.json
CI / Lint commits (push) Failing after 0s
CI / Build & test (push) Failing after 32s
2026-03-28 12:00:21 +01:00
Deivid Soto
635ad4ca42
chore(release): 0.2.2
Release / release (push) Failing after 2s
2026-02-16 22:22:52 +01:00
Deivid Soto
08c67e6e9e
fix: update qs to 6.15.0 to resolve CVE denial of service vulnerability
2026-02-16 22:21:56 +01:00
Deivid Soto
964c111b78
feat: add glama.json and smithery.yaml for directory listings
...
Add configuration files for Glama.ai and Smithery.ai MCP directories
to enable automatic indexing and discovery.
2026-02-16 22:01:58 +01:00
Deivid Soto
b3ca57aeb7
chore: normalize package.json format
2026-02-12 22:48:14 +01:00
Deivid Soto
0c4f7f1356
chore(release): 0.2.1
Release / release (push) Failing after 2s
2026-02-12 22:34:00 +01:00
Deivid Soto
b129461172
chore: rename package to @torrentclaw/mcp for npm organization
2026-02-12 22:33:52 +01:00
Deivid Soto
f0603cae60
chore(release): 0.2.0
Release / release (push) Failing after 2s
2026-02-12 18:44:42 +01:00
Deivid Soto
d48b91f554
feat(mcp): add season filtering and presentation guide for better UX
2026-02-12 18:44:22 +01:00
Deivid Soto
b6f0af707c
chore(release): 0.1.0
Release / release (push) Failing after 2s
2026-02-12 17:55:17 +01:00
Deivid Soto
e874401001
fix: use prettier --write in lint-staged for auto-formatting
2026-02-12 17:54:47 +01:00
Deivid Soto
92ed47ebdf
build: replace lefthook with husky, commitlint and commit-and-tag-version
2026-02-12 17:53:24 +01:00
Deivid Soto
fa913d1561
feat: expand API coverage with new tools, params, and 90% test threshold
2026-02-12 15:45:08 +01:00
Deivid Soto
8bb8e5507e
chore: align project config with torrentclaw org standards
2026-02-12 15:44:09 +01:00
Deivid Soto
2f58ac7bf8
style: add prettier and format codebase
2026-02-12 15:22:11 +01:00
Deivid Soto
bf459740fe
feat: add response cache and compact output mode
...
Response cache (api-client.ts):
- In-memory TTL cache (5 min default) avoids duplicate API calls
when LLMs repeat the same tool call within a conversation.
- Cache key = full URL with params; only 200 OK responses are cached.
- Exposed via client.cache for manual clear() if needed.
- Configurable TTL via TorrentClawClient constructor.
Compact mode (search_content tool):
- New compact boolean parameter (default: false).
- When true, magnet links use short form magnet:?xt=urn:btih:{hash}
(~60 chars) instead of full magnets with trackers (~300 chars).
- Short magnets are still valid and clickable (DHT peer discovery).
- Also generates a magnet from info_hash even when API returns null.
- Saves ~10K chars per typical search (5 torrents x 10 results).
Tests: 100 total (15 new), all passing.
2026-02-09 17:57:11 +01:00
Deivid Soto
e011c0f63e
fix: correct README inconsistencies and add TORRENTCLAW_ALLOW_PRIVATE
...
- Rename get_torrent_download_url → get_torrent_url in README tools table
- Add TORRENTCLAW_ALLOW_PRIVATE env var to bypass SSRF checks for
self-hosted setups (localhost, private IPs)
- Update self-hosted config example with TORRENTCLAW_ALLOW_PRIVATE=true
- Add Prompts section to README
- Add 3 tests for ALLOW_PRIVATE behavior (88 tests total)
2026-02-09 17:46:24 +01:00
Deivid Soto
d471c9b695
feat: initial release of torrentclaw-mcp server
...
MCP (Model Context Protocol) server that wraps the TorrentClaw REST API,
enabling LLMs (Claude Desktop, Claude Code, Cursor, etc.) to search movies
and TV shows with torrent downloads and streaming availability.
## Tools (6)
- search_content: primary search with filters (title, genre, year, rating,
quality, language, sort). Returns content metadata + torrent magnet links.
- get_popular: trending content ranked by clicks
- get_recent: most recently added content
- get_watch_providers: streaming availability by country (Netflix, Disney+, etc.)
- get_credits: director and top 10 cast members
- get_torrent_url: .torrent file download URL from info_hash
## Resources
- torrentclaw://stats: catalog statistics (content/torrent counts, sources)
## Prompts (4)
- search_movie, search_show, whats_new, where_to_watch
## LLM Usability
- Server description with workflow guidance for tool chaining
- Tool descriptions include trigger phrases, cross-tool references, and
explicit parameter examples
- Formatted output includes info_hash for tool chaining and call-syntax
cross-references (e.g. "use with get_watch_providers(content_id=42)")
- Popular/recent output hints to use search_content for torrents
- Error messages include status-specific recovery guidance (400, 404, 429, 5xx)
- Prompts reference tools by name for reliable LLM execution
## Security
- SSRF protection: validates TORRENTCLAW_API_URL against private IPs,
localhost, link-local, and IPv6 loopback addresses
- Protocol whitelist: only http/https allowed
- Error body sanitization: 4xx truncated to 200 chars, 5xx bodies omitted
- Input validation: control char filter on queries, regex on country codes,
genre character whitelist, content_id bounds
## Testing
- 85 tests across 13 test files
- Coverage: 99.5% statements, 95.2% branches, 98.1% functions, 99.5% lines
- Vitest v4 with v8 coverage provider, 80% thresholds enforced
## Stack
- TypeScript ESM, Node.js >= 18 (native fetch)
- @modelcontextprotocol/sdk v1.12, zod v3.24
- STDIO transport, runnable via npx torrentclaw-mcp
2026-02-09 17:26:23 +01:00