{"name":"io.github.santiriera626/tubekit-mcp","slug":"santiriera626-tubekit-mcp","title":"tubekit","description":"Compliance-aware MCP server for YouTube publishing, analytics and creator insights.","url":"https://mcp.market/server/santiriera626-tubekit-mcp","rating":null,"grade":"A","score":88,"certified":false,"status":"active","category":"media","tags":["media"],"presence":{"score":13,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-08-10T05:03:24.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/santiriera626/tubekit-mcp","website":"https://gatecast.sriera.dev/?ref=mcp-registry","version":"0.3.0","remotes":[],"packages":[{"registryType":"pypi","identifier":"tubekit-mcp","version":"0.3.0","runtimeHint":"uvx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Path to the Fernet key that encrypts stored OAuth tokens at rest. The server refuses to start without one.","format":"filepath","default":"~/.config/tubekit/master.key","name":"TUBEKIT_MASTER_KEY_PATH"},{"description":"Path to your own Google Cloud OAuth client JSON. Required to refresh access tokens.","isRequired":true,"format":"filepath","name":"TUBEKIT_OAUTH_CLIENT_SECRETS_PATH"},{"description":"SQLite file holding the audit log, quota ledger and channel state.","format":"filepath","default":"state.db","name":"TUBEKIT_STATE_DB_PATH"}]}],"tools":[{"name":"add_to_playlist","description":"Add a video to a playlist. Charges 50 Data-v3 units.","write_action":false,"price_micros":0,"input_schema":null},{"name":"check_oauth","description":"Validate a channel's OAuth grant without spending YouTube quota.","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_playlist","description":"Create a playlist on the channel. Charges 50 Data-v3 units.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_analytics","description":"Pull channel-level analytics over a window. Charges 1 unit against the SEPARATE #analytics bucket (not Data v3). The service takes ISO date strings (Plan 00 Seam 9), so the `date` inputs are serialised here.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_channel_report","description":"Single-channel health report: growth, engagement, top videos, traffic mix, Shorts/long-form split, and revenue (estimated ad+Premium) or YPP progress when not monetized. Read-only. Charges 7 Analytics units.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_comment_thread","description":"One thread in full: untruncated text + all replies (live fetch). Charges 2 Data-v3 units.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_comments_digest","description":"Portfolio-wide comment counts (unread/unanswered/held/spam, per video). channels omitted = all. Charges 4 Data-v3 units per channel.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_portfolio_report","description":"Portfolio-wide weekly view: one row per channel with totals and vs-prior-period deltas; YPP progress for non-monetized channels. Read-only. Charges 3 Analytics units per channel, against each channel's own #analytics bucket.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_video_report","description":"Per-video performance deep dive with retention proxy and revenue (estimated ad+Premium) when monetized; lifetime window by default. Read-only. Charges 5 Analytics units.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_video_status","description":"Read upload/processing/privacy status of a video. Read-only (span only, no audit row). Charges 1 Data-v3 unit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_comments","description":"Compact comment listing from the local mirror (only: unread|unanswered|held|spam|flagged|all). Charges 1 Data-v3 unit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_my_videos","description":"Paginated list of channel uploads. Charges 1 Data-v3 unit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_playlist_items","description":"List one playlist's videos in order.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_playlists","description":"List the channel's own playlists (id, title, privacy, item count).","write_action":false,"price_micros":0,"input_schema":null},{"name":"mark_comments_reviewed","description":"Close the triage: set local state (read|flagged_for_reply|unread) on explicit ids OR all_unread=true (optionally per video). 0 quota units. Listing never auto-marks — this call is the only way to mark.","write_action":false,"price_micros":0,"input_schema":null},{"name":"remove_from_playlist","description":"Remove one entry from a playlist. Charges 50 Data-v3 units.","write_action":true,"price_micros":0,"input_schema":null},{"name":"reorder_playlist_item","description":"Move an entry to ``position`` within its playlist (0 = first).","write_action":false,"price_micros":0,"input_schema":null},{"name":"request_ingest_upload","description":"Issue a one-time URL to PUT a video file the server then ingests.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_thumbnail","description":"Set a thumbnail on an existing video. Inherently idempotent (PUT-like); no idempotency ledger row. Charges 50 Data-v3 units.","write_action":false,"price_micros":0,"input_schema":null},{"name":"tubekit.health","description":"Health payload (ADR D9). Same shape as HTTP GET /healthz.","write_action":false,"price_micros":0,"input_schema":null},{"name":"update_metadata","description":"Partially update a video's metadata. Only the fields you set in ``patch`` change; the service fetches the current snippet/status and resends the merged result, so omitted fields are preserved (a true partial update, not a destructive replace). Runs compliance against the post-patch metadata and aborts with compliance_violation on failure. Idempotent. Charges 50 Data-v3 units. Appends a video.metad","write_action":true,"price_micros":0,"input_schema":null},{"name":"update_playlist","description":"Patch a playlist's title, description or privacy. 50 Data-v3 units.","write_action":true,"price_micros":0,"input_schema":null},{"name":"upload_video","description":"Upload a video after a compliance gate.","write_action":true,"price_micros":0,"input_schema":null},{"name":"validate_compliance","description":"Run the rule registry against VideoMetadata; return a ComplianceReport.","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":88,"grade":"A","scanned_at":"2026-09-23T21:40:06.493Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T21:40:06.437Z","components":{"code":{"score":25,"max":25,"notes":["128 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":12,"max":15,"notes":["last push 45 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"pypi","identifier":"tubekit-mcp","version":"0.3.0","found":true,"license":"FSL-1.1-MIT","dependencyCount":26,"publishedAt":"2026-08-10T04:43:07.895975Z","repositoryUrl":"https://github.com/santiriera626/tubekit-mcp"}],"repo":{"found":true,"owner":"santiriera626","repo":"tubekit-mcp","archived":false,"pushedAt":"2026-08-10T05:03:24Z","stars":0,"forks":0,"openIssues":0,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/4414603?v=4","ownerCreatedAt":"2013-05-13T07:05:48Z","license":"NOASSERTION"},"icon":{"url":"https://gatecast.sriera.dev/favicon.ico?favicon.2vob68tjqpejf.ico?dpl=ada711a87d1f3fd47c4230f0b320f7a971858700","source":"site","width":256,"height":256},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"NOASSERTION","lastPushAt":"2026-08-10T05:03:24.000Z","score":13}}}},"grade_history":[],"reviews":[]}